From 3e9b68426a1925c486de7ad84e509b2619479c86 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 18 Mar 2023 17:45:40 +0100 Subject: [PATCH] add generated interfaces It is usually not a good idea to add generated files to a git repository. By definition, a generated file can be generated from the information that is already available in the repository. Furthermore, a generated file may depend on the machine on which it is generated and so it could be different for different users. However, the generated interfaces should specifically be the same on all systems and if for some reason they are not, then having them in the repository allows this deviation to be detected. Furthermore, it is not actually that easy to generate the interfaces since this requires the clang libraries, while compiling isl itself just needs any decent C compiler. Having the interfaces available also means that isl_test2 can be compiled anywhere where a C++11 compiler is available. This is especially important since recently many checks have been moved from (the C) isl_test to (the C++) isl_test2, while new checks are usually added directly to isl_test2. Furthermore, keeping track of the interfaces makes it easier to see the effect of changes on those interfaces and to see the differences between the interfaces at different points in history. Signed-off-by: Sven Verdoolaege --- .gitignore | 6 - Makefile.am | 4 +- include/isl/cpp-checked-conversion.h | 707 + include/isl/cpp-checked.h | 21179 +++++++++++++ include/isl/cpp.h | 30843 +++++++++++++++++++ include/isl/typed_cpp.h | 52664 +++++++++++++++++++++++++++++++++ interface/isl.py.core | 19080 ++++++++++++ 7 files changed, 124474 insertions(+), 9 deletions(-) create mode 100644 include/isl/cpp-checked-conversion.h create mode 100644 include/isl/cpp-checked.h create mode 100644 include/isl/cpp.h create mode 100644 include/isl/typed_cpp.h create mode 100644 interface/isl.py.core diff --git a/.gitignore b/.gitignore index 038936a7..e39f5c3f 100644 --- a/.gitignore +++ b/.gitignore @@ -57,9 +57,3 @@ test-driver isl_srcdir.c bound_test.sh pip_test.sh - -include/isl/cpp-checked-conversion.h -include/isl/cpp-checked.h -include/isl/cpp.h -include/isl/typed_cpp.h -interface/isl.py.core diff --git a/Makefile.am b/Makefile.am index dc8f32f5..5818bf83 100644 --- a/Makefile.am +++ b/Makefile.am @@ -509,11 +509,9 @@ BUILT_SOURCES = gitversion.h $(INTERFACES) CLEANFILES = \ gitversion.h \ interface/isldlname.py \ - interface/isl.py.core \ interface/isl.py \ interface/isl.pyc \ - interface/__pycache__/*.pyc \ - $(BUILT_CPP_INTERFACES) + interface/__pycache__/*.pyc DISTCLEANFILES = \ isl-uninstalled.sh \ diff --git a/include/isl/cpp-checked-conversion.h b/include/isl/cpp-checked-conversion.h new file mode 100644 index 00000000..4051f780 --- /dev/null +++ b/include/isl/cpp-checked-conversion.h @@ -0,0 +1,707 @@ +/// These are automatically generated conversions between +/// the default and the checked C++ bindings for isl. +/// +/// isl is a library for computing with integer sets and maps described by +/// Presburger formulas. On top of this, isl provides various tools for +/// polyhedral compilation, ranging from dependence analysis over scheduling +/// to AST generation. + +#ifndef ISL_CPP_CHECKED_CONVERSION +#define ISL_CPP_CHECKED_CONVERSION + +#include +#include + +namespace isl { + +checked::aff check(aff obj) { + return checked::manage(obj.copy()); +} + +aff uncheck(checked::aff obj) { + return manage(obj.copy()); +} + +checked::aff_list check(aff_list obj) { + return checked::manage(obj.copy()); +} + +aff_list uncheck(checked::aff_list obj) { + return manage(obj.copy()); +} + +checked::ast_build check(ast_build obj) { + return checked::manage(obj.copy()); +} + +ast_build uncheck(checked::ast_build obj) { + return manage(obj.copy()); +} + +checked::ast_expr check(ast_expr obj) { + return checked::manage(obj.copy()); +} + +ast_expr uncheck(checked::ast_expr obj) { + return manage(obj.copy()); +} + +checked::ast_expr_id check(ast_expr_id obj) { + return checked::manage(obj.copy()).as(); +} + +ast_expr_id uncheck(checked::ast_expr_id obj) { + return manage(obj.copy()).as(); +} + +checked::ast_expr_int check(ast_expr_int obj) { + return checked::manage(obj.copy()).as(); +} + +ast_expr_int uncheck(checked::ast_expr_int obj) { + return manage(obj.copy()).as(); +} + +checked::ast_expr_op check(ast_expr_op obj) { + return checked::manage(obj.copy()).as(); +} + +ast_expr_op uncheck(checked::ast_expr_op obj) { + return manage(obj.copy()).as(); +} + +checked::ast_expr_op_access check(ast_expr_op_access obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_access uncheck(checked::ast_expr_op_access obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_add check(ast_expr_op_add obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_add uncheck(checked::ast_expr_op_add obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_address_of check(ast_expr_op_address_of obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_address_of uncheck(checked::ast_expr_op_address_of obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_and check(ast_expr_op_and obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_and uncheck(checked::ast_expr_op_and obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_and_then check(ast_expr_op_and_then obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_and_then uncheck(checked::ast_expr_op_and_then obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_call check(ast_expr_op_call obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_call uncheck(checked::ast_expr_op_call obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_cond check(ast_expr_op_cond obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_cond uncheck(checked::ast_expr_op_cond obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_div check(ast_expr_op_div obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_div uncheck(checked::ast_expr_op_div obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_eq check(ast_expr_op_eq obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_eq uncheck(checked::ast_expr_op_eq obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_fdiv_q check(ast_expr_op_fdiv_q obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_fdiv_q uncheck(checked::ast_expr_op_fdiv_q obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_ge check(ast_expr_op_ge obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_ge uncheck(checked::ast_expr_op_ge obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_gt check(ast_expr_op_gt obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_gt uncheck(checked::ast_expr_op_gt obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_le check(ast_expr_op_le obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_le uncheck(checked::ast_expr_op_le obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_lt check(ast_expr_op_lt obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_lt uncheck(checked::ast_expr_op_lt obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_max check(ast_expr_op_max obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_max uncheck(checked::ast_expr_op_max obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_member check(ast_expr_op_member obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_member uncheck(checked::ast_expr_op_member obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_min check(ast_expr_op_min obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_min uncheck(checked::ast_expr_op_min obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_minus check(ast_expr_op_minus obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_minus uncheck(checked::ast_expr_op_minus obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_mul check(ast_expr_op_mul obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_mul uncheck(checked::ast_expr_op_mul obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_or check(ast_expr_op_or obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_or uncheck(checked::ast_expr_op_or obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_or_else check(ast_expr_op_or_else obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_or_else uncheck(checked::ast_expr_op_or_else obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_pdiv_q check(ast_expr_op_pdiv_q obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_pdiv_q uncheck(checked::ast_expr_op_pdiv_q obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_pdiv_r check(ast_expr_op_pdiv_r obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_pdiv_r uncheck(checked::ast_expr_op_pdiv_r obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_select check(ast_expr_op_select obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_select uncheck(checked::ast_expr_op_select obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_sub check(ast_expr_op_sub obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_sub uncheck(checked::ast_expr_op_sub obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_expr_op_zdiv_r check(ast_expr_op_zdiv_r obj) { + return checked::manage(obj.copy()).as().as(); +} + +ast_expr_op_zdiv_r uncheck(checked::ast_expr_op_zdiv_r obj) { + return manage(obj.copy()).as().as(); +} + +checked::ast_node check(ast_node obj) { + return checked::manage(obj.copy()); +} + +ast_node uncheck(checked::ast_node obj) { + return manage(obj.copy()); +} + +checked::ast_node_block check(ast_node_block obj) { + return checked::manage(obj.copy()).as(); +} + +ast_node_block uncheck(checked::ast_node_block obj) { + return manage(obj.copy()).as(); +} + +checked::ast_node_for check(ast_node_for obj) { + return checked::manage(obj.copy()).as(); +} + +ast_node_for uncheck(checked::ast_node_for obj) { + return manage(obj.copy()).as(); +} + +checked::ast_node_if check(ast_node_if obj) { + return checked::manage(obj.copy()).as(); +} + +ast_node_if uncheck(checked::ast_node_if obj) { + return manage(obj.copy()).as(); +} + +checked::ast_node_list check(ast_node_list obj) { + return checked::manage(obj.copy()); +} + +ast_node_list uncheck(checked::ast_node_list obj) { + return manage(obj.copy()); +} + +checked::ast_node_mark check(ast_node_mark obj) { + return checked::manage(obj.copy()).as(); +} + +ast_node_mark uncheck(checked::ast_node_mark obj) { + return manage(obj.copy()).as(); +} + +checked::ast_node_user check(ast_node_user obj) { + return checked::manage(obj.copy()).as(); +} + +ast_node_user uncheck(checked::ast_node_user obj) { + return manage(obj.copy()).as(); +} + +checked::basic_map check(basic_map obj) { + return checked::manage(obj.copy()); +} + +basic_map uncheck(checked::basic_map obj) { + return manage(obj.copy()); +} + +checked::basic_set check(basic_set obj) { + return checked::manage(obj.copy()); +} + +basic_set uncheck(checked::basic_set obj) { + return manage(obj.copy()); +} + +checked::fixed_box check(fixed_box obj) { + return checked::manage(obj.copy()); +} + +fixed_box uncheck(checked::fixed_box obj) { + return manage(obj.copy()); +} + +checked::id check(id obj) { + return checked::manage(obj.copy()); +} + +id uncheck(checked::id obj) { + return manage(obj.copy()); +} + +checked::id_list check(id_list obj) { + return checked::manage(obj.copy()); +} + +id_list uncheck(checked::id_list obj) { + return manage(obj.copy()); +} + +checked::id_to_ast_expr check(id_to_ast_expr obj) { + return checked::manage(obj.copy()); +} + +id_to_ast_expr uncheck(checked::id_to_ast_expr obj) { + return manage(obj.copy()); +} + +checked::id_to_id check(id_to_id obj) { + return checked::manage(obj.copy()); +} + +id_to_id uncheck(checked::id_to_id obj) { + return manage(obj.copy()); +} + +checked::map check(map obj) { + return checked::manage(obj.copy()); +} + +map uncheck(checked::map obj) { + return manage(obj.copy()); +} + +checked::map_list check(map_list obj) { + return checked::manage(obj.copy()); +} + +map_list uncheck(checked::map_list obj) { + return manage(obj.copy()); +} + +checked::multi_aff check(multi_aff obj) { + return checked::manage(obj.copy()); +} + +multi_aff uncheck(checked::multi_aff obj) { + return manage(obj.copy()); +} + +checked::multi_id check(multi_id obj) { + return checked::manage(obj.copy()); +} + +multi_id uncheck(checked::multi_id obj) { + return manage(obj.copy()); +} + +checked::multi_pw_aff check(multi_pw_aff obj) { + return checked::manage(obj.copy()); +} + +multi_pw_aff uncheck(checked::multi_pw_aff obj) { + return manage(obj.copy()); +} + +checked::multi_union_pw_aff check(multi_union_pw_aff obj) { + return checked::manage(obj.copy()); +} + +multi_union_pw_aff uncheck(checked::multi_union_pw_aff obj) { + return manage(obj.copy()); +} + +checked::multi_val check(multi_val obj) { + return checked::manage(obj.copy()); +} + +multi_val uncheck(checked::multi_val obj) { + return manage(obj.copy()); +} + +checked::point check(point obj) { + return checked::manage(obj.copy()); +} + +point uncheck(checked::point obj) { + return manage(obj.copy()); +} + +checked::pw_aff check(pw_aff obj) { + return checked::manage(obj.copy()); +} + +pw_aff uncheck(checked::pw_aff obj) { + return manage(obj.copy()); +} + +checked::pw_aff_list check(pw_aff_list obj) { + return checked::manage(obj.copy()); +} + +pw_aff_list uncheck(checked::pw_aff_list obj) { + return manage(obj.copy()); +} + +checked::pw_multi_aff check(pw_multi_aff obj) { + return checked::manage(obj.copy()); +} + +pw_multi_aff uncheck(checked::pw_multi_aff obj) { + return manage(obj.copy()); +} + +checked::pw_multi_aff_list check(pw_multi_aff_list obj) { + return checked::manage(obj.copy()); +} + +pw_multi_aff_list uncheck(checked::pw_multi_aff_list obj) { + return manage(obj.copy()); +} + +checked::schedule check(schedule obj) { + return checked::manage(obj.copy()); +} + +schedule uncheck(checked::schedule obj) { + return manage(obj.copy()); +} + +checked::schedule_constraints check(schedule_constraints obj) { + return checked::manage(obj.copy()); +} + +schedule_constraints uncheck(checked::schedule_constraints obj) { + return manage(obj.copy()); +} + +checked::schedule_node check(schedule_node obj) { + return checked::manage(obj.copy()); +} + +schedule_node uncheck(checked::schedule_node obj) { + return manage(obj.copy()); +} + +checked::schedule_node_band check(schedule_node_band obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_band uncheck(checked::schedule_node_band obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_context check(schedule_node_context obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_context uncheck(checked::schedule_node_context obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_domain check(schedule_node_domain obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_domain uncheck(checked::schedule_node_domain obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_expansion check(schedule_node_expansion obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_expansion uncheck(checked::schedule_node_expansion obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_extension check(schedule_node_extension obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_extension uncheck(checked::schedule_node_extension obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_filter check(schedule_node_filter obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_filter uncheck(checked::schedule_node_filter obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_guard check(schedule_node_guard obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_guard uncheck(checked::schedule_node_guard obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_leaf check(schedule_node_leaf obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_leaf uncheck(checked::schedule_node_leaf obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_mark check(schedule_node_mark obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_mark uncheck(checked::schedule_node_mark obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_sequence check(schedule_node_sequence obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_sequence uncheck(checked::schedule_node_sequence obj) { + return manage(obj.copy()).as(); +} + +checked::schedule_node_set check(schedule_node_set obj) { + return checked::manage(obj.copy()).as(); +} + +schedule_node_set uncheck(checked::schedule_node_set obj) { + return manage(obj.copy()).as(); +} + +checked::set check(set obj) { + return checked::manage(obj.copy()); +} + +set uncheck(checked::set obj) { + return manage(obj.copy()); +} + +checked::set_list check(set_list obj) { + return checked::manage(obj.copy()); +} + +set_list uncheck(checked::set_list obj) { + return manage(obj.copy()); +} + +checked::space check(space obj) { + return checked::manage(obj.copy()); +} + +space uncheck(checked::space obj) { + return manage(obj.copy()); +} + +checked::union_access_info check(union_access_info obj) { + return checked::manage(obj.copy()); +} + +union_access_info uncheck(checked::union_access_info obj) { + return manage(obj.copy()); +} + +checked::union_flow check(union_flow obj) { + return checked::manage(obj.copy()); +} + +union_flow uncheck(checked::union_flow obj) { + return manage(obj.copy()); +} + +checked::union_map check(union_map obj) { + return checked::manage(obj.copy()); +} + +union_map uncheck(checked::union_map obj) { + return manage(obj.copy()); +} + +checked::union_pw_aff check(union_pw_aff obj) { + return checked::manage(obj.copy()); +} + +union_pw_aff uncheck(checked::union_pw_aff obj) { + return manage(obj.copy()); +} + +checked::union_pw_aff_list check(union_pw_aff_list obj) { + return checked::manage(obj.copy()); +} + +union_pw_aff_list uncheck(checked::union_pw_aff_list obj) { + return manage(obj.copy()); +} + +checked::union_pw_multi_aff check(union_pw_multi_aff obj) { + return checked::manage(obj.copy()); +} + +union_pw_multi_aff uncheck(checked::union_pw_multi_aff obj) { + return manage(obj.copy()); +} + +checked::union_set check(union_set obj) { + return checked::manage(obj.copy()); +} + +union_set uncheck(checked::union_set obj) { + return manage(obj.copy()); +} + +checked::union_set_list check(union_set_list obj) { + return checked::manage(obj.copy()); +} + +union_set_list uncheck(checked::union_set_list obj) { + return manage(obj.copy()); +} + +checked::val check(val obj) { + return checked::manage(obj.copy()); +} + +val uncheck(checked::val obj) { + return manage(obj.copy()); +} + +checked::val_list check(val_list obj) { + return checked::manage(obj.copy()); +} + +val_list uncheck(checked::val_list obj) { + return manage(obj.copy()); +} + +} // namespace isl + +#endif /* ISL_CPP_CHECKED_CONVERSION */ diff --git a/include/isl/cpp-checked.h b/include/isl/cpp-checked.h new file mode 100644 index 00000000..214bcbc6 --- /dev/null +++ b/include/isl/cpp-checked.h @@ -0,0 +1,21179 @@ +/// These are automatically generated checked C++ bindings for isl. +/// +/// isl is a library for computing with integer sets and maps described by +/// Presburger formulas. On top of this, isl provides various tools for +/// polyhedral compilation, ranging from dependence analysis over scheduling +/// to AST generation. + +#ifndef ISL_CPP_CHECKED +#define ISL_CPP_CHECKED + +#include +#include + +#include +#include +#include +#include +#include + +#if __cplusplus >= 201703L +#include +#include +#endif + +namespace isl { +namespace checked { + +#define ISLPP_STRINGIZE_(X) #X +#define ISLPP_STRINGIZE(X) ISLPP_STRINGIZE_(X) + +#define ISLPP_ASSERT(test, message) \ + do { \ + if (test) \ + break; \ + fputs("Assertion \"" #test "\" failed at " __FILE__ \ + ":" ISLPP_STRINGIZE(__LINE__) "\n " message "\n", \ + stderr); \ + abort(); \ + } while (0) + +/* Class used to check that isl::checked::boolean, + * isl::checked::stat and isl::checked::size values are checked for errors. + */ +struct checker { + bool checked = false; + ~checker() { + ISLPP_ASSERT(checked, "IMPLEMENTATION ERROR: Unchecked state"); + } +}; + +class boolean { +private: + mutable std::shared_ptr check = std::make_shared(); + isl_bool val; + + friend boolean manage(isl_bool val); + boolean(isl_bool val): val(val) {} +public: + static boolean error() { + return boolean(isl_bool_error); + } + boolean() + : val(isl_bool_error) {} + + /* implicit */ boolean(bool val) + : val(val ? isl_bool_true : isl_bool_false) {} + + isl_bool release() { + auto tmp = val; + val = isl_bool_error; + check->checked = true; + return tmp; + } + + bool is_error() const { check->checked = true; return val == isl_bool_error; } + bool is_false() const { check->checked = true; return val == isl_bool_false; } + bool is_true() const { check->checked = true; return val == isl_bool_true; } + + explicit operator bool() const { + ISLPP_ASSERT(check->checked, "IMPLEMENTATION ERROR: Unchecked error state"); + ISLPP_ASSERT(!is_error(), "IMPLEMENTATION ERROR: Unhandled error state"); + return is_true(); + } + + boolean negate() { + if (val == isl_bool_true) + val = isl_bool_false; + else if (val == isl_bool_false) + val = isl_bool_true; + return *this; + } + + boolean operator!() const { + return boolean(*this).negate(); + } +}; + +inline boolean manage(isl_bool val) { + return boolean(val); +} + +class ctx { + isl_ctx *ptr; +public: + /* implicit */ ctx(isl_ctx *ctx) : ptr(ctx) {} + isl_ctx *release() { + auto tmp = ptr; + ptr = nullptr; + return tmp; + } + isl_ctx *get() { + return ptr; + } +#if __cplusplus >= 201703L + static void free_user(void *user) { + std::any *p = static_cast(user); + delete p; + } +#endif +}; + +/* Class encapsulating an isl_stat value. + */ +class stat { +private: + mutable std::shared_ptr check = std::make_shared(); + isl_stat val; + + friend stat manage(isl_stat val); + stat(isl_stat val) : val(val) {} +public: + static stat ok() { + return stat(isl_stat_ok); + } + static stat error() { + return stat(isl_stat_error); + } + stat() : val(isl_stat_error) {} + + isl_stat release() { + check->checked = true; + return val; + } + + bool is_error() const { + check->checked = true; + return val == isl_stat_error; + } + bool is_ok() const { + check->checked = true; + return val == isl_stat_ok; + } +}; + +inline stat manage(isl_stat val) +{ + return stat(val); +} + +/* Class encapsulating an isl_size value. + */ +class size { +private: + mutable std::shared_ptr check = std::make_shared(); + isl_size val; + + friend size manage(isl_size val); + size(isl_size val) : val(val) {} +public: + size() : val(isl_size_error) {} + + isl_size release() { + auto tmp = val; + val = isl_size_error; + check->checked = true; + return tmp; + } + + bool is_error() const { + check->checked = true; + return val == isl_size_error; + } + + explicit operator unsigned() const { + ISLPP_ASSERT(check->checked, + "IMPLEMENTATION ERROR: Unchecked error state"); + ISLPP_ASSERT(!is_error(), + "IMPLEMENTATION ERROR: Unhandled error state"); + return val; + } +}; + +inline size manage(isl_size val) +{ + return size(val); +} + +} +} // namespace isl + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace isl { + +namespace checked { + +// forward declarations +class aff; +class aff_list; +class ast_build; +class ast_expr; +class ast_expr_id; +class ast_expr_int; +class ast_expr_op; +class ast_expr_op_access; +class ast_expr_op_add; +class ast_expr_op_address_of; +class ast_expr_op_and; +class ast_expr_op_and_then; +class ast_expr_op_call; +class ast_expr_op_cond; +class ast_expr_op_div; +class ast_expr_op_eq; +class ast_expr_op_fdiv_q; +class ast_expr_op_ge; +class ast_expr_op_gt; +class ast_expr_op_le; +class ast_expr_op_lt; +class ast_expr_op_max; +class ast_expr_op_member; +class ast_expr_op_min; +class ast_expr_op_minus; +class ast_expr_op_mul; +class ast_expr_op_or; +class ast_expr_op_or_else; +class ast_expr_op_pdiv_q; +class ast_expr_op_pdiv_r; +class ast_expr_op_select; +class ast_expr_op_sub; +class ast_expr_op_zdiv_r; +class ast_node; +class ast_node_block; +class ast_node_for; +class ast_node_if; +class ast_node_list; +class ast_node_mark; +class ast_node_user; +class basic_map; +class basic_set; +class fixed_box; +class id; +class id_list; +class id_to_ast_expr; +class id_to_id; +class map; +class map_list; +class multi_aff; +class multi_id; +class multi_pw_aff; +class multi_union_pw_aff; +class multi_val; +class point; +class pw_aff; +class pw_aff_list; +class pw_multi_aff; +class pw_multi_aff_list; +class schedule; +class schedule_constraints; +class schedule_node; +class schedule_node_band; +class schedule_node_context; +class schedule_node_domain; +class schedule_node_expansion; +class schedule_node_extension; +class schedule_node_filter; +class schedule_node_guard; +class schedule_node_leaf; +class schedule_node_mark; +class schedule_node_sequence; +class schedule_node_set; +class set; +class set_list; +class space; +class union_access_info; +class union_flow; +class union_map; +class union_pw_aff; +class union_pw_aff_list; +class union_pw_multi_aff; +class union_set; +class union_set_list; +class val; +class val_list; + +// declarations for isl::aff +inline aff manage(__isl_take isl_aff *ptr); +inline aff manage_copy(__isl_keep isl_aff *ptr); + +class aff { + friend inline aff manage(__isl_take isl_aff *ptr); + friend inline aff manage_copy(__isl_keep isl_aff *ptr); + + protected: + isl_aff *ptr = nullptr; + + inline explicit aff(__isl_take isl_aff *ptr); + + public: + inline /* implicit */ aff(); + inline /* implicit */ aff(const aff &obj); + inline explicit aff(isl::checked::ctx ctx, const std::string &str); + inline aff &operator=(aff obj); + inline ~aff(); + inline __isl_give isl_aff *copy() const &; + inline __isl_give isl_aff *copy() && = delete; + inline __isl_keep isl_aff *get() const; + inline __isl_give isl_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::aff add(isl::checked::aff aff2) const; + inline isl::checked::multi_aff add(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_aff add(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::pw_multi_aff add(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_aff add(const isl::checked::union_pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::aff add_constant(isl::checked::val v) const; + inline isl::checked::aff add_constant(long v) const; + inline isl::checked::multi_aff add_constant(const isl::checked::multi_val &mv) const; + inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::aff as_aff() const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_aff as_multi_aff() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::union_map as_union_map() const; + inline isl::checked::aff at(int pos) const; + inline isl::checked::basic_set bind(isl::checked::id id) const; + inline isl::checked::basic_set bind(const std::string &id) const; + inline isl::checked::basic_set bind(const isl::checked::multi_id &tuple) const; + inline isl::checked::pw_aff bind_domain(const isl::checked::multi_id &tuple) const; + inline isl::checked::pw_aff bind_domain_wrapped_domain(const isl::checked::multi_id &tuple) const; + inline isl::checked::aff ceil() const; + inline isl::checked::pw_aff coalesce() const; + inline isl::checked::pw_aff cond(const isl::checked::pw_aff &pwaff_true, const isl::checked::pw_aff &pwaff_false) const; + inline isl::checked::multi_val constant_multi_val() const; + inline isl::checked::val constant_val() const; + inline isl::checked::val get_constant_val() const; + inline isl::checked::aff div(isl::checked::aff aff2) const; + inline isl::checked::pw_aff div(const isl::checked::pw_aff &pa2) const; + inline isl::checked::set domain() const; + inline isl::checked::aff domain_reverse() const; + inline isl::checked::pw_aff drop_unused_params() const; + inline isl::checked::set eq_set(isl::checked::aff aff2) const; + inline isl::checked::set eq_set(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::val eval(isl::checked::point pnt) const; + inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const; + inline isl::checked::multi_aff flat_range_product(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::aff floor() const; + inline stat foreach_piece(const std::function &fn) const; + inline isl::checked::set ge_set(isl::checked::aff aff2) const; + inline isl::checked::set ge_set(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::aff gist(isl::checked::set context) const; + inline isl::checked::union_pw_aff gist(const isl::checked::union_set &context) const; + inline isl::checked::aff gist(const isl::checked::basic_set &context) const; + inline isl::checked::aff gist(const isl::checked::point &context) const; + inline isl::checked::aff gist_params(isl::checked::set context) const; + inline isl::checked::set gt_set(isl::checked::aff aff2) const; + inline isl::checked::set gt_set(const isl::checked::pw_aff &pwaff2) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_aff identity() const; + inline isl::checked::pw_aff insert_domain(const isl::checked::space &domain) const; + inline isl::checked::pw_aff intersect_domain(const isl::checked::set &set) const; + inline isl::checked::union_pw_aff intersect_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_aff intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::union_pw_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const; + inline isl::checked::union_pw_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const; + inline isl::checked::pw_aff intersect_params(const isl::checked::set &set) const; + inline boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::checked::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::checked::id_list &list) const; + inline boolean is_cst() const; + inline boolean isa_aff() const; + inline boolean isa_multi_aff() const; + inline boolean isa_pw_multi_aff() const; + inline isl::checked::set le_set(isl::checked::aff aff2) const; + inline isl::checked::set le_set(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::aff_list list() const; + inline isl::checked::set lt_set(isl::checked::aff aff2) const; + inline isl::checked::set lt_set(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_aff max(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::multi_val max_multi_val() const; + inline isl::checked::val max_val() const; + inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_aff min(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::multi_val min_multi_val() const; + inline isl::checked::val min_val() const; + inline isl::checked::aff mod(isl::checked::val mod) const; + inline isl::checked::aff mod(long mod) const; + inline isl::checked::aff mul(isl::checked::aff aff2) const; + inline isl::checked::pw_aff mul(const isl::checked::pw_aff &pwaff2) const; + inline class size n_piece() const; + inline isl::checked::set ne_set(isl::checked::aff aff2) const; + inline isl::checked::set ne_set(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::aff neg() const; + inline isl::checked::set params() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::checked::aff &aff2) const; + inline boolean plain_is_equal(const isl::checked::multi_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::pw_aff &pwaff2) const; + inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_aff &upa2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff product(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::aff pullback(isl::checked::multi_aff ma) const; + inline isl::checked::pw_aff pullback(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::pw_aff pullback(const isl::checked::pw_multi_aff &pma) const; + inline isl::checked::union_pw_aff pullback(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::aff pullback(const isl::checked::aff &ma) const; + inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::checked::pw_multi_aff range_factor_domain() const; + inline isl::checked::pw_multi_aff range_factor_range() const; + inline isl::checked::multi_aff range_product(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::multi_aff reset_range_tuple_id() const; + inline isl::checked::aff scale(isl::checked::val v) const; + inline isl::checked::aff scale(long v) const; + inline isl::checked::multi_aff scale(const isl::checked::multi_val &mv) const; + inline isl::checked::aff scale_down(isl::checked::val v) const; + inline isl::checked::aff scale_down(long v) const; + inline isl::checked::multi_aff scale_down(const isl::checked::multi_val &mv) const; + inline isl::checked::multi_aff set_at(int pos, const isl::checked::aff &el) const; + inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const; + inline isl::checked::multi_aff set_range_tuple(const isl::checked::id &id) const; + inline isl::checked::multi_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::aff sub(isl::checked::aff aff2) const; + inline isl::checked::multi_aff sub(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_aff sub(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::pw_multi_aff sub(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_aff sub(const isl::checked::union_pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_aff subtract_domain(const isl::checked::set &set) const; + inline isl::checked::union_pw_aff subtract_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_aff subtract_domain(const isl::checked::union_set &uset) const; + inline isl::checked::pw_aff tdiv_q(const isl::checked::pw_aff &pa2) const; + inline isl::checked::pw_aff tdiv_r(const isl::checked::pw_aff &pa2) const; + inline isl::checked::aff_list to_list() const; + inline isl::checked::multi_pw_aff to_multi_pw_aff() const; + inline isl::checked::multi_union_pw_aff to_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff to_pw_multi_aff() const; + inline isl::checked::union_pw_aff to_union_pw_aff() const; + inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::checked::aff unbind_params_insert_domain(isl::checked::multi_id domain) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const; + inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const; + inline isl::checked::pw_aff union_add(const isl::checked::pw_aff &pwaff2) const; + inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_aff union_add(const isl::checked::union_pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const; + static inline isl::checked::aff zero_on_domain(isl::checked::space space); +}; + +// declarations for isl::aff_list +inline aff_list manage(__isl_take isl_aff_list *ptr); +inline aff_list manage_copy(__isl_keep isl_aff_list *ptr); + +class aff_list { + friend inline aff_list manage(__isl_take isl_aff_list *ptr); + friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr); + + protected: + isl_aff_list *ptr = nullptr; + + inline explicit aff_list(__isl_take isl_aff_list *ptr); + + public: + inline /* implicit */ aff_list(); + inline /* implicit */ aff_list(const aff_list &obj); + inline explicit aff_list(isl::checked::ctx ctx, int n); + inline explicit aff_list(isl::checked::aff el); + inline explicit aff_list(isl::checked::ctx ctx, const std::string &str); + inline aff_list &operator=(aff_list obj); + inline ~aff_list(); + inline __isl_give isl_aff_list *copy() const &; + inline __isl_give isl_aff_list *copy() && = delete; + inline __isl_keep isl_aff_list *get() const; + inline __isl_give isl_aff_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::aff_list add(isl::checked::aff el) const; + inline isl::checked::aff at(int index) const; + inline isl::checked::aff get_at(int index) const; + inline isl::checked::aff_list clear() const; + inline isl::checked::aff_list concat(isl::checked::aff_list list2) const; + inline isl::checked::aff_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::aff_list insert(unsigned int pos, isl::checked::aff el) const; + inline isl::checked::aff_list set_at(int index, isl::checked::aff el) const; + inline class size size() const; +}; + +// declarations for isl::ast_build +inline ast_build manage(__isl_take isl_ast_build *ptr); +inline ast_build manage_copy(__isl_keep isl_ast_build *ptr); + +class ast_build { + friend inline ast_build manage(__isl_take isl_ast_build *ptr); + friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr); + + protected: + isl_ast_build *ptr = nullptr; + + inline explicit ast_build(__isl_take isl_ast_build *ptr); + + public: + inline /* implicit */ ast_build(); + inline /* implicit */ ast_build(const ast_build &obj); + inline explicit ast_build(isl::checked::ctx ctx); + inline ast_build &operator=(ast_build obj); + inline ~ast_build(); + inline __isl_give isl_ast_build *copy() const &; + inline __isl_give isl_ast_build *copy() && = delete; + inline __isl_keep isl_ast_build *get() const; + inline __isl_give isl_ast_build *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + private: + inline ast_build ©_callbacks(const ast_build &obj); + struct at_each_domain_data { + std::function func; + }; + std::shared_ptr at_each_domain_data; + static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2); + inline void set_at_each_domain_data(const std::function &fn); + public: + inline isl::checked::ast_build set_at_each_domain(const std::function &fn) const; + inline isl::checked::ast_expr access_from(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::ast_expr access_from(isl::checked::pw_multi_aff pma) const; + inline isl::checked::ast_expr call_from(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::ast_expr call_from(isl::checked::pw_multi_aff pma) const; + inline isl::checked::ast_expr expr_from(isl::checked::pw_aff pa) const; + inline isl::checked::ast_expr expr_from(isl::checked::set set) const; + static inline isl::checked::ast_build from_context(isl::checked::set set); + inline isl::checked::ast_node node_from(isl::checked::schedule schedule) const; + inline isl::checked::ast_node node_from_schedule_map(isl::checked::union_map schedule) const; + inline isl::checked::union_map schedule() const; + inline isl::checked::union_map get_schedule() const; +}; + +// declarations for isl::ast_expr +inline ast_expr manage(__isl_take isl_ast_expr *ptr); +inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr); + +class ast_expr { + friend inline ast_expr manage(__isl_take isl_ast_expr *ptr); + friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr); + + protected: + isl_ast_expr *ptr = nullptr; + + inline explicit ast_expr(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr(); + inline /* implicit */ ast_expr(const ast_expr &obj); + inline ast_expr &operator=(ast_expr obj); + inline ~ast_expr(); + inline __isl_give isl_ast_expr *copy() const &; + inline __isl_give isl_ast_expr *copy() && = delete; + inline __isl_keep isl_ast_expr *get() const; + inline __isl_give isl_ast_expr *release(); + inline bool is_null() const; + private: + template ::value>::type> + inline boolean isa_type(T subtype) const; + public: + template inline boolean isa() const; + template inline T as() const; + inline isl::checked::ctx ctx() const; + + inline std::string to_C_str() const; +}; + +// declarations for isl::ast_expr_id + +class ast_expr_id : public ast_expr { + template + friend boolean ast_expr::isa() const; + friend ast_expr_id ast_expr::as() const; + static const auto type = isl_ast_expr_id; + + protected: + inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_id(); + inline /* implicit */ ast_expr_id(const ast_expr_id &obj); + inline ast_expr_id &operator=(ast_expr_id obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::id id() const; + inline isl::checked::id get_id() const; +}; + +// declarations for isl::ast_expr_int + +class ast_expr_int : public ast_expr { + template + friend boolean ast_expr::isa() const; + friend ast_expr_int ast_expr::as() const; + static const auto type = isl_ast_expr_int; + + protected: + inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_int(); + inline /* implicit */ ast_expr_int(const ast_expr_int &obj); + inline ast_expr_int &operator=(ast_expr_int obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::val val() const; + inline isl::checked::val get_val() const; +}; + +// declarations for isl::ast_expr_op + +class ast_expr_op : public ast_expr { + template + friend boolean ast_expr::isa() const; + friend ast_expr_op ast_expr::as() const; + static const auto type = isl_ast_expr_op; + + protected: + inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op(); + inline /* implicit */ ast_expr_op(const ast_expr_op &obj); + inline ast_expr_op &operator=(ast_expr_op obj); + private: + template ::value>::type> + inline boolean isa_type(T subtype) const; + public: + template inline boolean isa() const; + template inline T as() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_expr arg(int pos) const; + inline isl::checked::ast_expr get_arg(int pos) const; + inline class size n_arg() const; + inline class size get_n_arg() const; +}; + +// declarations for isl::ast_expr_op_access + +class ast_expr_op_access : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_access ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_access; + + protected: + inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_access(); + inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj); + inline ast_expr_op_access &operator=(ast_expr_op_access obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_add + +class ast_expr_op_add : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_add ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_add; + + protected: + inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_add(); + inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj); + inline ast_expr_op_add &operator=(ast_expr_op_add obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_address_of + +class ast_expr_op_address_of : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_address_of ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_address_of; + + protected: + inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_address_of(); + inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj); + inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_and + +class ast_expr_op_and : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_and ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_and; + + protected: + inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_and(); + inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj); + inline ast_expr_op_and &operator=(ast_expr_op_and obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_and_then + +class ast_expr_op_and_then : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_and_then ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_and_then; + + protected: + inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_and_then(); + inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj); + inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_call + +class ast_expr_op_call : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_call ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_call; + + protected: + inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_call(); + inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj); + inline ast_expr_op_call &operator=(ast_expr_op_call obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_cond + +class ast_expr_op_cond : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_cond ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_cond; + + protected: + inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_cond(); + inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj); + inline ast_expr_op_cond &operator=(ast_expr_op_cond obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_div + +class ast_expr_op_div : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_div ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_div; + + protected: + inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_div(); + inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj); + inline ast_expr_op_div &operator=(ast_expr_op_div obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_eq + +class ast_expr_op_eq : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_eq ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_eq; + + protected: + inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_eq(); + inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj); + inline ast_expr_op_eq &operator=(ast_expr_op_eq obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_fdiv_q + +class ast_expr_op_fdiv_q : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_fdiv_q ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_fdiv_q; + + protected: + inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_fdiv_q(); + inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj); + inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_ge + +class ast_expr_op_ge : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_ge ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_ge; + + protected: + inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_ge(); + inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj); + inline ast_expr_op_ge &operator=(ast_expr_op_ge obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_gt + +class ast_expr_op_gt : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_gt ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_gt; + + protected: + inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_gt(); + inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj); + inline ast_expr_op_gt &operator=(ast_expr_op_gt obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_le + +class ast_expr_op_le : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_le ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_le; + + protected: + inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_le(); + inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj); + inline ast_expr_op_le &operator=(ast_expr_op_le obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_lt + +class ast_expr_op_lt : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_lt ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_lt; + + protected: + inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_lt(); + inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj); + inline ast_expr_op_lt &operator=(ast_expr_op_lt obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_max + +class ast_expr_op_max : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_max ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_max; + + protected: + inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_max(); + inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj); + inline ast_expr_op_max &operator=(ast_expr_op_max obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_member + +class ast_expr_op_member : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_member ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_member; + + protected: + inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_member(); + inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj); + inline ast_expr_op_member &operator=(ast_expr_op_member obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_min + +class ast_expr_op_min : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_min ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_min; + + protected: + inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_min(); + inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj); + inline ast_expr_op_min &operator=(ast_expr_op_min obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_minus + +class ast_expr_op_minus : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_minus ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_minus; + + protected: + inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_minus(); + inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj); + inline ast_expr_op_minus &operator=(ast_expr_op_minus obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_mul + +class ast_expr_op_mul : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_mul ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_mul; + + protected: + inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_mul(); + inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj); + inline ast_expr_op_mul &operator=(ast_expr_op_mul obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_or + +class ast_expr_op_or : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_or ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or; + + protected: + inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_or(); + inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj); + inline ast_expr_op_or &operator=(ast_expr_op_or obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_or_else + +class ast_expr_op_or_else : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_or_else ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or_else; + + protected: + inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_or_else(); + inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj); + inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_pdiv_q + +class ast_expr_op_pdiv_q : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_pdiv_q ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_pdiv_q; + + protected: + inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_pdiv_q(); + inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj); + inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_pdiv_r + +class ast_expr_op_pdiv_r : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_pdiv_r ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_pdiv_r; + + protected: + inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_pdiv_r(); + inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj); + inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_select + +class ast_expr_op_select : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_select ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_select; + + protected: + inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_select(); + inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj); + inline ast_expr_op_select &operator=(ast_expr_op_select obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_sub + +class ast_expr_op_sub : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_sub ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_sub; + + protected: + inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_sub(); + inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj); + inline ast_expr_op_sub &operator=(ast_expr_op_sub obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_zdiv_r + +class ast_expr_op_zdiv_r : public ast_expr_op { + template + friend boolean ast_expr_op::isa() const; + friend ast_expr_op_zdiv_r ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_zdiv_r; + + protected: + inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_zdiv_r(); + inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj); + inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::ast_node +inline ast_node manage(__isl_take isl_ast_node *ptr); +inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); + +class ast_node { + friend inline ast_node manage(__isl_take isl_ast_node *ptr); + friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); + + protected: + isl_ast_node *ptr = nullptr; + + inline explicit ast_node(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node(); + inline /* implicit */ ast_node(const ast_node &obj); + inline ast_node &operator=(ast_node obj); + inline ~ast_node(); + inline __isl_give isl_ast_node *copy() const &; + inline __isl_give isl_ast_node *copy() && = delete; + inline __isl_keep isl_ast_node *get() const; + inline __isl_give isl_ast_node *release(); + inline bool is_null() const; + private: + template ::value>::type> + inline boolean isa_type(T subtype) const; + public: + template inline boolean isa() const; + template inline T as() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_node map_descendant_bottom_up(const std::function &fn) const; + inline std::string to_C_str() const; + inline isl::checked::ast_node_list to_list() const; +}; + +// declarations for isl::ast_node_block + +class ast_node_block : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_block ast_node::as() const; + static const auto type = isl_ast_node_block; + + protected: + inline explicit ast_node_block(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_block(); + inline /* implicit */ ast_node_block(const ast_node_block &obj); + inline explicit ast_node_block(isl::checked::ast_node_list list); + inline ast_node_block &operator=(ast_node_block obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_node_list children() const; + inline isl::checked::ast_node_list get_children() const; +}; + +// declarations for isl::ast_node_for + +class ast_node_for : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_for ast_node::as() const; + static const auto type = isl_ast_node_for; + + protected: + inline explicit ast_node_for(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_for(); + inline /* implicit */ ast_node_for(const ast_node_for &obj); + inline ast_node_for &operator=(ast_node_for obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_node body() const; + inline isl::checked::ast_node get_body() const; + inline isl::checked::ast_expr cond() const; + inline isl::checked::ast_expr get_cond() const; + inline isl::checked::ast_expr inc() const; + inline isl::checked::ast_expr get_inc() const; + inline isl::checked::ast_expr init() const; + inline isl::checked::ast_expr get_init() const; + inline boolean is_degenerate() const; + inline isl::checked::ast_expr iterator() const; + inline isl::checked::ast_expr get_iterator() const; +}; + +// declarations for isl::ast_node_if + +class ast_node_if : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_if ast_node::as() const; + static const auto type = isl_ast_node_if; + + protected: + inline explicit ast_node_if(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_if(); + inline /* implicit */ ast_node_if(const ast_node_if &obj); + inline ast_node_if &operator=(ast_node_if obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_expr cond() const; + inline isl::checked::ast_expr get_cond() const; + inline isl::checked::ast_node else_node() const; + inline isl::checked::ast_node get_else_node() const; + inline boolean has_else_node() const; + inline isl::checked::ast_node then_node() const; + inline isl::checked::ast_node get_then_node() const; +}; + +// declarations for isl::ast_node_list +inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); +inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); + +class ast_node_list { + friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); + friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); + + protected: + isl_ast_node_list *ptr = nullptr; + + inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr); + + public: + inline /* implicit */ ast_node_list(); + inline /* implicit */ ast_node_list(const ast_node_list &obj); + inline explicit ast_node_list(isl::checked::ctx ctx, int n); + inline explicit ast_node_list(isl::checked::ast_node el); + inline ast_node_list &operator=(ast_node_list obj); + inline ~ast_node_list(); + inline __isl_give isl_ast_node_list *copy() const &; + inline __isl_give isl_ast_node_list *copy() && = delete; + inline __isl_keep isl_ast_node_list *get() const; + inline __isl_give isl_ast_node_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_node_list add(isl::checked::ast_node el) const; + inline isl::checked::ast_node at(int index) const; + inline isl::checked::ast_node get_at(int index) const; + inline isl::checked::ast_node_list clear() const; + inline isl::checked::ast_node_list concat(isl::checked::ast_node_list list2) const; + inline isl::checked::ast_node_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::ast_node_list insert(unsigned int pos, isl::checked::ast_node el) const; + inline isl::checked::ast_node_list set_at(int index, isl::checked::ast_node el) const; + inline class size size() const; +}; + +// declarations for isl::ast_node_mark + +class ast_node_mark : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_mark ast_node::as() const; + static const auto type = isl_ast_node_mark; + + protected: + inline explicit ast_node_mark(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_mark(); + inline /* implicit */ ast_node_mark(const ast_node_mark &obj); + inline ast_node_mark &operator=(ast_node_mark obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::id id() const; + inline isl::checked::id get_id() const; + inline isl::checked::ast_node node() const; + inline isl::checked::ast_node get_node() const; +}; + +// declarations for isl::ast_node_user + +class ast_node_user : public ast_node { + template + friend boolean ast_node::isa() const; + friend ast_node_user ast_node::as() const; + static const auto type = isl_ast_node_user; + + protected: + inline explicit ast_node_user(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_user(); + inline /* implicit */ ast_node_user(const ast_node_user &obj); + inline explicit ast_node_user(isl::checked::ast_expr expr); + inline ast_node_user &operator=(ast_node_user obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::ast_expr expr() const; + inline isl::checked::ast_expr get_expr() const; +}; + +// declarations for isl::basic_map +inline basic_map manage(__isl_take isl_basic_map *ptr); +inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); + +class basic_map { + friend inline basic_map manage(__isl_take isl_basic_map *ptr); + friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); + + protected: + isl_basic_map *ptr = nullptr; + + inline explicit basic_map(__isl_take isl_basic_map *ptr); + + public: + inline /* implicit */ basic_map(); + inline /* implicit */ basic_map(const basic_map &obj); + inline explicit basic_map(isl::checked::ctx ctx, const std::string &str); + inline basic_map &operator=(basic_map obj); + inline ~basic_map(); + inline __isl_give isl_basic_map *copy() const &; + inline __isl_give isl_basic_map *copy() && = delete; + inline __isl_keep isl_basic_map *get() const; + inline __isl_give isl_basic_map *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::basic_map affine_hull() const; + inline isl::checked::basic_map apply_domain(isl::checked::basic_map bmap2) const; + inline isl::checked::map apply_domain(const isl::checked::map &map2) const; + inline isl::checked::union_map apply_domain(const isl::checked::union_map &umap2) const; + inline isl::checked::basic_map apply_range(isl::checked::basic_map bmap2) const; + inline isl::checked::map apply_range(const isl::checked::map &map2) const; + inline isl::checked::union_map apply_range(const isl::checked::union_map &umap2) const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::checked::set bind_domain(const isl::checked::multi_id &tuple) const; + inline isl::checked::set bind_range(const isl::checked::multi_id &tuple) const; + inline isl::checked::map coalesce() const; + inline isl::checked::map complement() const; + inline isl::checked::union_map compute_divs() const; + inline isl::checked::map curry() const; + inline isl::checked::basic_set deltas() const; + inline isl::checked::basic_map detect_equalities() const; + inline isl::checked::set domain() const; + inline isl::checked::map domain_factor_domain() const; + inline isl::checked::map domain_factor_range() const; + inline isl::checked::union_map domain_map() const; + inline isl::checked::union_pw_multi_aff domain_map_union_pw_multi_aff() const; + inline isl::checked::map domain_product(const isl::checked::map &map2) const; + inline isl::checked::union_map domain_product(const isl::checked::union_map &umap2) const; + inline isl::checked::map domain_reverse() const; + inline class size domain_tuple_dim() const; + inline isl::checked::id domain_tuple_id() const; + inline isl::checked::map drop_unused_params() const; + inline isl::checked::map eq_at(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::union_map eq_at(const isl::checked::multi_union_pw_aff &mupa) const; + inline boolean every_map(const std::function &test) const; + inline isl::checked::map extract_map(const isl::checked::space &space) const; + inline isl::checked::map factor_domain() const; + inline isl::checked::map factor_range() const; + inline isl::checked::map fixed_power(const isl::checked::val &exp) const; + inline isl::checked::map fixed_power(long exp) const; + inline isl::checked::basic_map flatten() const; + inline isl::checked::basic_map flatten_domain() const; + inline isl::checked::basic_map flatten_range() const; + inline stat foreach_basic_map(const std::function &fn) const; + inline stat foreach_map(const std::function &fn) const; + inline isl::checked::basic_map gist(isl::checked::basic_map context) const; + inline isl::checked::map gist(const isl::checked::map &context) const; + inline isl::checked::union_map gist(const isl::checked::union_map &context) const; + inline isl::checked::map gist_domain(const isl::checked::set &context) const; + inline isl::checked::union_map gist_domain(const isl::checked::union_set &uset) const; + inline isl::checked::map gist_params(const isl::checked::set &context) const; + inline isl::checked::union_map gist_range(const isl::checked::union_set &uset) const; + inline boolean has_domain_tuple_id() const; + inline boolean has_range_tuple_id() const; + inline isl::checked::basic_map intersect(isl::checked::basic_map bmap2) const; + inline isl::checked::map intersect(const isl::checked::map &map2) const; + inline isl::checked::union_map intersect(const isl::checked::union_map &umap2) const; + inline isl::checked::basic_map intersect_domain(isl::checked::basic_set bset) const; + inline isl::checked::map intersect_domain(const isl::checked::set &set) const; + inline isl::checked::union_map intersect_domain(const isl::checked::space &space) const; + inline isl::checked::union_map intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::basic_map intersect_domain(const isl::checked::point &bset) const; + inline isl::checked::map intersect_domain_factor_domain(const isl::checked::map &factor) const; + inline isl::checked::union_map intersect_domain_factor_domain(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_domain_factor_range(const isl::checked::map &factor) const; + inline isl::checked::union_map intersect_domain_factor_range(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_domain_wrapped_domain(const isl::checked::set &domain) const; + inline isl::checked::union_map intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const; + inline isl::checked::map intersect_params(const isl::checked::set ¶ms) const; + inline isl::checked::basic_map intersect_range(isl::checked::basic_set bset) const; + inline isl::checked::map intersect_range(const isl::checked::set &set) const; + inline isl::checked::union_map intersect_range(const isl::checked::space &space) const; + inline isl::checked::union_map intersect_range(const isl::checked::union_set &uset) const; + inline isl::checked::basic_map intersect_range(const isl::checked::point &bset) const; + inline isl::checked::map intersect_range_factor_domain(const isl::checked::map &factor) const; + inline isl::checked::union_map intersect_range_factor_domain(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_range_factor_range(const isl::checked::map &factor) const; + inline isl::checked::union_map intersect_range_factor_range(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_range_wrapped_domain(const isl::checked::set &domain) const; + inline isl::checked::union_map intersect_range_wrapped_domain(const isl::checked::union_set &domain) const; + inline boolean is_bijective() const; + inline boolean is_disjoint(const isl::checked::map &map2) const; + inline boolean is_disjoint(const isl::checked::union_map &umap2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::basic_map &bmap2) const; + inline boolean is_equal(const isl::checked::map &map2) const; + inline boolean is_equal(const isl::checked::union_map &umap2) const; + inline boolean is_injective() const; + inline boolean is_single_valued() const; + inline boolean is_strict_subset(const isl::checked::map &map2) const; + inline boolean is_strict_subset(const isl::checked::union_map &umap2) const; + inline boolean is_subset(const isl::checked::basic_map &bmap2) const; + inline boolean is_subset(const isl::checked::map &map2) const; + inline boolean is_subset(const isl::checked::union_map &umap2) const; + inline boolean isa_map() const; + inline isl::checked::map lex_ge_at(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::map lex_gt_at(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::map lex_le_at(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::map lex_lt_at(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::map lexmax() const; + inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::checked::map lexmin() const; + inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::checked::map lower_bound(const isl::checked::multi_pw_aff &lower) const; + inline isl::checked::map_list map_list() const; + inline isl::checked::multi_pw_aff max_multi_pw_aff() const; + inline isl::checked::multi_pw_aff min_multi_pw_aff() const; + inline class size n_basic_map() const; + inline isl::checked::set params() const; + inline isl::checked::basic_map polyhedral_hull() const; + inline isl::checked::map preimage_domain(const isl::checked::multi_aff &ma) const; + inline isl::checked::map preimage_domain(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::map preimage_domain(const isl::checked::pw_multi_aff &pma) const; + inline isl::checked::union_map preimage_domain(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::map preimage_range(const isl::checked::multi_aff &ma) const; + inline isl::checked::map preimage_range(const isl::checked::pw_multi_aff &pma) const; + inline isl::checked::union_map preimage_range(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::map product(const isl::checked::map &map2) const; + inline isl::checked::union_map product(const isl::checked::union_map &umap2) const; + inline isl::checked::map project_out_all_params() const; + inline isl::checked::map project_out_param(const isl::checked::id &id) const; + inline isl::checked::map project_out_param(const std::string &id) const; + inline isl::checked::map project_out_param(const isl::checked::id_list &list) const; + inline isl::checked::set range() const; + inline isl::checked::map range_factor_domain() const; + inline isl::checked::map range_factor_range() const; + inline isl::checked::fixed_box range_lattice_tile() const; + inline isl::checked::union_map range_map() const; + inline isl::checked::map range_product(const isl::checked::map &map2) const; + inline isl::checked::union_map range_product(const isl::checked::union_map &umap2) const; + inline isl::checked::map range_reverse() const; + inline isl::checked::fixed_box range_simple_fixed_box_hull() const; + inline class size range_tuple_dim() const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::basic_map reverse() const; + inline isl::checked::basic_map sample() const; + inline isl::checked::map set_domain_tuple(const isl::checked::id &id) const; + inline isl::checked::map set_domain_tuple(const std::string &id) const; + inline isl::checked::map set_range_tuple(const isl::checked::id &id) const; + inline isl::checked::map set_range_tuple(const std::string &id) const; + inline isl::checked::space space() const; + inline isl::checked::map subtract(const isl::checked::map &map2) const; + inline isl::checked::union_map subtract(const isl::checked::union_map &umap2) const; + inline isl::checked::union_map subtract_domain(const isl::checked::union_set &dom) const; + inline isl::checked::union_map subtract_range(const isl::checked::union_set &dom) const; + inline isl::checked::map_list to_list() const; + inline isl::checked::union_map to_union_map() const; + inline isl::checked::map uncurry() const; + inline isl::checked::map unite(isl::checked::basic_map bmap2) const; + inline isl::checked::map unite(const isl::checked::map &map2) const; + inline isl::checked::union_map unite(const isl::checked::union_map &umap2) const; + inline isl::checked::basic_map unshifted_simple_hull() const; + inline isl::checked::map upper_bound(const isl::checked::multi_pw_aff &upper) const; + inline isl::checked::set wrap() const; + inline isl::checked::map zip() const; +}; + +// declarations for isl::basic_set +inline basic_set manage(__isl_take isl_basic_set *ptr); +inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); + +class basic_set { + friend inline basic_set manage(__isl_take isl_basic_set *ptr); + friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); + + protected: + isl_basic_set *ptr = nullptr; + + inline explicit basic_set(__isl_take isl_basic_set *ptr); + + public: + inline /* implicit */ basic_set(); + inline /* implicit */ basic_set(const basic_set &obj); + inline /* implicit */ basic_set(isl::checked::point pnt); + inline explicit basic_set(isl::checked::ctx ctx, const std::string &str); + inline basic_set &operator=(basic_set obj); + inline ~basic_set(); + inline __isl_give isl_basic_set *copy() const &; + inline __isl_give isl_basic_set *copy() && = delete; + inline __isl_keep isl_basic_set *get() const; + inline __isl_give isl_basic_set *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::basic_set affine_hull() const; + inline isl::checked::basic_set apply(isl::checked::basic_map bmap) const; + inline isl::checked::set apply(const isl::checked::map &map) const; + inline isl::checked::union_set apply(const isl::checked::union_map &umap) const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::set bind(const isl::checked::multi_id &tuple) const; + inline isl::checked::set coalesce() const; + inline isl::checked::set complement() const; + inline isl::checked::union_set compute_divs() const; + inline isl::checked::basic_set detect_equalities() const; + inline isl::checked::val dim_max_val(int pos) const; + inline isl::checked::val dim_min_val(int pos) const; + inline isl::checked::set drop_unused_params() const; + inline boolean every_set(const std::function &test) const; + inline isl::checked::set extract_set(const isl::checked::space &space) const; + inline isl::checked::basic_set flatten() const; + inline stat foreach_basic_set(const std::function &fn) const; + inline stat foreach_point(const std::function &fn) const; + inline stat foreach_set(const std::function &fn) const; + inline isl::checked::basic_set gist(isl::checked::basic_set context) const; + inline isl::checked::set gist(const isl::checked::set &context) const; + inline isl::checked::union_set gist(const isl::checked::union_set &context) const; + inline isl::checked::basic_set gist(const isl::checked::point &context) const; + inline isl::checked::set gist_params(const isl::checked::set &context) const; + inline isl::checked::map identity() const; + inline isl::checked::pw_aff indicator_function() const; + inline isl::checked::map insert_domain(const isl::checked::space &domain) const; + inline isl::checked::basic_set intersect(isl::checked::basic_set bset2) const; + inline isl::checked::set intersect(const isl::checked::set &set2) const; + inline isl::checked::union_set intersect(const isl::checked::union_set &uset2) const; + inline isl::checked::basic_set intersect(const isl::checked::point &bset2) const; + inline isl::checked::basic_set intersect_params(isl::checked::basic_set bset2) const; + inline isl::checked::set intersect_params(const isl::checked::set ¶ms) const; + inline isl::checked::basic_set intersect_params(const isl::checked::point &bset2) const; + inline boolean involves_locals() const; + inline boolean is_disjoint(const isl::checked::set &set2) const; + inline boolean is_disjoint(const isl::checked::union_set &uset2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::basic_set &bset2) const; + inline boolean is_equal(const isl::checked::set &set2) const; + inline boolean is_equal(const isl::checked::union_set &uset2) const; + inline boolean is_equal(const isl::checked::point &bset2) const; + inline boolean is_singleton() const; + inline boolean is_strict_subset(const isl::checked::set &set2) const; + inline boolean is_strict_subset(const isl::checked::union_set &uset2) const; + inline boolean is_subset(const isl::checked::basic_set &bset2) const; + inline boolean is_subset(const isl::checked::set &set2) const; + inline boolean is_subset(const isl::checked::union_set &uset2) const; + inline boolean is_subset(const isl::checked::point &bset2) const; + inline boolean is_wrapping() const; + inline boolean isa_set() const; + inline isl::checked::fixed_box lattice_tile() const; + inline isl::checked::set lexmax() const; + inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::checked::set lexmin() const; + inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::checked::set lower_bound(const isl::checked::multi_pw_aff &lower) const; + inline isl::checked::set lower_bound(const isl::checked::multi_val &lower) const; + inline isl::checked::multi_pw_aff max_multi_pw_aff() const; + inline isl::checked::val max_val(const isl::checked::aff &obj) const; + inline isl::checked::multi_pw_aff min_multi_pw_aff() const; + inline isl::checked::val min_val(const isl::checked::aff &obj) const; + inline class size n_basic_set() const; + inline isl::checked::pw_aff param_pw_aff_on_domain(const isl::checked::id &id) const; + inline isl::checked::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline isl::checked::basic_set params() const; + inline isl::checked::multi_val plain_multi_val_if_fixed() const; + inline isl::checked::basic_set polyhedral_hull() const; + inline isl::checked::set preimage(const isl::checked::multi_aff &ma) const; + inline isl::checked::set preimage(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::set preimage(const isl::checked::pw_multi_aff &pma) const; + inline isl::checked::union_set preimage(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::set product(const isl::checked::set &set2) const; + inline isl::checked::set project_out_all_params() const; + inline isl::checked::set project_out_param(const isl::checked::id &id) const; + inline isl::checked::set project_out_param(const std::string &id) const; + inline isl::checked::set project_out_param(const isl::checked::id_list &list) const; + inline isl::checked::pw_aff pw_aff_on_domain(const isl::checked::val &v) const; + inline isl::checked::pw_aff pw_aff_on_domain(long v) const; + inline isl::checked::pw_multi_aff pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const; + inline isl::checked::basic_set sample() const; + inline isl::checked::point sample_point() const; + inline isl::checked::set_list set_list() const; + inline isl::checked::fixed_box simple_fixed_box_hull() const; + inline isl::checked::space space() const; + inline isl::checked::val stride(int pos) const; + inline isl::checked::set subtract(const isl::checked::set &set2) const; + inline isl::checked::union_set subtract(const isl::checked::union_set &uset2) const; + inline isl::checked::set_list to_list() const; + inline isl::checked::set to_set() const; + inline isl::checked::union_set to_union_set() const; + inline isl::checked::map translation() const; + inline class size tuple_dim() const; + inline isl::checked::set unbind_params(const isl::checked::multi_id &tuple) const; + inline isl::checked::map unbind_params_insert_domain(const isl::checked::multi_id &domain) const; + inline isl::checked::set unite(isl::checked::basic_set bset2) const; + inline isl::checked::set unite(const isl::checked::set &set2) const; + inline isl::checked::union_set unite(const isl::checked::union_set &uset2) const; + inline isl::checked::set unite(const isl::checked::point &bset2) const; + inline isl::checked::basic_set unshifted_simple_hull() const; + inline isl::checked::map unwrap() const; + inline isl::checked::set upper_bound(const isl::checked::multi_pw_aff &upper) const; + inline isl::checked::set upper_bound(const isl::checked::multi_val &upper) const; + inline isl::checked::set wrapped_reverse() const; +}; + +// declarations for isl::fixed_box +inline fixed_box manage(__isl_take isl_fixed_box *ptr); +inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); + +class fixed_box { + friend inline fixed_box manage(__isl_take isl_fixed_box *ptr); + friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); + + protected: + isl_fixed_box *ptr = nullptr; + + inline explicit fixed_box(__isl_take isl_fixed_box *ptr); + + public: + inline /* implicit */ fixed_box(); + inline /* implicit */ fixed_box(const fixed_box &obj); + inline explicit fixed_box(isl::checked::ctx ctx, const std::string &str); + inline fixed_box &operator=(fixed_box obj); + inline ~fixed_box(); + inline __isl_give isl_fixed_box *copy() const &; + inline __isl_give isl_fixed_box *copy() && = delete; + inline __isl_keep isl_fixed_box *get() const; + inline __isl_give isl_fixed_box *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline boolean is_valid() const; + inline isl::checked::multi_aff offset() const; + inline isl::checked::multi_aff get_offset() const; + inline isl::checked::multi_val size() const; + inline isl::checked::multi_val get_size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; +}; + +// declarations for isl::id +inline id manage(__isl_take isl_id *ptr); +inline id manage_copy(__isl_keep isl_id *ptr); + +class id { + friend inline id manage(__isl_take isl_id *ptr); + friend inline id manage_copy(__isl_keep isl_id *ptr); + + protected: + isl_id *ptr = nullptr; + + inline explicit id(__isl_take isl_id *ptr); + + public: + inline /* implicit */ id(); + inline /* implicit */ id(const id &obj); + inline explicit id(isl::checked::ctx ctx, const std::string &str); + inline id &operator=(id obj); + inline ~id(); + inline __isl_give isl_id *copy() const &; + inline __isl_give isl_id *copy() && = delete; + inline __isl_keep isl_id *get() const; + inline __isl_give isl_id *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline std::string name() const; + inline std::string get_name() const; + inline isl::checked::id_list to_list() const; + +#if __cplusplus >= 201703L + inline explicit id(isl::checked::ctx ctx, const std::string &str, const std::any &any); + template + std::optional try_user() const; + template + T user() const; +#endif +}; + +// declarations for isl::id_list +inline id_list manage(__isl_take isl_id_list *ptr); +inline id_list manage_copy(__isl_keep isl_id_list *ptr); + +class id_list { + friend inline id_list manage(__isl_take isl_id_list *ptr); + friend inline id_list manage_copy(__isl_keep isl_id_list *ptr); + + protected: + isl_id_list *ptr = nullptr; + + inline explicit id_list(__isl_take isl_id_list *ptr); + + public: + inline /* implicit */ id_list(); + inline /* implicit */ id_list(const id_list &obj); + inline explicit id_list(isl::checked::ctx ctx, int n); + inline explicit id_list(isl::checked::id el); + inline explicit id_list(isl::checked::ctx ctx, const std::string &str); + inline id_list &operator=(id_list obj); + inline ~id_list(); + inline __isl_give isl_id_list *copy() const &; + inline __isl_give isl_id_list *copy() && = delete; + inline __isl_keep isl_id_list *get() const; + inline __isl_give isl_id_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::id_list add(isl::checked::id el) const; + inline isl::checked::id_list add(const std::string &el) const; + inline isl::checked::id at(int index) const; + inline isl::checked::id get_at(int index) const; + inline isl::checked::id_list clear() const; + inline isl::checked::id_list concat(isl::checked::id_list list2) const; + inline isl::checked::id_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::id_list insert(unsigned int pos, isl::checked::id el) const; + inline isl::checked::id_list insert(unsigned int pos, const std::string &el) const; + inline isl::checked::id_list set_at(int index, isl::checked::id el) const; + inline isl::checked::id_list set_at(int index, const std::string &el) const; + inline class size size() const; +}; + +// declarations for isl::id_to_ast_expr +inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); +inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); + +class id_to_ast_expr { + friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); + friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); + + protected: + isl_id_to_ast_expr *ptr = nullptr; + + inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr); + + public: + inline /* implicit */ id_to_ast_expr(); + inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj); + inline explicit id_to_ast_expr(isl::checked::ctx ctx, int min_size); + inline explicit id_to_ast_expr(isl::checked::ctx ctx, const std::string &str); + inline id_to_ast_expr &operator=(id_to_ast_expr obj); + inline ~id_to_ast_expr(); + inline __isl_give isl_id_to_ast_expr *copy() const &; + inline __isl_give isl_id_to_ast_expr *copy() && = delete; + inline __isl_keep isl_id_to_ast_expr *get() const; + inline __isl_give isl_id_to_ast_expr *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline boolean is_equal(const isl::checked::id_to_ast_expr &hmap2) const; + inline isl::checked::id_to_ast_expr set(isl::checked::id key, isl::checked::ast_expr val) const; + inline isl::checked::id_to_ast_expr set(const std::string &key, const isl::checked::ast_expr &val) const; +}; + +// declarations for isl::id_to_id +inline id_to_id manage(__isl_take isl_id_to_id *ptr); +inline id_to_id manage_copy(__isl_keep isl_id_to_id *ptr); + +class id_to_id { + friend inline id_to_id manage(__isl_take isl_id_to_id *ptr); + friend inline id_to_id manage_copy(__isl_keep isl_id_to_id *ptr); + + protected: + isl_id_to_id *ptr = nullptr; + + inline explicit id_to_id(__isl_take isl_id_to_id *ptr); + + public: + inline /* implicit */ id_to_id(); + inline /* implicit */ id_to_id(const id_to_id &obj); + inline explicit id_to_id(isl::checked::ctx ctx, int min_size); + inline explicit id_to_id(isl::checked::ctx ctx, const std::string &str); + inline id_to_id &operator=(id_to_id obj); + inline ~id_to_id(); + inline __isl_give isl_id_to_id *copy() const &; + inline __isl_give isl_id_to_id *copy() && = delete; + inline __isl_keep isl_id_to_id *get() const; + inline __isl_give isl_id_to_id *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline boolean is_equal(const isl::checked::id_to_id &hmap2) const; + inline isl::checked::id_to_id set(isl::checked::id key, isl::checked::id val) const; + inline isl::checked::id_to_id set(const isl::checked::id &key, const std::string &val) const; + inline isl::checked::id_to_id set(const std::string &key, const isl::checked::id &val) const; + inline isl::checked::id_to_id set(const std::string &key, const std::string &val) const; +}; + +// declarations for isl::map +inline map manage(__isl_take isl_map *ptr); +inline map manage_copy(__isl_keep isl_map *ptr); + +class map { + friend inline map manage(__isl_take isl_map *ptr); + friend inline map manage_copy(__isl_keep isl_map *ptr); + + protected: + isl_map *ptr = nullptr; + + inline explicit map(__isl_take isl_map *ptr); + + public: + inline /* implicit */ map(); + inline /* implicit */ map(const map &obj); + inline /* implicit */ map(isl::checked::basic_map bmap); + inline explicit map(isl::checked::ctx ctx, const std::string &str); + inline map &operator=(map obj); + inline ~map(); + inline __isl_give isl_map *copy() const &; + inline __isl_give isl_map *copy() && = delete; + inline __isl_keep isl_map *get() const; + inline __isl_give isl_map *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::basic_map affine_hull() const; + inline isl::checked::map apply_domain(isl::checked::map map2) const; + inline isl::checked::union_map apply_domain(const isl::checked::union_map &umap2) const; + inline isl::checked::map apply_domain(const isl::checked::basic_map &map2) const; + inline isl::checked::map apply_range(isl::checked::map map2) const; + inline isl::checked::union_map apply_range(const isl::checked::union_map &umap2) const; + inline isl::checked::map apply_range(const isl::checked::basic_map &map2) const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::checked::set bind_domain(isl::checked::multi_id tuple) const; + inline isl::checked::set bind_range(isl::checked::multi_id tuple) const; + inline isl::checked::map coalesce() const; + inline isl::checked::map complement() const; + inline isl::checked::union_map compute_divs() const; + inline isl::checked::map curry() const; + inline isl::checked::set deltas() const; + inline isl::checked::map detect_equalities() const; + inline isl::checked::set domain() const; + inline isl::checked::map domain_factor_domain() const; + inline isl::checked::map domain_factor_range() const; + inline isl::checked::union_map domain_map() const; + inline isl::checked::union_pw_multi_aff domain_map_union_pw_multi_aff() const; + inline isl::checked::map domain_product(isl::checked::map map2) const; + inline isl::checked::union_map domain_product(const isl::checked::union_map &umap2) const; + inline isl::checked::map domain_product(const isl::checked::basic_map &map2) const; + inline isl::checked::map domain_reverse() const; + inline class size domain_tuple_dim() const; + inline isl::checked::id domain_tuple_id() const; + inline isl::checked::id get_domain_tuple_id() const; + inline isl::checked::map drop_unused_params() const; + static inline isl::checked::map empty(isl::checked::space space); + inline isl::checked::map eq_at(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::union_map eq_at(const isl::checked::multi_union_pw_aff &mupa) const; + inline isl::checked::map eq_at(const isl::checked::aff &mpa) const; + inline isl::checked::map eq_at(const isl::checked::multi_aff &mpa) const; + inline isl::checked::map eq_at(const isl::checked::pw_aff &mpa) const; + inline isl::checked::map eq_at(const isl::checked::pw_multi_aff &mpa) const; + inline boolean every_map(const std::function &test) const; + inline isl::checked::map extract_map(const isl::checked::space &space) const; + inline isl::checked::map factor_domain() const; + inline isl::checked::map factor_range() const; + inline isl::checked::map fixed_power(isl::checked::val exp) const; + inline isl::checked::map fixed_power(long exp) const; + inline isl::checked::map flatten() const; + inline isl::checked::map flatten_domain() const; + inline isl::checked::map flatten_range() const; + inline stat foreach_basic_map(const std::function &fn) const; + inline stat foreach_map(const std::function &fn) const; + inline isl::checked::map gist(isl::checked::map context) const; + inline isl::checked::union_map gist(const isl::checked::union_map &context) const; + inline isl::checked::map gist(const isl::checked::basic_map &context) const; + inline isl::checked::map gist_domain(isl::checked::set context) const; + inline isl::checked::union_map gist_domain(const isl::checked::union_set &uset) const; + inline isl::checked::map gist_domain(const isl::checked::basic_set &context) const; + inline isl::checked::map gist_domain(const isl::checked::point &context) const; + inline isl::checked::map gist_params(isl::checked::set context) const; + inline isl::checked::union_map gist_range(const isl::checked::union_set &uset) const; + inline boolean has_domain_tuple_id() const; + inline boolean has_range_tuple_id() const; + inline isl::checked::map intersect(isl::checked::map map2) const; + inline isl::checked::union_map intersect(const isl::checked::union_map &umap2) const; + inline isl::checked::map intersect(const isl::checked::basic_map &map2) const; + inline isl::checked::map intersect_domain(isl::checked::set set) const; + inline isl::checked::union_map intersect_domain(const isl::checked::space &space) const; + inline isl::checked::union_map intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::map intersect_domain(const isl::checked::basic_set &set) const; + inline isl::checked::map intersect_domain(const isl::checked::point &set) const; + inline isl::checked::map intersect_domain_factor_domain(isl::checked::map factor) const; + inline isl::checked::union_map intersect_domain_factor_domain(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_domain_factor_domain(const isl::checked::basic_map &factor) const; + inline isl::checked::map intersect_domain_factor_range(isl::checked::map factor) const; + inline isl::checked::union_map intersect_domain_factor_range(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_domain_factor_range(const isl::checked::basic_map &factor) const; + inline isl::checked::map intersect_domain_wrapped_domain(isl::checked::set domain) const; + inline isl::checked::union_map intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const; + inline isl::checked::map intersect_domain_wrapped_domain(const isl::checked::basic_set &domain) const; + inline isl::checked::map intersect_domain_wrapped_domain(const isl::checked::point &domain) const; + inline isl::checked::map intersect_params(isl::checked::set params) const; + inline isl::checked::map intersect_range(isl::checked::set set) const; + inline isl::checked::union_map intersect_range(const isl::checked::space &space) const; + inline isl::checked::union_map intersect_range(const isl::checked::union_set &uset) const; + inline isl::checked::map intersect_range(const isl::checked::basic_set &set) const; + inline isl::checked::map intersect_range(const isl::checked::point &set) const; + inline isl::checked::map intersect_range_factor_domain(isl::checked::map factor) const; + inline isl::checked::union_map intersect_range_factor_domain(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_range_factor_domain(const isl::checked::basic_map &factor) const; + inline isl::checked::map intersect_range_factor_range(isl::checked::map factor) const; + inline isl::checked::union_map intersect_range_factor_range(const isl::checked::union_map &factor) const; + inline isl::checked::map intersect_range_factor_range(const isl::checked::basic_map &factor) const; + inline isl::checked::map intersect_range_wrapped_domain(isl::checked::set domain) const; + inline isl::checked::union_map intersect_range_wrapped_domain(const isl::checked::union_set &domain) const; + inline isl::checked::map intersect_range_wrapped_domain(const isl::checked::basic_set &domain) const; + inline isl::checked::map intersect_range_wrapped_domain(const isl::checked::point &domain) const; + inline boolean is_bijective() const; + inline boolean is_disjoint(const isl::checked::map &map2) const; + inline boolean is_disjoint(const isl::checked::union_map &umap2) const; + inline boolean is_disjoint(const isl::checked::basic_map &map2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::map &map2) const; + inline boolean is_equal(const isl::checked::union_map &umap2) const; + inline boolean is_equal(const isl::checked::basic_map &map2) const; + inline boolean is_injective() const; + inline boolean is_single_valued() const; + inline boolean is_strict_subset(const isl::checked::map &map2) const; + inline boolean is_strict_subset(const isl::checked::union_map &umap2) const; + inline boolean is_strict_subset(const isl::checked::basic_map &map2) const; + inline boolean is_subset(const isl::checked::map &map2) const; + inline boolean is_subset(const isl::checked::union_map &umap2) const; + inline boolean is_subset(const isl::checked::basic_map &map2) const; + inline boolean isa_map() const; + inline isl::checked::map lex_ge_at(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::map lex_gt_at(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::map lex_le_at(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::map lex_lt_at(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::map lexmax() const; + inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::checked::map lexmin() const; + inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::checked::map lower_bound(isl::checked::multi_pw_aff lower) const; + inline isl::checked::map_list map_list() const; + inline isl::checked::multi_pw_aff max_multi_pw_aff() const; + inline isl::checked::multi_pw_aff min_multi_pw_aff() const; + inline class size n_basic_map() const; + inline isl::checked::set params() const; + inline isl::checked::basic_map polyhedral_hull() const; + inline isl::checked::map preimage_domain(isl::checked::multi_aff ma) const; + inline isl::checked::map preimage_domain(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::map preimage_domain(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_map preimage_domain(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::map preimage_range(isl::checked::multi_aff ma) const; + inline isl::checked::map preimage_range(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_map preimage_range(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::map product(isl::checked::map map2) const; + inline isl::checked::union_map product(const isl::checked::union_map &umap2) const; + inline isl::checked::map product(const isl::checked::basic_map &map2) const; + inline isl::checked::map project_out_all_params() const; + inline isl::checked::map project_out_param(isl::checked::id id) const; + inline isl::checked::map project_out_param(const std::string &id) const; + inline isl::checked::map project_out_param(isl::checked::id_list list) const; + inline isl::checked::set range() const; + inline isl::checked::map range_factor_domain() const; + inline isl::checked::map range_factor_range() const; + inline isl::checked::fixed_box range_lattice_tile() const; + inline isl::checked::fixed_box get_range_lattice_tile() const; + inline isl::checked::union_map range_map() const; + inline isl::checked::map range_product(isl::checked::map map2) const; + inline isl::checked::union_map range_product(const isl::checked::union_map &umap2) const; + inline isl::checked::map range_product(const isl::checked::basic_map &map2) const; + inline isl::checked::map range_reverse() const; + inline isl::checked::fixed_box range_simple_fixed_box_hull() const; + inline isl::checked::fixed_box get_range_simple_fixed_box_hull() const; + inline class size range_tuple_dim() const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::map reverse() const; + inline isl::checked::basic_map sample() const; + inline isl::checked::map set_domain_tuple(isl::checked::id id) const; + inline isl::checked::map set_domain_tuple(const std::string &id) const; + inline isl::checked::map set_range_tuple(isl::checked::id id) const; + inline isl::checked::map set_range_tuple(const std::string &id) const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::map subtract(isl::checked::map map2) const; + inline isl::checked::union_map subtract(const isl::checked::union_map &umap2) const; + inline isl::checked::map subtract(const isl::checked::basic_map &map2) const; + inline isl::checked::union_map subtract_domain(const isl::checked::union_set &dom) const; + inline isl::checked::union_map subtract_range(const isl::checked::union_set &dom) const; + inline isl::checked::map_list to_list() const; + inline isl::checked::union_map to_union_map() const; + inline isl::checked::map uncurry() const; + inline isl::checked::map unite(isl::checked::map map2) const; + inline isl::checked::union_map unite(const isl::checked::union_map &umap2) const; + inline isl::checked::map unite(const isl::checked::basic_map &map2) const; + static inline isl::checked::map universe(isl::checked::space space); + inline isl::checked::basic_map unshifted_simple_hull() const; + inline isl::checked::map upper_bound(isl::checked::multi_pw_aff upper) const; + inline isl::checked::set wrap() const; + inline isl::checked::map zip() const; +}; + +// declarations for isl::map_list +inline map_list manage(__isl_take isl_map_list *ptr); +inline map_list manage_copy(__isl_keep isl_map_list *ptr); + +class map_list { + friend inline map_list manage(__isl_take isl_map_list *ptr); + friend inline map_list manage_copy(__isl_keep isl_map_list *ptr); + + protected: + isl_map_list *ptr = nullptr; + + inline explicit map_list(__isl_take isl_map_list *ptr); + + public: + inline /* implicit */ map_list(); + inline /* implicit */ map_list(const map_list &obj); + inline explicit map_list(isl::checked::ctx ctx, int n); + inline explicit map_list(isl::checked::map el); + inline explicit map_list(isl::checked::ctx ctx, const std::string &str); + inline map_list &operator=(map_list obj); + inline ~map_list(); + inline __isl_give isl_map_list *copy() const &; + inline __isl_give isl_map_list *copy() && = delete; + inline __isl_keep isl_map_list *get() const; + inline __isl_give isl_map_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::map_list add(isl::checked::map el) const; + inline isl::checked::map at(int index) const; + inline isl::checked::map get_at(int index) const; + inline isl::checked::map_list clear() const; + inline isl::checked::map_list concat(isl::checked::map_list list2) const; + inline isl::checked::map_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::map_list insert(unsigned int pos, isl::checked::map el) const; + inline isl::checked::map_list set_at(int index, isl::checked::map el) const; + inline class size size() const; +}; + +// declarations for isl::multi_aff +inline multi_aff manage(__isl_take isl_multi_aff *ptr); +inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); + +class multi_aff { + friend inline multi_aff manage(__isl_take isl_multi_aff *ptr); + friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); + + protected: + isl_multi_aff *ptr = nullptr; + + inline explicit multi_aff(__isl_take isl_multi_aff *ptr); + + public: + inline /* implicit */ multi_aff(); + inline /* implicit */ multi_aff(const multi_aff &obj); + inline /* implicit */ multi_aff(isl::checked::aff aff); + inline explicit multi_aff(isl::checked::space space, isl::checked::aff_list list); + inline explicit multi_aff(isl::checked::ctx ctx, const std::string &str); + inline multi_aff &operator=(multi_aff obj); + inline ~multi_aff(); + inline __isl_give isl_multi_aff *copy() const &; + inline __isl_give isl_multi_aff *copy() && = delete; + inline __isl_keep isl_multi_aff *get() const; + inline __isl_give isl_multi_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_aff add(isl::checked::multi_aff multi2) const; + inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff add(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff add(const isl::checked::aff &multi2) const; + inline isl::checked::multi_aff add_constant(isl::checked::multi_val mv) const; + inline isl::checked::multi_aff add_constant(isl::checked::val v) const; + inline isl::checked::multi_aff add_constant(long v) const; + inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_aff as_multi_aff() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::union_map as_union_map() const; + inline isl::checked::aff at(int pos) const; + inline isl::checked::aff get_at(int pos) const; + inline isl::checked::basic_set bind(isl::checked::multi_id tuple) const; + inline isl::checked::multi_aff bind_domain(isl::checked::multi_id tuple) const; + inline isl::checked::multi_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const; + inline isl::checked::pw_multi_aff coalesce() const; + inline isl::checked::multi_val constant_multi_val() const; + inline isl::checked::multi_val get_constant_multi_val() const; + inline isl::checked::set domain() const; + static inline isl::checked::multi_aff domain_map(isl::checked::space space); + inline isl::checked::multi_aff domain_reverse() const; + inline isl::checked::pw_multi_aff drop_unused_params() const; + inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const; + inline isl::checked::multi_aff flat_range_product(isl::checked::multi_aff multi2) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff flat_range_product(const isl::checked::aff &multi2) const; + inline isl::checked::multi_aff floor() const; + inline stat foreach_piece(const std::function &fn) const; + inline isl::checked::multi_aff gist(isl::checked::set context) const; + inline isl::checked::union_pw_multi_aff gist(const isl::checked::union_set &context) const; + inline isl::checked::multi_aff gist(const isl::checked::basic_set &context) const; + inline isl::checked::multi_aff gist(const isl::checked::point &context) const; + inline isl::checked::multi_aff gist_params(isl::checked::set context) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_aff identity() const; + static inline isl::checked::multi_aff identity_on_domain(isl::checked::space space); + inline isl::checked::multi_aff insert_domain(isl::checked::space domain) const; + inline isl::checked::pw_multi_aff intersect_domain(const isl::checked::set &set) const; + inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const; + inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const; + inline isl::checked::pw_multi_aff intersect_params(const isl::checked::set &set) const; + inline boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::checked::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::checked::id_list &list) const; + inline boolean isa_multi_aff() const; + inline boolean isa_pw_multi_aff() const; + inline isl::checked::aff_list list() const; + inline isl::checked::aff_list get_list() const; + inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_val max_multi_val() const; + inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_val min_multi_val() const; + static inline isl::checked::multi_aff multi_val_on_domain(isl::checked::space space, isl::checked::multi_val mv); + inline class size n_piece() const; + inline isl::checked::multi_aff neg() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::checked::multi_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const; + inline boolean plain_is_equal(const isl::checked::aff &multi2) const; + inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff product(isl::checked::multi_aff multi2) const; + inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::multi_aff product(const isl::checked::aff &multi2) const; + inline isl::checked::multi_aff pullback(isl::checked::multi_aff ma2) const; + inline isl::checked::multi_pw_aff pullback(const isl::checked::multi_pw_aff &mpa2) const; + inline isl::checked::pw_multi_aff pullback(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff pullback(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff pullback(const isl::checked::aff &ma2) const; + inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::checked::pw_multi_aff range_factor_domain() const; + inline isl::checked::pw_multi_aff range_factor_range() const; + static inline isl::checked::multi_aff range_map(isl::checked::space space); + inline isl::checked::multi_aff range_product(isl::checked::multi_aff multi2) const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff range_product(const isl::checked::aff &multi2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::multi_aff reset_range_tuple_id() const; + inline isl::checked::multi_aff scale(isl::checked::multi_val mv) const; + inline isl::checked::multi_aff scale(isl::checked::val v) const; + inline isl::checked::multi_aff scale(long v) const; + inline isl::checked::multi_aff scale_down(isl::checked::multi_val mv) const; + inline isl::checked::multi_aff scale_down(isl::checked::val v) const; + inline isl::checked::multi_aff scale_down(long v) const; + inline isl::checked::multi_aff set_at(int pos, isl::checked::aff el) const; + inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const; + inline isl::checked::multi_aff set_range_tuple(isl::checked::id id) const; + inline isl::checked::multi_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_aff sub(isl::checked::multi_aff multi2) const; + inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff sub(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_aff sub(const isl::checked::aff &multi2) const; + inline isl::checked::pw_multi_aff subtract_domain(const isl::checked::set &set) const; + inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::union_set &uset) const; + inline isl::checked::pw_multi_aff_list to_list() const; + inline isl::checked::multi_pw_aff to_multi_pw_aff() const; + inline isl::checked::multi_union_pw_aff to_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff to_pw_multi_aff() const; + inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::checked::multi_aff unbind_params_insert_domain(isl::checked::multi_id domain) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const; + inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const; + inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const; + static inline isl::checked::multi_aff zero(isl::checked::space space); +}; + +// declarations for isl::multi_id +inline multi_id manage(__isl_take isl_multi_id *ptr); +inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); + +class multi_id { + friend inline multi_id manage(__isl_take isl_multi_id *ptr); + friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); + + protected: + isl_multi_id *ptr = nullptr; + + inline explicit multi_id(__isl_take isl_multi_id *ptr); + + public: + inline /* implicit */ multi_id(); + inline /* implicit */ multi_id(const multi_id &obj); + inline explicit multi_id(isl::checked::space space, isl::checked::id_list list); + inline explicit multi_id(isl::checked::ctx ctx, const std::string &str); + inline multi_id &operator=(multi_id obj); + inline ~multi_id(); + inline __isl_give isl_multi_id *copy() const &; + inline __isl_give isl_multi_id *copy() && = delete; + inline __isl_keep isl_multi_id *get() const; + inline __isl_give isl_multi_id *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::id at(int pos) const; + inline isl::checked::id get_at(int pos) const; + inline isl::checked::multi_id flat_range_product(isl::checked::multi_id multi2) const; + inline isl::checked::id_list list() const; + inline isl::checked::id_list get_list() const; + inline boolean plain_is_equal(const isl::checked::multi_id &multi2) const; + inline isl::checked::multi_id range_product(isl::checked::multi_id multi2) const; + inline isl::checked::multi_id set_at(int pos, isl::checked::id el) const; + inline isl::checked::multi_id set_at(int pos, const std::string &el) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; +}; + +// declarations for isl::multi_pw_aff +inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); +inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); + +class multi_pw_aff { + friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); + friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); + + protected: + isl_multi_pw_aff *ptr = nullptr; + + inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr); + + public: + inline /* implicit */ multi_pw_aff(); + inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj); + inline /* implicit */ multi_pw_aff(isl::checked::aff aff); + inline /* implicit */ multi_pw_aff(isl::checked::multi_aff ma); + inline /* implicit */ multi_pw_aff(isl::checked::pw_aff pa); + inline explicit multi_pw_aff(isl::checked::space space, isl::checked::pw_aff_list list); + inline /* implicit */ multi_pw_aff(isl::checked::pw_multi_aff pma); + inline explicit multi_pw_aff(isl::checked::ctx ctx, const std::string &str); + inline multi_pw_aff &operator=(multi_pw_aff obj); + inline ~multi_pw_aff(); + inline __isl_give isl_multi_pw_aff *copy() const &; + inline __isl_give isl_multi_pw_aff *copy() && = delete; + inline __isl_keep isl_multi_pw_aff *get() const; + inline __isl_give isl_multi_pw_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_pw_aff add(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::multi_pw_aff add(const isl::checked::aff &multi2) const; + inline isl::checked::multi_pw_aff add(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff add(const isl::checked::pw_aff &multi2) const; + inline isl::checked::multi_pw_aff add(const isl::checked::pw_multi_aff &multi2) const; + inline isl::checked::multi_pw_aff add_constant(isl::checked::multi_val mv) const; + inline isl::checked::multi_pw_aff add_constant(isl::checked::val v) const; + inline isl::checked::multi_pw_aff add_constant(long v) const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_aff as_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::pw_aff at(int pos) const; + inline isl::checked::pw_aff get_at(int pos) const; + inline isl::checked::set bind(isl::checked::multi_id tuple) const; + inline isl::checked::multi_pw_aff bind_domain(isl::checked::multi_id tuple) const; + inline isl::checked::multi_pw_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const; + inline isl::checked::multi_pw_aff coalesce() const; + inline isl::checked::set domain() const; + inline isl::checked::multi_pw_aff domain_reverse() const; + inline isl::checked::multi_pw_aff flat_range_product(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::aff &multi2) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::pw_aff &multi2) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::pw_multi_aff &multi2) const; + inline isl::checked::multi_pw_aff gist(isl::checked::set set) const; + inline isl::checked::multi_union_pw_aff gist(const isl::checked::union_set &context) const; + inline isl::checked::multi_pw_aff gist(const isl::checked::basic_set &set) const; + inline isl::checked::multi_pw_aff gist(const isl::checked::point &set) const; + inline isl::checked::multi_pw_aff gist_params(isl::checked::set set) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_pw_aff identity() const; + static inline isl::checked::multi_pw_aff identity_on_domain(isl::checked::space space); + inline isl::checked::multi_pw_aff insert_domain(isl::checked::space domain) const; + inline isl::checked::multi_pw_aff intersect_domain(isl::checked::set domain) const; + inline isl::checked::multi_union_pw_aff intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::multi_pw_aff intersect_domain(const isl::checked::basic_set &domain) const; + inline isl::checked::multi_pw_aff intersect_domain(const isl::checked::point &domain) const; + inline isl::checked::multi_pw_aff intersect_params(isl::checked::set set) const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::checked::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::checked::id_list &list) const; + inline boolean isa_multi_aff() const; + inline isl::checked::pw_aff_list list() const; + inline isl::checked::pw_aff_list get_list() const; + inline isl::checked::multi_pw_aff max(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_val max_multi_val() const; + inline isl::checked::multi_pw_aff min(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_val min_multi_val() const; + inline isl::checked::multi_pw_aff neg() const; + inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::pw_multi_aff &multi2) const; + inline isl::checked::multi_pw_aff product(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_pw_aff pullback(isl::checked::multi_aff ma) const; + inline isl::checked::multi_pw_aff pullback(isl::checked::multi_pw_aff mpa2) const; + inline isl::checked::multi_pw_aff pullback(isl::checked::pw_multi_aff pma) const; + inline isl::checked::multi_union_pw_aff pullback(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::multi_pw_aff range_product(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::aff &multi2) const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::pw_aff &multi2) const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::pw_multi_aff &multi2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::multi_pw_aff reset_range_tuple_id() const; + inline isl::checked::multi_pw_aff scale(isl::checked::multi_val mv) const; + inline isl::checked::multi_pw_aff scale(isl::checked::val v) const; + inline isl::checked::multi_pw_aff scale(long v) const; + inline isl::checked::multi_pw_aff scale_down(isl::checked::multi_val mv) const; + inline isl::checked::multi_pw_aff scale_down(isl::checked::val v) const; + inline isl::checked::multi_pw_aff scale_down(long v) const; + inline isl::checked::multi_pw_aff set_at(int pos, isl::checked::pw_aff el) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const; + inline isl::checked::multi_pw_aff set_range_tuple(isl::checked::id id) const; + inline isl::checked::multi_pw_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_pw_aff sub(isl::checked::multi_pw_aff multi2) const; + inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::multi_pw_aff sub(const isl::checked::aff &multi2) const; + inline isl::checked::multi_pw_aff sub(const isl::checked::multi_aff &multi2) const; + inline isl::checked::multi_pw_aff sub(const isl::checked::pw_aff &multi2) const; + inline isl::checked::multi_pw_aff sub(const isl::checked::pw_multi_aff &multi2) const; + inline isl::checked::multi_pw_aff unbind_params_insert_domain(isl::checked::multi_id domain) const; + inline isl::checked::multi_pw_aff union_add(isl::checked::multi_pw_aff mpa2) const; + inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::aff &mpa2) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_aff &mpa2) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::pw_aff &mpa2) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::pw_multi_aff &mpa2) const; + static inline isl::checked::multi_pw_aff zero(isl::checked::space space); +}; + +// declarations for isl::multi_union_pw_aff +inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); +inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); + +class multi_union_pw_aff { + friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); + friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); + + protected: + isl_multi_union_pw_aff *ptr = nullptr; + + inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr); + + public: + inline /* implicit */ multi_union_pw_aff(); + inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj); + inline /* implicit */ multi_union_pw_aff(isl::checked::multi_pw_aff mpa); + inline /* implicit */ multi_union_pw_aff(isl::checked::union_pw_aff upa); + inline explicit multi_union_pw_aff(isl::checked::space space, isl::checked::union_pw_aff_list list); + inline explicit multi_union_pw_aff(isl::checked::ctx ctx, const std::string &str); + inline multi_union_pw_aff &operator=(multi_union_pw_aff obj); + inline ~multi_union_pw_aff(); + inline __isl_give isl_multi_union_pw_aff *copy() const &; + inline __isl_give isl_multi_union_pw_aff *copy() && = delete; + inline __isl_keep isl_multi_union_pw_aff *get() const; + inline __isl_give isl_multi_union_pw_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_union_pw_aff add(isl::checked::multi_union_pw_aff multi2) const; + inline isl::checked::union_pw_aff at(int pos) const; + inline isl::checked::union_pw_aff get_at(int pos) const; + inline isl::checked::union_set bind(isl::checked::multi_id tuple) const; + inline isl::checked::multi_union_pw_aff coalesce() const; + inline isl::checked::union_set domain() const; + inline isl::checked::multi_union_pw_aff flat_range_product(isl::checked::multi_union_pw_aff multi2) const; + inline isl::checked::multi_union_pw_aff gist(isl::checked::union_set context) const; + inline isl::checked::multi_union_pw_aff gist_params(isl::checked::set context) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_union_pw_aff intersect_domain(isl::checked::union_set uset) const; + inline isl::checked::multi_union_pw_aff intersect_params(isl::checked::set params) const; + inline boolean involves_nan() const; + inline isl::checked::union_pw_aff_list list() const; + inline isl::checked::union_pw_aff_list get_list() const; + inline isl::checked::multi_union_pw_aff neg() const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff pullback(isl::checked::union_pw_multi_aff upma) const; + inline isl::checked::multi_union_pw_aff range_product(isl::checked::multi_union_pw_aff multi2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::multi_union_pw_aff reset_range_tuple_id() const; + inline isl::checked::multi_union_pw_aff scale(isl::checked::multi_val mv) const; + inline isl::checked::multi_union_pw_aff scale(isl::checked::val v) const; + inline isl::checked::multi_union_pw_aff scale(long v) const; + inline isl::checked::multi_union_pw_aff scale_down(isl::checked::multi_val mv) const; + inline isl::checked::multi_union_pw_aff scale_down(isl::checked::val v) const; + inline isl::checked::multi_union_pw_aff scale_down(long v) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, isl::checked::union_pw_aff el) const; + inline isl::checked::multi_union_pw_aff set_range_tuple(isl::checked::id id) const; + inline isl::checked::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_union_pw_aff sub(isl::checked::multi_union_pw_aff multi2) const; + inline isl::checked::multi_union_pw_aff union_add(isl::checked::multi_union_pw_aff mupa2) const; + static inline isl::checked::multi_union_pw_aff zero(isl::checked::space space); +}; + +// declarations for isl::multi_val +inline multi_val manage(__isl_take isl_multi_val *ptr); +inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); + +class multi_val { + friend inline multi_val manage(__isl_take isl_multi_val *ptr); + friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); + + protected: + isl_multi_val *ptr = nullptr; + + inline explicit multi_val(__isl_take isl_multi_val *ptr); + + public: + inline /* implicit */ multi_val(); + inline /* implicit */ multi_val(const multi_val &obj); + inline explicit multi_val(isl::checked::space space, isl::checked::val_list list); + inline explicit multi_val(isl::checked::ctx ctx, const std::string &str); + inline multi_val &operator=(multi_val obj); + inline ~multi_val(); + inline __isl_give isl_multi_val *copy() const &; + inline __isl_give isl_multi_val *copy() && = delete; + inline __isl_keep isl_multi_val *get() const; + inline __isl_give isl_multi_val *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_val add(isl::checked::multi_val multi2) const; + inline isl::checked::multi_val add(isl::checked::val v) const; + inline isl::checked::multi_val add(long v) const; + inline isl::checked::val at(int pos) const; + inline isl::checked::val get_at(int pos) const; + inline isl::checked::multi_val flat_range_product(isl::checked::multi_val multi2) const; + inline boolean has_range_tuple_id() const; + inline boolean involves_nan() const; + inline isl::checked::val_list list() const; + inline isl::checked::val_list get_list() const; + inline isl::checked::multi_val max(isl::checked::multi_val multi2) const; + inline isl::checked::multi_val min(isl::checked::multi_val multi2) const; + inline isl::checked::multi_val neg() const; + inline boolean plain_is_equal(const isl::checked::multi_val &multi2) const; + inline isl::checked::multi_val product(isl::checked::multi_val multi2) const; + inline isl::checked::multi_val range_product(isl::checked::multi_val multi2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::multi_val reset_range_tuple_id() const; + inline isl::checked::multi_val scale(isl::checked::multi_val mv) const; + inline isl::checked::multi_val scale(isl::checked::val v) const; + inline isl::checked::multi_val scale(long v) const; + inline isl::checked::multi_val scale_down(isl::checked::multi_val mv) const; + inline isl::checked::multi_val scale_down(isl::checked::val v) const; + inline isl::checked::multi_val scale_down(long v) const; + inline isl::checked::multi_val set_at(int pos, isl::checked::val el) const; + inline isl::checked::multi_val set_at(int pos, long el) const; + inline isl::checked::multi_val set_range_tuple(isl::checked::id id) const; + inline isl::checked::multi_val set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_val sub(isl::checked::multi_val multi2) const; + static inline isl::checked::multi_val zero(isl::checked::space space); +}; + +// declarations for isl::point +inline point manage(__isl_take isl_point *ptr); +inline point manage_copy(__isl_keep isl_point *ptr); + +class point { + friend inline point manage(__isl_take isl_point *ptr); + friend inline point manage_copy(__isl_keep isl_point *ptr); + + protected: + isl_point *ptr = nullptr; + + inline explicit point(__isl_take isl_point *ptr); + + public: + inline /* implicit */ point(); + inline /* implicit */ point(const point &obj); + inline point &operator=(point obj); + inline ~point(); + inline __isl_give isl_point *copy() const &; + inline __isl_give isl_point *copy() && = delete; + inline __isl_keep isl_point *get() const; + inline __isl_give isl_point *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::basic_set affine_hull() const; + inline isl::checked::basic_set apply(const isl::checked::basic_map &bmap) const; + inline isl::checked::set apply(const isl::checked::map &map) const; + inline isl::checked::union_set apply(const isl::checked::union_map &umap) const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::set bind(const isl::checked::multi_id &tuple) const; + inline isl::checked::set coalesce() const; + inline isl::checked::set complement() const; + inline isl::checked::union_set compute_divs() const; + inline isl::checked::basic_set detect_equalities() const; + inline isl::checked::val dim_max_val(int pos) const; + inline isl::checked::val dim_min_val(int pos) const; + inline isl::checked::set drop_unused_params() const; + inline boolean every_set(const std::function &test) const; + inline isl::checked::set extract_set(const isl::checked::space &space) const; + inline isl::checked::basic_set flatten() const; + inline stat foreach_basic_set(const std::function &fn) const; + inline stat foreach_point(const std::function &fn) const; + inline stat foreach_set(const std::function &fn) const; + inline isl::checked::basic_set gist(const isl::checked::basic_set &context) const; + inline isl::checked::set gist(const isl::checked::set &context) const; + inline isl::checked::union_set gist(const isl::checked::union_set &context) const; + inline isl::checked::set gist_params(const isl::checked::set &context) const; + inline isl::checked::map identity() const; + inline isl::checked::pw_aff indicator_function() const; + inline isl::checked::map insert_domain(const isl::checked::space &domain) const; + inline isl::checked::basic_set intersect(const isl::checked::basic_set &bset2) const; + inline isl::checked::set intersect(const isl::checked::set &set2) const; + inline isl::checked::union_set intersect(const isl::checked::union_set &uset2) const; + inline isl::checked::basic_set intersect_params(const isl::checked::basic_set &bset2) const; + inline isl::checked::set intersect_params(const isl::checked::set ¶ms) const; + inline boolean involves_locals() const; + inline boolean is_disjoint(const isl::checked::set &set2) const; + inline boolean is_disjoint(const isl::checked::union_set &uset2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::basic_set &bset2) const; + inline boolean is_equal(const isl::checked::set &set2) const; + inline boolean is_equal(const isl::checked::union_set &uset2) const; + inline boolean is_singleton() const; + inline boolean is_strict_subset(const isl::checked::set &set2) const; + inline boolean is_strict_subset(const isl::checked::union_set &uset2) const; + inline boolean is_subset(const isl::checked::basic_set &bset2) const; + inline boolean is_subset(const isl::checked::set &set2) const; + inline boolean is_subset(const isl::checked::union_set &uset2) const; + inline boolean is_wrapping() const; + inline boolean isa_set() const; + inline isl::checked::fixed_box lattice_tile() const; + inline isl::checked::set lexmax() const; + inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::checked::set lexmin() const; + inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::checked::set lower_bound(const isl::checked::multi_pw_aff &lower) const; + inline isl::checked::set lower_bound(const isl::checked::multi_val &lower) const; + inline isl::checked::multi_pw_aff max_multi_pw_aff() const; + inline isl::checked::val max_val(const isl::checked::aff &obj) const; + inline isl::checked::multi_pw_aff min_multi_pw_aff() const; + inline isl::checked::val min_val(const isl::checked::aff &obj) const; + inline isl::checked::multi_val multi_val() const; + inline isl::checked::multi_val get_multi_val() const; + inline class size n_basic_set() const; + inline isl::checked::pw_aff param_pw_aff_on_domain(const isl::checked::id &id) const; + inline isl::checked::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline isl::checked::basic_set params() const; + inline isl::checked::multi_val plain_multi_val_if_fixed() const; + inline isl::checked::basic_set polyhedral_hull() const; + inline isl::checked::set preimage(const isl::checked::multi_aff &ma) const; + inline isl::checked::set preimage(const isl::checked::multi_pw_aff &mpa) const; + inline isl::checked::set preimage(const isl::checked::pw_multi_aff &pma) const; + inline isl::checked::union_set preimage(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::set product(const isl::checked::set &set2) const; + inline isl::checked::set project_out_all_params() const; + inline isl::checked::set project_out_param(const isl::checked::id &id) const; + inline isl::checked::set project_out_param(const std::string &id) const; + inline isl::checked::set project_out_param(const isl::checked::id_list &list) const; + inline isl::checked::pw_aff pw_aff_on_domain(const isl::checked::val &v) const; + inline isl::checked::pw_aff pw_aff_on_domain(long v) const; + inline isl::checked::pw_multi_aff pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const; + inline isl::checked::basic_set sample() const; + inline isl::checked::point sample_point() const; + inline isl::checked::set_list set_list() const; + inline isl::checked::fixed_box simple_fixed_box_hull() const; + inline isl::checked::space space() const; + inline isl::checked::val stride(int pos) const; + inline isl::checked::set subtract(const isl::checked::set &set2) const; + inline isl::checked::union_set subtract(const isl::checked::union_set &uset2) const; + inline isl::checked::set_list to_list() const; + inline isl::checked::set to_set() const; + inline isl::checked::union_set to_union_set() const; + inline isl::checked::map translation() const; + inline class size tuple_dim() const; + inline isl::checked::set unbind_params(const isl::checked::multi_id &tuple) const; + inline isl::checked::map unbind_params_insert_domain(const isl::checked::multi_id &domain) const; + inline isl::checked::set unite(const isl::checked::basic_set &bset2) const; + inline isl::checked::set unite(const isl::checked::set &set2) const; + inline isl::checked::union_set unite(const isl::checked::union_set &uset2) const; + inline isl::checked::basic_set unshifted_simple_hull() const; + inline isl::checked::map unwrap() const; + inline isl::checked::set upper_bound(const isl::checked::multi_pw_aff &upper) const; + inline isl::checked::set upper_bound(const isl::checked::multi_val &upper) const; + inline isl::checked::set wrapped_reverse() const; +}; + +// declarations for isl::pw_aff +inline pw_aff manage(__isl_take isl_pw_aff *ptr); +inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); + +class pw_aff { + friend inline pw_aff manage(__isl_take isl_pw_aff *ptr); + friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); + + protected: + isl_pw_aff *ptr = nullptr; + + inline explicit pw_aff(__isl_take isl_pw_aff *ptr); + + public: + inline /* implicit */ pw_aff(); + inline /* implicit */ pw_aff(const pw_aff &obj); + inline /* implicit */ pw_aff(isl::checked::aff aff); + inline explicit pw_aff(isl::checked::ctx ctx, const std::string &str); + inline pw_aff &operator=(pw_aff obj); + inline ~pw_aff(); + inline __isl_give isl_pw_aff *copy() const &; + inline __isl_give isl_pw_aff *copy() && = delete; + inline __isl_keep isl_pw_aff *get() const; + inline __isl_give isl_pw_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_aff add(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_multi_aff add(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_aff add(const isl::checked::union_pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_aff add(const isl::checked::aff &pwaff2) const; + inline isl::checked::pw_aff add_constant(isl::checked::val v) const; + inline isl::checked::pw_aff add_constant(long v) const; + inline isl::checked::pw_multi_aff add_constant(const isl::checked::multi_val &mv) const; + inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::aff as_aff() const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_aff as_multi_aff() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::union_map as_union_map() const; + inline isl::checked::pw_aff at(int pos) const; + inline isl::checked::set bind(const isl::checked::multi_id &tuple) const; + inline isl::checked::set bind(isl::checked::id id) const; + inline isl::checked::set bind(const std::string &id) const; + inline isl::checked::pw_aff bind_domain(isl::checked::multi_id tuple) const; + inline isl::checked::pw_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const; + inline isl::checked::pw_aff ceil() const; + inline isl::checked::pw_aff coalesce() const; + inline isl::checked::pw_aff cond(isl::checked::pw_aff pwaff_true, isl::checked::pw_aff pwaff_false) const; + inline isl::checked::pw_aff div(isl::checked::pw_aff pa2) const; + inline isl::checked::set domain() const; + inline isl::checked::pw_aff domain_reverse() const; + inline isl::checked::pw_aff drop_unused_params() const; + inline isl::checked::set eq_set(isl::checked::pw_aff pwaff2) const; + inline isl::checked::val eval(isl::checked::point pnt) const; + inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_aff floor() const; + inline stat foreach_piece(const std::function &fn) const; + inline isl::checked::set ge_set(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_aff gist(isl::checked::set context) const; + inline isl::checked::union_pw_aff gist(const isl::checked::union_set &context) const; + inline isl::checked::pw_aff gist(const isl::checked::basic_set &context) const; + inline isl::checked::pw_aff gist(const isl::checked::point &context) const; + inline isl::checked::pw_aff gist_params(isl::checked::set context) const; + inline isl::checked::set gt_set(isl::checked::pw_aff pwaff2) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_pw_aff identity() const; + inline isl::checked::pw_aff insert_domain(isl::checked::space domain) const; + inline isl::checked::pw_aff intersect_domain(isl::checked::set set) const; + inline isl::checked::union_pw_aff intersect_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_aff intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::pw_aff intersect_domain(const isl::checked::basic_set &set) const; + inline isl::checked::pw_aff intersect_domain(const isl::checked::point &set) const; + inline isl::checked::union_pw_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const; + inline isl::checked::union_pw_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const; + inline isl::checked::pw_aff intersect_params(isl::checked::set set) const; + inline boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::checked::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::checked::id_list &list) const; + inline boolean isa_aff() const; + inline boolean isa_multi_aff() const; + inline boolean isa_pw_multi_aff() const; + inline isl::checked::set le_set(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_aff_list list() const; + inline isl::checked::set lt_set(isl::checked::pw_aff pwaff2) const; + inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_aff max(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_aff max(const isl::checked::aff &pwaff2) const; + inline isl::checked::multi_val max_multi_val() const; + inline isl::checked::val max_val() const; + inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_aff min(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_aff min(const isl::checked::aff &pwaff2) const; + inline isl::checked::multi_val min_multi_val() const; + inline isl::checked::val min_val() const; + inline isl::checked::pw_aff mod(isl::checked::val mod) const; + inline isl::checked::pw_aff mod(long mod) const; + inline isl::checked::pw_aff mul(isl::checked::pw_aff pwaff2) const; + inline class size n_piece() const; + inline isl::checked::set ne_set(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_aff neg() const; + static inline isl::checked::pw_aff param_on_domain(isl::checked::set domain, isl::checked::id id); + inline isl::checked::set params() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::pw_aff &pwaff2) const; + inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_aff &upa2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const; + inline boolean plain_is_equal(const isl::checked::aff &pwaff2) const; + inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::pw_aff pullback(isl::checked::multi_aff ma) const; + inline isl::checked::pw_aff pullback(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::pw_aff pullback(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_pw_aff pullback(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::checked::pw_multi_aff range_factor_domain() const; + inline isl::checked::pw_multi_aff range_factor_range() const; + inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::multi_pw_aff reset_range_tuple_id() const; + inline isl::checked::pw_aff scale(isl::checked::val v) const; + inline isl::checked::pw_aff scale(long v) const; + inline isl::checked::pw_multi_aff scale(const isl::checked::multi_val &mv) const; + inline isl::checked::pw_aff scale_down(isl::checked::val f) const; + inline isl::checked::pw_aff scale_down(long f) const; + inline isl::checked::pw_multi_aff scale_down(const isl::checked::multi_val &mv) const; + inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const; + inline isl::checked::pw_multi_aff set_range_tuple(const isl::checked::id &id) const; + inline isl::checked::pw_multi_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_aff sub(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_multi_aff sub(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_aff sub(const isl::checked::union_pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_aff sub(const isl::checked::aff &pwaff2) const; + inline isl::checked::pw_aff subtract_domain(isl::checked::set set) const; + inline isl::checked::union_pw_aff subtract_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_aff subtract_domain(const isl::checked::union_set &uset) const; + inline isl::checked::pw_aff subtract_domain(const isl::checked::basic_set &set) const; + inline isl::checked::pw_aff subtract_domain(const isl::checked::point &set) const; + inline isl::checked::pw_aff tdiv_q(isl::checked::pw_aff pa2) const; + inline isl::checked::pw_aff tdiv_r(isl::checked::pw_aff pa2) const; + inline isl::checked::pw_aff_list to_list() const; + inline isl::checked::multi_pw_aff to_multi_pw_aff() const; + inline isl::checked::union_pw_aff to_union_pw_aff() const; + inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::checked::multi_pw_aff unbind_params_insert_domain(const isl::checked::multi_id &domain) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const; + inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const; + inline isl::checked::pw_aff union_add(isl::checked::pw_aff pwaff2) const; + inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_multi_aff &pma2) const; + inline isl::checked::union_pw_aff union_add(const isl::checked::union_pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_aff union_add(const isl::checked::aff &pwaff2) const; +}; + +// declarations for isl::pw_aff_list +inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); +inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); + +class pw_aff_list { + friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); + friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); + + protected: + isl_pw_aff_list *ptr = nullptr; + + inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr); + + public: + inline /* implicit */ pw_aff_list(); + inline /* implicit */ pw_aff_list(const pw_aff_list &obj); + inline explicit pw_aff_list(isl::checked::ctx ctx, int n); + inline explicit pw_aff_list(isl::checked::pw_aff el); + inline explicit pw_aff_list(isl::checked::ctx ctx, const std::string &str); + inline pw_aff_list &operator=(pw_aff_list obj); + inline ~pw_aff_list(); + inline __isl_give isl_pw_aff_list *copy() const &; + inline __isl_give isl_pw_aff_list *copy() && = delete; + inline __isl_keep isl_pw_aff_list *get() const; + inline __isl_give isl_pw_aff_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::pw_aff_list add(isl::checked::pw_aff el) const; + inline isl::checked::pw_aff at(int index) const; + inline isl::checked::pw_aff get_at(int index) const; + inline isl::checked::pw_aff_list clear() const; + inline isl::checked::pw_aff_list concat(isl::checked::pw_aff_list list2) const; + inline isl::checked::pw_aff_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::pw_aff_list insert(unsigned int pos, isl::checked::pw_aff el) const; + inline isl::checked::pw_aff_list set_at(int index, isl::checked::pw_aff el) const; + inline class size size() const; +}; + +// declarations for isl::pw_multi_aff +inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); +inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); + +class pw_multi_aff { + friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); + friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); + + protected: + isl_pw_multi_aff *ptr = nullptr; + + inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr); + + public: + inline /* implicit */ pw_multi_aff(); + inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj); + inline /* implicit */ pw_multi_aff(isl::checked::multi_aff ma); + inline /* implicit */ pw_multi_aff(isl::checked::pw_aff pa); + inline explicit pw_multi_aff(isl::checked::ctx ctx, const std::string &str); + inline pw_multi_aff &operator=(pw_multi_aff obj); + inline ~pw_multi_aff(); + inline __isl_give isl_pw_multi_aff *copy() const &; + inline __isl_give isl_pw_multi_aff *copy() && = delete; + inline __isl_keep isl_pw_multi_aff *get() const; + inline __isl_give isl_pw_multi_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_pw_aff add(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff add(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff add(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff add(const isl::checked::pw_aff &pma2) const; + inline isl::checked::pw_multi_aff add_constant(isl::checked::multi_val mv) const; + inline isl::checked::pw_multi_aff add_constant(isl::checked::val v) const; + inline isl::checked::pw_multi_aff add_constant(long v) const; + inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_aff as_multi_aff() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::union_map as_union_map() const; + inline isl::checked::pw_aff at(int pos) const; + inline isl::checked::pw_aff get_at(int pos) const; + inline isl::checked::set bind(const isl::checked::multi_id &tuple) const; + inline isl::checked::pw_multi_aff bind_domain(isl::checked::multi_id tuple) const; + inline isl::checked::pw_multi_aff bind_domain_wrapped_domain(isl::checked::multi_id tuple) const; + inline isl::checked::pw_multi_aff coalesce() const; + inline isl::checked::set domain() const; + static inline isl::checked::pw_multi_aff domain_map(isl::checked::space space); + inline isl::checked::pw_multi_aff domain_reverse() const; + inline isl::checked::pw_multi_aff drop_unused_params() const; + inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const; + inline isl::checked::multi_pw_aff flat_range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff flat_range_product(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff flat_range_product(const isl::checked::pw_aff &pma2) const; + inline stat foreach_piece(const std::function &fn) const; + inline isl::checked::pw_multi_aff gist(isl::checked::set set) const; + inline isl::checked::union_pw_multi_aff gist(const isl::checked::union_set &context) const; + inline isl::checked::pw_multi_aff gist(const isl::checked::basic_set &set) const; + inline isl::checked::pw_multi_aff gist(const isl::checked::point &set) const; + inline isl::checked::pw_multi_aff gist_params(isl::checked::set set) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_pw_aff identity() const; + static inline isl::checked::pw_multi_aff identity_on_domain(isl::checked::space space); + inline isl::checked::pw_multi_aff insert_domain(isl::checked::space domain) const; + inline isl::checked::pw_multi_aff intersect_domain(isl::checked::set set) const; + inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_multi_aff intersect_domain(const isl::checked::union_set &uset) const; + inline isl::checked::pw_multi_aff intersect_domain(const isl::checked::basic_set &set) const; + inline isl::checked::pw_multi_aff intersect_domain(const isl::checked::point &set) const; + inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const; + inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_range(const isl::checked::union_set &uset) const; + inline isl::checked::pw_multi_aff intersect_params(isl::checked::set set) const; + inline boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean involves_param(const isl::checked::id &id) const; + inline boolean involves_param(const std::string &id) const; + inline boolean involves_param(const isl::checked::id_list &list) const; + inline boolean isa_multi_aff() const; + inline boolean isa_pw_multi_aff() const; + inline isl::checked::pw_aff_list list() const; + inline isl::checked::multi_pw_aff max(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_val max_multi_val() const; + inline isl::checked::multi_pw_aff min(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_val min_multi_val() const; + static inline isl::checked::pw_multi_aff multi_val_on_domain(isl::checked::set domain, isl::checked::multi_val mv); + inline class size n_piece() const; + inline isl::checked::multi_pw_aff neg() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::checked::multi_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::pw_multi_aff &pma2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const; + inline boolean plain_is_equal(const isl::checked::multi_aff &pma2) const; + inline boolean plain_is_equal(const isl::checked::pw_aff &pma2) const; + inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::pw_aff &pma2) const; + inline isl::checked::multi_pw_aff product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff product(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::pw_multi_aff product(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff product(const isl::checked::pw_aff &pma2) const; + inline isl::checked::multi_pw_aff pullback(const isl::checked::multi_pw_aff &mpa2) const; + inline isl::checked::pw_multi_aff pullback(isl::checked::multi_aff ma) const; + inline isl::checked::pw_multi_aff pullback(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff pullback(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::checked::pw_multi_aff range_factor_domain() const; + inline isl::checked::pw_multi_aff range_factor_range() const; + static inline isl::checked::pw_multi_aff range_map(isl::checked::space space); + inline isl::checked::multi_pw_aff range_product(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff range_product(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff range_product(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff range_product(const isl::checked::pw_aff &pma2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::multi_pw_aff reset_range_tuple_id() const; + inline isl::checked::pw_multi_aff scale(isl::checked::multi_val mv) const; + inline isl::checked::pw_multi_aff scale(isl::checked::val v) const; + inline isl::checked::pw_multi_aff scale(long v) const; + inline isl::checked::pw_multi_aff scale_down(isl::checked::multi_val mv) const; + inline isl::checked::pw_multi_aff scale_down(isl::checked::val v) const; + inline isl::checked::pw_multi_aff scale_down(long v) const; + inline isl::checked::multi_pw_aff set_at(int pos, const isl::checked::pw_aff &el) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const; + inline isl::checked::pw_multi_aff set_range_tuple(isl::checked::id id) const; + inline isl::checked::pw_multi_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_pw_aff sub(const isl::checked::multi_pw_aff &multi2) const; + inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::pw_multi_aff sub(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff sub(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff sub(const isl::checked::pw_aff &pma2) const; + inline isl::checked::pw_multi_aff subtract_domain(isl::checked::set set) const; + inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::space &space) const; + inline isl::checked::union_pw_multi_aff subtract_domain(const isl::checked::union_set &uset) const; + inline isl::checked::pw_multi_aff subtract_domain(const isl::checked::basic_set &set) const; + inline isl::checked::pw_multi_aff subtract_domain(const isl::checked::point &set) const; + inline isl::checked::pw_multi_aff_list to_list() const; + inline isl::checked::multi_pw_aff to_multi_pw_aff() const; + inline isl::checked::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::checked::multi_pw_aff unbind_params_insert_domain(const isl::checked::multi_id &domain) const; + inline isl::checked::multi_pw_aff union_add(const isl::checked::multi_pw_aff &mpa2) const; + inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const; + inline isl::checked::pw_multi_aff union_add(isl::checked::pw_multi_aff pma2) const; + inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::pw_multi_aff union_add(const isl::checked::multi_aff &pma2) const; + inline isl::checked::pw_multi_aff union_add(const isl::checked::pw_aff &pma2) const; + static inline isl::checked::pw_multi_aff zero(isl::checked::space space); +}; + +// declarations for isl::pw_multi_aff_list +inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); +inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); + +class pw_multi_aff_list { + friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); + friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); + + protected: + isl_pw_multi_aff_list *ptr = nullptr; + + inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr); + + public: + inline /* implicit */ pw_multi_aff_list(); + inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj); + inline explicit pw_multi_aff_list(isl::checked::ctx ctx, int n); + inline explicit pw_multi_aff_list(isl::checked::pw_multi_aff el); + inline explicit pw_multi_aff_list(isl::checked::ctx ctx, const std::string &str); + inline pw_multi_aff_list &operator=(pw_multi_aff_list obj); + inline ~pw_multi_aff_list(); + inline __isl_give isl_pw_multi_aff_list *copy() const &; + inline __isl_give isl_pw_multi_aff_list *copy() && = delete; + inline __isl_keep isl_pw_multi_aff_list *get() const; + inline __isl_give isl_pw_multi_aff_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::pw_multi_aff_list add(isl::checked::pw_multi_aff el) const; + inline isl::checked::pw_multi_aff at(int index) const; + inline isl::checked::pw_multi_aff get_at(int index) const; + inline isl::checked::pw_multi_aff_list clear() const; + inline isl::checked::pw_multi_aff_list concat(isl::checked::pw_multi_aff_list list2) const; + inline isl::checked::pw_multi_aff_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::pw_multi_aff_list insert(unsigned int pos, isl::checked::pw_multi_aff el) const; + inline isl::checked::pw_multi_aff_list set_at(int index, isl::checked::pw_multi_aff el) const; + inline class size size() const; +}; + +// declarations for isl::schedule +inline schedule manage(__isl_take isl_schedule *ptr); +inline schedule manage_copy(__isl_keep isl_schedule *ptr); + +class schedule { + friend inline schedule manage(__isl_take isl_schedule *ptr); + friend inline schedule manage_copy(__isl_keep isl_schedule *ptr); + + protected: + isl_schedule *ptr = nullptr; + + inline explicit schedule(__isl_take isl_schedule *ptr); + + public: + inline /* implicit */ schedule(); + inline /* implicit */ schedule(const schedule &obj); + inline explicit schedule(isl::checked::ctx ctx, const std::string &str); + inline schedule &operator=(schedule obj); + inline ~schedule(); + inline __isl_give isl_schedule *copy() const &; + inline __isl_give isl_schedule *copy() && = delete; + inline __isl_keep isl_schedule *get() const; + inline __isl_give isl_schedule *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_set domain() const; + inline isl::checked::union_set get_domain() const; + static inline isl::checked::schedule from_domain(isl::checked::union_set domain); + inline isl::checked::union_map map() const; + inline isl::checked::union_map get_map() const; + inline isl::checked::schedule pullback(isl::checked::union_pw_multi_aff upma) const; + inline isl::checked::schedule_node root() const; + inline isl::checked::schedule_node get_root() const; +}; + +// declarations for isl::schedule_constraints +inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); +inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); + +class schedule_constraints { + friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); + friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); + + protected: + isl_schedule_constraints *ptr = nullptr; + + inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr); + + public: + inline /* implicit */ schedule_constraints(); + inline /* implicit */ schedule_constraints(const schedule_constraints &obj); + inline explicit schedule_constraints(isl::checked::ctx ctx, const std::string &str); + inline schedule_constraints &operator=(schedule_constraints obj); + inline ~schedule_constraints(); + inline __isl_give isl_schedule_constraints *copy() const &; + inline __isl_give isl_schedule_constraints *copy() && = delete; + inline __isl_keep isl_schedule_constraints *get() const; + inline __isl_give isl_schedule_constraints *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_map coincidence() const; + inline isl::checked::union_map get_coincidence() const; + inline isl::checked::schedule compute_schedule() const; + inline isl::checked::union_map conditional_validity() const; + inline isl::checked::union_map get_conditional_validity() const; + inline isl::checked::union_map conditional_validity_condition() const; + inline isl::checked::union_map get_conditional_validity_condition() const; + inline isl::checked::set context() const; + inline isl::checked::set get_context() const; + inline isl::checked::union_set domain() const; + inline isl::checked::union_set get_domain() const; + static inline isl::checked::schedule_constraints on_domain(isl::checked::union_set domain); + inline isl::checked::union_map proximity() const; + inline isl::checked::union_map get_proximity() const; + inline isl::checked::schedule_constraints set_coincidence(isl::checked::union_map coincidence) const; + inline isl::checked::schedule_constraints set_conditional_validity(isl::checked::union_map condition, isl::checked::union_map validity) const; + inline isl::checked::schedule_constraints set_context(isl::checked::set context) const; + inline isl::checked::schedule_constraints set_proximity(isl::checked::union_map proximity) const; + inline isl::checked::schedule_constraints set_validity(isl::checked::union_map validity) const; + inline isl::checked::union_map validity() const; + inline isl::checked::union_map get_validity() const; +}; + +// declarations for isl::schedule_node +inline schedule_node manage(__isl_take isl_schedule_node *ptr); +inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); + +class schedule_node { + friend inline schedule_node manage(__isl_take isl_schedule_node *ptr); + friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); + + protected: + isl_schedule_node *ptr = nullptr; + + inline explicit schedule_node(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node(); + inline /* implicit */ schedule_node(const schedule_node &obj); + inline schedule_node &operator=(schedule_node obj); + inline ~schedule_node(); + inline __isl_give isl_schedule_node *copy() const &; + inline __isl_give isl_schedule_node *copy() && = delete; + inline __isl_keep isl_schedule_node *get() const; + inline __isl_give isl_schedule_node *release(); + inline bool is_null() const; + private: + template ::value>::type> + inline boolean isa_type(T subtype) const; + public: + template inline boolean isa() const; + template inline T as() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::schedule_node ancestor(int generation) const; + inline class size ancestor_child_position(const isl::checked::schedule_node &ancestor) const; + inline class size get_ancestor_child_position(const isl::checked::schedule_node &ancestor) const; + inline isl::checked::schedule_node child(int pos) const; + inline class size child_position() const; + inline class size get_child_position() const; + inline boolean every_descendant(const std::function &test) const; + inline isl::checked::schedule_node first_child() const; + inline stat foreach_ancestor_top_down(const std::function &fn) const; + inline stat foreach_descendant_top_down(const std::function &fn) const; + static inline isl::checked::schedule_node from_domain(isl::checked::union_set domain); + static inline isl::checked::schedule_node from_extension(isl::checked::union_map extension); + inline isl::checked::schedule_node graft_after(isl::checked::schedule_node graft) const; + inline isl::checked::schedule_node graft_before(isl::checked::schedule_node graft) const; + inline boolean has_children() const; + inline boolean has_next_sibling() const; + inline boolean has_parent() const; + inline boolean has_previous_sibling() const; + inline isl::checked::schedule_node insert_context(isl::checked::set context) const; + inline isl::checked::schedule_node insert_filter(isl::checked::union_set filter) const; + inline isl::checked::schedule_node insert_guard(isl::checked::set context) const; + inline isl::checked::schedule_node insert_mark(isl::checked::id mark) const; + inline isl::checked::schedule_node insert_mark(const std::string &mark) const; + inline isl::checked::schedule_node insert_partial_schedule(isl::checked::multi_union_pw_aff schedule) const; + inline isl::checked::schedule_node insert_sequence(isl::checked::union_set_list filters) const; + inline isl::checked::schedule_node insert_set(isl::checked::union_set_list filters) const; + inline boolean is_equal(const isl::checked::schedule_node &node2) const; + inline boolean is_subtree_anchored() const; + inline isl::checked::schedule_node map_descendant_bottom_up(const std::function &fn) const; + inline class size n_children() const; + inline isl::checked::schedule_node next_sibling() const; + inline isl::checked::schedule_node order_after(isl::checked::union_set filter) const; + inline isl::checked::schedule_node order_before(isl::checked::union_set filter) const; + inline isl::checked::schedule_node parent() const; + inline isl::checked::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const; + inline isl::checked::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const; + inline isl::checked::union_map prefix_schedule_union_map() const; + inline isl::checked::union_map get_prefix_schedule_union_map() const; + inline isl::checked::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const; + inline isl::checked::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const; + inline isl::checked::schedule_node previous_sibling() const; + inline isl::checked::schedule_node root() const; + inline isl::checked::schedule schedule() const; + inline isl::checked::schedule get_schedule() const; + inline isl::checked::schedule_node shared_ancestor(const isl::checked::schedule_node &node2) const; + inline isl::checked::schedule_node get_shared_ancestor(const isl::checked::schedule_node &node2) const; + inline class size tree_depth() const; + inline class size get_tree_depth() const; +}; + +// declarations for isl::schedule_node_band + +class schedule_node_band : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_band schedule_node::as() const; + static const auto type = isl_schedule_node_band; + + protected: + inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_band(); + inline /* implicit */ schedule_node_band(const schedule_node_band &obj); + inline schedule_node_band &operator=(schedule_node_band obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_set ast_build_options() const; + inline isl::checked::union_set get_ast_build_options() const; + inline isl::checked::set ast_isolate_option() const; + inline isl::checked::set get_ast_isolate_option() const; + inline boolean member_get_coincident(int pos) const; + inline schedule_node_band member_set_coincident(int pos, int coincident) const; + inline schedule_node_band mod(isl::checked::multi_val mv) const; + inline class size n_member() const; + inline isl::checked::multi_union_pw_aff partial_schedule() const; + inline isl::checked::multi_union_pw_aff get_partial_schedule() const; + inline boolean permutable() const; + inline boolean get_permutable() const; + inline schedule_node_band scale(isl::checked::multi_val mv) const; + inline schedule_node_band scale_down(isl::checked::multi_val mv) const; + inline schedule_node_band set_ast_build_options(isl::checked::union_set options) const; + inline schedule_node_band set_permutable(int permutable) const; + inline schedule_node_band shift(isl::checked::multi_union_pw_aff shift) const; + inline schedule_node_band split(int pos) const; + inline schedule_node_band tile(isl::checked::multi_val sizes) const; + inline schedule_node_band member_set_ast_loop_default(int pos) const; + inline schedule_node_band member_set_ast_loop_atomic(int pos) const; + inline schedule_node_band member_set_ast_loop_unroll(int pos) const; + inline schedule_node_band member_set_ast_loop_separate(int pos) const; +}; + +// declarations for isl::schedule_node_context + +class schedule_node_context : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_context schedule_node::as() const; + static const auto type = isl_schedule_node_context; + + protected: + inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_context(); + inline /* implicit */ schedule_node_context(const schedule_node_context &obj); + inline schedule_node_context &operator=(schedule_node_context obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::set context() const; + inline isl::checked::set get_context() const; +}; + +// declarations for isl::schedule_node_domain + +class schedule_node_domain : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_domain schedule_node::as() const; + static const auto type = isl_schedule_node_domain; + + protected: + inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_domain(); + inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj); + inline schedule_node_domain &operator=(schedule_node_domain obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_set domain() const; + inline isl::checked::union_set get_domain() const; +}; + +// declarations for isl::schedule_node_expansion + +class schedule_node_expansion : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_expansion schedule_node::as() const; + static const auto type = isl_schedule_node_expansion; + + protected: + inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_expansion(); + inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj); + inline schedule_node_expansion &operator=(schedule_node_expansion obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_pw_multi_aff contraction() const; + inline isl::checked::union_pw_multi_aff get_contraction() const; + inline isl::checked::union_map expansion() const; + inline isl::checked::union_map get_expansion() const; +}; + +// declarations for isl::schedule_node_extension + +class schedule_node_extension : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_extension schedule_node::as() const; + static const auto type = isl_schedule_node_extension; + + protected: + inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_extension(); + inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj); + inline schedule_node_extension &operator=(schedule_node_extension obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_map extension() const; + inline isl::checked::union_map get_extension() const; +}; + +// declarations for isl::schedule_node_filter + +class schedule_node_filter : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_filter schedule_node::as() const; + static const auto type = isl_schedule_node_filter; + + protected: + inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_filter(); + inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj); + inline schedule_node_filter &operator=(schedule_node_filter obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_set filter() const; + inline isl::checked::union_set get_filter() const; +}; + +// declarations for isl::schedule_node_guard + +class schedule_node_guard : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_guard schedule_node::as() const; + static const auto type = isl_schedule_node_guard; + + protected: + inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_guard(); + inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj); + inline schedule_node_guard &operator=(schedule_node_guard obj); + inline isl::checked::ctx ctx() const; + + inline isl::checked::set guard() const; + inline isl::checked::set get_guard() const; +}; + +// declarations for isl::schedule_node_leaf + +class schedule_node_leaf : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_leaf schedule_node::as() const; + static const auto type = isl_schedule_node_leaf; + + protected: + inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_leaf(); + inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj); + inline schedule_node_leaf &operator=(schedule_node_leaf obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_mark + +class schedule_node_mark : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_mark schedule_node::as() const; + static const auto type = isl_schedule_node_mark; + + protected: + inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_mark(); + inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj); + inline schedule_node_mark &operator=(schedule_node_mark obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_sequence + +class schedule_node_sequence : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_sequence schedule_node::as() const; + static const auto type = isl_schedule_node_sequence; + + protected: + inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_sequence(); + inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj); + inline schedule_node_sequence &operator=(schedule_node_sequence obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_set + +class schedule_node_set : public schedule_node { + template + friend boolean schedule_node::isa() const; + friend schedule_node_set schedule_node::as() const; + static const auto type = isl_schedule_node_set; + + protected: + inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_set(); + inline /* implicit */ schedule_node_set(const schedule_node_set &obj); + inline schedule_node_set &operator=(schedule_node_set obj); + inline isl::checked::ctx ctx() const; + +}; + +// declarations for isl::set +inline set manage(__isl_take isl_set *ptr); +inline set manage_copy(__isl_keep isl_set *ptr); + +class set { + friend inline set manage(__isl_take isl_set *ptr); + friend inline set manage_copy(__isl_keep isl_set *ptr); + + protected: + isl_set *ptr = nullptr; + + inline explicit set(__isl_take isl_set *ptr); + + public: + inline /* implicit */ set(); + inline /* implicit */ set(const set &obj); + inline /* implicit */ set(isl::checked::basic_set bset); + inline /* implicit */ set(isl::checked::point pnt); + inline explicit set(isl::checked::ctx ctx, const std::string &str); + inline set &operator=(set obj); + inline ~set(); + inline __isl_give isl_set *copy() const &; + inline __isl_give isl_set *copy() && = delete; + inline __isl_keep isl_set *get() const; + inline __isl_give isl_set *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::basic_set affine_hull() const; + inline isl::checked::set apply(isl::checked::map map) const; + inline isl::checked::union_set apply(const isl::checked::union_map &umap) const; + inline isl::checked::set apply(const isl::checked::basic_map &map) const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::set as_set() const; + inline isl::checked::set bind(isl::checked::multi_id tuple) const; + inline isl::checked::set coalesce() const; + inline isl::checked::set complement() const; + inline isl::checked::union_set compute_divs() const; + inline isl::checked::set detect_equalities() const; + inline isl::checked::val dim_max_val(int pos) const; + inline isl::checked::val dim_min_val(int pos) const; + inline isl::checked::set drop_unused_params() const; + static inline isl::checked::set empty(isl::checked::space space); + inline boolean every_set(const std::function &test) const; + inline isl::checked::set extract_set(const isl::checked::space &space) const; + inline isl::checked::set flatten() const; + inline stat foreach_basic_set(const std::function &fn) const; + inline stat foreach_point(const std::function &fn) const; + inline stat foreach_set(const std::function &fn) const; + inline isl::checked::set gist(isl::checked::set context) const; + inline isl::checked::union_set gist(const isl::checked::union_set &context) const; + inline isl::checked::set gist(const isl::checked::basic_set &context) const; + inline isl::checked::set gist(const isl::checked::point &context) const; + inline isl::checked::set gist_params(isl::checked::set context) const; + inline isl::checked::map identity() const; + inline isl::checked::pw_aff indicator_function() const; + inline isl::checked::map insert_domain(isl::checked::space domain) const; + inline isl::checked::set intersect(isl::checked::set set2) const; + inline isl::checked::union_set intersect(const isl::checked::union_set &uset2) const; + inline isl::checked::set intersect(const isl::checked::basic_set &set2) const; + inline isl::checked::set intersect(const isl::checked::point &set2) const; + inline isl::checked::set intersect_params(isl::checked::set params) const; + inline boolean involves_locals() const; + inline boolean is_disjoint(const isl::checked::set &set2) const; + inline boolean is_disjoint(const isl::checked::union_set &uset2) const; + inline boolean is_disjoint(const isl::checked::basic_set &set2) const; + inline boolean is_disjoint(const isl::checked::point &set2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::set &set2) const; + inline boolean is_equal(const isl::checked::union_set &uset2) const; + inline boolean is_equal(const isl::checked::basic_set &set2) const; + inline boolean is_equal(const isl::checked::point &set2) const; + inline boolean is_singleton() const; + inline boolean is_strict_subset(const isl::checked::set &set2) const; + inline boolean is_strict_subset(const isl::checked::union_set &uset2) const; + inline boolean is_strict_subset(const isl::checked::basic_set &set2) const; + inline boolean is_strict_subset(const isl::checked::point &set2) const; + inline boolean is_subset(const isl::checked::set &set2) const; + inline boolean is_subset(const isl::checked::union_set &uset2) const; + inline boolean is_subset(const isl::checked::basic_set &set2) const; + inline boolean is_subset(const isl::checked::point &set2) const; + inline boolean is_wrapping() const; + inline boolean isa_set() const; + inline isl::checked::fixed_box lattice_tile() const; + inline isl::checked::fixed_box get_lattice_tile() const; + inline isl::checked::set lexmax() const; + inline isl::checked::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::checked::set lexmin() const; + inline isl::checked::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::checked::set lower_bound(isl::checked::multi_pw_aff lower) const; + inline isl::checked::set lower_bound(isl::checked::multi_val lower) const; + inline isl::checked::multi_pw_aff max_multi_pw_aff() const; + inline isl::checked::val max_val(const isl::checked::aff &obj) const; + inline isl::checked::multi_pw_aff min_multi_pw_aff() const; + inline isl::checked::val min_val(const isl::checked::aff &obj) const; + inline class size n_basic_set() const; + inline isl::checked::pw_aff param_pw_aff_on_domain(isl::checked::id id) const; + inline isl::checked::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline isl::checked::set params() const; + inline isl::checked::multi_val plain_multi_val_if_fixed() const; + inline isl::checked::multi_val get_plain_multi_val_if_fixed() const; + inline isl::checked::basic_set polyhedral_hull() const; + inline isl::checked::set preimage(isl::checked::multi_aff ma) const; + inline isl::checked::set preimage(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::set preimage(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_set preimage(const isl::checked::union_pw_multi_aff &upma) const; + inline isl::checked::set product(isl::checked::set set2) const; + inline isl::checked::set project_out_all_params() const; + inline isl::checked::set project_out_param(isl::checked::id id) const; + inline isl::checked::set project_out_param(const std::string &id) const; + inline isl::checked::set project_out_param(isl::checked::id_list list) const; + inline isl::checked::pw_aff pw_aff_on_domain(isl::checked::val v) const; + inline isl::checked::pw_aff pw_aff_on_domain(long v) const; + inline isl::checked::pw_multi_aff pw_multi_aff_on_domain(isl::checked::multi_val mv) const; + inline isl::checked::basic_set sample() const; + inline isl::checked::point sample_point() const; + inline isl::checked::set_list set_list() const; + inline isl::checked::fixed_box simple_fixed_box_hull() const; + inline isl::checked::fixed_box get_simple_fixed_box_hull() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::val stride(int pos) const; + inline isl::checked::val get_stride(int pos) const; + inline isl::checked::set subtract(isl::checked::set set2) const; + inline isl::checked::union_set subtract(const isl::checked::union_set &uset2) const; + inline isl::checked::set subtract(const isl::checked::basic_set &set2) const; + inline isl::checked::set subtract(const isl::checked::point &set2) const; + inline isl::checked::set_list to_list() const; + inline isl::checked::union_set to_union_set() const; + inline isl::checked::map translation() const; + inline class size tuple_dim() const; + inline isl::checked::set unbind_params(isl::checked::multi_id tuple) const; + inline isl::checked::map unbind_params_insert_domain(isl::checked::multi_id domain) const; + inline isl::checked::set unite(isl::checked::set set2) const; + inline isl::checked::union_set unite(const isl::checked::union_set &uset2) const; + inline isl::checked::set unite(const isl::checked::basic_set &set2) const; + inline isl::checked::set unite(const isl::checked::point &set2) const; + static inline isl::checked::set universe(isl::checked::space space); + inline isl::checked::basic_set unshifted_simple_hull() const; + inline isl::checked::map unwrap() const; + inline isl::checked::set upper_bound(isl::checked::multi_pw_aff upper) const; + inline isl::checked::set upper_bound(isl::checked::multi_val upper) const; + inline isl::checked::set wrapped_reverse() const; +}; + +// declarations for isl::set_list +inline set_list manage(__isl_take isl_set_list *ptr); +inline set_list manage_copy(__isl_keep isl_set_list *ptr); + +class set_list { + friend inline set_list manage(__isl_take isl_set_list *ptr); + friend inline set_list manage_copy(__isl_keep isl_set_list *ptr); + + protected: + isl_set_list *ptr = nullptr; + + inline explicit set_list(__isl_take isl_set_list *ptr); + + public: + inline /* implicit */ set_list(); + inline /* implicit */ set_list(const set_list &obj); + inline explicit set_list(isl::checked::ctx ctx, int n); + inline explicit set_list(isl::checked::set el); + inline explicit set_list(isl::checked::ctx ctx, const std::string &str); + inline set_list &operator=(set_list obj); + inline ~set_list(); + inline __isl_give isl_set_list *copy() const &; + inline __isl_give isl_set_list *copy() && = delete; + inline __isl_keep isl_set_list *get() const; + inline __isl_give isl_set_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::set_list add(isl::checked::set el) const; + inline isl::checked::set at(int index) const; + inline isl::checked::set get_at(int index) const; + inline isl::checked::set_list clear() const; + inline isl::checked::set_list concat(isl::checked::set_list list2) const; + inline isl::checked::set_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::set_list insert(unsigned int pos, isl::checked::set el) const; + inline isl::checked::set_list set_at(int index, isl::checked::set el) const; + inline class size size() const; +}; + +// declarations for isl::space +inline space manage(__isl_take isl_space *ptr); +inline space manage_copy(__isl_keep isl_space *ptr); + +class space { + friend inline space manage(__isl_take isl_space *ptr); + friend inline space manage_copy(__isl_keep isl_space *ptr); + + protected: + isl_space *ptr = nullptr; + + inline explicit space(__isl_take isl_space *ptr); + + public: + inline /* implicit */ space(); + inline /* implicit */ space(const space &obj); + inline explicit space(isl::checked::ctx ctx, const std::string &str); + inline space &operator=(space obj); + inline ~space(); + inline __isl_give isl_space *copy() const &; + inline __isl_give isl_space *copy() && = delete; + inline __isl_keep isl_space *get() const; + inline __isl_give isl_space *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::space add_named_tuple(isl::checked::id tuple_id, unsigned int dim) const; + inline isl::checked::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const; + inline isl::checked::space add_param(isl::checked::id id) const; + inline isl::checked::space add_param(const std::string &id) const; + inline isl::checked::space add_unnamed_tuple(unsigned int dim) const; + inline isl::checked::space curry() const; + inline isl::checked::space domain() const; + inline isl::checked::multi_aff domain_map_multi_aff() const; + inline isl::checked::pw_multi_aff domain_map_pw_multi_aff() const; + inline isl::checked::space domain_reverse() const; + inline isl::checked::id domain_tuple_id() const; + inline isl::checked::id get_domain_tuple_id() const; + inline isl::checked::space drop_all_params() const; + inline isl::checked::space flatten_domain() const; + inline isl::checked::space flatten_range() const; + inline boolean has_domain_tuple_id() const; + inline boolean has_range_tuple_id() const; + inline isl::checked::multi_aff identity_multi_aff_on_domain() const; + inline isl::checked::multi_pw_aff identity_multi_pw_aff_on_domain() const; + inline isl::checked::pw_multi_aff identity_pw_multi_aff_on_domain() const; + inline boolean is_equal(const isl::checked::space &space2) const; + inline boolean is_wrapping() const; + inline isl::checked::space map_from_set() const; + inline isl::checked::multi_aff multi_aff(isl::checked::aff_list list) const; + inline isl::checked::multi_aff multi_aff_on_domain(isl::checked::multi_val mv) const; + inline isl::checked::multi_id multi_id(isl::checked::id_list list) const; + inline isl::checked::multi_pw_aff multi_pw_aff(isl::checked::pw_aff_list list) const; + inline isl::checked::multi_union_pw_aff multi_union_pw_aff(isl::checked::union_pw_aff_list list) const; + inline isl::checked::multi_val multi_val(isl::checked::val_list list) const; + inline isl::checked::aff param_aff_on_domain(isl::checked::id id) const; + inline isl::checked::aff param_aff_on_domain(const std::string &id) const; + inline isl::checked::space params() const; + inline isl::checked::space product(isl::checked::space right) const; + inline isl::checked::space range() const; + inline isl::checked::multi_aff range_map_multi_aff() const; + inline isl::checked::pw_multi_aff range_map_pw_multi_aff() const; + inline isl::checked::space range_reverse() const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::id get_range_tuple_id() const; + inline isl::checked::space reverse() const; + inline isl::checked::space set_domain_tuple(isl::checked::id id) const; + inline isl::checked::space set_domain_tuple(const std::string &id) const; + inline isl::checked::space set_range_tuple(isl::checked::id id) const; + inline isl::checked::space set_range_tuple(const std::string &id) const; + inline isl::checked::space uncurry() const; + static inline isl::checked::space unit(isl::checked::ctx ctx); + inline isl::checked::map universe_map() const; + inline isl::checked::set universe_set() const; + inline isl::checked::space unwrap() const; + inline isl::checked::space wrap() const; + inline isl::checked::space wrapped_reverse() const; + inline isl::checked::aff zero_aff_on_domain() const; + inline isl::checked::multi_aff zero_multi_aff() const; + inline isl::checked::multi_pw_aff zero_multi_pw_aff() const; + inline isl::checked::multi_union_pw_aff zero_multi_union_pw_aff() const; + inline isl::checked::multi_val zero_multi_val() const; +}; + +// declarations for isl::union_access_info +inline union_access_info manage(__isl_take isl_union_access_info *ptr); +inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); + +class union_access_info { + friend inline union_access_info manage(__isl_take isl_union_access_info *ptr); + friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); + + protected: + isl_union_access_info *ptr = nullptr; + + inline explicit union_access_info(__isl_take isl_union_access_info *ptr); + + public: + inline /* implicit */ union_access_info(); + inline /* implicit */ union_access_info(const union_access_info &obj); + inline explicit union_access_info(isl::checked::union_map sink); + inline union_access_info &operator=(union_access_info obj); + inline ~union_access_info(); + inline __isl_give isl_union_access_info *copy() const &; + inline __isl_give isl_union_access_info *copy() && = delete; + inline __isl_keep isl_union_access_info *get() const; + inline __isl_give isl_union_access_info *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_flow compute_flow() const; + inline isl::checked::union_access_info set_kill(isl::checked::union_map kill) const; + inline isl::checked::union_access_info set_may_source(isl::checked::union_map may_source) const; + inline isl::checked::union_access_info set_must_source(isl::checked::union_map must_source) const; + inline isl::checked::union_access_info set_schedule(isl::checked::schedule schedule) const; + inline isl::checked::union_access_info set_schedule_map(isl::checked::union_map schedule_map) const; +}; + +// declarations for isl::union_flow +inline union_flow manage(__isl_take isl_union_flow *ptr); +inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); + +class union_flow { + friend inline union_flow manage(__isl_take isl_union_flow *ptr); + friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); + + protected: + isl_union_flow *ptr = nullptr; + + inline explicit union_flow(__isl_take isl_union_flow *ptr); + + public: + inline /* implicit */ union_flow(); + inline /* implicit */ union_flow(const union_flow &obj); + inline union_flow &operator=(union_flow obj); + inline ~union_flow(); + inline __isl_give isl_union_flow *copy() const &; + inline __isl_give isl_union_flow *copy() && = delete; + inline __isl_keep isl_union_flow *get() const; + inline __isl_give isl_union_flow *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_map full_may_dependence() const; + inline isl::checked::union_map get_full_may_dependence() const; + inline isl::checked::union_map full_must_dependence() const; + inline isl::checked::union_map get_full_must_dependence() const; + inline isl::checked::union_map may_dependence() const; + inline isl::checked::union_map get_may_dependence() const; + inline isl::checked::union_map may_no_source() const; + inline isl::checked::union_map get_may_no_source() const; + inline isl::checked::union_map must_dependence() const; + inline isl::checked::union_map get_must_dependence() const; + inline isl::checked::union_map must_no_source() const; + inline isl::checked::union_map get_must_no_source() const; +}; + +// declarations for isl::union_map +inline union_map manage(__isl_take isl_union_map *ptr); +inline union_map manage_copy(__isl_keep isl_union_map *ptr); + +class union_map { + friend inline union_map manage(__isl_take isl_union_map *ptr); + friend inline union_map manage_copy(__isl_keep isl_union_map *ptr); + + protected: + isl_union_map *ptr = nullptr; + + inline explicit union_map(__isl_take isl_union_map *ptr); + + public: + inline /* implicit */ union_map(); + inline /* implicit */ union_map(const union_map &obj); + inline /* implicit */ union_map(isl::checked::basic_map bmap); + inline /* implicit */ union_map(isl::checked::map map); + inline explicit union_map(isl::checked::ctx ctx, const std::string &str); + inline union_map &operator=(union_map obj); + inline ~union_map(); + inline __isl_give isl_union_map *copy() const &; + inline __isl_give isl_union_map *copy() && = delete; + inline __isl_keep isl_union_map *get() const; + inline __isl_give isl_union_map *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_map affine_hull() const; + inline isl::checked::union_map apply_domain(isl::checked::union_map umap2) const; + inline isl::checked::union_map apply_range(isl::checked::union_map umap2) const; + inline isl::checked::map as_map() const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::checked::union_set bind_range(isl::checked::multi_id tuple) const; + inline isl::checked::union_map coalesce() const; + inline isl::checked::union_map compute_divs() const; + inline isl::checked::union_map curry() const; + inline isl::checked::union_set deltas() const; + inline isl::checked::union_map detect_equalities() const; + inline isl::checked::union_set domain() const; + inline isl::checked::union_map domain_factor_domain() const; + inline isl::checked::union_map domain_factor_range() const; + inline isl::checked::union_map domain_map() const; + inline isl::checked::union_pw_multi_aff domain_map_union_pw_multi_aff() const; + inline isl::checked::union_map domain_product(isl::checked::union_map umap2) const; + inline isl::checked::union_map domain_reverse() const; + inline isl::checked::union_map drop_unused_params() const; + static inline isl::checked::union_map empty(isl::checked::ctx ctx); + inline isl::checked::union_map eq_at(isl::checked::multi_union_pw_aff mupa) const; + inline boolean every_map(const std::function &test) const; + inline isl::checked::map extract_map(isl::checked::space space) const; + inline isl::checked::union_map factor_domain() const; + inline isl::checked::union_map factor_range() const; + inline isl::checked::union_map fixed_power(isl::checked::val exp) const; + inline isl::checked::union_map fixed_power(long exp) const; + inline stat foreach_map(const std::function &fn) const; + static inline isl::checked::union_map from(isl::checked::multi_union_pw_aff mupa); + static inline isl::checked::union_map from(isl::checked::union_pw_multi_aff upma); + static inline isl::checked::union_map from_domain(isl::checked::union_set uset); + static inline isl::checked::union_map from_domain_and_range(isl::checked::union_set domain, isl::checked::union_set range); + static inline isl::checked::union_map from_range(isl::checked::union_set uset); + inline isl::checked::union_map gist(isl::checked::union_map context) const; + inline isl::checked::union_map gist_domain(isl::checked::union_set uset) const; + inline isl::checked::union_map gist_params(isl::checked::set set) const; + inline isl::checked::union_map gist_range(isl::checked::union_set uset) const; + inline isl::checked::union_map intersect(isl::checked::union_map umap2) const; + inline isl::checked::union_map intersect_domain(isl::checked::space space) const; + inline isl::checked::union_map intersect_domain(isl::checked::union_set uset) const; + inline isl::checked::union_map intersect_domain_factor_domain(isl::checked::union_map factor) const; + inline isl::checked::union_map intersect_domain_factor_range(isl::checked::union_map factor) const; + inline isl::checked::union_map intersect_domain_wrapped_domain(isl::checked::union_set domain) const; + inline isl::checked::union_map intersect_params(isl::checked::set set) const; + inline isl::checked::union_map intersect_range(isl::checked::space space) const; + inline isl::checked::union_map intersect_range(isl::checked::union_set uset) const; + inline isl::checked::union_map intersect_range_factor_domain(isl::checked::union_map factor) const; + inline isl::checked::union_map intersect_range_factor_range(isl::checked::union_map factor) const; + inline isl::checked::union_map intersect_range_wrapped_domain(isl::checked::union_set domain) const; + inline boolean is_bijective() const; + inline boolean is_disjoint(const isl::checked::union_map &umap2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::union_map &umap2) const; + inline boolean is_injective() const; + inline boolean is_single_valued() const; + inline boolean is_strict_subset(const isl::checked::union_map &umap2) const; + inline boolean is_subset(const isl::checked::union_map &umap2) const; + inline boolean isa_map() const; + inline isl::checked::union_map lexmax() const; + inline isl::checked::union_map lexmin() const; + inline isl::checked::map_list map_list() const; + inline isl::checked::map_list get_map_list() const; + inline isl::checked::set params() const; + inline isl::checked::union_map polyhedral_hull() const; + inline isl::checked::union_map preimage_domain(isl::checked::multi_aff ma) const; + inline isl::checked::union_map preimage_domain(isl::checked::multi_pw_aff mpa) const; + inline isl::checked::union_map preimage_domain(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_map preimage_domain(isl::checked::union_pw_multi_aff upma) const; + inline isl::checked::union_map preimage_range(isl::checked::multi_aff ma) const; + inline isl::checked::union_map preimage_range(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_map preimage_range(isl::checked::union_pw_multi_aff upma) const; + inline isl::checked::union_map product(isl::checked::union_map umap2) const; + inline isl::checked::union_map project_out_all_params() const; + inline isl::checked::union_map project_out_param(isl::checked::id id) const; + inline isl::checked::union_map project_out_param(const std::string &id) const; + inline isl::checked::union_map project_out_param(isl::checked::id_list list) const; + inline isl::checked::union_set range() const; + inline isl::checked::union_map range_factor_domain() const; + inline isl::checked::union_map range_factor_range() const; + inline isl::checked::union_map range_map() const; + inline isl::checked::union_map range_product(isl::checked::union_map umap2) const; + inline isl::checked::union_map range_reverse() const; + inline isl::checked::union_map reverse() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::union_map subtract(isl::checked::union_map umap2) const; + inline isl::checked::union_map subtract_domain(isl::checked::union_set dom) const; + inline isl::checked::union_map subtract_range(isl::checked::union_set dom) const; + inline isl::checked::union_map uncurry() const; + inline isl::checked::union_map unite(isl::checked::union_map umap2) const; + inline isl::checked::union_map universe() const; + inline isl::checked::union_set wrap() const; + inline isl::checked::union_map zip() const; +}; + +// declarations for isl::union_pw_aff +inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); +inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); + +class union_pw_aff { + friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); + friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); + + protected: + isl_union_pw_aff *ptr = nullptr; + + inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr); + + public: + inline /* implicit */ union_pw_aff(); + inline /* implicit */ union_pw_aff(const union_pw_aff &obj); + inline /* implicit */ union_pw_aff(isl::checked::aff aff); + inline /* implicit */ union_pw_aff(isl::checked::pw_aff pa); + inline explicit union_pw_aff(isl::checked::ctx ctx, const std::string &str); + inline union_pw_aff &operator=(union_pw_aff obj); + inline ~union_pw_aff(); + inline __isl_give isl_union_pw_aff *copy() const &; + inline __isl_give isl_union_pw_aff *copy() && = delete; + inline __isl_keep isl_union_pw_aff *get() const; + inline __isl_give isl_union_pw_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::multi_union_pw_aff add(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::union_pw_aff add(isl::checked::union_pw_aff upa2) const; + inline isl::checked::union_pw_multi_aff add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::union_pw_aff add(const isl::checked::aff &upa2) const; + inline isl::checked::union_pw_aff add(const isl::checked::pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff apply(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::union_map as_union_map() const; + inline isl::checked::union_pw_aff at(int pos) const; + inline isl::checked::union_set bind(const isl::checked::multi_id &tuple) const; + inline isl::checked::union_set bind(isl::checked::id id) const; + inline isl::checked::union_set bind(const std::string &id) const; + inline isl::checked::union_pw_aff coalesce() const; + inline isl::checked::union_set domain() const; + inline isl::checked::union_pw_aff drop_unused_params() const; + inline isl::checked::pw_multi_aff extract_pw_multi_aff(const isl::checked::space &space) const; + inline isl::checked::multi_union_pw_aff flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::union_pw_multi_aff flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::union_pw_aff gist(isl::checked::union_set context) const; + inline isl::checked::multi_union_pw_aff gist_params(const isl::checked::set &context) const; + inline boolean has_range_tuple_id() const; + inline isl::checked::union_pw_aff intersect_domain(isl::checked::space space) const; + inline isl::checked::union_pw_aff intersect_domain(isl::checked::union_set uset) const; + inline isl::checked::union_pw_aff intersect_domain_wrapped_domain(isl::checked::union_set uset) const; + inline isl::checked::union_pw_aff intersect_domain_wrapped_range(isl::checked::union_set uset) const; + inline isl::checked::union_pw_aff intersect_params(isl::checked::set set) const; + inline boolean involves_locals() const; + inline boolean involves_nan() const; + inline boolean isa_pw_multi_aff() const; + inline isl::checked::union_pw_aff_list list() const; + inline isl::checked::multi_union_pw_aff neg() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_aff &upa2) const; + inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const; + inline boolean plain_is_equal(const isl::checked::aff &upa2) const; + inline boolean plain_is_equal(const isl::checked::pw_aff &upa2) const; + inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::union_pw_aff pullback(isl::checked::union_pw_multi_aff upma) const; + inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::checked::union_pw_multi_aff range_factor_domain() const; + inline isl::checked::union_pw_multi_aff range_factor_range() const; + inline isl::checked::multi_union_pw_aff range_product(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::union_pw_multi_aff range_product(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::id range_tuple_id() const; + inline isl::checked::multi_union_pw_aff reset_range_tuple_id() const; + inline isl::checked::multi_union_pw_aff scale(const isl::checked::multi_val &mv) const; + inline isl::checked::multi_union_pw_aff scale(const isl::checked::val &v) const; + inline isl::checked::multi_union_pw_aff scale(long v) const; + inline isl::checked::multi_union_pw_aff scale_down(const isl::checked::multi_val &mv) const; + inline isl::checked::multi_union_pw_aff scale_down(const isl::checked::val &v) const; + inline isl::checked::multi_union_pw_aff scale_down(long v) const; + inline isl::checked::multi_union_pw_aff set_at(int pos, const isl::checked::union_pw_aff &el) const; + inline isl::checked::multi_union_pw_aff set_range_tuple(const isl::checked::id &id) const; + inline isl::checked::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline class size size() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::multi_union_pw_aff sub(const isl::checked::multi_union_pw_aff &multi2) const; + inline isl::checked::union_pw_aff sub(isl::checked::union_pw_aff upa2) const; + inline isl::checked::union_pw_multi_aff sub(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::union_pw_aff sub(const isl::checked::aff &upa2) const; + inline isl::checked::union_pw_aff sub(const isl::checked::pw_aff &upa2) const; + inline isl::checked::union_pw_aff subtract_domain(isl::checked::space space) const; + inline isl::checked::union_pw_aff subtract_domain(isl::checked::union_set uset) const; + inline isl::checked::union_pw_aff_list to_list() const; + inline isl::checked::multi_union_pw_aff union_add(const isl::checked::multi_union_pw_aff &mupa2) const; + inline isl::checked::union_pw_aff union_add(isl::checked::union_pw_aff upa2) const; + inline isl::checked::union_pw_multi_aff union_add(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::union_pw_aff union_add(const isl::checked::aff &upa2) const; + inline isl::checked::union_pw_aff union_add(const isl::checked::pw_aff &upa2) const; +}; + +// declarations for isl::union_pw_aff_list +inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); +inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); + +class union_pw_aff_list { + friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); + friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); + + protected: + isl_union_pw_aff_list *ptr = nullptr; + + inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr); + + public: + inline /* implicit */ union_pw_aff_list(); + inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj); + inline explicit union_pw_aff_list(isl::checked::ctx ctx, int n); + inline explicit union_pw_aff_list(isl::checked::union_pw_aff el); + inline explicit union_pw_aff_list(isl::checked::ctx ctx, const std::string &str); + inline union_pw_aff_list &operator=(union_pw_aff_list obj); + inline ~union_pw_aff_list(); + inline __isl_give isl_union_pw_aff_list *copy() const &; + inline __isl_give isl_union_pw_aff_list *copy() && = delete; + inline __isl_keep isl_union_pw_aff_list *get() const; + inline __isl_give isl_union_pw_aff_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_pw_aff_list add(isl::checked::union_pw_aff el) const; + inline isl::checked::union_pw_aff at(int index) const; + inline isl::checked::union_pw_aff get_at(int index) const; + inline isl::checked::union_pw_aff_list clear() const; + inline isl::checked::union_pw_aff_list concat(isl::checked::union_pw_aff_list list2) const; + inline isl::checked::union_pw_aff_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::union_pw_aff_list insert(unsigned int pos, isl::checked::union_pw_aff el) const; + inline isl::checked::union_pw_aff_list set_at(int index, isl::checked::union_pw_aff el) const; + inline class size size() const; +}; + +// declarations for isl::union_pw_multi_aff +inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); +inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); + +class union_pw_multi_aff { + friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); + friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); + + protected: + isl_union_pw_multi_aff *ptr = nullptr; + + inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr); + + public: + inline /* implicit */ union_pw_multi_aff(); + inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj); + inline /* implicit */ union_pw_multi_aff(isl::checked::multi_aff ma); + inline /* implicit */ union_pw_multi_aff(isl::checked::pw_multi_aff pma); + inline /* implicit */ union_pw_multi_aff(isl::checked::union_pw_aff upa); + inline explicit union_pw_multi_aff(isl::checked::ctx ctx, const std::string &str); + inline union_pw_multi_aff &operator=(union_pw_multi_aff obj); + inline ~union_pw_multi_aff(); + inline __isl_give isl_union_pw_multi_aff *copy() const &; + inline __isl_give isl_union_pw_multi_aff *copy() && = delete; + inline __isl_keep isl_union_pw_multi_aff *get() const; + inline __isl_give isl_union_pw_multi_aff *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_pw_multi_aff add(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::union_pw_multi_aff apply(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::checked::pw_multi_aff as_pw_multi_aff() const; + inline isl::checked::union_map as_union_map() const; + inline isl::checked::union_pw_multi_aff coalesce() const; + inline isl::checked::union_set domain() const; + inline isl::checked::union_pw_multi_aff drop_unused_params() const; + static inline isl::checked::union_pw_multi_aff empty(isl::checked::ctx ctx); + inline isl::checked::pw_multi_aff extract_pw_multi_aff(isl::checked::space space) const; + inline isl::checked::union_pw_multi_aff flat_range_product(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::union_pw_multi_aff gist(isl::checked::union_set context) const; + inline isl::checked::union_pw_multi_aff intersect_domain(isl::checked::space space) const; + inline isl::checked::union_pw_multi_aff intersect_domain(isl::checked::union_set uset) const; + inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_domain(isl::checked::union_set uset) const; + inline isl::checked::union_pw_multi_aff intersect_domain_wrapped_range(isl::checked::union_set uset) const; + inline isl::checked::union_pw_multi_aff intersect_params(isl::checked::set set) const; + inline boolean involves_locals() const; + inline boolean isa_pw_multi_aff() const; + inline boolean plain_is_empty() const; + inline boolean plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const; + inline isl::checked::union_pw_multi_aff preimage_domain_wrapped_domain(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::union_pw_multi_aff pullback(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::checked::pw_multi_aff_list get_pw_multi_aff_list() const; + inline isl::checked::union_pw_multi_aff range_factor_domain() const; + inline isl::checked::union_pw_multi_aff range_factor_range() const; + inline isl::checked::union_pw_multi_aff range_product(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::union_pw_multi_aff sub(isl::checked::union_pw_multi_aff upma2) const; + inline isl::checked::union_pw_multi_aff subtract_domain(isl::checked::space space) const; + inline isl::checked::union_pw_multi_aff subtract_domain(isl::checked::union_set uset) const; + inline isl::checked::union_pw_multi_aff union_add(isl::checked::union_pw_multi_aff upma2) const; +}; + +// declarations for isl::union_set +inline union_set manage(__isl_take isl_union_set *ptr); +inline union_set manage_copy(__isl_keep isl_union_set *ptr); + +class union_set { + friend inline union_set manage(__isl_take isl_union_set *ptr); + friend inline union_set manage_copy(__isl_keep isl_union_set *ptr); + + protected: + isl_union_set *ptr = nullptr; + + inline explicit union_set(__isl_take isl_union_set *ptr); + + public: + inline /* implicit */ union_set(); + inline /* implicit */ union_set(const union_set &obj); + inline /* implicit */ union_set(isl::checked::basic_set bset); + inline /* implicit */ union_set(isl::checked::point pnt); + inline /* implicit */ union_set(isl::checked::set set); + inline explicit union_set(isl::checked::ctx ctx, const std::string &str); + inline union_set &operator=(union_set obj); + inline ~union_set(); + inline __isl_give isl_union_set *copy() const &; + inline __isl_give isl_union_set *copy() && = delete; + inline __isl_keep isl_union_set *get() const; + inline __isl_give isl_union_set *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_set affine_hull() const; + inline isl::checked::union_set apply(isl::checked::union_map umap) const; + inline isl::checked::set as_set() const; + inline isl::checked::union_set coalesce() const; + inline isl::checked::union_set compute_divs() const; + inline isl::checked::union_set detect_equalities() const; + inline isl::checked::union_set drop_unused_params() const; + static inline isl::checked::union_set empty(isl::checked::ctx ctx); + inline boolean every_set(const std::function &test) const; + inline isl::checked::set extract_set(isl::checked::space space) const; + inline stat foreach_point(const std::function &fn) const; + inline stat foreach_set(const std::function &fn) const; + inline isl::checked::union_set gist(isl::checked::union_set context) const; + inline isl::checked::union_set gist_params(isl::checked::set set) const; + inline isl::checked::union_map identity() const; + inline isl::checked::union_set intersect(isl::checked::union_set uset2) const; + inline isl::checked::union_set intersect_params(isl::checked::set set) const; + inline boolean is_disjoint(const isl::checked::union_set &uset2) const; + inline boolean is_empty() const; + inline boolean is_equal(const isl::checked::union_set &uset2) const; + inline boolean is_strict_subset(const isl::checked::union_set &uset2) const; + inline boolean is_subset(const isl::checked::union_set &uset2) const; + inline boolean isa_set() const; + inline isl::checked::union_set lexmax() const; + inline isl::checked::union_set lexmin() const; + inline isl::checked::set params() const; + inline isl::checked::union_set polyhedral_hull() const; + inline isl::checked::union_set preimage(isl::checked::multi_aff ma) const; + inline isl::checked::union_set preimage(isl::checked::pw_multi_aff pma) const; + inline isl::checked::union_set preimage(isl::checked::union_pw_multi_aff upma) const; + inline isl::checked::union_set project_out_all_params() const; + inline isl::checked::point sample_point() const; + inline isl::checked::set_list set_list() const; + inline isl::checked::set_list get_set_list() const; + inline isl::checked::space space() const; + inline isl::checked::space get_space() const; + inline isl::checked::union_set subtract(isl::checked::union_set uset2) const; + inline isl::checked::union_set_list to_list() const; + inline isl::checked::union_set unite(isl::checked::union_set uset2) const; + inline isl::checked::union_set universe() const; + inline isl::checked::union_map unwrap() const; +}; + +// declarations for isl::union_set_list +inline union_set_list manage(__isl_take isl_union_set_list *ptr); +inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); + +class union_set_list { + friend inline union_set_list manage(__isl_take isl_union_set_list *ptr); + friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); + + protected: + isl_union_set_list *ptr = nullptr; + + inline explicit union_set_list(__isl_take isl_union_set_list *ptr); + + public: + inline /* implicit */ union_set_list(); + inline /* implicit */ union_set_list(const union_set_list &obj); + inline explicit union_set_list(isl::checked::ctx ctx, int n); + inline explicit union_set_list(isl::checked::union_set el); + inline explicit union_set_list(isl::checked::ctx ctx, const std::string &str); + inline union_set_list &operator=(union_set_list obj); + inline ~union_set_list(); + inline __isl_give isl_union_set_list *copy() const &; + inline __isl_give isl_union_set_list *copy() && = delete; + inline __isl_keep isl_union_set_list *get() const; + inline __isl_give isl_union_set_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::union_set_list add(isl::checked::union_set el) const; + inline isl::checked::union_set at(int index) const; + inline isl::checked::union_set get_at(int index) const; + inline isl::checked::union_set_list clear() const; + inline isl::checked::union_set_list concat(isl::checked::union_set_list list2) const; + inline isl::checked::union_set_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::union_set_list insert(unsigned int pos, isl::checked::union_set el) const; + inline isl::checked::union_set_list set_at(int index, isl::checked::union_set el) const; + inline class size size() const; +}; + +// declarations for isl::val +inline val manage(__isl_take isl_val *ptr); +inline val manage_copy(__isl_keep isl_val *ptr); + +class val { + friend inline val manage(__isl_take isl_val *ptr); + friend inline val manage_copy(__isl_keep isl_val *ptr); + + protected: + isl_val *ptr = nullptr; + + inline explicit val(__isl_take isl_val *ptr); + + public: + inline /* implicit */ val(); + inline /* implicit */ val(const val &obj); + inline explicit val(isl::checked::ctx ctx, long i); + inline explicit val(isl::checked::ctx ctx, const std::string &str); + inline val &operator=(val obj); + inline ~val(); + inline __isl_give isl_val *copy() const &; + inline __isl_give isl_val *copy() && = delete; + inline __isl_keep isl_val *get() const; + inline __isl_give isl_val *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::val abs() const; + inline boolean abs_eq(const isl::checked::val &v2) const; + inline boolean abs_eq(long v2) const; + inline isl::checked::val add(isl::checked::val v2) const; + inline isl::checked::val add(long v2) const; + inline isl::checked::val ceil() const; + inline int cmp_si(long i) const; + inline long den_si() const; + inline long get_den_si() const; + inline isl::checked::val div(isl::checked::val v2) const; + inline isl::checked::val div(long v2) const; + inline boolean eq(const isl::checked::val &v2) const; + inline boolean eq(long v2) const; + inline isl::checked::val floor() const; + inline isl::checked::val gcd(isl::checked::val v2) const; + inline isl::checked::val gcd(long v2) const; + inline boolean ge(const isl::checked::val &v2) const; + inline boolean ge(long v2) const; + inline boolean gt(const isl::checked::val &v2) const; + inline boolean gt(long v2) const; + static inline isl::checked::val infty(isl::checked::ctx ctx); + inline isl::checked::val inv() const; + inline boolean is_divisible_by(const isl::checked::val &v2) const; + inline boolean is_divisible_by(long v2) const; + inline boolean is_infty() const; + inline boolean is_int() const; + inline boolean is_nan() const; + inline boolean is_neg() const; + inline boolean is_neginfty() const; + inline boolean is_negone() const; + inline boolean is_nonneg() const; + inline boolean is_nonpos() const; + inline boolean is_one() const; + inline boolean is_pos() const; + inline boolean is_rat() const; + inline boolean is_zero() const; + inline boolean le(const isl::checked::val &v2) const; + inline boolean le(long v2) const; + inline boolean lt(const isl::checked::val &v2) const; + inline boolean lt(long v2) const; + inline isl::checked::val max(isl::checked::val v2) const; + inline isl::checked::val max(long v2) const; + inline isl::checked::val min(isl::checked::val v2) const; + inline isl::checked::val min(long v2) const; + inline isl::checked::val mod(isl::checked::val v2) const; + inline isl::checked::val mod(long v2) const; + inline isl::checked::val mul(isl::checked::val v2) const; + inline isl::checked::val mul(long v2) const; + static inline isl::checked::val nan(isl::checked::ctx ctx); + inline boolean ne(const isl::checked::val &v2) const; + inline boolean ne(long v2) const; + inline isl::checked::val neg() const; + static inline isl::checked::val neginfty(isl::checked::ctx ctx); + static inline isl::checked::val negone(isl::checked::ctx ctx); + inline long num_si() const; + inline long get_num_si() const; + static inline isl::checked::val one(isl::checked::ctx ctx); + inline isl::checked::val pow2() const; + inline int sgn() const; + inline isl::checked::val sub(isl::checked::val v2) const; + inline isl::checked::val sub(long v2) const; + inline isl::checked::val_list to_list() const; + inline isl::checked::val trunc() const; + static inline isl::checked::val zero(isl::checked::ctx ctx); +}; + +// declarations for isl::val_list +inline val_list manage(__isl_take isl_val_list *ptr); +inline val_list manage_copy(__isl_keep isl_val_list *ptr); + +class val_list { + friend inline val_list manage(__isl_take isl_val_list *ptr); + friend inline val_list manage_copy(__isl_keep isl_val_list *ptr); + + protected: + isl_val_list *ptr = nullptr; + + inline explicit val_list(__isl_take isl_val_list *ptr); + + public: + inline /* implicit */ val_list(); + inline /* implicit */ val_list(const val_list &obj); + inline explicit val_list(isl::checked::ctx ctx, int n); + inline explicit val_list(isl::checked::val el); + inline explicit val_list(isl::checked::ctx ctx, const std::string &str); + inline val_list &operator=(val_list obj); + inline ~val_list(); + inline __isl_give isl_val_list *copy() const &; + inline __isl_give isl_val_list *copy() && = delete; + inline __isl_keep isl_val_list *get() const; + inline __isl_give isl_val_list *release(); + inline bool is_null() const; + inline isl::checked::ctx ctx() const; + + inline isl::checked::val_list add(isl::checked::val el) const; + inline isl::checked::val_list add(long el) const; + inline isl::checked::val at(int index) const; + inline isl::checked::val get_at(int index) const; + inline isl::checked::val_list clear() const; + inline isl::checked::val_list concat(isl::checked::val_list list2) const; + inline isl::checked::val_list drop(unsigned int first, unsigned int n) const; + inline stat foreach(const std::function &fn) const; + inline stat foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::checked::val_list insert(unsigned int pos, isl::checked::val el) const; + inline isl::checked::val_list insert(unsigned int pos, long el) const; + inline isl::checked::val_list set_at(int index, isl::checked::val el) const; + inline isl::checked::val_list set_at(int index, long el) const; + inline class size size() const; +}; + +// implementations for isl::aff +aff manage(__isl_take isl_aff *ptr) { + return aff(ptr); +} +aff manage_copy(__isl_keep isl_aff *ptr) { + ptr = isl_aff_copy(ptr); + return aff(ptr); +} + +aff::aff(__isl_take isl_aff *ptr) + : ptr(ptr) {} + +aff::aff() + : ptr(nullptr) {} + +aff::aff(const aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +aff::aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +aff &aff::operator=(aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +aff::~aff() { + if (ptr) + isl_aff_free(ptr); +} + +__isl_give isl_aff *aff::copy() const & { + return isl_aff_copy(ptr); +} + +__isl_keep isl_aff *aff::get() const { + return ptr; +} + +__isl_give isl_aff *aff::release() { + isl_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx aff::ctx() const { + return isl::checked::ctx(isl_aff_get_ctx(ptr)); +} + +isl::checked::aff aff::add(isl::checked::aff aff2) const +{ + auto res = isl_aff_add(copy(), aff2.release()); + return manage(res); +} + +isl::checked::multi_aff aff::add(const isl::checked::multi_aff &multi2) const +{ + return isl::checked::multi_aff(*this).add(multi2); +} + +isl::checked::multi_pw_aff aff::add(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).add(multi2); +} + +isl::checked::multi_union_pw_aff aff::add(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).add(multi2); +} + +isl::checked::pw_aff aff::add(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).add(pwaff2); +} + +isl::checked::pw_multi_aff aff::add(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).add(pma2); +} + +isl::checked::union_pw_aff aff::add(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::pw_aff(*this).add(upa2); +} + +isl::checked::union_pw_multi_aff aff::add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).add(upma2); +} + +isl::checked::aff aff::add_constant(isl::checked::val v) const +{ + auto res = isl_aff_add_constant_val(copy(), v.release()); + return manage(res); +} + +isl::checked::aff aff::add_constant(long v) const +{ + return this->add_constant(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_aff aff::add_constant(const isl::checked::multi_val &mv) const +{ + return isl::checked::multi_aff(*this).add_constant(mv); +} + +isl::checked::union_pw_multi_aff aff::apply(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).apply(upma2); +} + +isl::checked::aff aff::as_aff() const +{ + return isl::checked::pw_aff(*this).as_aff(); +} + +isl::checked::map aff::as_map() const +{ + return isl::checked::pw_aff(*this).as_map(); +} + +isl::checked::multi_aff aff::as_multi_aff() const +{ + return isl::checked::pw_aff(*this).as_multi_aff(); +} + +isl::checked::multi_union_pw_aff aff::as_multi_union_pw_aff() const +{ + return isl::checked::pw_aff(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff aff::as_pw_multi_aff() const +{ + return isl::checked::pw_aff(*this).as_pw_multi_aff(); +} + +isl::checked::set aff::as_set() const +{ + return isl::checked::multi_aff(*this).as_set(); +} + +isl::checked::union_map aff::as_union_map() const +{ + return isl::checked::pw_aff(*this).as_union_map(); +} + +isl::checked::aff aff::at(int pos) const +{ + return isl::checked::multi_aff(*this).at(pos); +} + +isl::checked::basic_set aff::bind(isl::checked::id id) const +{ + auto res = isl_aff_bind_id(copy(), id.release()); + return manage(res); +} + +isl::checked::basic_set aff::bind(const std::string &id) const +{ + return this->bind(isl::checked::id(ctx(), id)); +} + +isl::checked::basic_set aff::bind(const isl::checked::multi_id &tuple) const +{ + return isl::checked::multi_aff(*this).bind(tuple); +} + +isl::checked::pw_aff aff::bind_domain(const isl::checked::multi_id &tuple) const +{ + return isl::checked::pw_aff(*this).bind_domain(tuple); +} + +isl::checked::pw_aff aff::bind_domain_wrapped_domain(const isl::checked::multi_id &tuple) const +{ + return isl::checked::pw_aff(*this).bind_domain_wrapped_domain(tuple); +} + +isl::checked::aff aff::ceil() const +{ + auto res = isl_aff_ceil(copy()); + return manage(res); +} + +isl::checked::pw_aff aff::coalesce() const +{ + return isl::checked::pw_aff(*this).coalesce(); +} + +isl::checked::pw_aff aff::cond(const isl::checked::pw_aff &pwaff_true, const isl::checked::pw_aff &pwaff_false) const +{ + return isl::checked::pw_aff(*this).cond(pwaff_true, pwaff_false); +} + +isl::checked::multi_val aff::constant_multi_val() const +{ + return isl::checked::multi_aff(*this).constant_multi_val(); +} + +isl::checked::val aff::constant_val() const +{ + auto res = isl_aff_get_constant_val(get()); + return manage(res); +} + +isl::checked::val aff::get_constant_val() const +{ + return constant_val(); +} + +isl::checked::aff aff::div(isl::checked::aff aff2) const +{ + auto res = isl_aff_div(copy(), aff2.release()); + return manage(res); +} + +isl::checked::pw_aff aff::div(const isl::checked::pw_aff &pa2) const +{ + return isl::checked::pw_aff(*this).div(pa2); +} + +isl::checked::set aff::domain() const +{ + return isl::checked::pw_aff(*this).domain(); +} + +isl::checked::aff aff::domain_reverse() const +{ + auto res = isl_aff_domain_reverse(copy()); + return manage(res); +} + +isl::checked::pw_aff aff::drop_unused_params() const +{ + return isl::checked::pw_aff(*this).drop_unused_params(); +} + +isl::checked::set aff::eq_set(isl::checked::aff aff2) const +{ + auto res = isl_aff_eq_set(copy(), aff2.release()); + return manage(res); +} + +isl::checked::set aff::eq_set(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).eq_set(pwaff2); +} + +isl::checked::val aff::eval(isl::checked::point pnt) const +{ + auto res = isl_aff_eval(copy(), pnt.release()); + return manage(res); +} + +isl::checked::pw_multi_aff aff::extract_pw_multi_aff(const isl::checked::space &space) const +{ + return isl::checked::pw_aff(*this).extract_pw_multi_aff(space); +} + +isl::checked::multi_aff aff::flat_range_product(const isl::checked::multi_aff &multi2) const +{ + return isl::checked::multi_aff(*this).flat_range_product(multi2); +} + +isl::checked::multi_pw_aff aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::multi_union_pw_aff aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::pw_multi_aff aff::flat_range_product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).flat_range_product(pma2); +} + +isl::checked::union_pw_multi_aff aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).flat_range_product(upma2); +} + +isl::checked::aff aff::floor() const +{ + auto res = isl_aff_floor(copy()); + return manage(res); +} + +stat aff::foreach_piece(const std::function &fn) const +{ + return isl::checked::pw_aff(*this).foreach_piece(fn); +} + +isl::checked::set aff::ge_set(isl::checked::aff aff2) const +{ + auto res = isl_aff_ge_set(copy(), aff2.release()); + return manage(res); +} + +isl::checked::set aff::ge_set(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).ge_set(pwaff2); +} + +isl::checked::aff aff::gist(isl::checked::set context) const +{ + auto res = isl_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_pw_aff aff::gist(const isl::checked::union_set &context) const +{ + return isl::checked::pw_aff(*this).gist(context); +} + +isl::checked::aff aff::gist(const isl::checked::basic_set &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::aff aff::gist(const isl::checked::point &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::aff aff::gist_params(isl::checked::set context) const +{ + auto res = isl_aff_gist_params(copy(), context.release()); + return manage(res); +} + +isl::checked::set aff::gt_set(isl::checked::aff aff2) const +{ + auto res = isl_aff_gt_set(copy(), aff2.release()); + return manage(res); +} + +isl::checked::set aff::gt_set(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).gt_set(pwaff2); +} + +boolean aff::has_range_tuple_id() const +{ + return isl::checked::multi_aff(*this).has_range_tuple_id(); +} + +isl::checked::multi_aff aff::identity() const +{ + return isl::checked::multi_aff(*this).identity(); +} + +isl::checked::pw_aff aff::insert_domain(const isl::checked::space &domain) const +{ + return isl::checked::pw_aff(*this).insert_domain(domain); +} + +isl::checked::pw_aff aff::intersect_domain(const isl::checked::set &set) const +{ + return isl::checked::pw_aff(*this).intersect_domain(set); +} + +isl::checked::union_pw_aff aff::intersect_domain(const isl::checked::space &space) const +{ + return isl::checked::pw_aff(*this).intersect_domain(space); +} + +isl::checked::union_pw_aff aff::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_aff(*this).intersect_domain(uset); +} + +isl::checked::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::checked::union_pw_aff aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::checked::pw_aff aff::intersect_params(const isl::checked::set &set) const +{ + return isl::checked::pw_aff(*this).intersect_params(set); +} + +boolean aff::involves_locals() const +{ + return isl::checked::multi_aff(*this).involves_locals(); +} + +boolean aff::involves_nan() const +{ + return isl::checked::multi_aff(*this).involves_nan(); +} + +boolean aff::involves_param(const isl::checked::id &id) const +{ + return isl::checked::pw_aff(*this).involves_param(id); +} + +boolean aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::checked::id(ctx(), id)); +} + +boolean aff::involves_param(const isl::checked::id_list &list) const +{ + return isl::checked::pw_aff(*this).involves_param(list); +} + +boolean aff::is_cst() const +{ + auto res = isl_aff_is_cst(get()); + return manage(res); +} + +boolean aff::isa_aff() const +{ + return isl::checked::pw_aff(*this).isa_aff(); +} + +boolean aff::isa_multi_aff() const +{ + return isl::checked::pw_aff(*this).isa_multi_aff(); +} + +boolean aff::isa_pw_multi_aff() const +{ + return isl::checked::pw_aff(*this).isa_pw_multi_aff(); +} + +isl::checked::set aff::le_set(isl::checked::aff aff2) const +{ + auto res = isl_aff_le_set(copy(), aff2.release()); + return manage(res); +} + +isl::checked::set aff::le_set(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).le_set(pwaff2); +} + +isl::checked::aff_list aff::list() const +{ + return isl::checked::multi_aff(*this).list(); +} + +isl::checked::set aff::lt_set(isl::checked::aff aff2) const +{ + auto res = isl_aff_lt_set(copy(), aff2.release()); + return manage(res); +} + +isl::checked::set aff::lt_set(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).lt_set(pwaff2); +} + +isl::checked::multi_pw_aff aff::max(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).max(multi2); +} + +isl::checked::pw_aff aff::max(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).max(pwaff2); +} + +isl::checked::multi_val aff::max_multi_val() const +{ + return isl::checked::pw_aff(*this).max_multi_val(); +} + +isl::checked::val aff::max_val() const +{ + return isl::checked::pw_aff(*this).max_val(); +} + +isl::checked::multi_pw_aff aff::min(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).min(multi2); +} + +isl::checked::pw_aff aff::min(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).min(pwaff2); +} + +isl::checked::multi_val aff::min_multi_val() const +{ + return isl::checked::pw_aff(*this).min_multi_val(); +} + +isl::checked::val aff::min_val() const +{ + return isl::checked::pw_aff(*this).min_val(); +} + +isl::checked::aff aff::mod(isl::checked::val mod) const +{ + auto res = isl_aff_mod_val(copy(), mod.release()); + return manage(res); +} + +isl::checked::aff aff::mod(long mod) const +{ + return this->mod(isl::checked::val(ctx(), mod)); +} + +isl::checked::aff aff::mul(isl::checked::aff aff2) const +{ + auto res = isl_aff_mul(copy(), aff2.release()); + return manage(res); +} + +isl::checked::pw_aff aff::mul(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).mul(pwaff2); +} + +class size aff::n_piece() const +{ + return isl::checked::pw_aff(*this).n_piece(); +} + +isl::checked::set aff::ne_set(isl::checked::aff aff2) const +{ + auto res = isl_aff_ne_set(copy(), aff2.release()); + return manage(res); +} + +isl::checked::set aff::ne_set(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).ne_set(pwaff2); +} + +isl::checked::aff aff::neg() const +{ + auto res = isl_aff_neg(copy()); + return manage(res); +} + +isl::checked::set aff::params() const +{ + return isl::checked::pw_aff(*this).params(); +} + +boolean aff::plain_is_empty() const +{ + return isl::checked::pw_aff(*this).plain_is_empty(); +} + +boolean aff::plain_is_equal(const isl::checked::aff &aff2) const +{ + auto res = isl_aff_plain_is_equal(get(), aff2.get()); + return manage(res); +} + +boolean aff::plain_is_equal(const isl::checked::multi_aff &multi2) const +{ + return isl::checked::multi_aff(*this).plain_is_equal(multi2); +} + +boolean aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).plain_is_equal(multi2); +} + +boolean aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).plain_is_equal(multi2); +} + +boolean aff::plain_is_equal(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).plain_is_equal(pwaff2); +} + +boolean aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).plain_is_equal(pma2); +} + +boolean aff::plain_is_equal(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::pw_aff(*this).plain_is_equal(upa2); +} + +boolean aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).plain_is_equal(upma2); +} + +isl::checked::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::checked::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::checked::multi_aff aff::product(const isl::checked::multi_aff &multi2) const +{ + return isl::checked::multi_aff(*this).product(multi2); +} + +isl::checked::multi_pw_aff aff::product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).product(multi2); +} + +isl::checked::pw_multi_aff aff::product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).product(pma2); +} + +isl::checked::aff aff::pullback(isl::checked::multi_aff ma) const +{ + auto res = isl_aff_pullback_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::pw_aff aff::pullback(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::pw_aff(*this).pullback(mpa); +} + +isl::checked::pw_aff aff::pullback(const isl::checked::pw_multi_aff &pma) const +{ + return isl::checked::pw_aff(*this).pullback(pma); +} + +isl::checked::union_pw_aff aff::pullback(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::pw_aff(*this).pullback(upma); +} + +isl::checked::aff aff::pullback(const isl::checked::aff &ma) const +{ + return this->pullback(isl::checked::multi_aff(ma)); +} + +isl::checked::pw_multi_aff_list aff::pw_multi_aff_list() const +{ + return isl::checked::pw_aff(*this).pw_multi_aff_list(); +} + +isl::checked::pw_multi_aff aff::range_factor_domain() const +{ + return isl::checked::pw_aff(*this).range_factor_domain(); +} + +isl::checked::pw_multi_aff aff::range_factor_range() const +{ + return isl::checked::pw_aff(*this).range_factor_range(); +} + +isl::checked::multi_aff aff::range_product(const isl::checked::multi_aff &multi2) const +{ + return isl::checked::multi_aff(*this).range_product(multi2); +} + +isl::checked::multi_pw_aff aff::range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).range_product(multi2); +} + +isl::checked::multi_union_pw_aff aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).range_product(multi2); +} + +isl::checked::pw_multi_aff aff::range_product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).range_product(pma2); +} + +isl::checked::union_pw_multi_aff aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).range_product(upma2); +} + +isl::checked::id aff::range_tuple_id() const +{ + return isl::checked::multi_aff(*this).range_tuple_id(); +} + +isl::checked::multi_aff aff::reset_range_tuple_id() const +{ + return isl::checked::multi_aff(*this).reset_range_tuple_id(); +} + +isl::checked::aff aff::scale(isl::checked::val v) const +{ + auto res = isl_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::aff aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_aff aff::scale(const isl::checked::multi_val &mv) const +{ + return isl::checked::multi_aff(*this).scale(mv); +} + +isl::checked::aff aff::scale_down(isl::checked::val v) const +{ + auto res = isl_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::checked::aff aff::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_aff aff::scale_down(const isl::checked::multi_val &mv) const +{ + return isl::checked::multi_aff(*this).scale_down(mv); +} + +isl::checked::multi_aff aff::set_at(int pos, const isl::checked::aff &el) const +{ + return isl::checked::multi_aff(*this).set_at(pos, el); +} + +isl::checked::multi_pw_aff aff::set_at(int pos, const isl::checked::pw_aff &el) const +{ + return isl::checked::pw_aff(*this).set_at(pos, el); +} + +isl::checked::multi_union_pw_aff aff::set_at(int pos, const isl::checked::union_pw_aff &el) const +{ + return isl::checked::pw_aff(*this).set_at(pos, el); +} + +isl::checked::multi_aff aff::set_range_tuple(const isl::checked::id &id) const +{ + return isl::checked::multi_aff(*this).set_range_tuple(id); +} + +isl::checked::multi_aff aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size aff::size() const +{ + return isl::checked::multi_aff(*this).size(); +} + +isl::checked::space aff::space() const +{ + return isl::checked::pw_aff(*this).space(); +} + +isl::checked::aff aff::sub(isl::checked::aff aff2) const +{ + auto res = isl_aff_sub(copy(), aff2.release()); + return manage(res); +} + +isl::checked::multi_aff aff::sub(const isl::checked::multi_aff &multi2) const +{ + return isl::checked::multi_aff(*this).sub(multi2); +} + +isl::checked::multi_pw_aff aff::sub(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).sub(multi2); +} + +isl::checked::multi_union_pw_aff aff::sub(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_aff(*this).sub(multi2); +} + +isl::checked::pw_aff aff::sub(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).sub(pwaff2); +} + +isl::checked::pw_multi_aff aff::sub(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).sub(pma2); +} + +isl::checked::union_pw_aff aff::sub(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::pw_aff(*this).sub(upa2); +} + +isl::checked::union_pw_multi_aff aff::sub(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).sub(upma2); +} + +isl::checked::pw_aff aff::subtract_domain(const isl::checked::set &set) const +{ + return isl::checked::pw_aff(*this).subtract_domain(set); +} + +isl::checked::union_pw_aff aff::subtract_domain(const isl::checked::space &space) const +{ + return isl::checked::pw_aff(*this).subtract_domain(space); +} + +isl::checked::union_pw_aff aff::subtract_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_aff(*this).subtract_domain(uset); +} + +isl::checked::pw_aff aff::tdiv_q(const isl::checked::pw_aff &pa2) const +{ + return isl::checked::pw_aff(*this).tdiv_q(pa2); +} + +isl::checked::pw_aff aff::tdiv_r(const isl::checked::pw_aff &pa2) const +{ + return isl::checked::pw_aff(*this).tdiv_r(pa2); +} + +isl::checked::aff_list aff::to_list() const +{ + auto res = isl_aff_to_list(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff aff::to_multi_pw_aff() const +{ + return isl::checked::multi_aff(*this).to_multi_pw_aff(); +} + +isl::checked::multi_union_pw_aff aff::to_multi_union_pw_aff() const +{ + return isl::checked::multi_aff(*this).to_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff aff::to_pw_multi_aff() const +{ + return isl::checked::multi_aff(*this).to_pw_multi_aff(); +} + +isl::checked::union_pw_aff aff::to_union_pw_aff() const +{ + return isl::checked::pw_aff(*this).to_union_pw_aff(); +} + +isl::checked::union_pw_multi_aff aff::to_union_pw_multi_aff() const +{ + return isl::checked::pw_aff(*this).to_union_pw_multi_aff(); +} + +isl::checked::aff aff::unbind_params_insert_domain(isl::checked::multi_id domain) const +{ + auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::multi_pw_aff aff::union_add(const isl::checked::multi_pw_aff &mpa2) const +{ + return isl::checked::pw_aff(*this).union_add(mpa2); +} + +isl::checked::multi_union_pw_aff aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const +{ + return isl::checked::pw_aff(*this).union_add(mupa2); +} + +isl::checked::pw_aff aff::union_add(const isl::checked::pw_aff &pwaff2) const +{ + return isl::checked::pw_aff(*this).union_add(pwaff2); +} + +isl::checked::pw_multi_aff aff::union_add(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_aff(*this).union_add(pma2); +} + +isl::checked::union_pw_aff aff::union_add(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::pw_aff(*this).union_add(upa2); +} + +isl::checked::union_pw_multi_aff aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_aff(*this).union_add(upma2); +} + +isl::checked::aff aff::zero_on_domain(isl::checked::space space) +{ + auto res = isl_aff_zero_on_domain_space(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const aff &obj) +{ + char *str = isl_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::aff_list +aff_list manage(__isl_take isl_aff_list *ptr) { + return aff_list(ptr); +} +aff_list manage_copy(__isl_keep isl_aff_list *ptr) { + ptr = isl_aff_list_copy(ptr); + return aff_list(ptr); +} + +aff_list::aff_list(__isl_take isl_aff_list *ptr) + : ptr(ptr) {} + +aff_list::aff_list() + : ptr(nullptr) {} + +aff_list::aff_list(const aff_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +aff_list::aff_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +aff_list::aff_list(isl::checked::aff el) +{ + auto res = isl_aff_list_from_aff(el.release()); + ptr = res; +} + +aff_list::aff_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +aff_list &aff_list::operator=(aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +aff_list::~aff_list() { + if (ptr) + isl_aff_list_free(ptr); +} + +__isl_give isl_aff_list *aff_list::copy() const & { + return isl_aff_list_copy(ptr); +} + +__isl_keep isl_aff_list *aff_list::get() const { + return ptr; +} + +__isl_give isl_aff_list *aff_list::release() { + isl_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool aff_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx aff_list::ctx() const { + return isl::checked::ctx(isl_aff_list_get_ctx(ptr)); +} + +isl::checked::aff_list aff_list::add(isl::checked::aff el) const +{ + auto res = isl_aff_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::aff aff_list::at(int index) const +{ + auto res = isl_aff_list_get_at(get(), index); + return manage(res); +} + +isl::checked::aff aff_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::aff_list aff_list::clear() const +{ + auto res = isl_aff_list_clear(copy()); + return manage(res); +} + +isl::checked::aff_list aff_list::concat(isl::checked::aff_list list2) const +{ + auto res = isl_aff_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::aff_list aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_aff_list_drop(copy(), first, n); + return manage(res); +} + +stat aff_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_aff *arg_0, isl_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::aff_list aff_list::insert(unsigned int pos, isl::checked::aff el) const +{ + auto res = isl_aff_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::aff_list aff_list::set_at(int index, isl::checked::aff el) const +{ + auto res = isl_aff_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size aff_list::size() const +{ + auto res = isl_aff_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const aff_list &obj) +{ + char *str = isl_aff_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_build +ast_build manage(__isl_take isl_ast_build *ptr) { + return ast_build(ptr); +} +ast_build manage_copy(__isl_keep isl_ast_build *ptr) { + ptr = isl_ast_build_copy(ptr); + return ast_build(ptr); +} + +ast_build::ast_build(__isl_take isl_ast_build *ptr) + : ptr(ptr) {} + +ast_build::ast_build() + : ptr(nullptr) {} + +ast_build::ast_build(const ast_build &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); + copy_callbacks(obj); +} + +ast_build::ast_build(isl::checked::ctx ctx) +{ + auto res = isl_ast_build_alloc(ctx.release()); + ptr = res; +} + +ast_build &ast_build::operator=(ast_build obj) { + std::swap(this->ptr, obj.ptr); + copy_callbacks(obj); + return *this; +} + +ast_build::~ast_build() { + if (ptr) + isl_ast_build_free(ptr); +} + +__isl_give isl_ast_build *ast_build::copy() const & { + return isl_ast_build_copy(ptr); +} + +__isl_keep isl_ast_build *ast_build::get() const { + return ptr; +} + +__isl_give isl_ast_build *ast_build::release() { + if (at_each_domain_data) + isl_die(ctx().get(), isl_error_invalid, "cannot release object with persistent callbacks", return nullptr); + isl_ast_build *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_build::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx ast_build::ctx() const { + return isl::checked::ctx(isl_ast_build_get_ctx(ptr)); +} + +ast_build &ast_build::copy_callbacks(const ast_build &obj) +{ + at_each_domain_data = obj.at_each_domain_data; + return *this; +} + +isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2) +{ + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage(arg_0), manage_copy(arg_1)); + return ret.release(); +} + +void ast_build::set_at_each_domain_data(const std::function &fn) +{ + at_each_domain_data = std::make_shared(); + at_each_domain_data->func = fn; + ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get()); +} + +isl::checked::ast_build ast_build::set_at_each_domain(const std::function &fn) const +{ + auto copy = *this; + copy.set_at_each_domain_data(fn); + return copy; +} + +isl::checked::ast_expr ast_build::access_from(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release()); + return manage(res); +} + +isl::checked::ast_expr ast_build::access_from(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release()); + return manage(res); +} + +isl::checked::ast_expr ast_build::call_from(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release()); + return manage(res); +} + +isl::checked::ast_expr ast_build::call_from(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release()); + return manage(res); +} + +isl::checked::ast_expr ast_build::expr_from(isl::checked::pw_aff pa) const +{ + auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release()); + return manage(res); +} + +isl::checked::ast_expr ast_build::expr_from(isl::checked::set set) const +{ + auto res = isl_ast_build_expr_from_set(get(), set.release()); + return manage(res); +} + +isl::checked::ast_build ast_build::from_context(isl::checked::set set) +{ + auto res = isl_ast_build_from_context(set.release()); + return manage(res); +} + +isl::checked::ast_node ast_build::node_from(isl::checked::schedule schedule) const +{ + auto res = isl_ast_build_node_from_schedule(get(), schedule.release()); + return manage(res); +} + +isl::checked::ast_node ast_build::node_from_schedule_map(isl::checked::union_map schedule) const +{ + auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release()); + return manage(res); +} + +isl::checked::union_map ast_build::schedule() const +{ + auto res = isl_ast_build_get_schedule(get()); + return manage(res); +} + +isl::checked::union_map ast_build::get_schedule() const +{ + return schedule(); +} + +// implementations for isl::ast_expr +ast_expr manage(__isl_take isl_ast_expr *ptr) { + return ast_expr(ptr); +} +ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) { + ptr = isl_ast_expr_copy(ptr); + return ast_expr(ptr); +} + +ast_expr::ast_expr(__isl_take isl_ast_expr *ptr) + : ptr(ptr) {} + +ast_expr::ast_expr() + : ptr(nullptr) {} + +ast_expr::ast_expr(const ast_expr &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +ast_expr &ast_expr::operator=(ast_expr obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +ast_expr::~ast_expr() { + if (ptr) + isl_ast_expr_free(ptr); +} + +__isl_give isl_ast_expr *ast_expr::copy() const & { + return isl_ast_expr_copy(ptr); +} + +__isl_keep isl_ast_expr *ast_expr::get() const { + return ptr; +} + +__isl_give isl_ast_expr *ast_expr::release() { + isl_ast_expr *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_expr::is_null() const { + return ptr == nullptr; +} + +template +boolean ast_expr::isa_type(T subtype) const +{ + if (is_null()) + return boolean(); + return isl_ast_expr_get_type(get()) == subtype; +} +template +boolean ast_expr::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr::as() const +{ + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); +} + +isl::checked::ctx ast_expr::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +std::string ast_expr::to_C_str() const +{ + auto res = isl_ast_expr_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_id +ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} + +ast_expr_id::ast_expr_id() + : ast_expr() {} + +ast_expr_id::ast_expr_id(const ast_expr_id &obj) + : ast_expr(obj) +{ +} + +ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_id::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +isl::checked::id ast_expr_id::id() const +{ + auto res = isl_ast_expr_id_get_id(get()); + return manage(res); +} + +isl::checked::id ast_expr_id::get_id() const +{ + return id(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_int +ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} + +ast_expr_int::ast_expr_int() + : ast_expr() {} + +ast_expr_int::ast_expr_int(const ast_expr_int &obj) + : ast_expr(obj) +{ +} + +ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_int::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +isl::checked::val ast_expr_int::val() const +{ + auto res = isl_ast_expr_int_get_val(get()); + return manage(res); +} + +isl::checked::val ast_expr_int::get_val() const +{ + return val(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op +ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} + +ast_expr_op::ast_expr_op() + : ast_expr() {} + +ast_expr_op::ast_expr_op(const ast_expr_op &obj) + : ast_expr(obj) +{ +} + +ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +template +boolean ast_expr_op::isa_type(T subtype) const +{ + if (is_null()) + return boolean(); + return isl_ast_expr_op_get_type(get()) == subtype; +} +template +boolean ast_expr_op::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr_op::as() const +{ + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); +} + +isl::checked::ctx ast_expr_op::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +isl::checked::ast_expr ast_expr_op::arg(int pos) const +{ + auto res = isl_ast_expr_op_get_arg(get(), pos); + return manage(res); +} + +isl::checked::ast_expr ast_expr_op::get_arg(int pos) const +{ + return arg(pos); +} + +class size ast_expr_op::n_arg() const +{ + auto res = isl_ast_expr_op_get_n_arg(get()); + return manage(res); +} + +class size ast_expr_op::get_n_arg() const +{ + return n_arg(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_access +ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_access::ast_expr_op_access() + : ast_expr_op() {} + +ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_access::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_add +ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_add::ast_expr_op_add() + : ast_expr_op() {} + +ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_add::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_address_of +ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_address_of::ast_expr_op_address_of() + : ast_expr_op() {} + +ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_address_of::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_and +ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_and::ast_expr_op_and() + : ast_expr_op() {} + +ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_and::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_and_then +ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_and_then::ast_expr_op_and_then() + : ast_expr_op() {} + +ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_and_then::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_call +ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_call::ast_expr_op_call() + : ast_expr_op() {} + +ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_call::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_cond +ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_cond::ast_expr_op_cond() + : ast_expr_op() {} + +ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_cond::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_div +ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_div::ast_expr_op_div() + : ast_expr_op() {} + +ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_div::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_eq +ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_eq::ast_expr_op_eq() + : ast_expr_op() {} + +ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_eq::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_fdiv_q +ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_fdiv_q::ast_expr_op_fdiv_q() + : ast_expr_op() {} + +ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_fdiv_q::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_ge +ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_ge::ast_expr_op_ge() + : ast_expr_op() {} + +ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_ge::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_gt +ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_gt::ast_expr_op_gt() + : ast_expr_op() {} + +ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_gt::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_le +ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_le::ast_expr_op_le() + : ast_expr_op() {} + +ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_le::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_lt +ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_lt::ast_expr_op_lt() + : ast_expr_op() {} + +ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_lt::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_max +ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_max::ast_expr_op_max() + : ast_expr_op() {} + +ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_max::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_member +ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_member::ast_expr_op_member() + : ast_expr_op() {} + +ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_member::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_min +ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_min::ast_expr_op_min() + : ast_expr_op() {} + +ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_min::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_minus +ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_minus::ast_expr_op_minus() + : ast_expr_op() {} + +ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_minus::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_mul +ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_mul::ast_expr_op_mul() + : ast_expr_op() {} + +ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_mul::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_or +ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_or::ast_expr_op_or() + : ast_expr_op() {} + +ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_or::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_or_else +ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_or_else::ast_expr_op_or_else() + : ast_expr_op() {} + +ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_or_else::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_pdiv_q +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q() + : ast_expr_op() {} + +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_pdiv_q::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_pdiv_r +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r() + : ast_expr_op() {} + +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_pdiv_r::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_select +ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_select::ast_expr_op_select() + : ast_expr_op() {} + +ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_select::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_sub +ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_sub::ast_expr_op_sub() + : ast_expr_op() {} + +ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_sub::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_zdiv_r +ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_zdiv_r::ast_expr_op_zdiv_r() + : ast_expr_op() {} + +ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_expr_op_zdiv_r::ctx() const { + return isl::checked::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj) +{ + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node +ast_node manage(__isl_take isl_ast_node *ptr) { + return ast_node(ptr); +} +ast_node manage_copy(__isl_keep isl_ast_node *ptr) { + ptr = isl_ast_node_copy(ptr); + return ast_node(ptr); +} + +ast_node::ast_node(__isl_take isl_ast_node *ptr) + : ptr(ptr) {} + +ast_node::ast_node() + : ptr(nullptr) {} + +ast_node::ast_node(const ast_node &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +ast_node &ast_node::operator=(ast_node obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +ast_node::~ast_node() { + if (ptr) + isl_ast_node_free(ptr); +} + +__isl_give isl_ast_node *ast_node::copy() const & { + return isl_ast_node_copy(ptr); +} + +__isl_keep isl_ast_node *ast_node::get() const { + return ptr; +} + +__isl_give isl_ast_node *ast_node::release() { + isl_ast_node *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_node::is_null() const { + return ptr == nullptr; +} + +template +boolean ast_node::isa_type(T subtype) const +{ + if (is_null()) + return boolean(); + return isl_ast_node_get_type(get()) == subtype; +} +template +boolean ast_node::isa() const +{ + return isa_type(T::type); +} +template +T ast_node::as() const +{ + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); +} + +isl::checked::ctx ast_node::ctx() const { + return isl::checked::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::checked::ast_node ast_node::map_descendant_bottom_up(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_ast_node * { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_ast_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data); + return manage(res); +} + +std::string ast_node::to_C_str() const +{ + auto res = isl_ast_node_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; +} + +isl::checked::ast_node_list ast_node::to_list() const +{ + auto res = isl_ast_node_to_list(copy()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_block +ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_block::ast_node_block() + : ast_node() {} + +ast_node_block::ast_node_block(const ast_node_block &obj) + : ast_node(obj) +{ +} + +ast_node_block::ast_node_block(isl::checked::ast_node_list list) +{ + auto res = isl_ast_node_block_from_children(list.release()); + ptr = res; +} + +ast_node_block &ast_node_block::operator=(ast_node_block obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_node_block::ctx() const { + return isl::checked::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::checked::ast_node_list ast_node_block::children() const +{ + auto res = isl_ast_node_block_get_children(get()); + return manage(res); +} + +isl::checked::ast_node_list ast_node_block::get_children() const +{ + return children(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_for +ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_for::ast_node_for() + : ast_node() {} + +ast_node_for::ast_node_for(const ast_node_for &obj) + : ast_node(obj) +{ +} + +ast_node_for &ast_node_for::operator=(ast_node_for obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_node_for::ctx() const { + return isl::checked::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::checked::ast_node ast_node_for::body() const +{ + auto res = isl_ast_node_for_get_body(get()); + return manage(res); +} + +isl::checked::ast_node ast_node_for::get_body() const +{ + return body(); +} + +isl::checked::ast_expr ast_node_for::cond() const +{ + auto res = isl_ast_node_for_get_cond(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_for::get_cond() const +{ + return cond(); +} + +isl::checked::ast_expr ast_node_for::inc() const +{ + auto res = isl_ast_node_for_get_inc(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_for::get_inc() const +{ + return inc(); +} + +isl::checked::ast_expr ast_node_for::init() const +{ + auto res = isl_ast_node_for_get_init(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_for::get_init() const +{ + return init(); +} + +boolean ast_node_for::is_degenerate() const +{ + auto res = isl_ast_node_for_is_degenerate(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_for::iterator() const +{ + auto res = isl_ast_node_for_get_iterator(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_for::get_iterator() const +{ + return iterator(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_if +ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_if::ast_node_if() + : ast_node() {} + +ast_node_if::ast_node_if(const ast_node_if &obj) + : ast_node(obj) +{ +} + +ast_node_if &ast_node_if::operator=(ast_node_if obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_node_if::ctx() const { + return isl::checked::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::checked::ast_expr ast_node_if::cond() const +{ + auto res = isl_ast_node_if_get_cond(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_if::get_cond() const +{ + return cond(); +} + +isl::checked::ast_node ast_node_if::else_node() const +{ + auto res = isl_ast_node_if_get_else_node(get()); + return manage(res); +} + +isl::checked::ast_node ast_node_if::get_else_node() const +{ + return else_node(); +} + +boolean ast_node_if::has_else_node() const +{ + auto res = isl_ast_node_if_has_else_node(get()); + return manage(res); +} + +isl::checked::ast_node ast_node_if::then_node() const +{ + auto res = isl_ast_node_if_get_then_node(get()); + return manage(res); +} + +isl::checked::ast_node ast_node_if::get_then_node() const +{ + return then_node(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_list +ast_node_list manage(__isl_take isl_ast_node_list *ptr) { + return ast_node_list(ptr); +} +ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) { + ptr = isl_ast_node_list_copy(ptr); + return ast_node_list(ptr); +} + +ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr) + : ptr(ptr) {} + +ast_node_list::ast_node_list() + : ptr(nullptr) {} + +ast_node_list::ast_node_list(const ast_node_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +ast_node_list::ast_node_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_ast_node_list_alloc(ctx.release(), n); + ptr = res; +} + +ast_node_list::ast_node_list(isl::checked::ast_node el) +{ + auto res = isl_ast_node_list_from_ast_node(el.release()); + ptr = res; +} + +ast_node_list &ast_node_list::operator=(ast_node_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +ast_node_list::~ast_node_list() { + if (ptr) + isl_ast_node_list_free(ptr); +} + +__isl_give isl_ast_node_list *ast_node_list::copy() const & { + return isl_ast_node_list_copy(ptr); +} + +__isl_keep isl_ast_node_list *ast_node_list::get() const { + return ptr; +} + +__isl_give isl_ast_node_list *ast_node_list::release() { + isl_ast_node_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_node_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx ast_node_list::ctx() const { + return isl::checked::ctx(isl_ast_node_list_get_ctx(ptr)); +} + +isl::checked::ast_node_list ast_node_list::add(isl::checked::ast_node el) const +{ + auto res = isl_ast_node_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::ast_node ast_node_list::at(int index) const +{ + auto res = isl_ast_node_list_get_at(get(), index); + return manage(res); +} + +isl::checked::ast_node ast_node_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::ast_node_list ast_node_list::clear() const +{ + auto res = isl_ast_node_list_clear(copy()); + return manage(res); +} + +isl::checked::ast_node_list ast_node_list::concat(isl::checked::ast_node_list list2) const +{ + auto res = isl_ast_node_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_ast_node_list_drop(copy(), first, n); + return manage(res); +} + +stat ast_node_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat ast_node_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_ast_node *arg_0, isl_ast_node *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_ast_node_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_ast_node_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::ast_node_list ast_node_list::insert(unsigned int pos, isl::checked::ast_node el) const +{ + auto res = isl_ast_node_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::ast_node_list ast_node_list::set_at(int index, isl::checked::ast_node el) const +{ + auto res = isl_ast_node_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size ast_node_list::size() const +{ + auto res = isl_ast_node_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj) +{ + char *str = isl_ast_node_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_mark +ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_mark::ast_node_mark() + : ast_node() {} + +ast_node_mark::ast_node_mark(const ast_node_mark &obj) + : ast_node(obj) +{ +} + +ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_node_mark::ctx() const { + return isl::checked::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::checked::id ast_node_mark::id() const +{ + auto res = isl_ast_node_mark_get_id(get()); + return manage(res); +} + +isl::checked::id ast_node_mark::get_id() const +{ + return id(); +} + +isl::checked::ast_node ast_node_mark::node() const +{ + auto res = isl_ast_node_mark_get_node(get()); + return manage(res); +} + +isl::checked::ast_node ast_node_mark::get_node() const +{ + return node(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_user +ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_user::ast_node_user() + : ast_node() {} + +ast_node_user::ast_node_user(const ast_node_user &obj) + : ast_node(obj) +{ +} + +ast_node_user::ast_node_user(isl::checked::ast_expr expr) +{ + auto res = isl_ast_node_user_from_expr(expr.release()); + ptr = res; +} + +ast_node_user &ast_node_user::operator=(ast_node_user obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx ast_node_user::ctx() const { + return isl::checked::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::checked::ast_expr ast_node_user::expr() const +{ + auto res = isl_ast_node_user_get_expr(get()); + return manage(res); +} + +isl::checked::ast_expr ast_node_user::get_expr() const +{ + return expr(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj) +{ + char *str = isl_ast_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::basic_map +basic_map manage(__isl_take isl_basic_map *ptr) { + return basic_map(ptr); +} +basic_map manage_copy(__isl_keep isl_basic_map *ptr) { + ptr = isl_basic_map_copy(ptr); + return basic_map(ptr); +} + +basic_map::basic_map(__isl_take isl_basic_map *ptr) + : ptr(ptr) {} + +basic_map::basic_map() + : ptr(nullptr) {} + +basic_map::basic_map(const basic_map &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +basic_map::basic_map(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +basic_map &basic_map::operator=(basic_map obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +basic_map::~basic_map() { + if (ptr) + isl_basic_map_free(ptr); +} + +__isl_give isl_basic_map *basic_map::copy() const & { + return isl_basic_map_copy(ptr); +} + +__isl_keep isl_basic_map *basic_map::get() const { + return ptr; +} + +__isl_give isl_basic_map *basic_map::release() { + isl_basic_map *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool basic_map::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx basic_map::ctx() const { + return isl::checked::ctx(isl_basic_map_get_ctx(ptr)); +} + +isl::checked::basic_map basic_map::affine_hull() const +{ + auto res = isl_basic_map_affine_hull(copy()); + return manage(res); +} + +isl::checked::basic_map basic_map::apply_domain(isl::checked::basic_map bmap2) const +{ + auto res = isl_basic_map_apply_domain(copy(), bmap2.release()); + return manage(res); +} + +isl::checked::map basic_map::apply_domain(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).apply_domain(map2); +} + +isl::checked::union_map basic_map::apply_domain(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).apply_domain(umap2); +} + +isl::checked::basic_map basic_map::apply_range(isl::checked::basic_map bmap2) const +{ + auto res = isl_basic_map_apply_range(copy(), bmap2.release()); + return manage(res); +} + +isl::checked::map basic_map::apply_range(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).apply_range(map2); +} + +isl::checked::union_map basic_map::apply_range(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).apply_range(umap2); +} + +isl::checked::map basic_map::as_map() const +{ + return isl::checked::map(*this).as_map(); +} + +isl::checked::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const +{ + return isl::checked::map(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff basic_map::as_pw_multi_aff() const +{ + return isl::checked::map(*this).as_pw_multi_aff(); +} + +isl::checked::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const +{ + return isl::checked::map(*this).as_union_pw_multi_aff(); +} + +isl::checked::set basic_map::bind_domain(const isl::checked::multi_id &tuple) const +{ + return isl::checked::map(*this).bind_domain(tuple); +} + +isl::checked::set basic_map::bind_range(const isl::checked::multi_id &tuple) const +{ + return isl::checked::map(*this).bind_range(tuple); +} + +isl::checked::map basic_map::coalesce() const +{ + return isl::checked::map(*this).coalesce(); +} + +isl::checked::map basic_map::complement() const +{ + return isl::checked::map(*this).complement(); +} + +isl::checked::union_map basic_map::compute_divs() const +{ + return isl::checked::map(*this).compute_divs(); +} + +isl::checked::map basic_map::curry() const +{ + return isl::checked::map(*this).curry(); +} + +isl::checked::basic_set basic_map::deltas() const +{ + auto res = isl_basic_map_deltas(copy()); + return manage(res); +} + +isl::checked::basic_map basic_map::detect_equalities() const +{ + auto res = isl_basic_map_detect_equalities(copy()); + return manage(res); +} + +isl::checked::set basic_map::domain() const +{ + return isl::checked::map(*this).domain(); +} + +isl::checked::map basic_map::domain_factor_domain() const +{ + return isl::checked::map(*this).domain_factor_domain(); +} + +isl::checked::map basic_map::domain_factor_range() const +{ + return isl::checked::map(*this).domain_factor_range(); +} + +isl::checked::union_map basic_map::domain_map() const +{ + return isl::checked::map(*this).domain_map(); +} + +isl::checked::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const +{ + return isl::checked::map(*this).domain_map_union_pw_multi_aff(); +} + +isl::checked::map basic_map::domain_product(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).domain_product(map2); +} + +isl::checked::union_map basic_map::domain_product(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).domain_product(umap2); +} + +isl::checked::map basic_map::domain_reverse() const +{ + return isl::checked::map(*this).domain_reverse(); +} + +class size basic_map::domain_tuple_dim() const +{ + return isl::checked::map(*this).domain_tuple_dim(); +} + +isl::checked::id basic_map::domain_tuple_id() const +{ + return isl::checked::map(*this).domain_tuple_id(); +} + +isl::checked::map basic_map::drop_unused_params() const +{ + return isl::checked::map(*this).drop_unused_params(); +} + +isl::checked::map basic_map::eq_at(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::map(*this).eq_at(mpa); +} + +isl::checked::union_map basic_map::eq_at(const isl::checked::multi_union_pw_aff &mupa) const +{ + return isl::checked::map(*this).eq_at(mupa); +} + +boolean basic_map::every_map(const std::function &test) const +{ + return isl::checked::map(*this).every_map(test); +} + +isl::checked::map basic_map::extract_map(const isl::checked::space &space) const +{ + return isl::checked::map(*this).extract_map(space); +} + +isl::checked::map basic_map::factor_domain() const +{ + return isl::checked::map(*this).factor_domain(); +} + +isl::checked::map basic_map::factor_range() const +{ + return isl::checked::map(*this).factor_range(); +} + +isl::checked::map basic_map::fixed_power(const isl::checked::val &exp) const +{ + return isl::checked::map(*this).fixed_power(exp); +} + +isl::checked::map basic_map::fixed_power(long exp) const +{ + return this->fixed_power(isl::checked::val(ctx(), exp)); +} + +isl::checked::basic_map basic_map::flatten() const +{ + auto res = isl_basic_map_flatten(copy()); + return manage(res); +} + +isl::checked::basic_map basic_map::flatten_domain() const +{ + auto res = isl_basic_map_flatten_domain(copy()); + return manage(res); +} + +isl::checked::basic_map basic_map::flatten_range() const +{ + auto res = isl_basic_map_flatten_range(copy()); + return manage(res); +} + +stat basic_map::foreach_basic_map(const std::function &fn) const +{ + return isl::checked::map(*this).foreach_basic_map(fn); +} + +stat basic_map::foreach_map(const std::function &fn) const +{ + return isl::checked::map(*this).foreach_map(fn); +} + +isl::checked::basic_map basic_map::gist(isl::checked::basic_map context) const +{ + auto res = isl_basic_map_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::map basic_map::gist(const isl::checked::map &context) const +{ + return isl::checked::map(*this).gist(context); +} + +isl::checked::union_map basic_map::gist(const isl::checked::union_map &context) const +{ + return isl::checked::map(*this).gist(context); +} + +isl::checked::map basic_map::gist_domain(const isl::checked::set &context) const +{ + return isl::checked::map(*this).gist_domain(context); +} + +isl::checked::union_map basic_map::gist_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::map(*this).gist_domain(uset); +} + +isl::checked::map basic_map::gist_params(const isl::checked::set &context) const +{ + return isl::checked::map(*this).gist_params(context); +} + +isl::checked::union_map basic_map::gist_range(const isl::checked::union_set &uset) const +{ + return isl::checked::map(*this).gist_range(uset); +} + +boolean basic_map::has_domain_tuple_id() const +{ + return isl::checked::map(*this).has_domain_tuple_id(); +} + +boolean basic_map::has_range_tuple_id() const +{ + return isl::checked::map(*this).has_range_tuple_id(); +} + +isl::checked::basic_map basic_map::intersect(isl::checked::basic_map bmap2) const +{ + auto res = isl_basic_map_intersect(copy(), bmap2.release()); + return manage(res); +} + +isl::checked::map basic_map::intersect(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).intersect(map2); +} + +isl::checked::union_map basic_map::intersect(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).intersect(umap2); +} + +isl::checked::basic_map basic_map::intersect_domain(isl::checked::basic_set bset) const +{ + auto res = isl_basic_map_intersect_domain(copy(), bset.release()); + return manage(res); +} + +isl::checked::map basic_map::intersect_domain(const isl::checked::set &set) const +{ + return isl::checked::map(*this).intersect_domain(set); +} + +isl::checked::union_map basic_map::intersect_domain(const isl::checked::space &space) const +{ + return isl::checked::map(*this).intersect_domain(space); +} + +isl::checked::union_map basic_map::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::map(*this).intersect_domain(uset); +} + +isl::checked::basic_map basic_map::intersect_domain(const isl::checked::point &bset) const +{ + return this->intersect_domain(isl::checked::basic_set(bset)); +} + +isl::checked::map basic_map::intersect_domain_factor_domain(const isl::checked::map &factor) const +{ + return isl::checked::map(*this).intersect_domain_factor_domain(factor); +} + +isl::checked::union_map basic_map::intersect_domain_factor_domain(const isl::checked::union_map &factor) const +{ + return isl::checked::map(*this).intersect_domain_factor_domain(factor); +} + +isl::checked::map basic_map::intersect_domain_factor_range(const isl::checked::map &factor) const +{ + return isl::checked::map(*this).intersect_domain_factor_range(factor); +} + +isl::checked::union_map basic_map::intersect_domain_factor_range(const isl::checked::union_map &factor) const +{ + return isl::checked::map(*this).intersect_domain_factor_range(factor); +} + +isl::checked::map basic_map::intersect_domain_wrapped_domain(const isl::checked::set &domain) const +{ + return isl::checked::map(*this).intersect_domain_wrapped_domain(domain); +} + +isl::checked::union_map basic_map::intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const +{ + return isl::checked::map(*this).intersect_domain_wrapped_domain(domain); +} + +isl::checked::map basic_map::intersect_params(const isl::checked::set ¶ms) const +{ + return isl::checked::map(*this).intersect_params(params); +} + +isl::checked::basic_map basic_map::intersect_range(isl::checked::basic_set bset) const +{ + auto res = isl_basic_map_intersect_range(copy(), bset.release()); + return manage(res); +} + +isl::checked::map basic_map::intersect_range(const isl::checked::set &set) const +{ + return isl::checked::map(*this).intersect_range(set); +} + +isl::checked::union_map basic_map::intersect_range(const isl::checked::space &space) const +{ + return isl::checked::map(*this).intersect_range(space); +} + +isl::checked::union_map basic_map::intersect_range(const isl::checked::union_set &uset) const +{ + return isl::checked::map(*this).intersect_range(uset); +} + +isl::checked::basic_map basic_map::intersect_range(const isl::checked::point &bset) const +{ + return this->intersect_range(isl::checked::basic_set(bset)); +} + +isl::checked::map basic_map::intersect_range_factor_domain(const isl::checked::map &factor) const +{ + return isl::checked::map(*this).intersect_range_factor_domain(factor); +} + +isl::checked::union_map basic_map::intersect_range_factor_domain(const isl::checked::union_map &factor) const +{ + return isl::checked::map(*this).intersect_range_factor_domain(factor); +} + +isl::checked::map basic_map::intersect_range_factor_range(const isl::checked::map &factor) const +{ + return isl::checked::map(*this).intersect_range_factor_range(factor); +} + +isl::checked::union_map basic_map::intersect_range_factor_range(const isl::checked::union_map &factor) const +{ + return isl::checked::map(*this).intersect_range_factor_range(factor); +} + +isl::checked::map basic_map::intersect_range_wrapped_domain(const isl::checked::set &domain) const +{ + return isl::checked::map(*this).intersect_range_wrapped_domain(domain); +} + +isl::checked::union_map basic_map::intersect_range_wrapped_domain(const isl::checked::union_set &domain) const +{ + return isl::checked::map(*this).intersect_range_wrapped_domain(domain); +} + +boolean basic_map::is_bijective() const +{ + return isl::checked::map(*this).is_bijective(); +} + +boolean basic_map::is_disjoint(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).is_disjoint(map2); +} + +boolean basic_map::is_disjoint(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).is_disjoint(umap2); +} + +boolean basic_map::is_empty() const +{ + auto res = isl_basic_map_is_empty(get()); + return manage(res); +} + +boolean basic_map::is_equal(const isl::checked::basic_map &bmap2) const +{ + auto res = isl_basic_map_is_equal(get(), bmap2.get()); + return manage(res); +} + +boolean basic_map::is_equal(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).is_equal(map2); +} + +boolean basic_map::is_equal(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).is_equal(umap2); +} + +boolean basic_map::is_injective() const +{ + return isl::checked::map(*this).is_injective(); +} + +boolean basic_map::is_single_valued() const +{ + return isl::checked::map(*this).is_single_valued(); +} + +boolean basic_map::is_strict_subset(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).is_strict_subset(map2); +} + +boolean basic_map::is_strict_subset(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).is_strict_subset(umap2); +} + +boolean basic_map::is_subset(const isl::checked::basic_map &bmap2) const +{ + auto res = isl_basic_map_is_subset(get(), bmap2.get()); + return manage(res); +} + +boolean basic_map::is_subset(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).is_subset(map2); +} + +boolean basic_map::is_subset(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).is_subset(umap2); +} + +boolean basic_map::isa_map() const +{ + return isl::checked::map(*this).isa_map(); +} + +isl::checked::map basic_map::lex_ge_at(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::map(*this).lex_ge_at(mpa); +} + +isl::checked::map basic_map::lex_gt_at(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::map(*this).lex_gt_at(mpa); +} + +isl::checked::map basic_map::lex_le_at(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::map(*this).lex_le_at(mpa); +} + +isl::checked::map basic_map::lex_lt_at(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::map(*this).lex_lt_at(mpa); +} + +isl::checked::map basic_map::lexmax() const +{ + auto res = isl_basic_map_lexmax(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff basic_map::lexmax_pw_multi_aff() const +{ + return isl::checked::map(*this).lexmax_pw_multi_aff(); +} + +isl::checked::map basic_map::lexmin() const +{ + auto res = isl_basic_map_lexmin(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff basic_map::lexmin_pw_multi_aff() const +{ + return isl::checked::map(*this).lexmin_pw_multi_aff(); +} + +isl::checked::map basic_map::lower_bound(const isl::checked::multi_pw_aff &lower) const +{ + return isl::checked::map(*this).lower_bound(lower); +} + +isl::checked::map_list basic_map::map_list() const +{ + return isl::checked::map(*this).map_list(); +} + +isl::checked::multi_pw_aff basic_map::max_multi_pw_aff() const +{ + return isl::checked::map(*this).max_multi_pw_aff(); +} + +isl::checked::multi_pw_aff basic_map::min_multi_pw_aff() const +{ + return isl::checked::map(*this).min_multi_pw_aff(); +} + +class size basic_map::n_basic_map() const +{ + return isl::checked::map(*this).n_basic_map(); +} + +isl::checked::set basic_map::params() const +{ + return isl::checked::map(*this).params(); +} + +isl::checked::basic_map basic_map::polyhedral_hull() const +{ + return isl::checked::map(*this).polyhedral_hull(); +} + +isl::checked::map basic_map::preimage_domain(const isl::checked::multi_aff &ma) const +{ + return isl::checked::map(*this).preimage_domain(ma); +} + +isl::checked::map basic_map::preimage_domain(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::map(*this).preimage_domain(mpa); +} + +isl::checked::map basic_map::preimage_domain(const isl::checked::pw_multi_aff &pma) const +{ + return isl::checked::map(*this).preimage_domain(pma); +} + +isl::checked::union_map basic_map::preimage_domain(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::map(*this).preimage_domain(upma); +} + +isl::checked::map basic_map::preimage_range(const isl::checked::multi_aff &ma) const +{ + return isl::checked::map(*this).preimage_range(ma); +} + +isl::checked::map basic_map::preimage_range(const isl::checked::pw_multi_aff &pma) const +{ + return isl::checked::map(*this).preimage_range(pma); +} + +isl::checked::union_map basic_map::preimage_range(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::map(*this).preimage_range(upma); +} + +isl::checked::map basic_map::product(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).product(map2); +} + +isl::checked::union_map basic_map::product(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).product(umap2); +} + +isl::checked::map basic_map::project_out_all_params() const +{ + return isl::checked::map(*this).project_out_all_params(); +} + +isl::checked::map basic_map::project_out_param(const isl::checked::id &id) const +{ + return isl::checked::map(*this).project_out_param(id); +} + +isl::checked::map basic_map::project_out_param(const std::string &id) const +{ + return this->project_out_param(isl::checked::id(ctx(), id)); +} + +isl::checked::map basic_map::project_out_param(const isl::checked::id_list &list) const +{ + return isl::checked::map(*this).project_out_param(list); +} + +isl::checked::set basic_map::range() const +{ + return isl::checked::map(*this).range(); +} + +isl::checked::map basic_map::range_factor_domain() const +{ + return isl::checked::map(*this).range_factor_domain(); +} + +isl::checked::map basic_map::range_factor_range() const +{ + return isl::checked::map(*this).range_factor_range(); +} + +isl::checked::fixed_box basic_map::range_lattice_tile() const +{ + return isl::checked::map(*this).range_lattice_tile(); +} + +isl::checked::union_map basic_map::range_map() const +{ + return isl::checked::map(*this).range_map(); +} + +isl::checked::map basic_map::range_product(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).range_product(map2); +} + +isl::checked::union_map basic_map::range_product(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).range_product(umap2); +} + +isl::checked::map basic_map::range_reverse() const +{ + return isl::checked::map(*this).range_reverse(); +} + +isl::checked::fixed_box basic_map::range_simple_fixed_box_hull() const +{ + return isl::checked::map(*this).range_simple_fixed_box_hull(); +} + +class size basic_map::range_tuple_dim() const +{ + return isl::checked::map(*this).range_tuple_dim(); +} + +isl::checked::id basic_map::range_tuple_id() const +{ + return isl::checked::map(*this).range_tuple_id(); +} + +isl::checked::basic_map basic_map::reverse() const +{ + auto res = isl_basic_map_reverse(copy()); + return manage(res); +} + +isl::checked::basic_map basic_map::sample() const +{ + auto res = isl_basic_map_sample(copy()); + return manage(res); +} + +isl::checked::map basic_map::set_domain_tuple(const isl::checked::id &id) const +{ + return isl::checked::map(*this).set_domain_tuple(id); +} + +isl::checked::map basic_map::set_domain_tuple(const std::string &id) const +{ + return this->set_domain_tuple(isl::checked::id(ctx(), id)); +} + +isl::checked::map basic_map::set_range_tuple(const isl::checked::id &id) const +{ + return isl::checked::map(*this).set_range_tuple(id); +} + +isl::checked::map basic_map::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +isl::checked::space basic_map::space() const +{ + return isl::checked::map(*this).space(); +} + +isl::checked::map basic_map::subtract(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).subtract(map2); +} + +isl::checked::union_map basic_map::subtract(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).subtract(umap2); +} + +isl::checked::union_map basic_map::subtract_domain(const isl::checked::union_set &dom) const +{ + return isl::checked::map(*this).subtract_domain(dom); +} + +isl::checked::union_map basic_map::subtract_range(const isl::checked::union_set &dom) const +{ + return isl::checked::map(*this).subtract_range(dom); +} + +isl::checked::map_list basic_map::to_list() const +{ + return isl::checked::map(*this).to_list(); +} + +isl::checked::union_map basic_map::to_union_map() const +{ + return isl::checked::map(*this).to_union_map(); +} + +isl::checked::map basic_map::uncurry() const +{ + return isl::checked::map(*this).uncurry(); +} + +isl::checked::map basic_map::unite(isl::checked::basic_map bmap2) const +{ + auto res = isl_basic_map_union(copy(), bmap2.release()); + return manage(res); +} + +isl::checked::map basic_map::unite(const isl::checked::map &map2) const +{ + return isl::checked::map(*this).unite(map2); +} + +isl::checked::union_map basic_map::unite(const isl::checked::union_map &umap2) const +{ + return isl::checked::map(*this).unite(umap2); +} + +isl::checked::basic_map basic_map::unshifted_simple_hull() const +{ + return isl::checked::map(*this).unshifted_simple_hull(); +} + +isl::checked::map basic_map::upper_bound(const isl::checked::multi_pw_aff &upper) const +{ + return isl::checked::map(*this).upper_bound(upper); +} + +isl::checked::set basic_map::wrap() const +{ + return isl::checked::map(*this).wrap(); +} + +isl::checked::map basic_map::zip() const +{ + return isl::checked::map(*this).zip(); +} + +inline std::ostream &operator<<(std::ostream &os, const basic_map &obj) +{ + char *str = isl_basic_map_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::basic_set +basic_set manage(__isl_take isl_basic_set *ptr) { + return basic_set(ptr); +} +basic_set manage_copy(__isl_keep isl_basic_set *ptr) { + ptr = isl_basic_set_copy(ptr); + return basic_set(ptr); +} + +basic_set::basic_set(__isl_take isl_basic_set *ptr) + : ptr(ptr) {} + +basic_set::basic_set() + : ptr(nullptr) {} + +basic_set::basic_set(const basic_set &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +basic_set::basic_set(isl::checked::point pnt) +{ + auto res = isl_basic_set_from_point(pnt.release()); + ptr = res; +} + +basic_set::basic_set(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +basic_set &basic_set::operator=(basic_set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +basic_set::~basic_set() { + if (ptr) + isl_basic_set_free(ptr); +} + +__isl_give isl_basic_set *basic_set::copy() const & { + return isl_basic_set_copy(ptr); +} + +__isl_keep isl_basic_set *basic_set::get() const { + return ptr; +} + +__isl_give isl_basic_set *basic_set::release() { + isl_basic_set *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool basic_set::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx basic_set::ctx() const { + return isl::checked::ctx(isl_basic_set_get_ctx(ptr)); +} + +isl::checked::basic_set basic_set::affine_hull() const +{ + auto res = isl_basic_set_affine_hull(copy()); + return manage(res); +} + +isl::checked::basic_set basic_set::apply(isl::checked::basic_map bmap) const +{ + auto res = isl_basic_set_apply(copy(), bmap.release()); + return manage(res); +} + +isl::checked::set basic_set::apply(const isl::checked::map &map) const +{ + return isl::checked::set(*this).apply(map); +} + +isl::checked::union_set basic_set::apply(const isl::checked::union_map &umap) const +{ + return isl::checked::set(*this).apply(umap); +} + +isl::checked::pw_multi_aff basic_set::as_pw_multi_aff() const +{ + return isl::checked::set(*this).as_pw_multi_aff(); +} + +isl::checked::set basic_set::as_set() const +{ + return isl::checked::set(*this).as_set(); +} + +isl::checked::set basic_set::bind(const isl::checked::multi_id &tuple) const +{ + return isl::checked::set(*this).bind(tuple); +} + +isl::checked::set basic_set::coalesce() const +{ + return isl::checked::set(*this).coalesce(); +} + +isl::checked::set basic_set::complement() const +{ + return isl::checked::set(*this).complement(); +} + +isl::checked::union_set basic_set::compute_divs() const +{ + return isl::checked::set(*this).compute_divs(); +} + +isl::checked::basic_set basic_set::detect_equalities() const +{ + auto res = isl_basic_set_detect_equalities(copy()); + return manage(res); +} + +isl::checked::val basic_set::dim_max_val(int pos) const +{ + auto res = isl_basic_set_dim_max_val(copy(), pos); + return manage(res); +} + +isl::checked::val basic_set::dim_min_val(int pos) const +{ + return isl::checked::set(*this).dim_min_val(pos); +} + +isl::checked::set basic_set::drop_unused_params() const +{ + return isl::checked::set(*this).drop_unused_params(); +} + +boolean basic_set::every_set(const std::function &test) const +{ + return isl::checked::set(*this).every_set(test); +} + +isl::checked::set basic_set::extract_set(const isl::checked::space &space) const +{ + return isl::checked::set(*this).extract_set(space); +} + +isl::checked::basic_set basic_set::flatten() const +{ + auto res = isl_basic_set_flatten(copy()); + return manage(res); +} + +stat basic_set::foreach_basic_set(const std::function &fn) const +{ + return isl::checked::set(*this).foreach_basic_set(fn); +} + +stat basic_set::foreach_point(const std::function &fn) const +{ + return isl::checked::set(*this).foreach_point(fn); +} + +stat basic_set::foreach_set(const std::function &fn) const +{ + return isl::checked::set(*this).foreach_set(fn); +} + +isl::checked::basic_set basic_set::gist(isl::checked::basic_set context) const +{ + auto res = isl_basic_set_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::set basic_set::gist(const isl::checked::set &context) const +{ + return isl::checked::set(*this).gist(context); +} + +isl::checked::union_set basic_set::gist(const isl::checked::union_set &context) const +{ + return isl::checked::set(*this).gist(context); +} + +isl::checked::basic_set basic_set::gist(const isl::checked::point &context) const +{ + return this->gist(isl::checked::basic_set(context)); +} + +isl::checked::set basic_set::gist_params(const isl::checked::set &context) const +{ + return isl::checked::set(*this).gist_params(context); +} + +isl::checked::map basic_set::identity() const +{ + return isl::checked::set(*this).identity(); +} + +isl::checked::pw_aff basic_set::indicator_function() const +{ + return isl::checked::set(*this).indicator_function(); +} + +isl::checked::map basic_set::insert_domain(const isl::checked::space &domain) const +{ + return isl::checked::set(*this).insert_domain(domain); +} + +isl::checked::basic_set basic_set::intersect(isl::checked::basic_set bset2) const +{ + auto res = isl_basic_set_intersect(copy(), bset2.release()); + return manage(res); +} + +isl::checked::set basic_set::intersect(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).intersect(set2); +} + +isl::checked::union_set basic_set::intersect(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).intersect(uset2); +} + +isl::checked::basic_set basic_set::intersect(const isl::checked::point &bset2) const +{ + return this->intersect(isl::checked::basic_set(bset2)); +} + +isl::checked::basic_set basic_set::intersect_params(isl::checked::basic_set bset2) const +{ + auto res = isl_basic_set_intersect_params(copy(), bset2.release()); + return manage(res); +} + +isl::checked::set basic_set::intersect_params(const isl::checked::set ¶ms) const +{ + return isl::checked::set(*this).intersect_params(params); +} + +isl::checked::basic_set basic_set::intersect_params(const isl::checked::point &bset2) const +{ + return this->intersect_params(isl::checked::basic_set(bset2)); +} + +boolean basic_set::involves_locals() const +{ + return isl::checked::set(*this).involves_locals(); +} + +boolean basic_set::is_disjoint(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).is_disjoint(set2); +} + +boolean basic_set::is_disjoint(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).is_disjoint(uset2); +} + +boolean basic_set::is_empty() const +{ + auto res = isl_basic_set_is_empty(get()); + return manage(res); +} + +boolean basic_set::is_equal(const isl::checked::basic_set &bset2) const +{ + auto res = isl_basic_set_is_equal(get(), bset2.get()); + return manage(res); +} + +boolean basic_set::is_equal(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).is_equal(set2); +} + +boolean basic_set::is_equal(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).is_equal(uset2); +} + +boolean basic_set::is_equal(const isl::checked::point &bset2) const +{ + return this->is_equal(isl::checked::basic_set(bset2)); +} + +boolean basic_set::is_singleton() const +{ + return isl::checked::set(*this).is_singleton(); +} + +boolean basic_set::is_strict_subset(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).is_strict_subset(set2); +} + +boolean basic_set::is_strict_subset(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).is_strict_subset(uset2); +} + +boolean basic_set::is_subset(const isl::checked::basic_set &bset2) const +{ + auto res = isl_basic_set_is_subset(get(), bset2.get()); + return manage(res); +} + +boolean basic_set::is_subset(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).is_subset(set2); +} + +boolean basic_set::is_subset(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).is_subset(uset2); +} + +boolean basic_set::is_subset(const isl::checked::point &bset2) const +{ + return this->is_subset(isl::checked::basic_set(bset2)); +} + +boolean basic_set::is_wrapping() const +{ + auto res = isl_basic_set_is_wrapping(get()); + return manage(res); +} + +boolean basic_set::isa_set() const +{ + return isl::checked::set(*this).isa_set(); +} + +isl::checked::fixed_box basic_set::lattice_tile() const +{ + return isl::checked::set(*this).lattice_tile(); +} + +isl::checked::set basic_set::lexmax() const +{ + auto res = isl_basic_set_lexmax(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff basic_set::lexmax_pw_multi_aff() const +{ + return isl::checked::set(*this).lexmax_pw_multi_aff(); +} + +isl::checked::set basic_set::lexmin() const +{ + auto res = isl_basic_set_lexmin(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff basic_set::lexmin_pw_multi_aff() const +{ + return isl::checked::set(*this).lexmin_pw_multi_aff(); +} + +isl::checked::set basic_set::lower_bound(const isl::checked::multi_pw_aff &lower) const +{ + return isl::checked::set(*this).lower_bound(lower); +} + +isl::checked::set basic_set::lower_bound(const isl::checked::multi_val &lower) const +{ + return isl::checked::set(*this).lower_bound(lower); +} + +isl::checked::multi_pw_aff basic_set::max_multi_pw_aff() const +{ + return isl::checked::set(*this).max_multi_pw_aff(); +} + +isl::checked::val basic_set::max_val(const isl::checked::aff &obj) const +{ + return isl::checked::set(*this).max_val(obj); +} + +isl::checked::multi_pw_aff basic_set::min_multi_pw_aff() const +{ + return isl::checked::set(*this).min_multi_pw_aff(); +} + +isl::checked::val basic_set::min_val(const isl::checked::aff &obj) const +{ + return isl::checked::set(*this).min_val(obj); +} + +class size basic_set::n_basic_set() const +{ + return isl::checked::set(*this).n_basic_set(); +} + +isl::checked::pw_aff basic_set::param_pw_aff_on_domain(const isl::checked::id &id) const +{ + return isl::checked::set(*this).param_pw_aff_on_domain(id); +} + +isl::checked::pw_aff basic_set::param_pw_aff_on_domain(const std::string &id) const +{ + return this->param_pw_aff_on_domain(isl::checked::id(ctx(), id)); +} + +isl::checked::basic_set basic_set::params() const +{ + auto res = isl_basic_set_params(copy()); + return manage(res); +} + +isl::checked::multi_val basic_set::plain_multi_val_if_fixed() const +{ + return isl::checked::set(*this).plain_multi_val_if_fixed(); +} + +isl::checked::basic_set basic_set::polyhedral_hull() const +{ + return isl::checked::set(*this).polyhedral_hull(); +} + +isl::checked::set basic_set::preimage(const isl::checked::multi_aff &ma) const +{ + return isl::checked::set(*this).preimage(ma); +} + +isl::checked::set basic_set::preimage(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::set(*this).preimage(mpa); +} + +isl::checked::set basic_set::preimage(const isl::checked::pw_multi_aff &pma) const +{ + return isl::checked::set(*this).preimage(pma); +} + +isl::checked::union_set basic_set::preimage(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::set(*this).preimage(upma); +} + +isl::checked::set basic_set::product(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).product(set2); +} + +isl::checked::set basic_set::project_out_all_params() const +{ + return isl::checked::set(*this).project_out_all_params(); +} + +isl::checked::set basic_set::project_out_param(const isl::checked::id &id) const +{ + return isl::checked::set(*this).project_out_param(id); +} + +isl::checked::set basic_set::project_out_param(const std::string &id) const +{ + return this->project_out_param(isl::checked::id(ctx(), id)); +} + +isl::checked::set basic_set::project_out_param(const isl::checked::id_list &list) const +{ + return isl::checked::set(*this).project_out_param(list); +} + +isl::checked::pw_aff basic_set::pw_aff_on_domain(const isl::checked::val &v) const +{ + return isl::checked::set(*this).pw_aff_on_domain(v); +} + +isl::checked::pw_aff basic_set::pw_aff_on_domain(long v) const +{ + return this->pw_aff_on_domain(isl::checked::val(ctx(), v)); +} + +isl::checked::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const +{ + return isl::checked::set(*this).pw_multi_aff_on_domain(mv); +} + +isl::checked::basic_set basic_set::sample() const +{ + auto res = isl_basic_set_sample(copy()); + return manage(res); +} + +isl::checked::point basic_set::sample_point() const +{ + auto res = isl_basic_set_sample_point(copy()); + return manage(res); +} + +isl::checked::set_list basic_set::set_list() const +{ + return isl::checked::set(*this).set_list(); +} + +isl::checked::fixed_box basic_set::simple_fixed_box_hull() const +{ + return isl::checked::set(*this).simple_fixed_box_hull(); +} + +isl::checked::space basic_set::space() const +{ + return isl::checked::set(*this).space(); +} + +isl::checked::val basic_set::stride(int pos) const +{ + return isl::checked::set(*this).stride(pos); +} + +isl::checked::set basic_set::subtract(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).subtract(set2); +} + +isl::checked::union_set basic_set::subtract(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).subtract(uset2); +} + +isl::checked::set_list basic_set::to_list() const +{ + return isl::checked::set(*this).to_list(); +} + +isl::checked::set basic_set::to_set() const +{ + auto res = isl_basic_set_to_set(copy()); + return manage(res); +} + +isl::checked::union_set basic_set::to_union_set() const +{ + return isl::checked::set(*this).to_union_set(); +} + +isl::checked::map basic_set::translation() const +{ + return isl::checked::set(*this).translation(); +} + +class size basic_set::tuple_dim() const +{ + return isl::checked::set(*this).tuple_dim(); +} + +isl::checked::set basic_set::unbind_params(const isl::checked::multi_id &tuple) const +{ + return isl::checked::set(*this).unbind_params(tuple); +} + +isl::checked::map basic_set::unbind_params_insert_domain(const isl::checked::multi_id &domain) const +{ + return isl::checked::set(*this).unbind_params_insert_domain(domain); +} + +isl::checked::set basic_set::unite(isl::checked::basic_set bset2) const +{ + auto res = isl_basic_set_union(copy(), bset2.release()); + return manage(res); +} + +isl::checked::set basic_set::unite(const isl::checked::set &set2) const +{ + return isl::checked::set(*this).unite(set2); +} + +isl::checked::union_set basic_set::unite(const isl::checked::union_set &uset2) const +{ + return isl::checked::set(*this).unite(uset2); +} + +isl::checked::set basic_set::unite(const isl::checked::point &bset2) const +{ + return this->unite(isl::checked::basic_set(bset2)); +} + +isl::checked::basic_set basic_set::unshifted_simple_hull() const +{ + return isl::checked::set(*this).unshifted_simple_hull(); +} + +isl::checked::map basic_set::unwrap() const +{ + return isl::checked::set(*this).unwrap(); +} + +isl::checked::set basic_set::upper_bound(const isl::checked::multi_pw_aff &upper) const +{ + return isl::checked::set(*this).upper_bound(upper); +} + +isl::checked::set basic_set::upper_bound(const isl::checked::multi_val &upper) const +{ + return isl::checked::set(*this).upper_bound(upper); +} + +isl::checked::set basic_set::wrapped_reverse() const +{ + return isl::checked::set(*this).wrapped_reverse(); +} + +inline std::ostream &operator<<(std::ostream &os, const basic_set &obj) +{ + char *str = isl_basic_set_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::fixed_box +fixed_box manage(__isl_take isl_fixed_box *ptr) { + return fixed_box(ptr); +} +fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) { + ptr = isl_fixed_box_copy(ptr); + return fixed_box(ptr); +} + +fixed_box::fixed_box(__isl_take isl_fixed_box *ptr) + : ptr(ptr) {} + +fixed_box::fixed_box() + : ptr(nullptr) {} + +fixed_box::fixed_box(const fixed_box &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +fixed_box::fixed_box(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_fixed_box_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +fixed_box &fixed_box::operator=(fixed_box obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +fixed_box::~fixed_box() { + if (ptr) + isl_fixed_box_free(ptr); +} + +__isl_give isl_fixed_box *fixed_box::copy() const & { + return isl_fixed_box_copy(ptr); +} + +__isl_keep isl_fixed_box *fixed_box::get() const { + return ptr; +} + +__isl_give isl_fixed_box *fixed_box::release() { + isl_fixed_box *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool fixed_box::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx fixed_box::ctx() const { + return isl::checked::ctx(isl_fixed_box_get_ctx(ptr)); +} + +boolean fixed_box::is_valid() const +{ + auto res = isl_fixed_box_is_valid(get()); + return manage(res); +} + +isl::checked::multi_aff fixed_box::offset() const +{ + auto res = isl_fixed_box_get_offset(get()); + return manage(res); +} + +isl::checked::multi_aff fixed_box::get_offset() const +{ + return offset(); +} + +isl::checked::multi_val fixed_box::size() const +{ + auto res = isl_fixed_box_get_size(get()); + return manage(res); +} + +isl::checked::multi_val fixed_box::get_size() const +{ + return size(); +} + +isl::checked::space fixed_box::space() const +{ + auto res = isl_fixed_box_get_space(get()); + return manage(res); +} + +isl::checked::space fixed_box::get_space() const +{ + return space(); +} + +inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj) +{ + char *str = isl_fixed_box_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::id +id manage(__isl_take isl_id *ptr) { + return id(ptr); +} +id manage_copy(__isl_keep isl_id *ptr) { + ptr = isl_id_copy(ptr); + return id(ptr); +} + +id::id(__isl_take isl_id *ptr) + : ptr(ptr) {} + +id::id() + : ptr(nullptr) {} + +id::id(const id &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +id::id(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_id_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +id &id::operator=(id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id::~id() { + if (ptr) + isl_id_free(ptr); +} + +__isl_give isl_id *id::copy() const & { + return isl_id_copy(ptr); +} + +__isl_keep isl_id *id::get() const { + return ptr; +} + +__isl_give isl_id *id::release() { + isl_id *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx id::ctx() const { + return isl::checked::ctx(isl_id_get_ctx(ptr)); +} + +std::string id::name() const +{ + auto res = isl_id_get_name(get()); + std::string tmp(res); + return tmp; +} + +std::string id::get_name() const +{ + return name(); +} + +isl::checked::id_list id::to_list() const +{ + auto res = isl_id_to_list(copy()); + return manage(res); +} + +#if __cplusplus >= 201703L +id::id(isl::checked::ctx ctx, const std::string &str, const std::any &any) +{ + std::any *p = new std::any(any); + auto res = isl_id_alloc(ctx.get(), str.c_str(), p); + res = isl_id_set_free_user(res, &ctx::free_user); + if (!res) { + delete p; + } + ptr = res; +} + +template +std::optional id::try_user() const +{ + std::any *p = (std::any *) isl_id_get_user(ptr); + if (!p) + return std::nullopt; + if (isl_id_get_free_user(ptr) != &ctx::free_user) + return std::nullopt; + T *res = std::any_cast(p); + if (!res) + return std::nullopt; + return *res; +} + +template +T id::user() const +{ + std::any *p = (std::any *) isl_id_get_user(ptr); + if (!p) + isl_die(ctx().get(), isl_error_invalid, "no user pointer", return T()); + if (isl_id_get_free_user(ptr) != &ctx::free_user) + isl_die(ctx().get(), isl_error_invalid, "user pointer not attached by C++ interface", return T()); + T *res = std::any_cast(p); + if (!res) + isl_die(ctx().get(), isl_error_invalid, "user pointer not of given type", return T()); + return *res; +} +#endif + +inline std::ostream &operator<<(std::ostream &os, const id &obj) +{ + char *str = isl_id_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::id_list +id_list manage(__isl_take isl_id_list *ptr) { + return id_list(ptr); +} +id_list manage_copy(__isl_keep isl_id_list *ptr) { + ptr = isl_id_list_copy(ptr); + return id_list(ptr); +} + +id_list::id_list(__isl_take isl_id_list *ptr) + : ptr(ptr) {} + +id_list::id_list() + : ptr(nullptr) {} + +id_list::id_list(const id_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +id_list::id_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_id_list_alloc(ctx.release(), n); + ptr = res; +} + +id_list::id_list(isl::checked::id el) +{ + auto res = isl_id_list_from_id(el.release()); + ptr = res; +} + +id_list::id_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_id_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +id_list &id_list::operator=(id_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id_list::~id_list() { + if (ptr) + isl_id_list_free(ptr); +} + +__isl_give isl_id_list *id_list::copy() const & { + return isl_id_list_copy(ptr); +} + +__isl_keep isl_id_list *id_list::get() const { + return ptr; +} + +__isl_give isl_id_list *id_list::release() { + isl_id_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx id_list::ctx() const { + return isl::checked::ctx(isl_id_list_get_ctx(ptr)); +} + +isl::checked::id_list id_list::add(isl::checked::id el) const +{ + auto res = isl_id_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::id_list id_list::add(const std::string &el) const +{ + return this->add(isl::checked::id(ctx(), el)); +} + +isl::checked::id id_list::at(int index) const +{ + auto res = isl_id_list_get_at(get(), index); + return manage(res); +} + +isl::checked::id id_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::id_list id_list::clear() const +{ + auto res = isl_id_list_clear(copy()); + return manage(res); +} + +isl::checked::id_list id_list::concat(isl::checked::id_list list2) const +{ + auto res = isl_id_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::id_list id_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_id_list_drop(copy(), first, n); + return manage(res); +} + +stat id_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat id_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_id *arg_0, isl_id *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_id_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_id_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::id_list id_list::insert(unsigned int pos, isl::checked::id el) const +{ + auto res = isl_id_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::id_list id_list::insert(unsigned int pos, const std::string &el) const +{ + return this->insert(pos, isl::checked::id(ctx(), el)); +} + +isl::checked::id_list id_list::set_at(int index, isl::checked::id el) const +{ + auto res = isl_id_list_set_at(copy(), index, el.release()); + return manage(res); +} + +isl::checked::id_list id_list::set_at(int index, const std::string &el) const +{ + return this->set_at(index, isl::checked::id(ctx(), el)); +} + +class size id_list::size() const +{ + auto res = isl_id_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const id_list &obj) +{ + char *str = isl_id_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::id_to_ast_expr +id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) { + return id_to_ast_expr(ptr); +} +id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) { + ptr = isl_id_to_ast_expr_copy(ptr); + return id_to_ast_expr(ptr); +} + +id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr) + : ptr(ptr) {} + +id_to_ast_expr::id_to_ast_expr() + : ptr(nullptr) {} + +id_to_ast_expr::id_to_ast_expr(const id_to_ast_expr &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +id_to_ast_expr::id_to_ast_expr(isl::checked::ctx ctx, int min_size) +{ + auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size); + ptr = res; +} + +id_to_ast_expr::id_to_ast_expr(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_id_to_ast_expr_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id_to_ast_expr::~id_to_ast_expr() { + if (ptr) + isl_id_to_ast_expr_free(ptr); +} + +__isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & { + return isl_id_to_ast_expr_copy(ptr); +} + +__isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const { + return ptr; +} + +__isl_give isl_id_to_ast_expr *id_to_ast_expr::release() { + isl_id_to_ast_expr *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id_to_ast_expr::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx id_to_ast_expr::ctx() const { + return isl::checked::ctx(isl_id_to_ast_expr_get_ctx(ptr)); +} + +boolean id_to_ast_expr::is_equal(const isl::checked::id_to_ast_expr &hmap2) const +{ + auto res = isl_id_to_ast_expr_is_equal(get(), hmap2.get()); + return manage(res); +} + +isl::checked::id_to_ast_expr id_to_ast_expr::set(isl::checked::id key, isl::checked::ast_expr val) const +{ + auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release()); + return manage(res); +} + +isl::checked::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::checked::ast_expr &val) const +{ + return this->set(isl::checked::id(ctx(), key), val); +} + +inline std::ostream &operator<<(std::ostream &os, const id_to_ast_expr &obj) +{ + char *str = isl_id_to_ast_expr_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::id_to_id +id_to_id manage(__isl_take isl_id_to_id *ptr) { + return id_to_id(ptr); +} +id_to_id manage_copy(__isl_keep isl_id_to_id *ptr) { + ptr = isl_id_to_id_copy(ptr); + return id_to_id(ptr); +} + +id_to_id::id_to_id(__isl_take isl_id_to_id *ptr) + : ptr(ptr) {} + +id_to_id::id_to_id() + : ptr(nullptr) {} + +id_to_id::id_to_id(const id_to_id &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +id_to_id::id_to_id(isl::checked::ctx ctx, int min_size) +{ + auto res = isl_id_to_id_alloc(ctx.release(), min_size); + ptr = res; +} + +id_to_id::id_to_id(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_id_to_id_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +id_to_id &id_to_id::operator=(id_to_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id_to_id::~id_to_id() { + if (ptr) + isl_id_to_id_free(ptr); +} + +__isl_give isl_id_to_id *id_to_id::copy() const & { + return isl_id_to_id_copy(ptr); +} + +__isl_keep isl_id_to_id *id_to_id::get() const { + return ptr; +} + +__isl_give isl_id_to_id *id_to_id::release() { + isl_id_to_id *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id_to_id::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx id_to_id::ctx() const { + return isl::checked::ctx(isl_id_to_id_get_ctx(ptr)); +} + +boolean id_to_id::is_equal(const isl::checked::id_to_id &hmap2) const +{ + auto res = isl_id_to_id_is_equal(get(), hmap2.get()); + return manage(res); +} + +isl::checked::id_to_id id_to_id::set(isl::checked::id key, isl::checked::id val) const +{ + auto res = isl_id_to_id_set(copy(), key.release(), val.release()); + return manage(res); +} + +isl::checked::id_to_id id_to_id::set(const isl::checked::id &key, const std::string &val) const +{ + return this->set(key, isl::checked::id(ctx(), val)); +} + +isl::checked::id_to_id id_to_id::set(const std::string &key, const isl::checked::id &val) const +{ + return this->set(isl::checked::id(ctx(), key), val); +} + +isl::checked::id_to_id id_to_id::set(const std::string &key, const std::string &val) const +{ + return this->set(isl::checked::id(ctx(), key), isl::checked::id(ctx(), val)); +} + +inline std::ostream &operator<<(std::ostream &os, const id_to_id &obj) +{ + char *str = isl_id_to_id_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::map +map manage(__isl_take isl_map *ptr) { + return map(ptr); +} +map manage_copy(__isl_keep isl_map *ptr) { + ptr = isl_map_copy(ptr); + return map(ptr); +} + +map::map(__isl_take isl_map *ptr) + : ptr(ptr) {} + +map::map() + : ptr(nullptr) {} + +map::map(const map &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +map::map(isl::checked::basic_map bmap) +{ + auto res = isl_map_from_basic_map(bmap.release()); + ptr = res; +} + +map::map(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_map_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +map &map::operator=(map obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +map::~map() { + if (ptr) + isl_map_free(ptr); +} + +__isl_give isl_map *map::copy() const & { + return isl_map_copy(ptr); +} + +__isl_keep isl_map *map::get() const { + return ptr; +} + +__isl_give isl_map *map::release() { + isl_map *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool map::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx map::ctx() const { + return isl::checked::ctx(isl_map_get_ctx(ptr)); +} + +isl::checked::basic_map map::affine_hull() const +{ + auto res = isl_map_affine_hull(copy()); + return manage(res); +} + +isl::checked::map map::apply_domain(isl::checked::map map2) const +{ + auto res = isl_map_apply_domain(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::apply_domain(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).apply_domain(umap2); +} + +isl::checked::map map::apply_domain(const isl::checked::basic_map &map2) const +{ + return this->apply_domain(isl::checked::map(map2)); +} + +isl::checked::map map::apply_range(isl::checked::map map2) const +{ + auto res = isl_map_apply_range(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::apply_range(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).apply_range(umap2); +} + +isl::checked::map map::apply_range(const isl::checked::basic_map &map2) const +{ + return this->apply_range(isl::checked::map(map2)); +} + +isl::checked::map map::as_map() const +{ + return isl::checked::union_map(*this).as_map(); +} + +isl::checked::multi_union_pw_aff map::as_multi_union_pw_aff() const +{ + return isl::checked::union_map(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff map::as_pw_multi_aff() const +{ + auto res = isl_map_as_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff map::as_union_pw_multi_aff() const +{ + return isl::checked::union_map(*this).as_union_pw_multi_aff(); +} + +isl::checked::set map::bind_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_map_bind_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::set map::bind_range(isl::checked::multi_id tuple) const +{ + auto res = isl_map_bind_range(copy(), tuple.release()); + return manage(res); +} + +isl::checked::map map::coalesce() const +{ + auto res = isl_map_coalesce(copy()); + return manage(res); +} + +isl::checked::map map::complement() const +{ + auto res = isl_map_complement(copy()); + return manage(res); +} + +isl::checked::union_map map::compute_divs() const +{ + return isl::checked::union_map(*this).compute_divs(); +} + +isl::checked::map map::curry() const +{ + auto res = isl_map_curry(copy()); + return manage(res); +} + +isl::checked::set map::deltas() const +{ + auto res = isl_map_deltas(copy()); + return manage(res); +} + +isl::checked::map map::detect_equalities() const +{ + auto res = isl_map_detect_equalities(copy()); + return manage(res); +} + +isl::checked::set map::domain() const +{ + auto res = isl_map_domain(copy()); + return manage(res); +} + +isl::checked::map map::domain_factor_domain() const +{ + auto res = isl_map_domain_factor_domain(copy()); + return manage(res); +} + +isl::checked::map map::domain_factor_range() const +{ + auto res = isl_map_domain_factor_range(copy()); + return manage(res); +} + +isl::checked::union_map map::domain_map() const +{ + return isl::checked::union_map(*this).domain_map(); +} + +isl::checked::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const +{ + return isl::checked::union_map(*this).domain_map_union_pw_multi_aff(); +} + +isl::checked::map map::domain_product(isl::checked::map map2) const +{ + auto res = isl_map_domain_product(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::domain_product(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).domain_product(umap2); +} + +isl::checked::map map::domain_product(const isl::checked::basic_map &map2) const +{ + return this->domain_product(isl::checked::map(map2)); +} + +isl::checked::map map::domain_reverse() const +{ + auto res = isl_map_domain_reverse(copy()); + return manage(res); +} + +class size map::domain_tuple_dim() const +{ + auto res = isl_map_domain_tuple_dim(get()); + return manage(res); +} + +isl::checked::id map::domain_tuple_id() const +{ + auto res = isl_map_get_domain_tuple_id(get()); + return manage(res); +} + +isl::checked::id map::get_domain_tuple_id() const +{ + return domain_tuple_id(); +} + +isl::checked::map map::drop_unused_params() const +{ + auto res = isl_map_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::map map::empty(isl::checked::space space) +{ + auto res = isl_map_empty(space.release()); + return manage(res); +} + +isl::checked::map map::eq_at(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::union_map map::eq_at(const isl::checked::multi_union_pw_aff &mupa) const +{ + return isl::checked::union_map(*this).eq_at(mupa); +} + +isl::checked::map map::eq_at(const isl::checked::aff &mpa) const +{ + return this->eq_at(isl::checked::multi_pw_aff(mpa)); +} + +isl::checked::map map::eq_at(const isl::checked::multi_aff &mpa) const +{ + return this->eq_at(isl::checked::multi_pw_aff(mpa)); +} + +isl::checked::map map::eq_at(const isl::checked::pw_aff &mpa) const +{ + return this->eq_at(isl::checked::multi_pw_aff(mpa)); +} + +isl::checked::map map::eq_at(const isl::checked::pw_multi_aff &mpa) const +{ + return this->eq_at(isl::checked::multi_pw_aff(mpa)); +} + +boolean map::every_map(const std::function &test) const +{ + return isl::checked::union_map(*this).every_map(test); +} + +isl::checked::map map::extract_map(const isl::checked::space &space) const +{ + return isl::checked::union_map(*this).extract_map(space); +} + +isl::checked::map map::factor_domain() const +{ + auto res = isl_map_factor_domain(copy()); + return manage(res); +} + +isl::checked::map map::factor_range() const +{ + auto res = isl_map_factor_range(copy()); + return manage(res); +} + +isl::checked::map map::fixed_power(isl::checked::val exp) const +{ + auto res = isl_map_fixed_power_val(copy(), exp.release()); + return manage(res); +} + +isl::checked::map map::fixed_power(long exp) const +{ + return this->fixed_power(isl::checked::val(ctx(), exp)); +} + +isl::checked::map map::flatten() const +{ + auto res = isl_map_flatten(copy()); + return manage(res); +} + +isl::checked::map map::flatten_domain() const +{ + auto res = isl_map_flatten_domain(copy()); + return manage(res); +} + +isl::checked::map map::flatten_range() const +{ + auto res = isl_map_flatten_range(copy()); + return manage(res); +} + +stat map::foreach_basic_map(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat map::foreach_map(const std::function &fn) const +{ + return isl::checked::union_map(*this).foreach_map(fn); +} + +isl::checked::map map::gist(isl::checked::map context) const +{ + auto res = isl_map_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_map map::gist(const isl::checked::union_map &context) const +{ + return isl::checked::union_map(*this).gist(context); +} + +isl::checked::map map::gist(const isl::checked::basic_map &context) const +{ + return this->gist(isl::checked::map(context)); +} + +isl::checked::map map::gist_domain(isl::checked::set context) const +{ + auto res = isl_map_gist_domain(copy(), context.release()); + return manage(res); +} + +isl::checked::union_map map::gist_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_map(*this).gist_domain(uset); +} + +isl::checked::map map::gist_domain(const isl::checked::basic_set &context) const +{ + return this->gist_domain(isl::checked::set(context)); +} + +isl::checked::map map::gist_domain(const isl::checked::point &context) const +{ + return this->gist_domain(isl::checked::set(context)); +} + +isl::checked::map map::gist_params(isl::checked::set context) const +{ + auto res = isl_map_gist_params(copy(), context.release()); + return manage(res); +} + +isl::checked::union_map map::gist_range(const isl::checked::union_set &uset) const +{ + return isl::checked::union_map(*this).gist_range(uset); +} + +boolean map::has_domain_tuple_id() const +{ + auto res = isl_map_has_domain_tuple_id(get()); + return manage(res); +} + +boolean map::has_range_tuple_id() const +{ + auto res = isl_map_has_range_tuple_id(get()); + return manage(res); +} + +isl::checked::map map::intersect(isl::checked::map map2) const +{ + auto res = isl_map_intersect(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::intersect(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).intersect(umap2); +} + +isl::checked::map map::intersect(const isl::checked::basic_map &map2) const +{ + return this->intersect(isl::checked::map(map2)); +} + +isl::checked::map map::intersect_domain(isl::checked::set set) const +{ + auto res = isl_map_intersect_domain(copy(), set.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_domain(const isl::checked::space &space) const +{ + return isl::checked::union_map(*this).intersect_domain(space); +} + +isl::checked::union_map map::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_map(*this).intersect_domain(uset); +} + +isl::checked::map map::intersect_domain(const isl::checked::basic_set &set) const +{ + return this->intersect_domain(isl::checked::set(set)); +} + +isl::checked::map map::intersect_domain(const isl::checked::point &set) const +{ + return this->intersect_domain(isl::checked::set(set)); +} + +isl::checked::map map::intersect_domain_factor_domain(isl::checked::map factor) const +{ + auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_domain_factor_domain(const isl::checked::union_map &factor) const +{ + return isl::checked::union_map(*this).intersect_domain_factor_domain(factor); +} + +isl::checked::map map::intersect_domain_factor_domain(const isl::checked::basic_map &factor) const +{ + return this->intersect_domain_factor_domain(isl::checked::map(factor)); +} + +isl::checked::map map::intersect_domain_factor_range(isl::checked::map factor) const +{ + auto res = isl_map_intersect_domain_factor_range(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_domain_factor_range(const isl::checked::union_map &factor) const +{ + return isl::checked::union_map(*this).intersect_domain_factor_range(factor); +} + +isl::checked::map map::intersect_domain_factor_range(const isl::checked::basic_map &factor) const +{ + return this->intersect_domain_factor_range(isl::checked::map(factor)); +} + +isl::checked::map map::intersect_domain_wrapped_domain(isl::checked::set domain) const +{ + auto res = isl_map_intersect_domain_wrapped_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_domain_wrapped_domain(const isl::checked::union_set &domain) const +{ + return isl::checked::union_map(*this).intersect_domain_wrapped_domain(domain); +} + +isl::checked::map map::intersect_domain_wrapped_domain(const isl::checked::basic_set &domain) const +{ + return this->intersect_domain_wrapped_domain(isl::checked::set(domain)); +} + +isl::checked::map map::intersect_domain_wrapped_domain(const isl::checked::point &domain) const +{ + return this->intersect_domain_wrapped_domain(isl::checked::set(domain)); +} + +isl::checked::map map::intersect_params(isl::checked::set params) const +{ + auto res = isl_map_intersect_params(copy(), params.release()); + return manage(res); +} + +isl::checked::map map::intersect_range(isl::checked::set set) const +{ + auto res = isl_map_intersect_range(copy(), set.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_range(const isl::checked::space &space) const +{ + return isl::checked::union_map(*this).intersect_range(space); +} + +isl::checked::union_map map::intersect_range(const isl::checked::union_set &uset) const +{ + return isl::checked::union_map(*this).intersect_range(uset); +} + +isl::checked::map map::intersect_range(const isl::checked::basic_set &set) const +{ + return this->intersect_range(isl::checked::set(set)); +} + +isl::checked::map map::intersect_range(const isl::checked::point &set) const +{ + return this->intersect_range(isl::checked::set(set)); +} + +isl::checked::map map::intersect_range_factor_domain(isl::checked::map factor) const +{ + auto res = isl_map_intersect_range_factor_domain(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_range_factor_domain(const isl::checked::union_map &factor) const +{ + return isl::checked::union_map(*this).intersect_range_factor_domain(factor); +} + +isl::checked::map map::intersect_range_factor_domain(const isl::checked::basic_map &factor) const +{ + return this->intersect_range_factor_domain(isl::checked::map(factor)); +} + +isl::checked::map map::intersect_range_factor_range(isl::checked::map factor) const +{ + auto res = isl_map_intersect_range_factor_range(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_range_factor_range(const isl::checked::union_map &factor) const +{ + return isl::checked::union_map(*this).intersect_range_factor_range(factor); +} + +isl::checked::map map::intersect_range_factor_range(const isl::checked::basic_map &factor) const +{ + return this->intersect_range_factor_range(isl::checked::map(factor)); +} + +isl::checked::map map::intersect_range_wrapped_domain(isl::checked::set domain) const +{ + auto res = isl_map_intersect_range_wrapped_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::union_map map::intersect_range_wrapped_domain(const isl::checked::union_set &domain) const +{ + return isl::checked::union_map(*this).intersect_range_wrapped_domain(domain); +} + +isl::checked::map map::intersect_range_wrapped_domain(const isl::checked::basic_set &domain) const +{ + return this->intersect_range_wrapped_domain(isl::checked::set(domain)); +} + +isl::checked::map map::intersect_range_wrapped_domain(const isl::checked::point &domain) const +{ + return this->intersect_range_wrapped_domain(isl::checked::set(domain)); +} + +boolean map::is_bijective() const +{ + auto res = isl_map_is_bijective(get()); + return manage(res); +} + +boolean map::is_disjoint(const isl::checked::map &map2) const +{ + auto res = isl_map_is_disjoint(get(), map2.get()); + return manage(res); +} + +boolean map::is_disjoint(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).is_disjoint(umap2); +} + +boolean map::is_disjoint(const isl::checked::basic_map &map2) const +{ + return this->is_disjoint(isl::checked::map(map2)); +} + +boolean map::is_empty() const +{ + auto res = isl_map_is_empty(get()); + return manage(res); +} + +boolean map::is_equal(const isl::checked::map &map2) const +{ + auto res = isl_map_is_equal(get(), map2.get()); + return manage(res); +} + +boolean map::is_equal(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).is_equal(umap2); +} + +boolean map::is_equal(const isl::checked::basic_map &map2) const +{ + return this->is_equal(isl::checked::map(map2)); +} + +boolean map::is_injective() const +{ + auto res = isl_map_is_injective(get()); + return manage(res); +} + +boolean map::is_single_valued() const +{ + auto res = isl_map_is_single_valued(get()); + return manage(res); +} + +boolean map::is_strict_subset(const isl::checked::map &map2) const +{ + auto res = isl_map_is_strict_subset(get(), map2.get()); + return manage(res); +} + +boolean map::is_strict_subset(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).is_strict_subset(umap2); +} + +boolean map::is_strict_subset(const isl::checked::basic_map &map2) const +{ + return this->is_strict_subset(isl::checked::map(map2)); +} + +boolean map::is_subset(const isl::checked::map &map2) const +{ + auto res = isl_map_is_subset(get(), map2.get()); + return manage(res); +} + +boolean map::is_subset(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).is_subset(umap2); +} + +boolean map::is_subset(const isl::checked::basic_map &map2) const +{ + return this->is_subset(isl::checked::map(map2)); +} + +boolean map::isa_map() const +{ + return isl::checked::union_map(*this).isa_map(); +} + +isl::checked::map map::lex_ge_at(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::map map::lex_gt_at(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::map map::lex_le_at(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::map map::lex_lt_at(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::map map::lexmax() const +{ + auto res = isl_map_lexmax(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff map::lexmax_pw_multi_aff() const +{ + auto res = isl_map_lexmax_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::map map::lexmin() const +{ + auto res = isl_map_lexmin(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff map::lexmin_pw_multi_aff() const +{ + auto res = isl_map_lexmin_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::map map::lower_bound(isl::checked::multi_pw_aff lower) const +{ + auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release()); + return manage(res); +} + +isl::checked::map_list map::map_list() const +{ + return isl::checked::union_map(*this).map_list(); +} + +isl::checked::multi_pw_aff map::max_multi_pw_aff() const +{ + auto res = isl_map_max_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff map::min_multi_pw_aff() const +{ + auto res = isl_map_min_multi_pw_aff(copy()); + return manage(res); +} + +class size map::n_basic_map() const +{ + auto res = isl_map_n_basic_map(get()); + return manage(res); +} + +isl::checked::set map::params() const +{ + auto res = isl_map_params(copy()); + return manage(res); +} + +isl::checked::basic_map map::polyhedral_hull() const +{ + auto res = isl_map_polyhedral_hull(copy()); + return manage(res); +} + +isl::checked::map map::preimage_domain(isl::checked::multi_aff ma) const +{ + auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::map map::preimage_domain(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::map map::preimage_domain(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_map map::preimage_domain(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::union_map(*this).preimage_domain(upma); +} + +isl::checked::map map::preimage_range(isl::checked::multi_aff ma) const +{ + auto res = isl_map_preimage_range_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::map map::preimage_range(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_map map::preimage_range(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::union_map(*this).preimage_range(upma); +} + +isl::checked::map map::product(isl::checked::map map2) const +{ + auto res = isl_map_product(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::product(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).product(umap2); +} + +isl::checked::map map::product(const isl::checked::basic_map &map2) const +{ + return this->product(isl::checked::map(map2)); +} + +isl::checked::map map::project_out_all_params() const +{ + auto res = isl_map_project_out_all_params(copy()); + return manage(res); +} + +isl::checked::map map::project_out_param(isl::checked::id id) const +{ + auto res = isl_map_project_out_param_id(copy(), id.release()); + return manage(res); +} + +isl::checked::map map::project_out_param(const std::string &id) const +{ + return this->project_out_param(isl::checked::id(ctx(), id)); +} + +isl::checked::map map::project_out_param(isl::checked::id_list list) const +{ + auto res = isl_map_project_out_param_id_list(copy(), list.release()); + return manage(res); +} + +isl::checked::set map::range() const +{ + auto res = isl_map_range(copy()); + return manage(res); +} + +isl::checked::map map::range_factor_domain() const +{ + auto res = isl_map_range_factor_domain(copy()); + return manage(res); +} + +isl::checked::map map::range_factor_range() const +{ + auto res = isl_map_range_factor_range(copy()); + return manage(res); +} + +isl::checked::fixed_box map::range_lattice_tile() const +{ + auto res = isl_map_get_range_lattice_tile(get()); + return manage(res); +} + +isl::checked::fixed_box map::get_range_lattice_tile() const +{ + return range_lattice_tile(); +} + +isl::checked::union_map map::range_map() const +{ + return isl::checked::union_map(*this).range_map(); +} + +isl::checked::map map::range_product(isl::checked::map map2) const +{ + auto res = isl_map_range_product(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::range_product(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).range_product(umap2); +} + +isl::checked::map map::range_product(const isl::checked::basic_map &map2) const +{ + return this->range_product(isl::checked::map(map2)); +} + +isl::checked::map map::range_reverse() const +{ + auto res = isl_map_range_reverse(copy()); + return manage(res); +} + +isl::checked::fixed_box map::range_simple_fixed_box_hull() const +{ + auto res = isl_map_get_range_simple_fixed_box_hull(get()); + return manage(res); +} + +isl::checked::fixed_box map::get_range_simple_fixed_box_hull() const +{ + return range_simple_fixed_box_hull(); +} + +class size map::range_tuple_dim() const +{ + auto res = isl_map_range_tuple_dim(get()); + return manage(res); +} + +isl::checked::id map::range_tuple_id() const +{ + auto res = isl_map_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id map::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::map map::reverse() const +{ + auto res = isl_map_reverse(copy()); + return manage(res); +} + +isl::checked::basic_map map::sample() const +{ + auto res = isl_map_sample(copy()); + return manage(res); +} + +isl::checked::map map::set_domain_tuple(isl::checked::id id) const +{ + auto res = isl_map_set_domain_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::map map::set_domain_tuple(const std::string &id) const +{ + return this->set_domain_tuple(isl::checked::id(ctx(), id)); +} + +isl::checked::map map::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_map_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::map map::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +isl::checked::space map::space() const +{ + auto res = isl_map_get_space(get()); + return manage(res); +} + +isl::checked::space map::get_space() const +{ + return space(); +} + +isl::checked::map map::subtract(isl::checked::map map2) const +{ + auto res = isl_map_subtract(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::subtract(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).subtract(umap2); +} + +isl::checked::map map::subtract(const isl::checked::basic_map &map2) const +{ + return this->subtract(isl::checked::map(map2)); +} + +isl::checked::union_map map::subtract_domain(const isl::checked::union_set &dom) const +{ + return isl::checked::union_map(*this).subtract_domain(dom); +} + +isl::checked::union_map map::subtract_range(const isl::checked::union_set &dom) const +{ + return isl::checked::union_map(*this).subtract_range(dom); +} + +isl::checked::map_list map::to_list() const +{ + auto res = isl_map_to_list(copy()); + return manage(res); +} + +isl::checked::union_map map::to_union_map() const +{ + auto res = isl_map_to_union_map(copy()); + return manage(res); +} + +isl::checked::map map::uncurry() const +{ + auto res = isl_map_uncurry(copy()); + return manage(res); +} + +isl::checked::map map::unite(isl::checked::map map2) const +{ + auto res = isl_map_union(copy(), map2.release()); + return manage(res); +} + +isl::checked::union_map map::unite(const isl::checked::union_map &umap2) const +{ + return isl::checked::union_map(*this).unite(umap2); +} + +isl::checked::map map::unite(const isl::checked::basic_map &map2) const +{ + return this->unite(isl::checked::map(map2)); +} + +isl::checked::map map::universe(isl::checked::space space) +{ + auto res = isl_map_universe(space.release()); + return manage(res); +} + +isl::checked::basic_map map::unshifted_simple_hull() const +{ + auto res = isl_map_unshifted_simple_hull(copy()); + return manage(res); +} + +isl::checked::map map::upper_bound(isl::checked::multi_pw_aff upper) const +{ + auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release()); + return manage(res); +} + +isl::checked::set map::wrap() const +{ + auto res = isl_map_wrap(copy()); + return manage(res); +} + +isl::checked::map map::zip() const +{ + auto res = isl_map_zip(copy()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const map &obj) +{ + char *str = isl_map_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::map_list +map_list manage(__isl_take isl_map_list *ptr) { + return map_list(ptr); +} +map_list manage_copy(__isl_keep isl_map_list *ptr) { + ptr = isl_map_list_copy(ptr); + return map_list(ptr); +} + +map_list::map_list(__isl_take isl_map_list *ptr) + : ptr(ptr) {} + +map_list::map_list() + : ptr(nullptr) {} + +map_list::map_list(const map_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +map_list::map_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_map_list_alloc(ctx.release(), n); + ptr = res; +} + +map_list::map_list(isl::checked::map el) +{ + auto res = isl_map_list_from_map(el.release()); + ptr = res; +} + +map_list::map_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_map_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +map_list &map_list::operator=(map_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +map_list::~map_list() { + if (ptr) + isl_map_list_free(ptr); +} + +__isl_give isl_map_list *map_list::copy() const & { + return isl_map_list_copy(ptr); +} + +__isl_keep isl_map_list *map_list::get() const { + return ptr; +} + +__isl_give isl_map_list *map_list::release() { + isl_map_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool map_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx map_list::ctx() const { + return isl::checked::ctx(isl_map_list_get_ctx(ptr)); +} + +isl::checked::map_list map_list::add(isl::checked::map el) const +{ + auto res = isl_map_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::map map_list::at(int index) const +{ + auto res = isl_map_list_get_at(get(), index); + return manage(res); +} + +isl::checked::map map_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::map_list map_list::clear() const +{ + auto res = isl_map_list_clear(copy()); + return manage(res); +} + +isl::checked::map_list map_list::concat(isl::checked::map_list list2) const +{ + auto res = isl_map_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::map_list map_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_map_list_drop(copy(), first, n); + return manage(res); +} + +stat map_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat map_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_map *arg_0, isl_map *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_map_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_map_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::map_list map_list::insert(unsigned int pos, isl::checked::map el) const +{ + auto res = isl_map_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::map_list map_list::set_at(int index, isl::checked::map el) const +{ + auto res = isl_map_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size map_list::size() const +{ + auto res = isl_map_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const map_list &obj) +{ + char *str = isl_map_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::multi_aff +multi_aff manage(__isl_take isl_multi_aff *ptr) { + return multi_aff(ptr); +} +multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) { + ptr = isl_multi_aff_copy(ptr); + return multi_aff(ptr); +} + +multi_aff::multi_aff(__isl_take isl_multi_aff *ptr) + : ptr(ptr) {} + +multi_aff::multi_aff() + : ptr(nullptr) {} + +multi_aff::multi_aff(const multi_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +multi_aff::multi_aff(isl::checked::aff aff) +{ + auto res = isl_multi_aff_from_aff(aff.release()); + ptr = res; +} + +multi_aff::multi_aff(isl::checked::space space, isl::checked::aff_list list) +{ + auto res = isl_multi_aff_from_aff_list(space.release(), list.release()); + ptr = res; +} + +multi_aff::multi_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +multi_aff &multi_aff::operator=(multi_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_aff::~multi_aff() { + if (ptr) + isl_multi_aff_free(ptr); +} + +__isl_give isl_multi_aff *multi_aff::copy() const & { + return isl_multi_aff_copy(ptr); +} + +__isl_keep isl_multi_aff *multi_aff::get() const { + return ptr; +} + +__isl_give isl_multi_aff *multi_aff::release() { + isl_multi_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx multi_aff::ctx() const { + return isl::checked::ctx(isl_multi_aff_get_ctx(ptr)); +} + +isl::checked::multi_aff multi_aff::add(isl::checked::multi_aff multi2) const +{ + auto res = isl_multi_aff_add(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::add(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).add(multi2); +} + +isl::checked::multi_union_pw_aff multi_aff::add(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).add(multi2); +} + +isl::checked::pw_multi_aff multi_aff::add(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).add(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).add(upma2); +} + +isl::checked::multi_aff multi_aff::add(const isl::checked::aff &multi2) const +{ + return this->add(isl::checked::multi_aff(multi2)); +} + +isl::checked::multi_aff multi_aff::add_constant(isl::checked::multi_val mv) const +{ + auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::add_constant(isl::checked::val v) const +{ + auto res = isl_multi_aff_add_constant_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::add_constant(long v) const +{ + return this->add_constant(isl::checked::val(ctx(), v)); +} + +isl::checked::union_pw_multi_aff multi_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).apply(upma2); +} + +isl::checked::map multi_aff::as_map() const +{ + auto res = isl_multi_aff_as_map(copy()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::as_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).as_multi_aff(); +} + +isl::checked::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const +{ + return isl::checked::pw_multi_aff(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff multi_aff::as_pw_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).as_pw_multi_aff(); +} + +isl::checked::set multi_aff::as_set() const +{ + auto res = isl_multi_aff_as_set(copy()); + return manage(res); +} + +isl::checked::union_map multi_aff::as_union_map() const +{ + return isl::checked::pw_multi_aff(*this).as_union_map(); +} + +isl::checked::aff multi_aff::at(int pos) const +{ + auto res = isl_multi_aff_get_at(get(), pos); + return manage(res); +} + +isl::checked::aff multi_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::checked::basic_set multi_aff::bind(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_aff_bind(copy(), tuple.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::bind_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_aff_bind_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::pw_multi_aff multi_aff::coalesce() const +{ + return isl::checked::pw_multi_aff(*this).coalesce(); +} + +isl::checked::multi_val multi_aff::constant_multi_val() const +{ + auto res = isl_multi_aff_get_constant_multi_val(get()); + return manage(res); +} + +isl::checked::multi_val multi_aff::get_constant_multi_val() const +{ + return constant_multi_val(); +} + +isl::checked::set multi_aff::domain() const +{ + return isl::checked::pw_multi_aff(*this).domain(); +} + +isl::checked::multi_aff multi_aff::domain_map(isl::checked::space space) +{ + auto res = isl_multi_aff_domain_map(space.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::domain_reverse() const +{ + auto res = isl_multi_aff_domain_reverse(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff multi_aff::drop_unused_params() const +{ + return isl::checked::pw_multi_aff(*this).drop_unused_params(); +} + +isl::checked::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::checked::space &space) const +{ + return isl::checked::pw_multi_aff(*this).extract_pw_multi_aff(space); +} + +isl::checked::multi_aff multi_aff::flat_range_product(isl::checked::multi_aff multi2) const +{ + auto res = isl_multi_aff_flat_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).flat_range_product(multi2); +} + +isl::checked::multi_union_pw_aff multi_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).flat_range_product(multi2); +} + +isl::checked::pw_multi_aff multi_aff::flat_range_product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).flat_range_product(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).flat_range_product(upma2); +} + +isl::checked::multi_aff multi_aff::flat_range_product(const isl::checked::aff &multi2) const +{ + return this->flat_range_product(isl::checked::multi_aff(multi2)); +} + +isl::checked::multi_aff multi_aff::floor() const +{ + auto res = isl_multi_aff_floor(copy()); + return manage(res); +} + +stat multi_aff::foreach_piece(const std::function &fn) const +{ + return isl::checked::pw_multi_aff(*this).foreach_piece(fn); +} + +isl::checked::multi_aff multi_aff::gist(isl::checked::set context) const +{ + auto res = isl_multi_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff multi_aff::gist(const isl::checked::union_set &context) const +{ + return isl::checked::pw_multi_aff(*this).gist(context); +} + +isl::checked::multi_aff multi_aff::gist(const isl::checked::basic_set &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::multi_aff multi_aff::gist(const isl::checked::point &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::multi_aff multi_aff::gist_params(isl::checked::set context) const +{ + auto res = isl_multi_aff_gist_params(copy(), context.release()); + return manage(res); +} + +boolean multi_aff::has_range_tuple_id() const +{ + auto res = isl_multi_aff_has_range_tuple_id(get()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::identity() const +{ + auto res = isl_multi_aff_identity_multi_aff(copy()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::identity_on_domain(isl::checked::space space) +{ + auto res = isl_multi_aff_identity_on_domain_space(space.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::insert_domain(isl::checked::space domain) const +{ + auto res = isl_multi_aff_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::pw_multi_aff multi_aff::intersect_domain(const isl::checked::set &set) const +{ + return isl::checked::pw_multi_aff(*this).intersect_domain(set); +} + +isl::checked::union_pw_multi_aff multi_aff::intersect_domain(const isl::checked::space &space) const +{ + return isl::checked::pw_multi_aff(*this).intersect_domain(space); +} + +isl::checked::union_pw_multi_aff multi_aff::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_multi_aff(*this).intersect_domain(uset); +} + +isl::checked::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::checked::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_multi_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::checked::pw_multi_aff multi_aff::intersect_params(const isl::checked::set &set) const +{ + return isl::checked::pw_multi_aff(*this).intersect_params(set); +} + +boolean multi_aff::involves_locals() const +{ + auto res = isl_multi_aff_involves_locals(get()); + return manage(res); +} + +boolean multi_aff::involves_nan() const +{ + auto res = isl_multi_aff_involves_nan(get()); + return manage(res); +} + +boolean multi_aff::involves_param(const isl::checked::id &id) const +{ + return isl::checked::pw_multi_aff(*this).involves_param(id); +} + +boolean multi_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::checked::id(ctx(), id)); +} + +boolean multi_aff::involves_param(const isl::checked::id_list &list) const +{ + return isl::checked::pw_multi_aff(*this).involves_param(list); +} + +boolean multi_aff::isa_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).isa_multi_aff(); +} + +boolean multi_aff::isa_pw_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).isa_pw_multi_aff(); +} + +isl::checked::aff_list multi_aff::list() const +{ + auto res = isl_multi_aff_get_list(get()); + return manage(res); +} + +isl::checked::aff_list multi_aff::get_list() const +{ + return list(); +} + +isl::checked::multi_pw_aff multi_aff::max(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).max(multi2); +} + +isl::checked::multi_val multi_aff::max_multi_val() const +{ + return isl::checked::pw_multi_aff(*this).max_multi_val(); +} + +isl::checked::multi_pw_aff multi_aff::min(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).min(multi2); +} + +isl::checked::multi_val multi_aff::min_multi_val() const +{ + return isl::checked::pw_multi_aff(*this).min_multi_val(); +} + +isl::checked::multi_aff multi_aff::multi_val_on_domain(isl::checked::space space, isl::checked::multi_val mv) +{ + auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release()); + return manage(res); +} + +class size multi_aff::n_piece() const +{ + return isl::checked::pw_multi_aff(*this).n_piece(); +} + +isl::checked::multi_aff multi_aff::neg() const +{ + auto res = isl_multi_aff_neg(copy()); + return manage(res); +} + +boolean multi_aff::plain_is_empty() const +{ + return isl::checked::pw_multi_aff(*this).plain_is_empty(); +} + +boolean multi_aff::plain_is_equal(const isl::checked::multi_aff &multi2) const +{ + auto res = isl_multi_aff_plain_is_equal(get(), multi2.get()); + return manage(res); +} + +boolean multi_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).plain_is_equal(multi2); +} + +boolean multi_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).plain_is_equal(multi2); +} + +boolean multi_aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).plain_is_equal(pma2); +} + +boolean multi_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).plain_is_equal(upma2); +} + +boolean multi_aff::plain_is_equal(const isl::checked::aff &multi2) const +{ + return this->plain_is_equal(isl::checked::multi_aff(multi2)); +} + +isl::checked::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::checked::multi_aff multi_aff::product(isl::checked::multi_aff multi2) const +{ + auto res = isl_multi_aff_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).product(multi2); +} + +isl::checked::pw_multi_aff multi_aff::product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).product(pma2); +} + +isl::checked::multi_aff multi_aff::product(const isl::checked::aff &multi2) const +{ + return this->product(isl::checked::multi_aff(multi2)); +} + +isl::checked::multi_aff multi_aff::pullback(isl::checked::multi_aff ma2) const +{ + auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::pullback(const isl::checked::multi_pw_aff &mpa2) const +{ + return isl::checked::pw_multi_aff(*this).pullback(mpa2); +} + +isl::checked::pw_multi_aff multi_aff::pullback(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).pullback(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::pullback(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).pullback(upma2); +} + +isl::checked::multi_aff multi_aff::pullback(const isl::checked::aff &ma2) const +{ + return this->pullback(isl::checked::multi_aff(ma2)); +} + +isl::checked::pw_multi_aff_list multi_aff::pw_multi_aff_list() const +{ + return isl::checked::pw_multi_aff(*this).pw_multi_aff_list(); +} + +isl::checked::pw_multi_aff multi_aff::range_factor_domain() const +{ + return isl::checked::pw_multi_aff(*this).range_factor_domain(); +} + +isl::checked::pw_multi_aff multi_aff::range_factor_range() const +{ + return isl::checked::pw_multi_aff(*this).range_factor_range(); +} + +isl::checked::multi_aff multi_aff::range_map(isl::checked::space space) +{ + auto res = isl_multi_aff_range_map(space.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::range_product(isl::checked::multi_aff multi2) const +{ + auto res = isl_multi_aff_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).range_product(multi2); +} + +isl::checked::multi_union_pw_aff multi_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).range_product(multi2); +} + +isl::checked::pw_multi_aff multi_aff::range_product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).range_product(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).range_product(upma2); +} + +isl::checked::multi_aff multi_aff::range_product(const isl::checked::aff &multi2) const +{ + return this->range_product(isl::checked::multi_aff(multi2)); +} + +isl::checked::id multi_aff::range_tuple_id() const +{ + auto res = isl_multi_aff_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id multi_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::multi_aff multi_aff::reset_range_tuple_id() const +{ + auto res = isl_multi_aff_reset_range_tuple_id(copy()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::scale(isl::checked::multi_val mv) const +{ + auto res = isl_multi_aff_scale_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::scale(isl::checked::val v) const +{ + auto res = isl_multi_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_aff multi_aff::scale_down(isl::checked::multi_val mv) const +{ + auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::scale_down(isl::checked::val v) const +{ + auto res = isl_multi_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_aff multi_aff::set_at(int pos, isl::checked::aff el) const +{ + auto res = isl_multi_aff_set_at(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::set_at(int pos, const isl::checked::pw_aff &el) const +{ + return isl::checked::pw_multi_aff(*this).set_at(pos, el); +} + +isl::checked::multi_union_pw_aff multi_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const +{ + return isl::checked::pw_multi_aff(*this).set_at(pos, el); +} + +isl::checked::multi_aff multi_aff::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::multi_aff multi_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size multi_aff::size() const +{ + auto res = isl_multi_aff_size(get()); + return manage(res); +} + +isl::checked::space multi_aff::space() const +{ + auto res = isl_multi_aff_get_space(get()); + return manage(res); +} + +isl::checked::space multi_aff::get_space() const +{ + return space(); +} + +isl::checked::multi_aff multi_aff::sub(isl::checked::multi_aff multi2) const +{ + auto res = isl_multi_aff_sub(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::sub(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).sub(multi2); +} + +isl::checked::multi_union_pw_aff multi_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).sub(multi2); +} + +isl::checked::pw_multi_aff multi_aff::sub(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).sub(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).sub(upma2); +} + +isl::checked::multi_aff multi_aff::sub(const isl::checked::aff &multi2) const +{ + return this->sub(isl::checked::multi_aff(multi2)); +} + +isl::checked::pw_multi_aff multi_aff::subtract_domain(const isl::checked::set &set) const +{ + return isl::checked::pw_multi_aff(*this).subtract_domain(set); +} + +isl::checked::union_pw_multi_aff multi_aff::subtract_domain(const isl::checked::space &space) const +{ + return isl::checked::pw_multi_aff(*this).subtract_domain(space); +} + +isl::checked::union_pw_multi_aff multi_aff::subtract_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::pw_multi_aff(*this).subtract_domain(uset); +} + +isl::checked::pw_multi_aff_list multi_aff::to_list() const +{ + return isl::checked::pw_multi_aff(*this).to_list(); +} + +isl::checked::multi_pw_aff multi_aff::to_multi_pw_aff() const +{ + auto res = isl_multi_aff_to_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const +{ + auto res = isl_multi_aff_to_multi_union_pw_aff(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff multi_aff::to_pw_multi_aff() const +{ + auto res = isl_multi_aff_to_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).to_union_pw_multi_aff(); +} + +isl::checked::multi_aff multi_aff::unbind_params_insert_domain(isl::checked::multi_id domain) const +{ + auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_aff::union_add(const isl::checked::multi_pw_aff &mpa2) const +{ + return isl::checked::pw_multi_aff(*this).union_add(mpa2); +} + +isl::checked::multi_union_pw_aff multi_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const +{ + return isl::checked::pw_multi_aff(*this).union_add(mupa2); +} + +isl::checked::pw_multi_aff multi_aff::union_add(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).union_add(pma2); +} + +isl::checked::union_pw_multi_aff multi_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::pw_multi_aff(*this).union_add(upma2); +} + +isl::checked::multi_aff multi_aff::zero(isl::checked::space space) +{ + auto res = isl_multi_aff_zero(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj) +{ + char *str = isl_multi_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::multi_id +multi_id manage(__isl_take isl_multi_id *ptr) { + return multi_id(ptr); +} +multi_id manage_copy(__isl_keep isl_multi_id *ptr) { + ptr = isl_multi_id_copy(ptr); + return multi_id(ptr); +} + +multi_id::multi_id(__isl_take isl_multi_id *ptr) + : ptr(ptr) {} + +multi_id::multi_id() + : ptr(nullptr) {} + +multi_id::multi_id(const multi_id &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +multi_id::multi_id(isl::checked::space space, isl::checked::id_list list) +{ + auto res = isl_multi_id_from_id_list(space.release(), list.release()); + ptr = res; +} + +multi_id::multi_id(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +multi_id &multi_id::operator=(multi_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_id::~multi_id() { + if (ptr) + isl_multi_id_free(ptr); +} + +__isl_give isl_multi_id *multi_id::copy() const & { + return isl_multi_id_copy(ptr); +} + +__isl_keep isl_multi_id *multi_id::get() const { + return ptr; +} + +__isl_give isl_multi_id *multi_id::release() { + isl_multi_id *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_id::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx multi_id::ctx() const { + return isl::checked::ctx(isl_multi_id_get_ctx(ptr)); +} + +isl::checked::id multi_id::at(int pos) const +{ + auto res = isl_multi_id_get_at(get(), pos); + return manage(res); +} + +isl::checked::id multi_id::get_at(int pos) const +{ + return at(pos); +} + +isl::checked::multi_id multi_id::flat_range_product(isl::checked::multi_id multi2) const +{ + auto res = isl_multi_id_flat_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::id_list multi_id::list() const +{ + auto res = isl_multi_id_get_list(get()); + return manage(res); +} + +isl::checked::id_list multi_id::get_list() const +{ + return list(); +} + +boolean multi_id::plain_is_equal(const isl::checked::multi_id &multi2) const +{ + auto res = isl_multi_id_plain_is_equal(get(), multi2.get()); + return manage(res); +} + +isl::checked::multi_id multi_id::range_product(isl::checked::multi_id multi2) const +{ + auto res = isl_multi_id_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_id multi_id::set_at(int pos, isl::checked::id el) const +{ + auto res = isl_multi_id_set_at(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::multi_id multi_id::set_at(int pos, const std::string &el) const +{ + return this->set_at(pos, isl::checked::id(ctx(), el)); +} + +class size multi_id::size() const +{ + auto res = isl_multi_id_size(get()); + return manage(res); +} + +isl::checked::space multi_id::space() const +{ + auto res = isl_multi_id_get_space(get()); + return manage(res); +} + +isl::checked::space multi_id::get_space() const +{ + return space(); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_id &obj) +{ + char *str = isl_multi_id_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::multi_pw_aff +multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) { + return multi_pw_aff(ptr); +} +multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) { + ptr = isl_multi_pw_aff_copy(ptr); + return multi_pw_aff(ptr); +} + +multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr) + : ptr(ptr) {} + +multi_pw_aff::multi_pw_aff() + : ptr(nullptr) {} + +multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +multi_pw_aff::multi_pw_aff(isl::checked::aff aff) +{ + auto res = isl_multi_pw_aff_from_aff(aff.release()); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::checked::multi_aff ma) +{ + auto res = isl_multi_pw_aff_from_multi_aff(ma.release()); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::checked::pw_aff pa) +{ + auto res = isl_multi_pw_aff_from_pw_aff(pa.release()); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::checked::space space, isl::checked::pw_aff_list list) +{ + auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release()); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::checked::pw_multi_aff pma) +{ + auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release()); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_pw_aff::~multi_pw_aff() { + if (ptr) + isl_multi_pw_aff_free(ptr); +} + +__isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & { + return isl_multi_pw_aff_copy(ptr); +} + +__isl_keep isl_multi_pw_aff *multi_pw_aff::get() const { + return ptr; +} + +__isl_give isl_multi_pw_aff *multi_pw_aff::release() { + isl_multi_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx multi_pw_aff::ctx() const { + return isl::checked::ctx(isl_multi_pw_aff_get_ctx(ptr)); +} + +isl::checked::multi_pw_aff multi_pw_aff::add(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_add(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::add(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).add(multi2); +} + +isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::aff &multi2) const +{ + return this->add(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::multi_aff &multi2) const +{ + return this->add(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::pw_aff &multi2) const +{ + return this->add(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::add(const isl::checked::pw_multi_aff &multi2) const +{ + return this->add(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::add_constant(isl::checked::multi_val mv) const +{ + auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::add_constant(isl::checked::val v) const +{ + auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::add_constant(long v) const +{ + return this->add_constant(isl::checked::val(ctx(), v)); +} + +isl::checked::map multi_pw_aff::as_map() const +{ + auto res = isl_multi_pw_aff_as_map(copy()); + return manage(res); +} + +isl::checked::multi_aff multi_pw_aff::as_multi_aff() const +{ + auto res = isl_multi_pw_aff_as_multi_aff(copy()); + return manage(res); +} + +isl::checked::set multi_pw_aff::as_set() const +{ + auto res = isl_multi_pw_aff_as_set(copy()); + return manage(res); +} + +isl::checked::pw_aff multi_pw_aff::at(int pos) const +{ + auto res = isl_multi_pw_aff_get_at(get(), pos); + return manage(res); +} + +isl::checked::pw_aff multi_pw_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::checked::set multi_pw_aff::bind(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_pw_aff_bind(copy(), tuple.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::bind_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::coalesce() const +{ + auto res = isl_multi_pw_aff_coalesce(copy()); + return manage(res); +} + +isl::checked::set multi_pw_aff::domain() const +{ + auto res = isl_multi_pw_aff_domain(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::domain_reverse() const +{ + auto res = isl_multi_pw_aff_domain_reverse(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::aff &multi2) const +{ + return this->flat_range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::multi_aff &multi2) const +{ + return this->flat_range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::pw_aff &multi2) const +{ + return this->flat_range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::flat_range_product(const isl::checked::pw_multi_aff &multi2) const +{ + return this->flat_range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::gist(isl::checked::set set) const +{ + auto res = isl_multi_pw_aff_gist(copy(), set.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::gist(const isl::checked::union_set &context) const +{ + return isl::checked::multi_union_pw_aff(*this).gist(context); +} + +isl::checked::multi_pw_aff multi_pw_aff::gist(const isl::checked::basic_set &set) const +{ + return this->gist(isl::checked::set(set)); +} + +isl::checked::multi_pw_aff multi_pw_aff::gist(const isl::checked::point &set) const +{ + return this->gist(isl::checked::set(set)); +} + +isl::checked::multi_pw_aff multi_pw_aff::gist_params(isl::checked::set set) const +{ + auto res = isl_multi_pw_aff_gist_params(copy(), set.release()); + return manage(res); +} + +boolean multi_pw_aff::has_range_tuple_id() const +{ + auto res = isl_multi_pw_aff_has_range_tuple_id(get()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::identity() const +{ + auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::identity_on_domain(isl::checked::space space) +{ + auto res = isl_multi_pw_aff_identity_on_domain_space(space.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::insert_domain(isl::checked::space domain) const +{ + auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::intersect_domain(isl::checked::set domain) const +{ + auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::multi_union_pw_aff(*this).intersect_domain(uset); +} + +isl::checked::multi_pw_aff multi_pw_aff::intersect_domain(const isl::checked::basic_set &domain) const +{ + return this->intersect_domain(isl::checked::set(domain)); +} + +isl::checked::multi_pw_aff multi_pw_aff::intersect_domain(const isl::checked::point &domain) const +{ + return this->intersect_domain(isl::checked::set(domain)); +} + +isl::checked::multi_pw_aff multi_pw_aff::intersect_params(isl::checked::set set) const +{ + auto res = isl_multi_pw_aff_intersect_params(copy(), set.release()); + return manage(res); +} + +boolean multi_pw_aff::involves_nan() const +{ + auto res = isl_multi_pw_aff_involves_nan(get()); + return manage(res); +} + +boolean multi_pw_aff::involves_param(const isl::checked::id &id) const +{ + auto res = isl_multi_pw_aff_involves_param_id(get(), id.get()); + return manage(res); +} + +boolean multi_pw_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::checked::id(ctx(), id)); +} + +boolean multi_pw_aff::involves_param(const isl::checked::id_list &list) const +{ + auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get()); + return manage(res); +} + +boolean multi_pw_aff::isa_multi_aff() const +{ + auto res = isl_multi_pw_aff_isa_multi_aff(get()); + return manage(res); +} + +isl::checked::pw_aff_list multi_pw_aff::list() const +{ + auto res = isl_multi_pw_aff_get_list(get()); + return manage(res); +} + +isl::checked::pw_aff_list multi_pw_aff::get_list() const +{ + return list(); +} + +isl::checked::multi_pw_aff multi_pw_aff::max(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_max(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_pw_aff::max_multi_val() const +{ + auto res = isl_multi_pw_aff_max_multi_val(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::min(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_min(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_pw_aff::min_multi_val() const +{ + auto res = isl_multi_pw_aff_min_multi_val(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::neg() const +{ + auto res = isl_multi_pw_aff_neg(copy()); + return manage(res); +} + +boolean multi_pw_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const +{ + auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get()); + return manage(res); +} + +boolean multi_pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).plain_is_equal(multi2); +} + +boolean multi_pw_aff::plain_is_equal(const isl::checked::aff &multi2) const +{ + return this->plain_is_equal(isl::checked::multi_pw_aff(multi2)); +} + +boolean multi_pw_aff::plain_is_equal(const isl::checked::multi_aff &multi2) const +{ + return this->plain_is_equal(isl::checked::multi_pw_aff(multi2)); +} + +boolean multi_pw_aff::plain_is_equal(const isl::checked::pw_aff &multi2) const +{ + return this->plain_is_equal(isl::checked::multi_pw_aff(multi2)); +} + +boolean multi_pw_aff::plain_is_equal(const isl::checked::pw_multi_aff &multi2) const +{ + return this->plain_is_equal(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::product(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::pullback(isl::checked::multi_aff ma) const +{ + auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::pullback(isl::checked::multi_pw_aff mpa2) const +{ + auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::pullback(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::pullback(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::multi_union_pw_aff(*this).pullback(upma); +} + +isl::checked::multi_pw_aff multi_pw_aff::range_product(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).range_product(multi2); +} + +isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::aff &multi2) const +{ + return this->range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::multi_aff &multi2) const +{ + return this->range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::pw_aff &multi2) const +{ + return this->range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::range_product(const isl::checked::pw_multi_aff &multi2) const +{ + return this->range_product(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::id multi_pw_aff::range_tuple_id() const +{ + auto res = isl_multi_pw_aff_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id multi_pw_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const +{ + auto res = isl_multi_pw_aff_reset_range_tuple_id(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::scale(isl::checked::multi_val mv) const +{ + auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::scale(isl::checked::val v) const +{ + auto res = isl_multi_pw_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_pw_aff multi_pw_aff::scale_down(isl::checked::multi_val mv) const +{ + auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::scale_down(isl::checked::val v) const +{ + auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_pw_aff multi_pw_aff::set_at(int pos, isl::checked::pw_aff el) const +{ + auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const +{ + return isl::checked::multi_union_pw_aff(*this).set_at(pos, el); +} + +isl::checked::multi_pw_aff multi_pw_aff::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size multi_pw_aff::size() const +{ + auto res = isl_multi_pw_aff_size(get()); + return manage(res); +} + +isl::checked::space multi_pw_aff::space() const +{ + auto res = isl_multi_pw_aff_get_space(get()); + return manage(res); +} + +isl::checked::space multi_pw_aff::get_space() const +{ + return space(); +} + +isl::checked::multi_pw_aff multi_pw_aff::sub(isl::checked::multi_pw_aff multi2) const +{ + auto res = isl_multi_pw_aff_sub(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).sub(multi2); +} + +isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::aff &multi2) const +{ + return this->sub(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::multi_aff &multi2) const +{ + return this->sub(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::pw_aff &multi2) const +{ + return this->sub(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::sub(const isl::checked::pw_multi_aff &multi2) const +{ + return this->sub(isl::checked::multi_pw_aff(multi2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::checked::multi_id domain) const +{ + auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::multi_pw_aff multi_pw_aff::union_add(isl::checked::multi_pw_aff mpa2) const +{ + auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_pw_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const +{ + return isl::checked::multi_union_pw_aff(*this).union_add(mupa2); +} + +isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::aff &mpa2) const +{ + return this->union_add(isl::checked::multi_pw_aff(mpa2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::multi_aff &mpa2) const +{ + return this->union_add(isl::checked::multi_pw_aff(mpa2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::pw_aff &mpa2) const +{ + return this->union_add(isl::checked::multi_pw_aff(mpa2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::union_add(const isl::checked::pw_multi_aff &mpa2) const +{ + return this->union_add(isl::checked::multi_pw_aff(mpa2)); +} + +isl::checked::multi_pw_aff multi_pw_aff::zero(isl::checked::space space) +{ + auto res = isl_multi_pw_aff_zero(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj) +{ + char *str = isl_multi_pw_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::multi_union_pw_aff +multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) { + return multi_union_pw_aff(ptr); +} +multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) { + ptr = isl_multi_union_pw_aff_copy(ptr); + return multi_union_pw_aff(ptr); +} + +multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr) + : ptr(ptr) {} + +multi_union_pw_aff::multi_union_pw_aff() + : ptr(nullptr) {} + +multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +multi_union_pw_aff::multi_union_pw_aff(isl::checked::multi_pw_aff mpa) +{ + auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release()); + ptr = res; +} + +multi_union_pw_aff::multi_union_pw_aff(isl::checked::union_pw_aff upa) +{ + auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release()); + ptr = res; +} + +multi_union_pw_aff::multi_union_pw_aff(isl::checked::space space, isl::checked::union_pw_aff_list list) +{ + auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release()); + ptr = res; +} + +multi_union_pw_aff::multi_union_pw_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_union_pw_aff::~multi_union_pw_aff() { + if (ptr) + isl_multi_union_pw_aff_free(ptr); +} + +__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & { + return isl_multi_union_pw_aff_copy(ptr); +} + +__isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const { + return ptr; +} + +__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() { + isl_multi_union_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_union_pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx multi_union_pw_aff::ctx() const { + return isl::checked::ctx(isl_multi_union_pw_aff_get_ctx(ptr)); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::add(isl::checked::multi_union_pw_aff multi2) const +{ + auto res = isl_multi_union_pw_aff_add(copy(), multi2.release()); + return manage(res); +} + +isl::checked::union_pw_aff multi_union_pw_aff::at(int pos) const +{ + auto res = isl_multi_union_pw_aff_get_at(get(), pos); + return manage(res); +} + +isl::checked::union_pw_aff multi_union_pw_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::checked::union_set multi_union_pw_aff::bind(isl::checked::multi_id tuple) const +{ + auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::coalesce() const +{ + auto res = isl_multi_union_pw_aff_coalesce(copy()); + return manage(res); +} + +isl::checked::union_set multi_union_pw_aff::domain() const +{ + auto res = isl_multi_union_pw_aff_domain(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::checked::multi_union_pw_aff multi2) const +{ + auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::gist(isl::checked::union_set context) const +{ + auto res = isl_multi_union_pw_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::gist_params(isl::checked::set context) const +{ + auto res = isl_multi_union_pw_aff_gist_params(copy(), context.release()); + return manage(res); +} + +boolean multi_union_pw_aff::has_range_tuple_id() const +{ + auto res = isl_multi_union_pw_aff_has_range_tuple_id(get()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::checked::union_set uset) const +{ + auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::checked::set params) const +{ + auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release()); + return manage(res); +} + +boolean multi_union_pw_aff::involves_nan() const +{ + auto res = isl_multi_union_pw_aff_involves_nan(get()); + return manage(res); +} + +isl::checked::union_pw_aff_list multi_union_pw_aff::list() const +{ + auto res = isl_multi_union_pw_aff_get_list(get()); + return manage(res); +} + +isl::checked::union_pw_aff_list multi_union_pw_aff::get_list() const +{ + return list(); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::neg() const +{ + auto res = isl_multi_union_pw_aff_neg(copy()); + return manage(res); +} + +boolean multi_union_pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::pullback(isl::checked::union_pw_multi_aff upma) const +{ + auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::range_product(isl::checked::multi_union_pw_aff multi2) const +{ + auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::id multi_union_pw_aff::range_tuple_id() const +{ + auto res = isl_multi_union_pw_aff_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id multi_union_pw_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const +{ + auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::scale(isl::checked::multi_val mv) const +{ + auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::scale(isl::checked::val v) const +{ + auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::checked::multi_val mv) const +{ + auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::checked::val v) const +{ + auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::checked::union_pw_aff el) const +{ + auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size multi_union_pw_aff::size() const +{ + auto res = isl_multi_union_pw_aff_size(get()); + return manage(res); +} + +isl::checked::space multi_union_pw_aff::space() const +{ + auto res = isl_multi_union_pw_aff_get_space(get()); + return manage(res); +} + +isl::checked::space multi_union_pw_aff::get_space() const +{ + return space(); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::sub(isl::checked::multi_union_pw_aff multi2) const +{ + auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::union_add(isl::checked::multi_union_pw_aff mupa2) const +{ + auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff multi_union_pw_aff::zero(isl::checked::space space) +{ + auto res = isl_multi_union_pw_aff_zero(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj) +{ + char *str = isl_multi_union_pw_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::multi_val +multi_val manage(__isl_take isl_multi_val *ptr) { + return multi_val(ptr); +} +multi_val manage_copy(__isl_keep isl_multi_val *ptr) { + ptr = isl_multi_val_copy(ptr); + return multi_val(ptr); +} + +multi_val::multi_val(__isl_take isl_multi_val *ptr) + : ptr(ptr) {} + +multi_val::multi_val() + : ptr(nullptr) {} + +multi_val::multi_val(const multi_val &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +multi_val::multi_val(isl::checked::space space, isl::checked::val_list list) +{ + auto res = isl_multi_val_from_val_list(space.release(), list.release()); + ptr = res; +} + +multi_val::multi_val(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +multi_val &multi_val::operator=(multi_val obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_val::~multi_val() { + if (ptr) + isl_multi_val_free(ptr); +} + +__isl_give isl_multi_val *multi_val::copy() const & { + return isl_multi_val_copy(ptr); +} + +__isl_keep isl_multi_val *multi_val::get() const { + return ptr; +} + +__isl_give isl_multi_val *multi_val::release() { + isl_multi_val *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_val::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx multi_val::ctx() const { + return isl::checked::ctx(isl_multi_val_get_ctx(ptr)); +} + +isl::checked::multi_val multi_val::add(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_add(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::add(isl::checked::val v) const +{ + auto res = isl_multi_val_add_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::add(long v) const +{ + return this->add(isl::checked::val(ctx(), v)); +} + +isl::checked::val multi_val::at(int pos) const +{ + auto res = isl_multi_val_get_at(get(), pos); + return manage(res); +} + +isl::checked::val multi_val::get_at(int pos) const +{ + return at(pos); +} + +isl::checked::multi_val multi_val::flat_range_product(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_flat_range_product(copy(), multi2.release()); + return manage(res); +} + +boolean multi_val::has_range_tuple_id() const +{ + auto res = isl_multi_val_has_range_tuple_id(get()); + return manage(res); +} + +boolean multi_val::involves_nan() const +{ + auto res = isl_multi_val_involves_nan(get()); + return manage(res); +} + +isl::checked::val_list multi_val::list() const +{ + auto res = isl_multi_val_get_list(get()); + return manage(res); +} + +isl::checked::val_list multi_val::get_list() const +{ + return list(); +} + +isl::checked::multi_val multi_val::max(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_max(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::min(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_min(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::neg() const +{ + auto res = isl_multi_val_neg(copy()); + return manage(res); +} + +boolean multi_val::plain_is_equal(const isl::checked::multi_val &multi2) const +{ + auto res = isl_multi_val_plain_is_equal(get(), multi2.get()); + return manage(res); +} + +isl::checked::multi_val multi_val::product(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::range_product(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_range_product(copy(), multi2.release()); + return manage(res); +} + +isl::checked::id multi_val::range_tuple_id() const +{ + auto res = isl_multi_val_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id multi_val::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::multi_val multi_val::reset_range_tuple_id() const +{ + auto res = isl_multi_val_reset_range_tuple_id(copy()); + return manage(res); +} + +isl::checked::multi_val multi_val::scale(isl::checked::multi_val mv) const +{ + auto res = isl_multi_val_scale_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::scale(isl::checked::val v) const +{ + auto res = isl_multi_val_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_val multi_val::scale_down(isl::checked::multi_val mv) const +{ + auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::scale_down(isl::checked::val v) const +{ + auto res = isl_multi_val_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_val multi_val::set_at(int pos, isl::checked::val el) const +{ + auto res = isl_multi_val_set_at(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::set_at(int pos, long el) const +{ + return this->set_at(pos, isl::checked::val(ctx(), el)); +} + +isl::checked::multi_val multi_val::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_multi_val_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size multi_val::size() const +{ + auto res = isl_multi_val_size(get()); + return manage(res); +} + +isl::checked::space multi_val::space() const +{ + auto res = isl_multi_val_get_space(get()); + return manage(res); +} + +isl::checked::space multi_val::get_space() const +{ + return space(); +} + +isl::checked::multi_val multi_val::sub(isl::checked::multi_val multi2) const +{ + auto res = isl_multi_val_sub(copy(), multi2.release()); + return manage(res); +} + +isl::checked::multi_val multi_val::zero(isl::checked::space space) +{ + auto res = isl_multi_val_zero(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_val &obj) +{ + char *str = isl_multi_val_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::point +point manage(__isl_take isl_point *ptr) { + return point(ptr); +} +point manage_copy(__isl_keep isl_point *ptr) { + ptr = isl_point_copy(ptr); + return point(ptr); +} + +point::point(__isl_take isl_point *ptr) + : ptr(ptr) {} + +point::point() + : ptr(nullptr) {} + +point::point(const point &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +point &point::operator=(point obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +point::~point() { + if (ptr) + isl_point_free(ptr); +} + +__isl_give isl_point *point::copy() const & { + return isl_point_copy(ptr); +} + +__isl_keep isl_point *point::get() const { + return ptr; +} + +__isl_give isl_point *point::release() { + isl_point *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool point::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx point::ctx() const { + return isl::checked::ctx(isl_point_get_ctx(ptr)); +} + +isl::checked::basic_set point::affine_hull() const +{ + return isl::checked::basic_set(*this).affine_hull(); +} + +isl::checked::basic_set point::apply(const isl::checked::basic_map &bmap) const +{ + return isl::checked::basic_set(*this).apply(bmap); +} + +isl::checked::set point::apply(const isl::checked::map &map) const +{ + return isl::checked::basic_set(*this).apply(map); +} + +isl::checked::union_set point::apply(const isl::checked::union_map &umap) const +{ + return isl::checked::basic_set(*this).apply(umap); +} + +isl::checked::pw_multi_aff point::as_pw_multi_aff() const +{ + return isl::checked::basic_set(*this).as_pw_multi_aff(); +} + +isl::checked::set point::as_set() const +{ + return isl::checked::basic_set(*this).as_set(); +} + +isl::checked::set point::bind(const isl::checked::multi_id &tuple) const +{ + return isl::checked::basic_set(*this).bind(tuple); +} + +isl::checked::set point::coalesce() const +{ + return isl::checked::basic_set(*this).coalesce(); +} + +isl::checked::set point::complement() const +{ + return isl::checked::basic_set(*this).complement(); +} + +isl::checked::union_set point::compute_divs() const +{ + return isl::checked::basic_set(*this).compute_divs(); +} + +isl::checked::basic_set point::detect_equalities() const +{ + return isl::checked::basic_set(*this).detect_equalities(); +} + +isl::checked::val point::dim_max_val(int pos) const +{ + return isl::checked::basic_set(*this).dim_max_val(pos); +} + +isl::checked::val point::dim_min_val(int pos) const +{ + return isl::checked::basic_set(*this).dim_min_val(pos); +} + +isl::checked::set point::drop_unused_params() const +{ + return isl::checked::basic_set(*this).drop_unused_params(); +} + +boolean point::every_set(const std::function &test) const +{ + return isl::checked::basic_set(*this).every_set(test); +} + +isl::checked::set point::extract_set(const isl::checked::space &space) const +{ + return isl::checked::basic_set(*this).extract_set(space); +} + +isl::checked::basic_set point::flatten() const +{ + return isl::checked::basic_set(*this).flatten(); +} + +stat point::foreach_basic_set(const std::function &fn) const +{ + return isl::checked::basic_set(*this).foreach_basic_set(fn); +} + +stat point::foreach_point(const std::function &fn) const +{ + return isl::checked::basic_set(*this).foreach_point(fn); +} + +stat point::foreach_set(const std::function &fn) const +{ + return isl::checked::basic_set(*this).foreach_set(fn); +} + +isl::checked::basic_set point::gist(const isl::checked::basic_set &context) const +{ + return isl::checked::basic_set(*this).gist(context); +} + +isl::checked::set point::gist(const isl::checked::set &context) const +{ + return isl::checked::basic_set(*this).gist(context); +} + +isl::checked::union_set point::gist(const isl::checked::union_set &context) const +{ + return isl::checked::basic_set(*this).gist(context); +} + +isl::checked::set point::gist_params(const isl::checked::set &context) const +{ + return isl::checked::basic_set(*this).gist_params(context); +} + +isl::checked::map point::identity() const +{ + return isl::checked::basic_set(*this).identity(); +} + +isl::checked::pw_aff point::indicator_function() const +{ + return isl::checked::basic_set(*this).indicator_function(); +} + +isl::checked::map point::insert_domain(const isl::checked::space &domain) const +{ + return isl::checked::basic_set(*this).insert_domain(domain); +} + +isl::checked::basic_set point::intersect(const isl::checked::basic_set &bset2) const +{ + return isl::checked::basic_set(*this).intersect(bset2); +} + +isl::checked::set point::intersect(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).intersect(set2); +} + +isl::checked::union_set point::intersect(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).intersect(uset2); +} + +isl::checked::basic_set point::intersect_params(const isl::checked::basic_set &bset2) const +{ + return isl::checked::basic_set(*this).intersect_params(bset2); +} + +isl::checked::set point::intersect_params(const isl::checked::set ¶ms) const +{ + return isl::checked::basic_set(*this).intersect_params(params); +} + +boolean point::involves_locals() const +{ + return isl::checked::basic_set(*this).involves_locals(); +} + +boolean point::is_disjoint(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).is_disjoint(set2); +} + +boolean point::is_disjoint(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).is_disjoint(uset2); +} + +boolean point::is_empty() const +{ + return isl::checked::basic_set(*this).is_empty(); +} + +boolean point::is_equal(const isl::checked::basic_set &bset2) const +{ + return isl::checked::basic_set(*this).is_equal(bset2); +} + +boolean point::is_equal(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).is_equal(set2); +} + +boolean point::is_equal(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).is_equal(uset2); +} + +boolean point::is_singleton() const +{ + return isl::checked::basic_set(*this).is_singleton(); +} + +boolean point::is_strict_subset(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).is_strict_subset(set2); +} + +boolean point::is_strict_subset(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).is_strict_subset(uset2); +} + +boolean point::is_subset(const isl::checked::basic_set &bset2) const +{ + return isl::checked::basic_set(*this).is_subset(bset2); +} + +boolean point::is_subset(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).is_subset(set2); +} + +boolean point::is_subset(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).is_subset(uset2); +} + +boolean point::is_wrapping() const +{ + return isl::checked::basic_set(*this).is_wrapping(); +} + +boolean point::isa_set() const +{ + return isl::checked::basic_set(*this).isa_set(); +} + +isl::checked::fixed_box point::lattice_tile() const +{ + return isl::checked::basic_set(*this).lattice_tile(); +} + +isl::checked::set point::lexmax() const +{ + return isl::checked::basic_set(*this).lexmax(); +} + +isl::checked::pw_multi_aff point::lexmax_pw_multi_aff() const +{ + return isl::checked::basic_set(*this).lexmax_pw_multi_aff(); +} + +isl::checked::set point::lexmin() const +{ + return isl::checked::basic_set(*this).lexmin(); +} + +isl::checked::pw_multi_aff point::lexmin_pw_multi_aff() const +{ + return isl::checked::basic_set(*this).lexmin_pw_multi_aff(); +} + +isl::checked::set point::lower_bound(const isl::checked::multi_pw_aff &lower) const +{ + return isl::checked::basic_set(*this).lower_bound(lower); +} + +isl::checked::set point::lower_bound(const isl::checked::multi_val &lower) const +{ + return isl::checked::basic_set(*this).lower_bound(lower); +} + +isl::checked::multi_pw_aff point::max_multi_pw_aff() const +{ + return isl::checked::basic_set(*this).max_multi_pw_aff(); +} + +isl::checked::val point::max_val(const isl::checked::aff &obj) const +{ + return isl::checked::basic_set(*this).max_val(obj); +} + +isl::checked::multi_pw_aff point::min_multi_pw_aff() const +{ + return isl::checked::basic_set(*this).min_multi_pw_aff(); +} + +isl::checked::val point::min_val(const isl::checked::aff &obj) const +{ + return isl::checked::basic_set(*this).min_val(obj); +} + +isl::checked::multi_val point::multi_val() const +{ + auto res = isl_point_get_multi_val(get()); + return manage(res); +} + +isl::checked::multi_val point::get_multi_val() const +{ + return multi_val(); +} + +class size point::n_basic_set() const +{ + return isl::checked::basic_set(*this).n_basic_set(); +} + +isl::checked::pw_aff point::param_pw_aff_on_domain(const isl::checked::id &id) const +{ + return isl::checked::basic_set(*this).param_pw_aff_on_domain(id); +} + +isl::checked::pw_aff point::param_pw_aff_on_domain(const std::string &id) const +{ + return this->param_pw_aff_on_domain(isl::checked::id(ctx(), id)); +} + +isl::checked::basic_set point::params() const +{ + return isl::checked::basic_set(*this).params(); +} + +isl::checked::multi_val point::plain_multi_val_if_fixed() const +{ + return isl::checked::basic_set(*this).plain_multi_val_if_fixed(); +} + +isl::checked::basic_set point::polyhedral_hull() const +{ + return isl::checked::basic_set(*this).polyhedral_hull(); +} + +isl::checked::set point::preimage(const isl::checked::multi_aff &ma) const +{ + return isl::checked::basic_set(*this).preimage(ma); +} + +isl::checked::set point::preimage(const isl::checked::multi_pw_aff &mpa) const +{ + return isl::checked::basic_set(*this).preimage(mpa); +} + +isl::checked::set point::preimage(const isl::checked::pw_multi_aff &pma) const +{ + return isl::checked::basic_set(*this).preimage(pma); +} + +isl::checked::union_set point::preimage(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::basic_set(*this).preimage(upma); +} + +isl::checked::set point::product(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).product(set2); +} + +isl::checked::set point::project_out_all_params() const +{ + return isl::checked::basic_set(*this).project_out_all_params(); +} + +isl::checked::set point::project_out_param(const isl::checked::id &id) const +{ + return isl::checked::basic_set(*this).project_out_param(id); +} + +isl::checked::set point::project_out_param(const std::string &id) const +{ + return this->project_out_param(isl::checked::id(ctx(), id)); +} + +isl::checked::set point::project_out_param(const isl::checked::id_list &list) const +{ + return isl::checked::basic_set(*this).project_out_param(list); +} + +isl::checked::pw_aff point::pw_aff_on_domain(const isl::checked::val &v) const +{ + return isl::checked::basic_set(*this).pw_aff_on_domain(v); +} + +isl::checked::pw_aff point::pw_aff_on_domain(long v) const +{ + return this->pw_aff_on_domain(isl::checked::val(ctx(), v)); +} + +isl::checked::pw_multi_aff point::pw_multi_aff_on_domain(const isl::checked::multi_val &mv) const +{ + return isl::checked::basic_set(*this).pw_multi_aff_on_domain(mv); +} + +isl::checked::basic_set point::sample() const +{ + return isl::checked::basic_set(*this).sample(); +} + +isl::checked::point point::sample_point() const +{ + return isl::checked::basic_set(*this).sample_point(); +} + +isl::checked::set_list point::set_list() const +{ + return isl::checked::basic_set(*this).set_list(); +} + +isl::checked::fixed_box point::simple_fixed_box_hull() const +{ + return isl::checked::basic_set(*this).simple_fixed_box_hull(); +} + +isl::checked::space point::space() const +{ + return isl::checked::basic_set(*this).space(); +} + +isl::checked::val point::stride(int pos) const +{ + return isl::checked::basic_set(*this).stride(pos); +} + +isl::checked::set point::subtract(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).subtract(set2); +} + +isl::checked::union_set point::subtract(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).subtract(uset2); +} + +isl::checked::set_list point::to_list() const +{ + return isl::checked::basic_set(*this).to_list(); +} + +isl::checked::set point::to_set() const +{ + auto res = isl_point_to_set(copy()); + return manage(res); +} + +isl::checked::union_set point::to_union_set() const +{ + return isl::checked::basic_set(*this).to_union_set(); +} + +isl::checked::map point::translation() const +{ + return isl::checked::basic_set(*this).translation(); +} + +class size point::tuple_dim() const +{ + return isl::checked::basic_set(*this).tuple_dim(); +} + +isl::checked::set point::unbind_params(const isl::checked::multi_id &tuple) const +{ + return isl::checked::basic_set(*this).unbind_params(tuple); +} + +isl::checked::map point::unbind_params_insert_domain(const isl::checked::multi_id &domain) const +{ + return isl::checked::basic_set(*this).unbind_params_insert_domain(domain); +} + +isl::checked::set point::unite(const isl::checked::basic_set &bset2) const +{ + return isl::checked::basic_set(*this).unite(bset2); +} + +isl::checked::set point::unite(const isl::checked::set &set2) const +{ + return isl::checked::basic_set(*this).unite(set2); +} + +isl::checked::union_set point::unite(const isl::checked::union_set &uset2) const +{ + return isl::checked::basic_set(*this).unite(uset2); +} + +isl::checked::basic_set point::unshifted_simple_hull() const +{ + return isl::checked::basic_set(*this).unshifted_simple_hull(); +} + +isl::checked::map point::unwrap() const +{ + return isl::checked::basic_set(*this).unwrap(); +} + +isl::checked::set point::upper_bound(const isl::checked::multi_pw_aff &upper) const +{ + return isl::checked::basic_set(*this).upper_bound(upper); +} + +isl::checked::set point::upper_bound(const isl::checked::multi_val &upper) const +{ + return isl::checked::basic_set(*this).upper_bound(upper); +} + +isl::checked::set point::wrapped_reverse() const +{ + return isl::checked::basic_set(*this).wrapped_reverse(); +} + +inline std::ostream &operator<<(std::ostream &os, const point &obj) +{ + char *str = isl_point_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::pw_aff +pw_aff manage(__isl_take isl_pw_aff *ptr) { + return pw_aff(ptr); +} +pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) { + ptr = isl_pw_aff_copy(ptr); + return pw_aff(ptr); +} + +pw_aff::pw_aff(__isl_take isl_pw_aff *ptr) + : ptr(ptr) {} + +pw_aff::pw_aff() + : ptr(nullptr) {} + +pw_aff::pw_aff(const pw_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +pw_aff::pw_aff(isl::checked::aff aff) +{ + auto res = isl_pw_aff_from_aff(aff.release()); + ptr = res; +} + +pw_aff::pw_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +pw_aff &pw_aff::operator=(pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_aff::~pw_aff() { + if (ptr) + isl_pw_aff_free(ptr); +} + +__isl_give isl_pw_aff *pw_aff::copy() const & { + return isl_pw_aff_copy(ptr); +} + +__isl_keep isl_pw_aff *pw_aff::get() const { + return ptr; +} + +__isl_give isl_pw_aff *pw_aff::release() { + isl_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx pw_aff::ctx() const { + return isl::checked::ctx(isl_pw_aff_get_ctx(ptr)); +} + +isl::checked::multi_pw_aff pw_aff::add(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).add(multi2); +} + +isl::checked::multi_union_pw_aff pw_aff::add(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::union_pw_aff(*this).add(multi2); +} + +isl::checked::pw_aff pw_aff::add(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_add(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_aff::add(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).add(pma2); +} + +isl::checked::union_pw_aff pw_aff::add(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::union_pw_aff(*this).add(upa2); +} + +isl::checked::union_pw_multi_aff pw_aff::add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).add(upma2); +} + +isl::checked::pw_aff pw_aff::add(const isl::checked::aff &pwaff2) const +{ + return this->add(isl::checked::pw_aff(pwaff2)); +} + +isl::checked::pw_aff pw_aff::add_constant(isl::checked::val v) const +{ + auto res = isl_pw_aff_add_constant_val(copy(), v.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::add_constant(long v) const +{ + return this->add_constant(isl::checked::val(ctx(), v)); +} + +isl::checked::pw_multi_aff pw_aff::add_constant(const isl::checked::multi_val &mv) const +{ + return isl::checked::pw_multi_aff(*this).add_constant(mv); +} + +isl::checked::union_pw_multi_aff pw_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).apply(upma2); +} + +isl::checked::aff pw_aff::as_aff() const +{ + auto res = isl_pw_aff_as_aff(copy()); + return manage(res); +} + +isl::checked::map pw_aff::as_map() const +{ + auto res = isl_pw_aff_as_map(copy()); + return manage(res); +} + +isl::checked::multi_aff pw_aff::as_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).as_multi_aff(); +} + +isl::checked::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const +{ + return isl::checked::union_pw_aff(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff pw_aff::as_pw_multi_aff() const +{ + return isl::checked::union_pw_aff(*this).as_pw_multi_aff(); +} + +isl::checked::set pw_aff::as_set() const +{ + return isl::checked::pw_multi_aff(*this).as_set(); +} + +isl::checked::union_map pw_aff::as_union_map() const +{ + return isl::checked::union_pw_aff(*this).as_union_map(); +} + +isl::checked::pw_aff pw_aff::at(int pos) const +{ + return isl::checked::pw_multi_aff(*this).at(pos); +} + +isl::checked::set pw_aff::bind(const isl::checked::multi_id &tuple) const +{ + return isl::checked::multi_pw_aff(*this).bind(tuple); +} + +isl::checked::set pw_aff::bind(isl::checked::id id) const +{ + auto res = isl_pw_aff_bind_id(copy(), id.release()); + return manage(res); +} + +isl::checked::set pw_aff::bind(const std::string &id) const +{ + return this->bind(isl::checked::id(ctx(), id)); +} + +isl::checked::pw_aff pw_aff::bind_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_pw_aff_bind_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::ceil() const +{ + auto res = isl_pw_aff_ceil(copy()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::coalesce() const +{ + auto res = isl_pw_aff_coalesce(copy()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::cond(isl::checked::pw_aff pwaff_true, isl::checked::pw_aff pwaff_false) const +{ + auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::div(isl::checked::pw_aff pa2) const +{ + auto res = isl_pw_aff_div(copy(), pa2.release()); + return manage(res); +} + +isl::checked::set pw_aff::domain() const +{ + auto res = isl_pw_aff_domain(copy()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::domain_reverse() const +{ + auto res = isl_pw_aff_domain_reverse(copy()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::drop_unused_params() const +{ + auto res = isl_pw_aff_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::set pw_aff::eq_set(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_eq_set(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::val pw_aff::eval(isl::checked::point pnt) const +{ + auto res = isl_pw_aff_eval(copy(), pnt.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::checked::space &space) const +{ + return isl::checked::union_pw_aff(*this).extract_pw_multi_aff(space); +} + +isl::checked::multi_pw_aff pw_aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).flat_range_product(multi2); +} + +isl::checked::multi_union_pw_aff pw_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::union_pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::pw_multi_aff pw_aff::flat_range_product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).flat_range_product(pma2); +} + +isl::checked::union_pw_multi_aff pw_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).flat_range_product(upma2); +} + +isl::checked::pw_aff pw_aff::floor() const +{ + auto res = isl_pw_aff_floor(copy()); + return manage(res); +} + +stat pw_aff::foreach_piece(const std::function &fn) const +{ + return isl::checked::pw_multi_aff(*this).foreach_piece(fn); +} + +isl::checked::set pw_aff::ge_set(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_ge_set(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::gist(isl::checked::set context) const +{ + auto res = isl_pw_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_pw_aff pw_aff::gist(const isl::checked::union_set &context) const +{ + return isl::checked::union_pw_aff(*this).gist(context); +} + +isl::checked::pw_aff pw_aff::gist(const isl::checked::basic_set &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::pw_aff pw_aff::gist(const isl::checked::point &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::pw_aff pw_aff::gist_params(isl::checked::set context) const +{ + auto res = isl_pw_aff_gist_params(copy(), context.release()); + return manage(res); +} + +isl::checked::set pw_aff::gt_set(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_gt_set(copy(), pwaff2.release()); + return manage(res); +} + +boolean pw_aff::has_range_tuple_id() const +{ + return isl::checked::pw_multi_aff(*this).has_range_tuple_id(); +} + +isl::checked::multi_pw_aff pw_aff::identity() const +{ + return isl::checked::pw_multi_aff(*this).identity(); +} + +isl::checked::pw_aff pw_aff::insert_domain(isl::checked::space domain) const +{ + auto res = isl_pw_aff_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::intersect_domain(isl::checked::set set) const +{ + auto res = isl_pw_aff_intersect_domain(copy(), set.release()); + return manage(res); +} + +isl::checked::union_pw_aff pw_aff::intersect_domain(const isl::checked::space &space) const +{ + return isl::checked::union_pw_aff(*this).intersect_domain(space); +} + +isl::checked::union_pw_aff pw_aff::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_aff(*this).intersect_domain(uset); +} + +isl::checked::pw_aff pw_aff::intersect_domain(const isl::checked::basic_set &set) const +{ + return this->intersect_domain(isl::checked::set(set)); +} + +isl::checked::pw_aff pw_aff::intersect_domain(const isl::checked::point &set) const +{ + return this->intersect_domain(isl::checked::set(set)); +} + +isl::checked::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::checked::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::checked::pw_aff pw_aff::intersect_params(isl::checked::set set) const +{ + auto res = isl_pw_aff_intersect_params(copy(), set.release()); + return manage(res); +} + +boolean pw_aff::involves_locals() const +{ + return isl::checked::pw_multi_aff(*this).involves_locals(); +} + +boolean pw_aff::involves_nan() const +{ + return isl::checked::multi_pw_aff(*this).involves_nan(); +} + +boolean pw_aff::involves_param(const isl::checked::id &id) const +{ + return isl::checked::pw_multi_aff(*this).involves_param(id); +} + +boolean pw_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::checked::id(ctx(), id)); +} + +boolean pw_aff::involves_param(const isl::checked::id_list &list) const +{ + return isl::checked::pw_multi_aff(*this).involves_param(list); +} + +boolean pw_aff::isa_aff() const +{ + auto res = isl_pw_aff_isa_aff(get()); + return manage(res); +} + +boolean pw_aff::isa_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).isa_multi_aff(); +} + +boolean pw_aff::isa_pw_multi_aff() const +{ + return isl::checked::union_pw_aff(*this).isa_pw_multi_aff(); +} + +isl::checked::set pw_aff::le_set(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_le_set(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_aff_list pw_aff::list() const +{ + return isl::checked::multi_pw_aff(*this).list(); +} + +isl::checked::set pw_aff::lt_set(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_lt_set(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_aff::max(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).max(multi2); +} + +isl::checked::pw_aff pw_aff::max(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_max(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::max(const isl::checked::aff &pwaff2) const +{ + return this->max(isl::checked::pw_aff(pwaff2)); +} + +isl::checked::multi_val pw_aff::max_multi_val() const +{ + return isl::checked::pw_multi_aff(*this).max_multi_val(); +} + +isl::checked::val pw_aff::max_val() const +{ + auto res = isl_pw_aff_max_val(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_aff::min(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).min(multi2); +} + +isl::checked::pw_aff pw_aff::min(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_min(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::min(const isl::checked::aff &pwaff2) const +{ + return this->min(isl::checked::pw_aff(pwaff2)); +} + +isl::checked::multi_val pw_aff::min_multi_val() const +{ + return isl::checked::pw_multi_aff(*this).min_multi_val(); +} + +isl::checked::val pw_aff::min_val() const +{ + auto res = isl_pw_aff_min_val(copy()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::mod(isl::checked::val mod) const +{ + auto res = isl_pw_aff_mod_val(copy(), mod.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::mod(long mod) const +{ + return this->mod(isl::checked::val(ctx(), mod)); +} + +isl::checked::pw_aff pw_aff::mul(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_mul(copy(), pwaff2.release()); + return manage(res); +} + +class size pw_aff::n_piece() const +{ + return isl::checked::pw_multi_aff(*this).n_piece(); +} + +isl::checked::set pw_aff::ne_set(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_ne_set(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::neg() const +{ + auto res = isl_pw_aff_neg(copy()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::param_on_domain(isl::checked::set domain, isl::checked::id id) +{ + auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release()); + return manage(res); +} + +isl::checked::set pw_aff::params() const +{ + auto res = isl_pw_aff_params(copy()); + return manage(res); +} + +boolean pw_aff::plain_is_empty() const +{ + return isl::checked::union_pw_aff(*this).plain_is_empty(); +} + +boolean pw_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).plain_is_equal(multi2); +} + +boolean pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::union_pw_aff(*this).plain_is_equal(multi2); +} + +boolean pw_aff::plain_is_equal(const isl::checked::pw_aff &pwaff2) const +{ + auto res = isl_pw_aff_plain_is_equal(get(), pwaff2.get()); + return manage(res); +} + +boolean pw_aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).plain_is_equal(pma2); +} + +boolean pw_aff::plain_is_equal(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::union_pw_aff(*this).plain_is_equal(upa2); +} + +boolean pw_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).plain_is_equal(upma2); +} + +boolean pw_aff::plain_is_equal(const isl::checked::aff &pwaff2) const +{ + return this->plain_is_equal(isl::checked::pw_aff(pwaff2)); +} + +isl::checked::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::checked::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::checked::multi_pw_aff pw_aff::product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).product(multi2); +} + +isl::checked::pw_multi_aff pw_aff::product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).product(pma2); +} + +isl::checked::pw_aff pw_aff::pullback(isl::checked::multi_aff ma) const +{ + auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::pullback(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::pullback(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_pw_aff pw_aff::pullback(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::union_pw_aff(*this).pullback(upma); +} + +isl::checked::pw_multi_aff_list pw_aff::pw_multi_aff_list() const +{ + return isl::checked::union_pw_aff(*this).pw_multi_aff_list(); +} + +isl::checked::pw_multi_aff pw_aff::range_factor_domain() const +{ + return isl::checked::pw_multi_aff(*this).range_factor_domain(); +} + +isl::checked::pw_multi_aff pw_aff::range_factor_range() const +{ + return isl::checked::pw_multi_aff(*this).range_factor_range(); +} + +isl::checked::multi_pw_aff pw_aff::range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).range_product(multi2); +} + +isl::checked::multi_union_pw_aff pw_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::union_pw_aff(*this).range_product(multi2); +} + +isl::checked::pw_multi_aff pw_aff::range_product(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).range_product(pma2); +} + +isl::checked::union_pw_multi_aff pw_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).range_product(upma2); +} + +isl::checked::id pw_aff::range_tuple_id() const +{ + return isl::checked::pw_multi_aff(*this).range_tuple_id(); +} + +isl::checked::multi_pw_aff pw_aff::reset_range_tuple_id() const +{ + return isl::checked::multi_pw_aff(*this).reset_range_tuple_id(); +} + +isl::checked::pw_aff pw_aff::scale(isl::checked::val v) const +{ + auto res = isl_pw_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::pw_multi_aff pw_aff::scale(const isl::checked::multi_val &mv) const +{ + return isl::checked::pw_multi_aff(*this).scale(mv); +} + +isl::checked::pw_aff pw_aff::scale_down(isl::checked::val f) const +{ + auto res = isl_pw_aff_scale_down_val(copy(), f.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::scale_down(long f) const +{ + return this->scale_down(isl::checked::val(ctx(), f)); +} + +isl::checked::pw_multi_aff pw_aff::scale_down(const isl::checked::multi_val &mv) const +{ + return isl::checked::pw_multi_aff(*this).scale_down(mv); +} + +isl::checked::multi_pw_aff pw_aff::set_at(int pos, const isl::checked::pw_aff &el) const +{ + return isl::checked::pw_multi_aff(*this).set_at(pos, el); +} + +isl::checked::multi_union_pw_aff pw_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const +{ + return isl::checked::union_pw_aff(*this).set_at(pos, el); +} + +isl::checked::pw_multi_aff pw_aff::set_range_tuple(const isl::checked::id &id) const +{ + return isl::checked::pw_multi_aff(*this).set_range_tuple(id); +} + +isl::checked::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size pw_aff::size() const +{ + return isl::checked::multi_pw_aff(*this).size(); +} + +isl::checked::space pw_aff::space() const +{ + auto res = isl_pw_aff_get_space(get()); + return manage(res); +} + +isl::checked::space pw_aff::get_space() const +{ + return space(); +} + +isl::checked::multi_pw_aff pw_aff::sub(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::pw_multi_aff(*this).sub(multi2); +} + +isl::checked::multi_union_pw_aff pw_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::union_pw_aff(*this).sub(multi2); +} + +isl::checked::pw_aff pw_aff::sub(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_sub(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_aff::sub(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).sub(pma2); +} + +isl::checked::union_pw_aff pw_aff::sub(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::union_pw_aff(*this).sub(upa2); +} + +isl::checked::union_pw_multi_aff pw_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).sub(upma2); +} + +isl::checked::pw_aff pw_aff::sub(const isl::checked::aff &pwaff2) const +{ + return this->sub(isl::checked::pw_aff(pwaff2)); +} + +isl::checked::pw_aff pw_aff::subtract_domain(isl::checked::set set) const +{ + auto res = isl_pw_aff_subtract_domain(copy(), set.release()); + return manage(res); +} + +isl::checked::union_pw_aff pw_aff::subtract_domain(const isl::checked::space &space) const +{ + return isl::checked::union_pw_aff(*this).subtract_domain(space); +} + +isl::checked::union_pw_aff pw_aff::subtract_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_aff(*this).subtract_domain(uset); +} + +isl::checked::pw_aff pw_aff::subtract_domain(const isl::checked::basic_set &set) const +{ + return this->subtract_domain(isl::checked::set(set)); +} + +isl::checked::pw_aff pw_aff::subtract_domain(const isl::checked::point &set) const +{ + return this->subtract_domain(isl::checked::set(set)); +} + +isl::checked::pw_aff pw_aff::tdiv_q(isl::checked::pw_aff pa2) const +{ + auto res = isl_pw_aff_tdiv_q(copy(), pa2.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff::tdiv_r(isl::checked::pw_aff pa2) const +{ + auto res = isl_pw_aff_tdiv_r(copy(), pa2.release()); + return manage(res); +} + +isl::checked::pw_aff_list pw_aff::to_list() const +{ + auto res = isl_pw_aff_to_list(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_aff::to_multi_pw_aff() const +{ + return isl::checked::pw_multi_aff(*this).to_multi_pw_aff(); +} + +isl::checked::union_pw_aff pw_aff::to_union_pw_aff() const +{ + auto res = isl_pw_aff_to_union_pw_aff(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const +{ + return isl::checked::pw_multi_aff(*this).to_union_pw_multi_aff(); +} + +isl::checked::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::checked::multi_id &domain) const +{ + return isl::checked::pw_multi_aff(*this).unbind_params_insert_domain(domain); +} + +isl::checked::multi_pw_aff pw_aff::union_add(const isl::checked::multi_pw_aff &mpa2) const +{ + return isl::checked::pw_multi_aff(*this).union_add(mpa2); +} + +isl::checked::multi_union_pw_aff pw_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const +{ + return isl::checked::union_pw_aff(*this).union_add(mupa2); +} + +isl::checked::pw_aff pw_aff::union_add(isl::checked::pw_aff pwaff2) const +{ + auto res = isl_pw_aff_union_add(copy(), pwaff2.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_aff::union_add(const isl::checked::pw_multi_aff &pma2) const +{ + return isl::checked::pw_multi_aff(*this).union_add(pma2); +} + +isl::checked::union_pw_aff pw_aff::union_add(const isl::checked::union_pw_aff &upa2) const +{ + return isl::checked::union_pw_aff(*this).union_add(upa2); +} + +isl::checked::union_pw_multi_aff pw_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_aff(*this).union_add(upma2); +} + +isl::checked::pw_aff pw_aff::union_add(const isl::checked::aff &pwaff2) const +{ + return this->union_add(isl::checked::pw_aff(pwaff2)); +} + +inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj) +{ + char *str = isl_pw_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::pw_aff_list +pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) { + return pw_aff_list(ptr); +} +pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) { + ptr = isl_pw_aff_list_copy(ptr); + return pw_aff_list(ptr); +} + +pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr) + : ptr(ptr) {} + +pw_aff_list::pw_aff_list() + : ptr(nullptr) {} + +pw_aff_list::pw_aff_list(const pw_aff_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +pw_aff_list::pw_aff_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_pw_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +pw_aff_list::pw_aff_list(isl::checked::pw_aff el) +{ + auto res = isl_pw_aff_list_from_pw_aff(el.release()); + ptr = res; +} + +pw_aff_list::pw_aff_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_aff_list::~pw_aff_list() { + if (ptr) + isl_pw_aff_list_free(ptr); +} + +__isl_give isl_pw_aff_list *pw_aff_list::copy() const & { + return isl_pw_aff_list_copy(ptr); +} + +__isl_keep isl_pw_aff_list *pw_aff_list::get() const { + return ptr; +} + +__isl_give isl_pw_aff_list *pw_aff_list::release() { + isl_pw_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_aff_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx pw_aff_list::ctx() const { + return isl::checked::ctx(isl_pw_aff_list_get_ctx(ptr)); +} + +isl::checked::pw_aff_list pw_aff_list::add(isl::checked::pw_aff el) const +{ + auto res = isl_pw_aff_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::pw_aff pw_aff_list::at(int index) const +{ + auto res = isl_pw_aff_list_get_at(get(), index); + return manage(res); +} + +isl::checked::pw_aff pw_aff_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::pw_aff_list pw_aff_list::clear() const +{ + auto res = isl_pw_aff_list_clear(copy()); + return manage(res); +} + +isl::checked::pw_aff_list pw_aff_list::concat(isl::checked::pw_aff_list list2) const +{ + auto res = isl_pw_aff_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_pw_aff_list_drop(copy(), first, n); + return manage(res); +} + +stat pw_aff_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat pw_aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_pw_aff *arg_0, isl_pw_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_pw_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::checked::pw_aff el) const +{ + auto res = isl_pw_aff_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::pw_aff_list pw_aff_list::set_at(int index, isl::checked::pw_aff el) const +{ + auto res = isl_pw_aff_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size pw_aff_list::size() const +{ + auto res = isl_pw_aff_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj) +{ + char *str = isl_pw_aff_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::pw_multi_aff +pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) { + return pw_multi_aff(ptr); +} +pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) { + ptr = isl_pw_multi_aff_copy(ptr); + return pw_multi_aff(ptr); +} + +pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr) + : ptr(ptr) {} + +pw_multi_aff::pw_multi_aff() + : ptr(nullptr) {} + +pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +pw_multi_aff::pw_multi_aff(isl::checked::multi_aff ma) +{ + auto res = isl_pw_multi_aff_from_multi_aff(ma.release()); + ptr = res; +} + +pw_multi_aff::pw_multi_aff(isl::checked::pw_aff pa) +{ + auto res = isl_pw_multi_aff_from_pw_aff(pa.release()); + ptr = res; +} + +pw_multi_aff::pw_multi_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_multi_aff::~pw_multi_aff() { + if (ptr) + isl_pw_multi_aff_free(ptr); +} + +__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & { + return isl_pw_multi_aff_copy(ptr); +} + +__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const { + return ptr; +} + +__isl_give isl_pw_multi_aff *pw_multi_aff::release() { + isl_pw_multi_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_multi_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx pw_multi_aff::ctx() const { + return isl::checked::ctx(isl_pw_multi_aff_get_ctx(ptr)); +} + +isl::checked::multi_pw_aff pw_multi_aff::add(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).add(multi2); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::add(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).add(multi2); +} + +isl::checked::pw_multi_aff pw_multi_aff::add(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_add(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).add(upma2); +} + +isl::checked::pw_multi_aff pw_multi_aff::add(const isl::checked::multi_aff &pma2) const +{ + return this->add(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::add(const isl::checked::pw_aff &pma2) const +{ + return this->add(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::add_constant(isl::checked::multi_val mv) const +{ + auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::add_constant(isl::checked::val v) const +{ + auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::add_constant(long v) const +{ + return this->add_constant(isl::checked::val(ctx(), v)); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).apply(upma2); +} + +isl::checked::map pw_multi_aff::as_map() const +{ + auto res = isl_pw_multi_aff_as_map(copy()); + return manage(res); +} + +isl::checked::multi_aff pw_multi_aff::as_multi_aff() const +{ + auto res = isl_pw_multi_aff_as_multi_aff(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const +{ + return isl::checked::union_pw_multi_aff(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const +{ + return isl::checked::union_pw_multi_aff(*this).as_pw_multi_aff(); +} + +isl::checked::set pw_multi_aff::as_set() const +{ + auto res = isl_pw_multi_aff_as_set(copy()); + return manage(res); +} + +isl::checked::union_map pw_multi_aff::as_union_map() const +{ + return isl::checked::union_pw_multi_aff(*this).as_union_map(); +} + +isl::checked::pw_aff pw_multi_aff::at(int pos) const +{ + auto res = isl_pw_multi_aff_get_at(get(), pos); + return manage(res); +} + +isl::checked::pw_aff pw_multi_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::checked::set pw_multi_aff::bind(const isl::checked::multi_id &tuple) const +{ + return isl::checked::multi_pw_aff(*this).bind(tuple); +} + +isl::checked::pw_multi_aff pw_multi_aff::bind_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::checked::multi_id tuple) const +{ + auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::coalesce() const +{ + auto res = isl_pw_multi_aff_coalesce(copy()); + return manage(res); +} + +isl::checked::set pw_multi_aff::domain() const +{ + auto res = isl_pw_multi_aff_domain(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::domain_map(isl::checked::space space) +{ + auto res = isl_pw_multi_aff_domain_map(space.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::domain_reverse() const +{ + auto res = isl_pw_multi_aff_domain_reverse(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::drop_unused_params() const +{ + auto res = isl_pw_multi_aff_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::checked::space &space) const +{ + return isl::checked::union_pw_multi_aff(*this).extract_pw_multi_aff(space); +} + +isl::checked::multi_pw_aff pw_multi_aff::flat_range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::pw_multi_aff pw_multi_aff::flat_range_product(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).flat_range_product(upma2); +} + +isl::checked::pw_multi_aff pw_multi_aff::flat_range_product(const isl::checked::multi_aff &pma2) const +{ + return this->flat_range_product(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::flat_range_product(const isl::checked::pw_aff &pma2) const +{ + return this->flat_range_product(isl::checked::pw_multi_aff(pma2)); +} + +stat pw_multi_aff::foreach_piece(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage(arg_0), manage(arg_1)); + return ret.release(); + }; + auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::gist(isl::checked::set set) const +{ + auto res = isl_pw_multi_aff_gist(copy(), set.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::gist(const isl::checked::union_set &context) const +{ + return isl::checked::union_pw_multi_aff(*this).gist(context); +} + +isl::checked::pw_multi_aff pw_multi_aff::gist(const isl::checked::basic_set &set) const +{ + return this->gist(isl::checked::set(set)); +} + +isl::checked::pw_multi_aff pw_multi_aff::gist(const isl::checked::point &set) const +{ + return this->gist(isl::checked::set(set)); +} + +isl::checked::pw_multi_aff pw_multi_aff::gist_params(isl::checked::set set) const +{ + auto res = isl_pw_multi_aff_gist_params(copy(), set.release()); + return manage(res); +} + +boolean pw_multi_aff::has_range_tuple_id() const +{ + auto res = isl_pw_multi_aff_has_range_tuple_id(get()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_multi_aff::identity() const +{ + return isl::checked::multi_pw_aff(*this).identity(); +} + +isl::checked::pw_multi_aff pw_multi_aff::identity_on_domain(isl::checked::space space) +{ + auto res = isl_pw_multi_aff_identity_on_domain_space(space.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::insert_domain(isl::checked::space domain) const +{ + auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::intersect_domain(isl::checked::set set) const +{ + auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::space &space) const +{ + return isl::checked::union_pw_multi_aff(*this).intersect_domain(space); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_multi_aff(*this).intersect_domain(uset); +} + +isl::checked::pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::basic_set &set) const +{ + return this->intersect_domain(isl::checked::set(set)); +} + +isl::checked::pw_multi_aff pw_multi_aff::intersect_domain(const isl::checked::point &set) const +{ + return this->intersect_domain(isl::checked::set(set)); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::checked::pw_multi_aff pw_multi_aff::intersect_params(isl::checked::set set) const +{ + auto res = isl_pw_multi_aff_intersect_params(copy(), set.release()); + return manage(res); +} + +boolean pw_multi_aff::involves_locals() const +{ + auto res = isl_pw_multi_aff_involves_locals(get()); + return manage(res); +} + +boolean pw_multi_aff::involves_nan() const +{ + return isl::checked::multi_pw_aff(*this).involves_nan(); +} + +boolean pw_multi_aff::involves_param(const isl::checked::id &id) const +{ + return isl::checked::multi_pw_aff(*this).involves_param(id); +} + +boolean pw_multi_aff::involves_param(const std::string &id) const +{ + return this->involves_param(isl::checked::id(ctx(), id)); +} + +boolean pw_multi_aff::involves_param(const isl::checked::id_list &list) const +{ + return isl::checked::multi_pw_aff(*this).involves_param(list); +} + +boolean pw_multi_aff::isa_multi_aff() const +{ + auto res = isl_pw_multi_aff_isa_multi_aff(get()); + return manage(res); +} + +boolean pw_multi_aff::isa_pw_multi_aff() const +{ + return isl::checked::union_pw_multi_aff(*this).isa_pw_multi_aff(); +} + +isl::checked::pw_aff_list pw_multi_aff::list() const +{ + return isl::checked::multi_pw_aff(*this).list(); +} + +isl::checked::multi_pw_aff pw_multi_aff::max(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).max(multi2); +} + +isl::checked::multi_val pw_multi_aff::max_multi_val() const +{ + auto res = isl_pw_multi_aff_max_multi_val(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_multi_aff::min(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).min(multi2); +} + +isl::checked::multi_val pw_multi_aff::min_multi_val() const +{ + auto res = isl_pw_multi_aff_min_multi_val(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::checked::set domain, isl::checked::multi_val mv) +{ + auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); + return manage(res); +} + +class size pw_multi_aff::n_piece() const +{ + auto res = isl_pw_multi_aff_n_piece(get()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_multi_aff::neg() const +{ + return isl::checked::multi_pw_aff(*this).neg(); +} + +boolean pw_multi_aff::plain_is_empty() const +{ + return isl::checked::union_pw_multi_aff(*this).plain_is_empty(); +} + +boolean pw_multi_aff::plain_is_equal(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).plain_is_equal(multi2); +} + +boolean pw_multi_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).plain_is_equal(multi2); +} + +boolean pw_multi_aff::plain_is_equal(const isl::checked::pw_multi_aff &pma2) const +{ + auto res = isl_pw_multi_aff_plain_is_equal(get(), pma2.get()); + return manage(res); +} + +boolean pw_multi_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).plain_is_equal(upma2); +} + +boolean pw_multi_aff::plain_is_equal(const isl::checked::multi_aff &pma2) const +{ + return this->plain_is_equal(isl::checked::pw_multi_aff(pma2)); +} + +boolean pw_multi_aff::plain_is_equal(const isl::checked::pw_aff &pma2) const +{ + return this->plain_is_equal(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::checked::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::checked::multi_aff &pma2) const +{ + return this->preimage_domain_wrapped_domain(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::checked::pw_aff &pma2) const +{ + return this->preimage_domain_wrapped_domain(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::multi_pw_aff pw_multi_aff::product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).product(multi2); +} + +isl::checked::pw_multi_aff pw_multi_aff::product(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_product(copy(), pma2.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::product(const isl::checked::multi_aff &pma2) const +{ + return this->product(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::product(const isl::checked::pw_aff &pma2) const +{ + return this->product(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::multi_pw_aff pw_multi_aff::pullback(const isl::checked::multi_pw_aff &mpa2) const +{ + return isl::checked::multi_pw_aff(*this).pullback(mpa2); +} + +isl::checked::pw_multi_aff pw_multi_aff::pullback(isl::checked::multi_aff ma) const +{ + auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::pullback(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::pullback(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).pullback(upma2); +} + +isl::checked::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const +{ + return isl::checked::union_pw_multi_aff(*this).pw_multi_aff_list(); +} + +isl::checked::pw_multi_aff pw_multi_aff::range_factor_domain() const +{ + auto res = isl_pw_multi_aff_range_factor_domain(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::range_factor_range() const +{ + auto res = isl_pw_multi_aff_range_factor_range(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::range_map(isl::checked::space space) +{ + auto res = isl_pw_multi_aff_range_map(space.release()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_multi_aff::range_product(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).range_product(multi2); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).range_product(multi2); +} + +isl::checked::pw_multi_aff pw_multi_aff::range_product(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_range_product(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).range_product(upma2); +} + +isl::checked::pw_multi_aff pw_multi_aff::range_product(const isl::checked::multi_aff &pma2) const +{ + return this->range_product(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::range_product(const isl::checked::pw_aff &pma2) const +{ + return this->range_product(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::id pw_multi_aff::range_tuple_id() const +{ + auto res = isl_pw_multi_aff_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id pw_multi_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const +{ + return isl::checked::multi_pw_aff(*this).reset_range_tuple_id(); +} + +isl::checked::pw_multi_aff pw_multi_aff::scale(isl::checked::multi_val mv) const +{ + auto res = isl_pw_multi_aff_scale_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::scale(isl::checked::val v) const +{ + auto res = isl_pw_multi_aff_scale_val(copy(), v.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::pw_multi_aff pw_multi_aff::scale_down(isl::checked::multi_val mv) const +{ + auto res = isl_pw_multi_aff_scale_down_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::scale_down(isl::checked::val v) const +{ + auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::checked::pw_aff &el) const +{ + return isl::checked::multi_pw_aff(*this).set_at(pos, el); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const +{ + return isl::checked::multi_pw_aff(*this).set_at(pos, el); +} + +isl::checked::pw_multi_aff pw_multi_aff::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size pw_multi_aff::size() const +{ + return isl::checked::multi_pw_aff(*this).size(); +} + +isl::checked::space pw_multi_aff::space() const +{ + auto res = isl_pw_multi_aff_get_space(get()); + return manage(res); +} + +isl::checked::space pw_multi_aff::get_space() const +{ + return space(); +} + +isl::checked::multi_pw_aff pw_multi_aff::sub(const isl::checked::multi_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).sub(multi2); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_pw_aff(*this).sub(multi2); +} + +isl::checked::pw_multi_aff pw_multi_aff::sub(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_sub(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).sub(upma2); +} + +isl::checked::pw_multi_aff pw_multi_aff::sub(const isl::checked::multi_aff &pma2) const +{ + return this->sub(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::sub(const isl::checked::pw_aff &pma2) const +{ + return this->sub(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::subtract_domain(isl::checked::set set) const +{ + auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::space &space) const +{ + return isl::checked::union_pw_multi_aff(*this).subtract_domain(space); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::union_set &uset) const +{ + return isl::checked::union_pw_multi_aff(*this).subtract_domain(uset); +} + +isl::checked::pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::basic_set &set) const +{ + return this->subtract_domain(isl::checked::set(set)); +} + +isl::checked::pw_multi_aff pw_multi_aff::subtract_domain(const isl::checked::point &set) const +{ + return this->subtract_domain(isl::checked::set(set)); +} + +isl::checked::pw_multi_aff_list pw_multi_aff::to_list() const +{ + auto res = isl_pw_multi_aff_to_list(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const +{ + auto res = isl_pw_multi_aff_to_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const +{ + auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::checked::multi_id &domain) const +{ + return isl::checked::multi_pw_aff(*this).unbind_params_insert_domain(domain); +} + +isl::checked::multi_pw_aff pw_multi_aff::union_add(const isl::checked::multi_pw_aff &mpa2) const +{ + return isl::checked::multi_pw_aff(*this).union_add(mpa2); +} + +isl::checked::multi_union_pw_aff pw_multi_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const +{ + return isl::checked::multi_pw_aff(*this).union_add(mupa2); +} + +isl::checked::pw_multi_aff pw_multi_aff::union_add(isl::checked::pw_multi_aff pma2) const +{ + auto res = isl_pw_multi_aff_union_add(copy(), pma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff pw_multi_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).union_add(upma2); +} + +isl::checked::pw_multi_aff pw_multi_aff::union_add(const isl::checked::multi_aff &pma2) const +{ + return this->union_add(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::union_add(const isl::checked::pw_aff &pma2) const +{ + return this->union_add(isl::checked::pw_multi_aff(pma2)); +} + +isl::checked::pw_multi_aff pw_multi_aff::zero(isl::checked::space space) +{ + auto res = isl_pw_multi_aff_zero(space.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj) +{ + char *str = isl_pw_multi_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::pw_multi_aff_list +pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) { + return pw_multi_aff_list(ptr); +} +pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) { + ptr = isl_pw_multi_aff_list_copy(ptr); + return pw_multi_aff_list(ptr); +} + +pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr) + : ptr(ptr) {} + +pw_multi_aff_list::pw_multi_aff_list() + : ptr(nullptr) {} + +pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +pw_multi_aff_list::pw_multi_aff_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +pw_multi_aff_list::pw_multi_aff_list(isl::checked::pw_multi_aff el) +{ + auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release()); + ptr = res; +} + +pw_multi_aff_list::pw_multi_aff_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_multi_aff_list::~pw_multi_aff_list() { + if (ptr) + isl_pw_multi_aff_list_free(ptr); +} + +__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & { + return isl_pw_multi_aff_list_copy(ptr); +} + +__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const { + return ptr; +} + +__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() { + isl_pw_multi_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_multi_aff_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx pw_multi_aff_list::ctx() const { + return isl::checked::ctx(isl_pw_multi_aff_list_get_ctx(ptr)); +} + +isl::checked::pw_multi_aff_list pw_multi_aff_list::add(isl::checked::pw_multi_aff el) const +{ + auto res = isl_pw_multi_aff_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff_list::at(int index) const +{ + auto res = isl_pw_multi_aff_list_get_at(get(), index); + return manage(res); +} + +isl::checked::pw_multi_aff pw_multi_aff_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::pw_multi_aff_list pw_multi_aff_list::clear() const +{ + auto res = isl_pw_multi_aff_list_clear(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff_list pw_multi_aff_list::concat(isl::checked::pw_multi_aff_list list2) const +{ + auto res = isl_pw_multi_aff_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_pw_multi_aff_list_drop(copy(), first, n); + return manage(res); +} + +stat pw_multi_aff_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat pw_multi_aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_pw_multi_aff *arg_0, isl_pw_multi_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_multi_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_pw_multi_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::checked::pw_multi_aff el) const +{ + auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::pw_multi_aff_list pw_multi_aff_list::set_at(int index, isl::checked::pw_multi_aff el) const +{ + auto res = isl_pw_multi_aff_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size pw_multi_aff_list::size() const +{ + auto res = isl_pw_multi_aff_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj) +{ + char *str = isl_pw_multi_aff_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule +schedule manage(__isl_take isl_schedule *ptr) { + return schedule(ptr); +} +schedule manage_copy(__isl_keep isl_schedule *ptr) { + ptr = isl_schedule_copy(ptr); + return schedule(ptr); +} + +schedule::schedule(__isl_take isl_schedule *ptr) + : ptr(ptr) {} + +schedule::schedule() + : ptr(nullptr) {} + +schedule::schedule(const schedule &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +schedule::schedule(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_schedule_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +schedule &schedule::operator=(schedule obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +schedule::~schedule() { + if (ptr) + isl_schedule_free(ptr); +} + +__isl_give isl_schedule *schedule::copy() const & { + return isl_schedule_copy(ptr); +} + +__isl_keep isl_schedule *schedule::get() const { + return ptr; +} + +__isl_give isl_schedule *schedule::release() { + isl_schedule *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool schedule::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx schedule::ctx() const { + return isl::checked::ctx(isl_schedule_get_ctx(ptr)); +} + +isl::checked::union_set schedule::domain() const +{ + auto res = isl_schedule_get_domain(get()); + return manage(res); +} + +isl::checked::union_set schedule::get_domain() const +{ + return domain(); +} + +isl::checked::schedule schedule::from_domain(isl::checked::union_set domain) +{ + auto res = isl_schedule_from_domain(domain.release()); + return manage(res); +} + +isl::checked::union_map schedule::map() const +{ + auto res = isl_schedule_get_map(get()); + return manage(res); +} + +isl::checked::union_map schedule::get_map() const +{ + return map(); +} + +isl::checked::schedule schedule::pullback(isl::checked::union_pw_multi_aff upma) const +{ + auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release()); + return manage(res); +} + +isl::checked::schedule_node schedule::root() const +{ + auto res = isl_schedule_get_root(get()); + return manage(res); +} + +isl::checked::schedule_node schedule::get_root() const +{ + return root(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule &obj) +{ + char *str = isl_schedule_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_constraints +schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) { + return schedule_constraints(ptr); +} +schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) { + ptr = isl_schedule_constraints_copy(ptr); + return schedule_constraints(ptr); +} + +schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr) + : ptr(ptr) {} + +schedule_constraints::schedule_constraints() + : ptr(nullptr) {} + +schedule_constraints::schedule_constraints(const schedule_constraints &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +schedule_constraints::schedule_constraints(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +schedule_constraints::~schedule_constraints() { + if (ptr) + isl_schedule_constraints_free(ptr); +} + +__isl_give isl_schedule_constraints *schedule_constraints::copy() const & { + return isl_schedule_constraints_copy(ptr); +} + +__isl_keep isl_schedule_constraints *schedule_constraints::get() const { + return ptr; +} + +__isl_give isl_schedule_constraints *schedule_constraints::release() { + isl_schedule_constraints *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool schedule_constraints::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx schedule_constraints::ctx() const { + return isl::checked::ctx(isl_schedule_constraints_get_ctx(ptr)); +} + +isl::checked::union_map schedule_constraints::coincidence() const +{ + auto res = isl_schedule_constraints_get_coincidence(get()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::get_coincidence() const +{ + return coincidence(); +} + +isl::checked::schedule schedule_constraints::compute_schedule() const +{ + auto res = isl_schedule_constraints_compute_schedule(copy()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::conditional_validity() const +{ + auto res = isl_schedule_constraints_get_conditional_validity(get()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::get_conditional_validity() const +{ + return conditional_validity(); +} + +isl::checked::union_map schedule_constraints::conditional_validity_condition() const +{ + auto res = isl_schedule_constraints_get_conditional_validity_condition(get()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::get_conditional_validity_condition() const +{ + return conditional_validity_condition(); +} + +isl::checked::set schedule_constraints::context() const +{ + auto res = isl_schedule_constraints_get_context(get()); + return manage(res); +} + +isl::checked::set schedule_constraints::get_context() const +{ + return context(); +} + +isl::checked::union_set schedule_constraints::domain() const +{ + auto res = isl_schedule_constraints_get_domain(get()); + return manage(res); +} + +isl::checked::union_set schedule_constraints::get_domain() const +{ + return domain(); +} + +isl::checked::schedule_constraints schedule_constraints::on_domain(isl::checked::union_set domain) +{ + auto res = isl_schedule_constraints_on_domain(domain.release()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::proximity() const +{ + auto res = isl_schedule_constraints_get_proximity(get()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::get_proximity() const +{ + return proximity(); +} + +isl::checked::schedule_constraints schedule_constraints::set_coincidence(isl::checked::union_map coincidence) const +{ + auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release()); + return manage(res); +} + +isl::checked::schedule_constraints schedule_constraints::set_conditional_validity(isl::checked::union_map condition, isl::checked::union_map validity) const +{ + auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release()); + return manage(res); +} + +isl::checked::schedule_constraints schedule_constraints::set_context(isl::checked::set context) const +{ + auto res = isl_schedule_constraints_set_context(copy(), context.release()); + return manage(res); +} + +isl::checked::schedule_constraints schedule_constraints::set_proximity(isl::checked::union_map proximity) const +{ + auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release()); + return manage(res); +} + +isl::checked::schedule_constraints schedule_constraints::set_validity(isl::checked::union_map validity) const +{ + auto res = isl_schedule_constraints_set_validity(copy(), validity.release()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::validity() const +{ + auto res = isl_schedule_constraints_get_validity(get()); + return manage(res); +} + +isl::checked::union_map schedule_constraints::get_validity() const +{ + return validity(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj) +{ + char *str = isl_schedule_constraints_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node +schedule_node manage(__isl_take isl_schedule_node *ptr) { + return schedule_node(ptr); +} +schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) { + ptr = isl_schedule_node_copy(ptr); + return schedule_node(ptr); +} + +schedule_node::schedule_node(__isl_take isl_schedule_node *ptr) + : ptr(ptr) {} + +schedule_node::schedule_node() + : ptr(nullptr) {} + +schedule_node::schedule_node(const schedule_node &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +schedule_node &schedule_node::operator=(schedule_node obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +schedule_node::~schedule_node() { + if (ptr) + isl_schedule_node_free(ptr); +} + +__isl_give isl_schedule_node *schedule_node::copy() const & { + return isl_schedule_node_copy(ptr); +} + +__isl_keep isl_schedule_node *schedule_node::get() const { + return ptr; +} + +__isl_give isl_schedule_node *schedule_node::release() { + isl_schedule_node *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool schedule_node::is_null() const { + return ptr == nullptr; +} + +template +boolean schedule_node::isa_type(T subtype) const +{ + if (is_null()) + return boolean(); + return isl_schedule_node_get_type(get()) == subtype; +} +template +boolean schedule_node::isa() const +{ + return isa_type(T::type); +} +template +T schedule_node::as() const +{ + if (isa().is_false()) + isl_die(ctx().get(), isl_error_invalid, "not an object of the requested subtype", return T()); + return T(copy()); +} + +isl::checked::ctx schedule_node::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::schedule_node schedule_node::ancestor(int generation) const +{ + auto res = isl_schedule_node_ancestor(copy(), generation); + return manage(res); +} + +class size schedule_node::ancestor_child_position(const isl::checked::schedule_node &ancestor) const +{ + auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get()); + return manage(res); +} + +class size schedule_node::get_ancestor_child_position(const isl::checked::schedule_node &ancestor) const +{ + return ancestor_child_position(ancestor); +} + +isl::checked::schedule_node schedule_node::child(int pos) const +{ + auto res = isl_schedule_node_child(copy(), pos); + return manage(res); +} + +class size schedule_node::child_position() const +{ + auto res = isl_schedule_node_get_child_position(get()); + return manage(res); +} + +class size schedule_node::get_child_position() const +{ + return child_position(); +} + +boolean schedule_node::every_descendant(const std::function &test) const +{ + struct test_data { + std::function func; + } test_data = { test }; + auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data); + return manage(res); +} + +isl::checked::schedule_node schedule_node::first_child() const +{ + auto res = isl_schedule_node_first_child(copy()); + return manage(res); +} + +stat schedule_node::foreach_ancestor_top_down(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat schedule_node::foreach_descendant_top_down(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::schedule_node schedule_node::from_domain(isl::checked::union_set domain) +{ + auto res = isl_schedule_node_from_domain(domain.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::from_extension(isl::checked::union_map extension) +{ + auto res = isl_schedule_node_from_extension(extension.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::graft_after(isl::checked::schedule_node graft) const +{ + auto res = isl_schedule_node_graft_after(copy(), graft.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::graft_before(isl::checked::schedule_node graft) const +{ + auto res = isl_schedule_node_graft_before(copy(), graft.release()); + return manage(res); +} + +boolean schedule_node::has_children() const +{ + auto res = isl_schedule_node_has_children(get()); + return manage(res); +} + +boolean schedule_node::has_next_sibling() const +{ + auto res = isl_schedule_node_has_next_sibling(get()); + return manage(res); +} + +boolean schedule_node::has_parent() const +{ + auto res = isl_schedule_node_has_parent(get()); + return manage(res); +} + +boolean schedule_node::has_previous_sibling() const +{ + auto res = isl_schedule_node_has_previous_sibling(get()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_context(isl::checked::set context) const +{ + auto res = isl_schedule_node_insert_context(copy(), context.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_filter(isl::checked::union_set filter) const +{ + auto res = isl_schedule_node_insert_filter(copy(), filter.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_guard(isl::checked::set context) const +{ + auto res = isl_schedule_node_insert_guard(copy(), context.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_mark(isl::checked::id mark) const +{ + auto res = isl_schedule_node_insert_mark(copy(), mark.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_mark(const std::string &mark) const +{ + return this->insert_mark(isl::checked::id(ctx(), mark)); +} + +isl::checked::schedule_node schedule_node::insert_partial_schedule(isl::checked::multi_union_pw_aff schedule) const +{ + auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_sequence(isl::checked::union_set_list filters) const +{ + auto res = isl_schedule_node_insert_sequence(copy(), filters.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::insert_set(isl::checked::union_set_list filters) const +{ + auto res = isl_schedule_node_insert_set(copy(), filters.release()); + return manage(res); +} + +boolean schedule_node::is_equal(const isl::checked::schedule_node &node2) const +{ + auto res = isl_schedule_node_is_equal(get(), node2.get()); + return manage(res); +} + +boolean schedule_node::is_subtree_anchored() const +{ + auto res = isl_schedule_node_is_subtree_anchored(get()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::map_descendant_bottom_up(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data); + return manage(res); +} + +class size schedule_node::n_children() const +{ + auto res = isl_schedule_node_n_children(get()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::next_sibling() const +{ + auto res = isl_schedule_node_next_sibling(copy()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::order_after(isl::checked::union_set filter) const +{ + auto res = isl_schedule_node_order_after(copy(), filter.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::order_before(isl::checked::union_set filter) const +{ + auto res = isl_schedule_node_order_before(copy(), filter.release()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::parent() const +{ + auto res = isl_schedule_node_parent(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const +{ + auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get()); + return manage(res); +} + +isl::checked::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const +{ + return prefix_schedule_multi_union_pw_aff(); +} + +isl::checked::union_map schedule_node::prefix_schedule_union_map() const +{ + auto res = isl_schedule_node_get_prefix_schedule_union_map(get()); + return manage(res); +} + +isl::checked::union_map schedule_node::get_prefix_schedule_union_map() const +{ + return prefix_schedule_union_map(); +} + +isl::checked::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const +{ + auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get()); + return manage(res); +} + +isl::checked::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const +{ + return prefix_schedule_union_pw_multi_aff(); +} + +isl::checked::schedule_node schedule_node::previous_sibling() const +{ + auto res = isl_schedule_node_previous_sibling(copy()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::root() const +{ + auto res = isl_schedule_node_root(copy()); + return manage(res); +} + +isl::checked::schedule schedule_node::schedule() const +{ + auto res = isl_schedule_node_get_schedule(get()); + return manage(res); +} + +isl::checked::schedule schedule_node::get_schedule() const +{ + return schedule(); +} + +isl::checked::schedule_node schedule_node::shared_ancestor(const isl::checked::schedule_node &node2) const +{ + auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get()); + return manage(res); +} + +isl::checked::schedule_node schedule_node::get_shared_ancestor(const isl::checked::schedule_node &node2) const +{ + return shared_ancestor(node2); +} + +class size schedule_node::tree_depth() const +{ + auto res = isl_schedule_node_get_tree_depth(get()); + return manage(res); +} + +class size schedule_node::get_tree_depth() const +{ + return tree_depth(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_band +schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_band::schedule_node_band() + : schedule_node() {} + +schedule_node_band::schedule_node_band(const schedule_node_band &obj) + : schedule_node(obj) +{ +} + +schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_band::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::union_set schedule_node_band::ast_build_options() const +{ + auto res = isl_schedule_node_band_get_ast_build_options(get()); + return manage(res); +} + +isl::checked::union_set schedule_node_band::get_ast_build_options() const +{ + return ast_build_options(); +} + +isl::checked::set schedule_node_band::ast_isolate_option() const +{ + auto res = isl_schedule_node_band_get_ast_isolate_option(get()); + return manage(res); +} + +isl::checked::set schedule_node_band::get_ast_isolate_option() const +{ + return ast_isolate_option(); +} + +boolean schedule_node_band::member_get_coincident(int pos) const +{ + auto res = isl_schedule_node_band_member_get_coincident(get(), pos); + return manage(res); +} + +schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const +{ + auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::mod(isl::checked::multi_val mv) const +{ + auto res = isl_schedule_node_band_mod(copy(), mv.release()); + return manage(res).as(); +} + +class size schedule_node_band::n_member() const +{ + auto res = isl_schedule_node_band_n_member(get()); + return manage(res); +} + +isl::checked::multi_union_pw_aff schedule_node_band::partial_schedule() const +{ + auto res = isl_schedule_node_band_get_partial_schedule(get()); + return manage(res); +} + +isl::checked::multi_union_pw_aff schedule_node_band::get_partial_schedule() const +{ + return partial_schedule(); +} + +boolean schedule_node_band::permutable() const +{ + auto res = isl_schedule_node_band_get_permutable(get()); + return manage(res); +} + +boolean schedule_node_band::get_permutable() const +{ + return permutable(); +} + +schedule_node_band schedule_node_band::scale(isl::checked::multi_val mv) const +{ + auto res = isl_schedule_node_band_scale(copy(), mv.release()); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::scale_down(isl::checked::multi_val mv) const +{ + auto res = isl_schedule_node_band_scale_down(copy(), mv.release()); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::set_ast_build_options(isl::checked::union_set options) const +{ + auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release()); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::set_permutable(int permutable) const +{ + auto res = isl_schedule_node_band_set_permutable(copy(), permutable); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::shift(isl::checked::multi_union_pw_aff shift) const +{ + auto res = isl_schedule_node_band_shift(copy(), shift.release()); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::split(int pos) const +{ + auto res = isl_schedule_node_band_split(copy(), pos); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::tile(isl::checked::multi_val sizes) const +{ + auto res = isl_schedule_node_band_tile(copy(), sizes.release()); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const +{ + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const +{ + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const +{ + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const +{ + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate); + return manage(res).as(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_context +schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_context::schedule_node_context() + : schedule_node() {} + +schedule_node_context::schedule_node_context(const schedule_node_context &obj) + : schedule_node(obj) +{ +} + +schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_context::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::set schedule_node_context::context() const +{ + auto res = isl_schedule_node_context_get_context(get()); + return manage(res); +} + +isl::checked::set schedule_node_context::get_context() const +{ + return context(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_domain +schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_domain::schedule_node_domain() + : schedule_node() {} + +schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj) + : schedule_node(obj) +{ +} + +schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_domain::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::union_set schedule_node_domain::domain() const +{ + auto res = isl_schedule_node_domain_get_domain(get()); + return manage(res); +} + +isl::checked::union_set schedule_node_domain::get_domain() const +{ + return domain(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_expansion +schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_expansion::schedule_node_expansion() + : schedule_node() {} + +schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj) + : schedule_node(obj) +{ +} + +schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_expansion::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::union_pw_multi_aff schedule_node_expansion::contraction() const +{ + auto res = isl_schedule_node_expansion_get_contraction(get()); + return manage(res); +} + +isl::checked::union_pw_multi_aff schedule_node_expansion::get_contraction() const +{ + return contraction(); +} + +isl::checked::union_map schedule_node_expansion::expansion() const +{ + auto res = isl_schedule_node_expansion_get_expansion(get()); + return manage(res); +} + +isl::checked::union_map schedule_node_expansion::get_expansion() const +{ + return expansion(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_extension +schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_extension::schedule_node_extension() + : schedule_node() {} + +schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj) + : schedule_node(obj) +{ +} + +schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_extension::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::union_map schedule_node_extension::extension() const +{ + auto res = isl_schedule_node_extension_get_extension(get()); + return manage(res); +} + +isl::checked::union_map schedule_node_extension::get_extension() const +{ + return extension(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_filter +schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_filter::schedule_node_filter() + : schedule_node() {} + +schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj) + : schedule_node(obj) +{ +} + +schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_filter::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::union_set schedule_node_filter::filter() const +{ + auto res = isl_schedule_node_filter_get_filter(get()); + return manage(res); +} + +isl::checked::union_set schedule_node_filter::get_filter() const +{ + return filter(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_guard +schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_guard::schedule_node_guard() + : schedule_node() {} + +schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj) + : schedule_node(obj) +{ +} + +schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_guard::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::checked::set schedule_node_guard::guard() const +{ + auto res = isl_schedule_node_guard_get_guard(get()); + return manage(res); +} + +isl::checked::set schedule_node_guard::get_guard() const +{ + return guard(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_leaf +schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_leaf::schedule_node_leaf() + : schedule_node() {} + +schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj) + : schedule_node(obj) +{ +} + +schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_leaf::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_mark +schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_mark::schedule_node_mark() + : schedule_node() {} + +schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj) + : schedule_node(obj) +{ +} + +schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_mark::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_sequence +schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_sequence::schedule_node_sequence() + : schedule_node() {} + +schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj) + : schedule_node(obj) +{ +} + +schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_sequence::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_set +schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_set::schedule_node_set() + : schedule_node() {} + +schedule_node_set::schedule_node_set(const schedule_node_set &obj) + : schedule_node(obj) +{ +} + +schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::checked::ctx schedule_node_set::ctx() const { + return isl::checked::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj) +{ + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::set +set manage(__isl_take isl_set *ptr) { + return set(ptr); +} +set manage_copy(__isl_keep isl_set *ptr) { + ptr = isl_set_copy(ptr); + return set(ptr); +} + +set::set(__isl_take isl_set *ptr) + : ptr(ptr) {} + +set::set() + : ptr(nullptr) {} + +set::set(const set &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +set::set(isl::checked::basic_set bset) +{ + auto res = isl_set_from_basic_set(bset.release()); + ptr = res; +} + +set::set(isl::checked::point pnt) +{ + auto res = isl_set_from_point(pnt.release()); + ptr = res; +} + +set::set(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_set_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +set &set::operator=(set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +set::~set() { + if (ptr) + isl_set_free(ptr); +} + +__isl_give isl_set *set::copy() const & { + return isl_set_copy(ptr); +} + +__isl_keep isl_set *set::get() const { + return ptr; +} + +__isl_give isl_set *set::release() { + isl_set *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool set::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx set::ctx() const { + return isl::checked::ctx(isl_set_get_ctx(ptr)); +} + +isl::checked::basic_set set::affine_hull() const +{ + auto res = isl_set_affine_hull(copy()); + return manage(res); +} + +isl::checked::set set::apply(isl::checked::map map) const +{ + auto res = isl_set_apply(copy(), map.release()); + return manage(res); +} + +isl::checked::union_set set::apply(const isl::checked::union_map &umap) const +{ + return isl::checked::union_set(*this).apply(umap); +} + +isl::checked::set set::apply(const isl::checked::basic_map &map) const +{ + return this->apply(isl::checked::map(map)); +} + +isl::checked::pw_multi_aff set::as_pw_multi_aff() const +{ + auto res = isl_set_as_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::set set::as_set() const +{ + return isl::checked::union_set(*this).as_set(); +} + +isl::checked::set set::bind(isl::checked::multi_id tuple) const +{ + auto res = isl_set_bind(copy(), tuple.release()); + return manage(res); +} + +isl::checked::set set::coalesce() const +{ + auto res = isl_set_coalesce(copy()); + return manage(res); +} + +isl::checked::set set::complement() const +{ + auto res = isl_set_complement(copy()); + return manage(res); +} + +isl::checked::union_set set::compute_divs() const +{ + return isl::checked::union_set(*this).compute_divs(); +} + +isl::checked::set set::detect_equalities() const +{ + auto res = isl_set_detect_equalities(copy()); + return manage(res); +} + +isl::checked::val set::dim_max_val(int pos) const +{ + auto res = isl_set_dim_max_val(copy(), pos); + return manage(res); +} + +isl::checked::val set::dim_min_val(int pos) const +{ + auto res = isl_set_dim_min_val(copy(), pos); + return manage(res); +} + +isl::checked::set set::drop_unused_params() const +{ + auto res = isl_set_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::set set::empty(isl::checked::space space) +{ + auto res = isl_set_empty(space.release()); + return manage(res); +} + +boolean set::every_set(const std::function &test) const +{ + return isl::checked::union_set(*this).every_set(test); +} + +isl::checked::set set::extract_set(const isl::checked::space &space) const +{ + return isl::checked::union_set(*this).extract_set(space); +} + +isl::checked::set set::flatten() const +{ + auto res = isl_set_flatten(copy()); + return manage(res); +} + +stat set::foreach_basic_set(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat set::foreach_point(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat set::foreach_set(const std::function &fn) const +{ + return isl::checked::union_set(*this).foreach_set(fn); +} + +isl::checked::set set::gist(isl::checked::set context) const +{ + auto res = isl_set_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_set set::gist(const isl::checked::union_set &context) const +{ + return isl::checked::union_set(*this).gist(context); +} + +isl::checked::set set::gist(const isl::checked::basic_set &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::set set::gist(const isl::checked::point &context) const +{ + return this->gist(isl::checked::set(context)); +} + +isl::checked::set set::gist_params(isl::checked::set context) const +{ + auto res = isl_set_gist_params(copy(), context.release()); + return manage(res); +} + +isl::checked::map set::identity() const +{ + auto res = isl_set_identity(copy()); + return manage(res); +} + +isl::checked::pw_aff set::indicator_function() const +{ + auto res = isl_set_indicator_function(copy()); + return manage(res); +} + +isl::checked::map set::insert_domain(isl::checked::space domain) const +{ + auto res = isl_set_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::set set::intersect(isl::checked::set set2) const +{ + auto res = isl_set_intersect(copy(), set2.release()); + return manage(res); +} + +isl::checked::union_set set::intersect(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).intersect(uset2); +} + +isl::checked::set set::intersect(const isl::checked::basic_set &set2) const +{ + return this->intersect(isl::checked::set(set2)); +} + +isl::checked::set set::intersect(const isl::checked::point &set2) const +{ + return this->intersect(isl::checked::set(set2)); +} + +isl::checked::set set::intersect_params(isl::checked::set params) const +{ + auto res = isl_set_intersect_params(copy(), params.release()); + return manage(res); +} + +boolean set::involves_locals() const +{ + auto res = isl_set_involves_locals(get()); + return manage(res); +} + +boolean set::is_disjoint(const isl::checked::set &set2) const +{ + auto res = isl_set_is_disjoint(get(), set2.get()); + return manage(res); +} + +boolean set::is_disjoint(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).is_disjoint(uset2); +} + +boolean set::is_disjoint(const isl::checked::basic_set &set2) const +{ + return this->is_disjoint(isl::checked::set(set2)); +} + +boolean set::is_disjoint(const isl::checked::point &set2) const +{ + return this->is_disjoint(isl::checked::set(set2)); +} + +boolean set::is_empty() const +{ + auto res = isl_set_is_empty(get()); + return manage(res); +} + +boolean set::is_equal(const isl::checked::set &set2) const +{ + auto res = isl_set_is_equal(get(), set2.get()); + return manage(res); +} + +boolean set::is_equal(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).is_equal(uset2); +} + +boolean set::is_equal(const isl::checked::basic_set &set2) const +{ + return this->is_equal(isl::checked::set(set2)); +} + +boolean set::is_equal(const isl::checked::point &set2) const +{ + return this->is_equal(isl::checked::set(set2)); +} + +boolean set::is_singleton() const +{ + auto res = isl_set_is_singleton(get()); + return manage(res); +} + +boolean set::is_strict_subset(const isl::checked::set &set2) const +{ + auto res = isl_set_is_strict_subset(get(), set2.get()); + return manage(res); +} + +boolean set::is_strict_subset(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).is_strict_subset(uset2); +} + +boolean set::is_strict_subset(const isl::checked::basic_set &set2) const +{ + return this->is_strict_subset(isl::checked::set(set2)); +} + +boolean set::is_strict_subset(const isl::checked::point &set2) const +{ + return this->is_strict_subset(isl::checked::set(set2)); +} + +boolean set::is_subset(const isl::checked::set &set2) const +{ + auto res = isl_set_is_subset(get(), set2.get()); + return manage(res); +} + +boolean set::is_subset(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).is_subset(uset2); +} + +boolean set::is_subset(const isl::checked::basic_set &set2) const +{ + return this->is_subset(isl::checked::set(set2)); +} + +boolean set::is_subset(const isl::checked::point &set2) const +{ + return this->is_subset(isl::checked::set(set2)); +} + +boolean set::is_wrapping() const +{ + auto res = isl_set_is_wrapping(get()); + return manage(res); +} + +boolean set::isa_set() const +{ + return isl::checked::union_set(*this).isa_set(); +} + +isl::checked::fixed_box set::lattice_tile() const +{ + auto res = isl_set_get_lattice_tile(get()); + return manage(res); +} + +isl::checked::fixed_box set::get_lattice_tile() const +{ + return lattice_tile(); +} + +isl::checked::set set::lexmax() const +{ + auto res = isl_set_lexmax(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff set::lexmax_pw_multi_aff() const +{ + auto res = isl_set_lexmax_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::set set::lexmin() const +{ + auto res = isl_set_lexmin(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff set::lexmin_pw_multi_aff() const +{ + auto res = isl_set_lexmin_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::set set::lower_bound(isl::checked::multi_pw_aff lower) const +{ + auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release()); + return manage(res); +} + +isl::checked::set set::lower_bound(isl::checked::multi_val lower) const +{ + auto res = isl_set_lower_bound_multi_val(copy(), lower.release()); + return manage(res); +} + +isl::checked::multi_pw_aff set::max_multi_pw_aff() const +{ + auto res = isl_set_max_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::val set::max_val(const isl::checked::aff &obj) const +{ + auto res = isl_set_max_val(get(), obj.get()); + return manage(res); +} + +isl::checked::multi_pw_aff set::min_multi_pw_aff() const +{ + auto res = isl_set_min_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::val set::min_val(const isl::checked::aff &obj) const +{ + auto res = isl_set_min_val(get(), obj.get()); + return manage(res); +} + +class size set::n_basic_set() const +{ + auto res = isl_set_n_basic_set(get()); + return manage(res); +} + +isl::checked::pw_aff set::param_pw_aff_on_domain(isl::checked::id id) const +{ + auto res = isl_set_param_pw_aff_on_domain_id(copy(), id.release()); + return manage(res); +} + +isl::checked::pw_aff set::param_pw_aff_on_domain(const std::string &id) const +{ + return this->param_pw_aff_on_domain(isl::checked::id(ctx(), id)); +} + +isl::checked::set set::params() const +{ + auto res = isl_set_params(copy()); + return manage(res); +} + +isl::checked::multi_val set::plain_multi_val_if_fixed() const +{ + auto res = isl_set_get_plain_multi_val_if_fixed(get()); + return manage(res); +} + +isl::checked::multi_val set::get_plain_multi_val_if_fixed() const +{ + return plain_multi_val_if_fixed(); +} + +isl::checked::basic_set set::polyhedral_hull() const +{ + auto res = isl_set_polyhedral_hull(copy()); + return manage(res); +} + +isl::checked::set set::preimage(isl::checked::multi_aff ma) const +{ + auto res = isl_set_preimage_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::set set::preimage(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::set set::preimage(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_set set::preimage(const isl::checked::union_pw_multi_aff &upma) const +{ + return isl::checked::union_set(*this).preimage(upma); +} + +isl::checked::set set::product(isl::checked::set set2) const +{ + auto res = isl_set_product(copy(), set2.release()); + return manage(res); +} + +isl::checked::set set::project_out_all_params() const +{ + auto res = isl_set_project_out_all_params(copy()); + return manage(res); +} + +isl::checked::set set::project_out_param(isl::checked::id id) const +{ + auto res = isl_set_project_out_param_id(copy(), id.release()); + return manage(res); +} + +isl::checked::set set::project_out_param(const std::string &id) const +{ + return this->project_out_param(isl::checked::id(ctx(), id)); +} + +isl::checked::set set::project_out_param(isl::checked::id_list list) const +{ + auto res = isl_set_project_out_param_id_list(copy(), list.release()); + return manage(res); +} + +isl::checked::pw_aff set::pw_aff_on_domain(isl::checked::val v) const +{ + auto res = isl_set_pw_aff_on_domain_val(copy(), v.release()); + return manage(res); +} + +isl::checked::pw_aff set::pw_aff_on_domain(long v) const +{ + return this->pw_aff_on_domain(isl::checked::val(ctx(), v)); +} + +isl::checked::pw_multi_aff set::pw_multi_aff_on_domain(isl::checked::multi_val mv) const +{ + auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::basic_set set::sample() const +{ + auto res = isl_set_sample(copy()); + return manage(res); +} + +isl::checked::point set::sample_point() const +{ + auto res = isl_set_sample_point(copy()); + return manage(res); +} + +isl::checked::set_list set::set_list() const +{ + return isl::checked::union_set(*this).set_list(); +} + +isl::checked::fixed_box set::simple_fixed_box_hull() const +{ + auto res = isl_set_get_simple_fixed_box_hull(get()); + return manage(res); +} + +isl::checked::fixed_box set::get_simple_fixed_box_hull() const +{ + return simple_fixed_box_hull(); +} + +isl::checked::space set::space() const +{ + auto res = isl_set_get_space(get()); + return manage(res); +} + +isl::checked::space set::get_space() const +{ + return space(); +} + +isl::checked::val set::stride(int pos) const +{ + auto res = isl_set_get_stride(get(), pos); + return manage(res); +} + +isl::checked::val set::get_stride(int pos) const +{ + return stride(pos); +} + +isl::checked::set set::subtract(isl::checked::set set2) const +{ + auto res = isl_set_subtract(copy(), set2.release()); + return manage(res); +} + +isl::checked::union_set set::subtract(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).subtract(uset2); +} + +isl::checked::set set::subtract(const isl::checked::basic_set &set2) const +{ + return this->subtract(isl::checked::set(set2)); +} + +isl::checked::set set::subtract(const isl::checked::point &set2) const +{ + return this->subtract(isl::checked::set(set2)); +} + +isl::checked::set_list set::to_list() const +{ + auto res = isl_set_to_list(copy()); + return manage(res); +} + +isl::checked::union_set set::to_union_set() const +{ + auto res = isl_set_to_union_set(copy()); + return manage(res); +} + +isl::checked::map set::translation() const +{ + auto res = isl_set_translation(copy()); + return manage(res); +} + +class size set::tuple_dim() const +{ + auto res = isl_set_tuple_dim(get()); + return manage(res); +} + +isl::checked::set set::unbind_params(isl::checked::multi_id tuple) const +{ + auto res = isl_set_unbind_params(copy(), tuple.release()); + return manage(res); +} + +isl::checked::map set::unbind_params_insert_domain(isl::checked::multi_id domain) const +{ + auto res = isl_set_unbind_params_insert_domain(copy(), domain.release()); + return manage(res); +} + +isl::checked::set set::unite(isl::checked::set set2) const +{ + auto res = isl_set_union(copy(), set2.release()); + return manage(res); +} + +isl::checked::union_set set::unite(const isl::checked::union_set &uset2) const +{ + return isl::checked::union_set(*this).unite(uset2); +} + +isl::checked::set set::unite(const isl::checked::basic_set &set2) const +{ + return this->unite(isl::checked::set(set2)); +} + +isl::checked::set set::unite(const isl::checked::point &set2) const +{ + return this->unite(isl::checked::set(set2)); +} + +isl::checked::set set::universe(isl::checked::space space) +{ + auto res = isl_set_universe(space.release()); + return manage(res); +} + +isl::checked::basic_set set::unshifted_simple_hull() const +{ + auto res = isl_set_unshifted_simple_hull(copy()); + return manage(res); +} + +isl::checked::map set::unwrap() const +{ + auto res = isl_set_unwrap(copy()); + return manage(res); +} + +isl::checked::set set::upper_bound(isl::checked::multi_pw_aff upper) const +{ + auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release()); + return manage(res); +} + +isl::checked::set set::upper_bound(isl::checked::multi_val upper) const +{ + auto res = isl_set_upper_bound_multi_val(copy(), upper.release()); + return manage(res); +} + +isl::checked::set set::wrapped_reverse() const +{ + auto res = isl_set_wrapped_reverse(copy()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const set &obj) +{ + char *str = isl_set_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::set_list +set_list manage(__isl_take isl_set_list *ptr) { + return set_list(ptr); +} +set_list manage_copy(__isl_keep isl_set_list *ptr) { + ptr = isl_set_list_copy(ptr); + return set_list(ptr); +} + +set_list::set_list(__isl_take isl_set_list *ptr) + : ptr(ptr) {} + +set_list::set_list() + : ptr(nullptr) {} + +set_list::set_list(const set_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +set_list::set_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_set_list_alloc(ctx.release(), n); + ptr = res; +} + +set_list::set_list(isl::checked::set el) +{ + auto res = isl_set_list_from_set(el.release()); + ptr = res; +} + +set_list::set_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_set_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +set_list &set_list::operator=(set_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +set_list::~set_list() { + if (ptr) + isl_set_list_free(ptr); +} + +__isl_give isl_set_list *set_list::copy() const & { + return isl_set_list_copy(ptr); +} + +__isl_keep isl_set_list *set_list::get() const { + return ptr; +} + +__isl_give isl_set_list *set_list::release() { + isl_set_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool set_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx set_list::ctx() const { + return isl::checked::ctx(isl_set_list_get_ctx(ptr)); +} + +isl::checked::set_list set_list::add(isl::checked::set el) const +{ + auto res = isl_set_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::set set_list::at(int index) const +{ + auto res = isl_set_list_get_at(get(), index); + return manage(res); +} + +isl::checked::set set_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::set_list set_list::clear() const +{ + auto res = isl_set_list_clear(copy()); + return manage(res); +} + +isl::checked::set_list set_list::concat(isl::checked::set_list list2) const +{ + auto res = isl_set_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::set_list set_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_set_list_drop(copy(), first, n); + return manage(res); +} + +stat set_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat set_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_set *arg_0, isl_set *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_set_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_set_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::set_list set_list::insert(unsigned int pos, isl::checked::set el) const +{ + auto res = isl_set_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::set_list set_list::set_at(int index, isl::checked::set el) const +{ + auto res = isl_set_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size set_list::size() const +{ + auto res = isl_set_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const set_list &obj) +{ + char *str = isl_set_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::space +space manage(__isl_take isl_space *ptr) { + return space(ptr); +} +space manage_copy(__isl_keep isl_space *ptr) { + ptr = isl_space_copy(ptr); + return space(ptr); +} + +space::space(__isl_take isl_space *ptr) + : ptr(ptr) {} + +space::space() + : ptr(nullptr) {} + +space::space(const space &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +space::space(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_space_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +space &space::operator=(space obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +space::~space() { + if (ptr) + isl_space_free(ptr); +} + +__isl_give isl_space *space::copy() const & { + return isl_space_copy(ptr); +} + +__isl_keep isl_space *space::get() const { + return ptr; +} + +__isl_give isl_space *space::release() { + isl_space *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool space::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx space::ctx() const { + return isl::checked::ctx(isl_space_get_ctx(ptr)); +} + +isl::checked::space space::add_named_tuple(isl::checked::id tuple_id, unsigned int dim) const +{ + auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim); + return manage(res); +} + +isl::checked::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const +{ + return this->add_named_tuple(isl::checked::id(ctx(), tuple_id), dim); +} + +isl::checked::space space::add_param(isl::checked::id id) const +{ + auto res = isl_space_add_param_id(copy(), id.release()); + return manage(res); +} + +isl::checked::space space::add_param(const std::string &id) const +{ + return this->add_param(isl::checked::id(ctx(), id)); +} + +isl::checked::space space::add_unnamed_tuple(unsigned int dim) const +{ + auto res = isl_space_add_unnamed_tuple_ui(copy(), dim); + return manage(res); +} + +isl::checked::space space::curry() const +{ + auto res = isl_space_curry(copy()); + return manage(res); +} + +isl::checked::space space::domain() const +{ + auto res = isl_space_domain(copy()); + return manage(res); +} + +isl::checked::multi_aff space::domain_map_multi_aff() const +{ + auto res = isl_space_domain_map_multi_aff(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff space::domain_map_pw_multi_aff() const +{ + auto res = isl_space_domain_map_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::space space::domain_reverse() const +{ + auto res = isl_space_domain_reverse(copy()); + return manage(res); +} + +isl::checked::id space::domain_tuple_id() const +{ + auto res = isl_space_get_domain_tuple_id(get()); + return manage(res); +} + +isl::checked::id space::get_domain_tuple_id() const +{ + return domain_tuple_id(); +} + +isl::checked::space space::drop_all_params() const +{ + auto res = isl_space_drop_all_params(copy()); + return manage(res); +} + +isl::checked::space space::flatten_domain() const +{ + auto res = isl_space_flatten_domain(copy()); + return manage(res); +} + +isl::checked::space space::flatten_range() const +{ + auto res = isl_space_flatten_range(copy()); + return manage(res); +} + +boolean space::has_domain_tuple_id() const +{ + auto res = isl_space_has_domain_tuple_id(get()); + return manage(res); +} + +boolean space::has_range_tuple_id() const +{ + auto res = isl_space_has_range_tuple_id(get()); + return manage(res); +} + +isl::checked::multi_aff space::identity_multi_aff_on_domain() const +{ + auto res = isl_space_identity_multi_aff_on_domain(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff space::identity_multi_pw_aff_on_domain() const +{ + auto res = isl_space_identity_multi_pw_aff_on_domain(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff space::identity_pw_multi_aff_on_domain() const +{ + auto res = isl_space_identity_pw_multi_aff_on_domain(copy()); + return manage(res); +} + +boolean space::is_equal(const isl::checked::space &space2) const +{ + auto res = isl_space_is_equal(get(), space2.get()); + return manage(res); +} + +boolean space::is_wrapping() const +{ + auto res = isl_space_is_wrapping(get()); + return manage(res); +} + +isl::checked::space space::map_from_set() const +{ + auto res = isl_space_map_from_set(copy()); + return manage(res); +} + +isl::checked::multi_aff space::multi_aff(isl::checked::aff_list list) const +{ + auto res = isl_space_multi_aff(copy(), list.release()); + return manage(res); +} + +isl::checked::multi_aff space::multi_aff_on_domain(isl::checked::multi_val mv) const +{ + auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release()); + return manage(res); +} + +isl::checked::multi_id space::multi_id(isl::checked::id_list list) const +{ + auto res = isl_space_multi_id(copy(), list.release()); + return manage(res); +} + +isl::checked::multi_pw_aff space::multi_pw_aff(isl::checked::pw_aff_list list) const +{ + auto res = isl_space_multi_pw_aff(copy(), list.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff space::multi_union_pw_aff(isl::checked::union_pw_aff_list list) const +{ + auto res = isl_space_multi_union_pw_aff(copy(), list.release()); + return manage(res); +} + +isl::checked::multi_val space::multi_val(isl::checked::val_list list) const +{ + auto res = isl_space_multi_val(copy(), list.release()); + return manage(res); +} + +isl::checked::aff space::param_aff_on_domain(isl::checked::id id) const +{ + auto res = isl_space_param_aff_on_domain_id(copy(), id.release()); + return manage(res); +} + +isl::checked::aff space::param_aff_on_domain(const std::string &id) const +{ + return this->param_aff_on_domain(isl::checked::id(ctx(), id)); +} + +isl::checked::space space::params() const +{ + auto res = isl_space_params(copy()); + return manage(res); +} + +isl::checked::space space::product(isl::checked::space right) const +{ + auto res = isl_space_product(copy(), right.release()); + return manage(res); +} + +isl::checked::space space::range() const +{ + auto res = isl_space_range(copy()); + return manage(res); +} + +isl::checked::multi_aff space::range_map_multi_aff() const +{ + auto res = isl_space_range_map_multi_aff(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff space::range_map_pw_multi_aff() const +{ + auto res = isl_space_range_map_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::space space::range_reverse() const +{ + auto res = isl_space_range_reverse(copy()); + return manage(res); +} + +isl::checked::id space::range_tuple_id() const +{ + auto res = isl_space_get_range_tuple_id(get()); + return manage(res); +} + +isl::checked::id space::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::checked::space space::reverse() const +{ + auto res = isl_space_reverse(copy()); + return manage(res); +} + +isl::checked::space space::set_domain_tuple(isl::checked::id id) const +{ + auto res = isl_space_set_domain_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::space space::set_domain_tuple(const std::string &id) const +{ + return this->set_domain_tuple(isl::checked::id(ctx(), id)); +} + +isl::checked::space space::set_range_tuple(isl::checked::id id) const +{ + auto res = isl_space_set_range_tuple_id(copy(), id.release()); + return manage(res); +} + +isl::checked::space space::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +isl::checked::space space::uncurry() const +{ + auto res = isl_space_uncurry(copy()); + return manage(res); +} + +isl::checked::space space::unit(isl::checked::ctx ctx) +{ + auto res = isl_space_unit(ctx.release()); + return manage(res); +} + +isl::checked::map space::universe_map() const +{ + auto res = isl_space_universe_map(copy()); + return manage(res); +} + +isl::checked::set space::universe_set() const +{ + auto res = isl_space_universe_set(copy()); + return manage(res); +} + +isl::checked::space space::unwrap() const +{ + auto res = isl_space_unwrap(copy()); + return manage(res); +} + +isl::checked::space space::wrap() const +{ + auto res = isl_space_wrap(copy()); + return manage(res); +} + +isl::checked::space space::wrapped_reverse() const +{ + auto res = isl_space_wrapped_reverse(copy()); + return manage(res); +} + +isl::checked::aff space::zero_aff_on_domain() const +{ + auto res = isl_space_zero_aff_on_domain(copy()); + return manage(res); +} + +isl::checked::multi_aff space::zero_multi_aff() const +{ + auto res = isl_space_zero_multi_aff(copy()); + return manage(res); +} + +isl::checked::multi_pw_aff space::zero_multi_pw_aff() const +{ + auto res = isl_space_zero_multi_pw_aff(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff space::zero_multi_union_pw_aff() const +{ + auto res = isl_space_zero_multi_union_pw_aff(copy()); + return manage(res); +} + +isl::checked::multi_val space::zero_multi_val() const +{ + auto res = isl_space_zero_multi_val(copy()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const space &obj) +{ + char *str = isl_space_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_access_info +union_access_info manage(__isl_take isl_union_access_info *ptr) { + return union_access_info(ptr); +} +union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) { + ptr = isl_union_access_info_copy(ptr); + return union_access_info(ptr); +} + +union_access_info::union_access_info(__isl_take isl_union_access_info *ptr) + : ptr(ptr) {} + +union_access_info::union_access_info() + : ptr(nullptr) {} + +union_access_info::union_access_info(const union_access_info &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_access_info::union_access_info(isl::checked::union_map sink) +{ + auto res = isl_union_access_info_from_sink(sink.release()); + ptr = res; +} + +union_access_info &union_access_info::operator=(union_access_info obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_access_info::~union_access_info() { + if (ptr) + isl_union_access_info_free(ptr); +} + +__isl_give isl_union_access_info *union_access_info::copy() const & { + return isl_union_access_info_copy(ptr); +} + +__isl_keep isl_union_access_info *union_access_info::get() const { + return ptr; +} + +__isl_give isl_union_access_info *union_access_info::release() { + isl_union_access_info *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_access_info::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_access_info::ctx() const { + return isl::checked::ctx(isl_union_access_info_get_ctx(ptr)); +} + +isl::checked::union_flow union_access_info::compute_flow() const +{ + auto res = isl_union_access_info_compute_flow(copy()); + return manage(res); +} + +isl::checked::union_access_info union_access_info::set_kill(isl::checked::union_map kill) const +{ + auto res = isl_union_access_info_set_kill(copy(), kill.release()); + return manage(res); +} + +isl::checked::union_access_info union_access_info::set_may_source(isl::checked::union_map may_source) const +{ + auto res = isl_union_access_info_set_may_source(copy(), may_source.release()); + return manage(res); +} + +isl::checked::union_access_info union_access_info::set_must_source(isl::checked::union_map must_source) const +{ + auto res = isl_union_access_info_set_must_source(copy(), must_source.release()); + return manage(res); +} + +isl::checked::union_access_info union_access_info::set_schedule(isl::checked::schedule schedule) const +{ + auto res = isl_union_access_info_set_schedule(copy(), schedule.release()); + return manage(res); +} + +isl::checked::union_access_info union_access_info::set_schedule_map(isl::checked::union_map schedule_map) const +{ + auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj) +{ + char *str = isl_union_access_info_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_flow +union_flow manage(__isl_take isl_union_flow *ptr) { + return union_flow(ptr); +} +union_flow manage_copy(__isl_keep isl_union_flow *ptr) { + ptr = isl_union_flow_copy(ptr); + return union_flow(ptr); +} + +union_flow::union_flow(__isl_take isl_union_flow *ptr) + : ptr(ptr) {} + +union_flow::union_flow() + : ptr(nullptr) {} + +union_flow::union_flow(const union_flow &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_flow &union_flow::operator=(union_flow obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_flow::~union_flow() { + if (ptr) + isl_union_flow_free(ptr); +} + +__isl_give isl_union_flow *union_flow::copy() const & { + return isl_union_flow_copy(ptr); +} + +__isl_keep isl_union_flow *union_flow::get() const { + return ptr; +} + +__isl_give isl_union_flow *union_flow::release() { + isl_union_flow *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_flow::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_flow::ctx() const { + return isl::checked::ctx(isl_union_flow_get_ctx(ptr)); +} + +isl::checked::union_map union_flow::full_may_dependence() const +{ + auto res = isl_union_flow_get_full_may_dependence(get()); + return manage(res); +} + +isl::checked::union_map union_flow::get_full_may_dependence() const +{ + return full_may_dependence(); +} + +isl::checked::union_map union_flow::full_must_dependence() const +{ + auto res = isl_union_flow_get_full_must_dependence(get()); + return manage(res); +} + +isl::checked::union_map union_flow::get_full_must_dependence() const +{ + return full_must_dependence(); +} + +isl::checked::union_map union_flow::may_dependence() const +{ + auto res = isl_union_flow_get_may_dependence(get()); + return manage(res); +} + +isl::checked::union_map union_flow::get_may_dependence() const +{ + return may_dependence(); +} + +isl::checked::union_map union_flow::may_no_source() const +{ + auto res = isl_union_flow_get_may_no_source(get()); + return manage(res); +} + +isl::checked::union_map union_flow::get_may_no_source() const +{ + return may_no_source(); +} + +isl::checked::union_map union_flow::must_dependence() const +{ + auto res = isl_union_flow_get_must_dependence(get()); + return manage(res); +} + +isl::checked::union_map union_flow::get_must_dependence() const +{ + return must_dependence(); +} + +isl::checked::union_map union_flow::must_no_source() const +{ + auto res = isl_union_flow_get_must_no_source(get()); + return manage(res); +} + +isl::checked::union_map union_flow::get_must_no_source() const +{ + return must_no_source(); +} + +inline std::ostream &operator<<(std::ostream &os, const union_flow &obj) +{ + char *str = isl_union_flow_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_map +union_map manage(__isl_take isl_union_map *ptr) { + return union_map(ptr); +} +union_map manage_copy(__isl_keep isl_union_map *ptr) { + ptr = isl_union_map_copy(ptr); + return union_map(ptr); +} + +union_map::union_map(__isl_take isl_union_map *ptr) + : ptr(ptr) {} + +union_map::union_map() + : ptr(nullptr) {} + +union_map::union_map(const union_map &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_map::union_map(isl::checked::basic_map bmap) +{ + auto res = isl_union_map_from_basic_map(bmap.release()); + ptr = res; +} + +union_map::union_map(isl::checked::map map) +{ + auto res = isl_union_map_from_map(map.release()); + ptr = res; +} + +union_map::union_map(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_union_map_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_map &union_map::operator=(union_map obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_map::~union_map() { + if (ptr) + isl_union_map_free(ptr); +} + +__isl_give isl_union_map *union_map::copy() const & { + return isl_union_map_copy(ptr); +} + +__isl_keep isl_union_map *union_map::get() const { + return ptr; +} + +__isl_give isl_union_map *union_map::release() { + isl_union_map *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_map::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_map::ctx() const { + return isl::checked::ctx(isl_union_map_get_ctx(ptr)); +} + +isl::checked::union_map union_map::affine_hull() const +{ + auto res = isl_union_map_affine_hull(copy()); + return manage(res); +} + +isl::checked::union_map union_map::apply_domain(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_apply_domain(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::apply_range(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_apply_range(copy(), umap2.release()); + return manage(res); +} + +isl::checked::map union_map::as_map() const +{ + auto res = isl_union_map_as_map(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff union_map::as_multi_union_pw_aff() const +{ + auto res = isl_union_map_as_multi_union_pw_aff(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_map::as_union_pw_multi_aff() const +{ + auto res = isl_union_map_as_union_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::union_set union_map::bind_range(isl::checked::multi_id tuple) const +{ + auto res = isl_union_map_bind_range(copy(), tuple.release()); + return manage(res); +} + +isl::checked::union_map union_map::coalesce() const +{ + auto res = isl_union_map_coalesce(copy()); + return manage(res); +} + +isl::checked::union_map union_map::compute_divs() const +{ + auto res = isl_union_map_compute_divs(copy()); + return manage(res); +} + +isl::checked::union_map union_map::curry() const +{ + auto res = isl_union_map_curry(copy()); + return manage(res); +} + +isl::checked::union_set union_map::deltas() const +{ + auto res = isl_union_map_deltas(copy()); + return manage(res); +} + +isl::checked::union_map union_map::detect_equalities() const +{ + auto res = isl_union_map_detect_equalities(copy()); + return manage(res); +} + +isl::checked::union_set union_map::domain() const +{ + auto res = isl_union_map_domain(copy()); + return manage(res); +} + +isl::checked::union_map union_map::domain_factor_domain() const +{ + auto res = isl_union_map_domain_factor_domain(copy()); + return manage(res); +} + +isl::checked::union_map union_map::domain_factor_range() const +{ + auto res = isl_union_map_domain_factor_range(copy()); + return manage(res); +} + +isl::checked::union_map union_map::domain_map() const +{ + auto res = isl_union_map_domain_map(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const +{ + auto res = isl_union_map_domain_map_union_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::union_map union_map::domain_product(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_domain_product(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::domain_reverse() const +{ + auto res = isl_union_map_domain_reverse(copy()); + return manage(res); +} + +isl::checked::union_map union_map::drop_unused_params() const +{ + auto res = isl_union_map_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::union_map union_map::empty(isl::checked::ctx ctx) +{ + auto res = isl_union_map_empty_ctx(ctx.release()); + return manage(res); +} + +isl::checked::union_map union_map::eq_at(isl::checked::multi_union_pw_aff mupa) const +{ + auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release()); + return manage(res); +} + +boolean union_map::every_map(const std::function &test) const +{ + struct test_data { + std::function func; + } test_data = { test }; + auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_union_map_every_map(get(), test_lambda, &test_data); + return manage(res); +} + +isl::checked::map union_map::extract_map(isl::checked::space space) const +{ + auto res = isl_union_map_extract_map(get(), space.release()); + return manage(res); +} + +isl::checked::union_map union_map::factor_domain() const +{ + auto res = isl_union_map_factor_domain(copy()); + return manage(res); +} + +isl::checked::union_map union_map::factor_range() const +{ + auto res = isl_union_map_factor_range(copy()); + return manage(res); +} + +isl::checked::union_map union_map::fixed_power(isl::checked::val exp) const +{ + auto res = isl_union_map_fixed_power_val(copy(), exp.release()); + return manage(res); +} + +isl::checked::union_map union_map::fixed_power(long exp) const +{ + return this->fixed_power(isl::checked::val(ctx(), exp)); +} + +stat union_map::foreach_map(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::union_map union_map::from(isl::checked::multi_union_pw_aff mupa) +{ + auto res = isl_union_map_from_multi_union_pw_aff(mupa.release()); + return manage(res); +} + +isl::checked::union_map union_map::from(isl::checked::union_pw_multi_aff upma) +{ + auto res = isl_union_map_from_union_pw_multi_aff(upma.release()); + return manage(res); +} + +isl::checked::union_map union_map::from_domain(isl::checked::union_set uset) +{ + auto res = isl_union_map_from_domain(uset.release()); + return manage(res); +} + +isl::checked::union_map union_map::from_domain_and_range(isl::checked::union_set domain, isl::checked::union_set range) +{ + auto res = isl_union_map_from_domain_and_range(domain.release(), range.release()); + return manage(res); +} + +isl::checked::union_map union_map::from_range(isl::checked::union_set uset) +{ + auto res = isl_union_map_from_range(uset.release()); + return manage(res); +} + +isl::checked::union_map union_map::gist(isl::checked::union_map context) const +{ + auto res = isl_union_map_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_map union_map::gist_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_map_gist_domain(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_map union_map::gist_params(isl::checked::set set) const +{ + auto res = isl_union_map_gist_params(copy(), set.release()); + return manage(res); +} + +isl::checked::union_map union_map::gist_range(isl::checked::union_set uset) const +{ + auto res = isl_union_map_gist_range(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_intersect(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_domain(isl::checked::space space) const +{ + auto res = isl_union_map_intersect_domain_space(copy(), space.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_domain_factor_domain(isl::checked::union_map factor) const +{ + auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_domain_factor_range(isl::checked::union_map factor) const +{ + auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_domain_wrapped_domain(isl::checked::union_set domain) const +{ + auto res = isl_union_map_intersect_domain_wrapped_domain_union_set(copy(), domain.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_params(isl::checked::set set) const +{ + auto res = isl_union_map_intersect_params(copy(), set.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_range(isl::checked::space space) const +{ + auto res = isl_union_map_intersect_range_space(copy(), space.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_range(isl::checked::union_set uset) const +{ + auto res = isl_union_map_intersect_range_union_set(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_range_factor_domain(isl::checked::union_map factor) const +{ + auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_range_factor_range(isl::checked::union_map factor) const +{ + auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release()); + return manage(res); +} + +isl::checked::union_map union_map::intersect_range_wrapped_domain(isl::checked::union_set domain) const +{ + auto res = isl_union_map_intersect_range_wrapped_domain_union_set(copy(), domain.release()); + return manage(res); +} + +boolean union_map::is_bijective() const +{ + auto res = isl_union_map_is_bijective(get()); + return manage(res); +} + +boolean union_map::is_disjoint(const isl::checked::union_map &umap2) const +{ + auto res = isl_union_map_is_disjoint(get(), umap2.get()); + return manage(res); +} + +boolean union_map::is_empty() const +{ + auto res = isl_union_map_is_empty(get()); + return manage(res); +} + +boolean union_map::is_equal(const isl::checked::union_map &umap2) const +{ + auto res = isl_union_map_is_equal(get(), umap2.get()); + return manage(res); +} + +boolean union_map::is_injective() const +{ + auto res = isl_union_map_is_injective(get()); + return manage(res); +} + +boolean union_map::is_single_valued() const +{ + auto res = isl_union_map_is_single_valued(get()); + return manage(res); +} + +boolean union_map::is_strict_subset(const isl::checked::union_map &umap2) const +{ + auto res = isl_union_map_is_strict_subset(get(), umap2.get()); + return manage(res); +} + +boolean union_map::is_subset(const isl::checked::union_map &umap2) const +{ + auto res = isl_union_map_is_subset(get(), umap2.get()); + return manage(res); +} + +boolean union_map::isa_map() const +{ + auto res = isl_union_map_isa_map(get()); + return manage(res); +} + +isl::checked::union_map union_map::lexmax() const +{ + auto res = isl_union_map_lexmax(copy()); + return manage(res); +} + +isl::checked::union_map union_map::lexmin() const +{ + auto res = isl_union_map_lexmin(copy()); + return manage(res); +} + +isl::checked::map_list union_map::map_list() const +{ + auto res = isl_union_map_get_map_list(get()); + return manage(res); +} + +isl::checked::map_list union_map::get_map_list() const +{ + return map_list(); +} + +isl::checked::set union_map::params() const +{ + auto res = isl_union_map_params(copy()); + return manage(res); +} + +isl::checked::union_map union_map::polyhedral_hull() const +{ + auto res = isl_union_map_polyhedral_hull(copy()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_domain(isl::checked::multi_aff ma) const +{ + auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_domain(isl::checked::multi_pw_aff mpa) const +{ + auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_domain(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_domain(isl::checked::union_pw_multi_aff upma) const +{ + auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_range(isl::checked::multi_aff ma) const +{ + auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_range(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_map union_map::preimage_range(isl::checked::union_pw_multi_aff upma) const +{ + auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release()); + return manage(res); +} + +isl::checked::union_map union_map::product(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_product(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::project_out_all_params() const +{ + auto res = isl_union_map_project_out_all_params(copy()); + return manage(res); +} + +isl::checked::union_map union_map::project_out_param(isl::checked::id id) const +{ + auto res = isl_union_map_project_out_param_id(copy(), id.release()); + return manage(res); +} + +isl::checked::union_map union_map::project_out_param(const std::string &id) const +{ + return this->project_out_param(isl::checked::id(ctx(), id)); +} + +isl::checked::union_map union_map::project_out_param(isl::checked::id_list list) const +{ + auto res = isl_union_map_project_out_param_id_list(copy(), list.release()); + return manage(res); +} + +isl::checked::union_set union_map::range() const +{ + auto res = isl_union_map_range(copy()); + return manage(res); +} + +isl::checked::union_map union_map::range_factor_domain() const +{ + auto res = isl_union_map_range_factor_domain(copy()); + return manage(res); +} + +isl::checked::union_map union_map::range_factor_range() const +{ + auto res = isl_union_map_range_factor_range(copy()); + return manage(res); +} + +isl::checked::union_map union_map::range_map() const +{ + auto res = isl_union_map_range_map(copy()); + return manage(res); +} + +isl::checked::union_map union_map::range_product(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_range_product(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::range_reverse() const +{ + auto res = isl_union_map_range_reverse(copy()); + return manage(res); +} + +isl::checked::union_map union_map::reverse() const +{ + auto res = isl_union_map_reverse(copy()); + return manage(res); +} + +isl::checked::space union_map::space() const +{ + auto res = isl_union_map_get_space(get()); + return manage(res); +} + +isl::checked::space union_map::get_space() const +{ + return space(); +} + +isl::checked::union_map union_map::subtract(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_subtract(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::subtract_domain(isl::checked::union_set dom) const +{ + auto res = isl_union_map_subtract_domain(copy(), dom.release()); + return manage(res); +} + +isl::checked::union_map union_map::subtract_range(isl::checked::union_set dom) const +{ + auto res = isl_union_map_subtract_range(copy(), dom.release()); + return manage(res); +} + +isl::checked::union_map union_map::uncurry() const +{ + auto res = isl_union_map_uncurry(copy()); + return manage(res); +} + +isl::checked::union_map union_map::unite(isl::checked::union_map umap2) const +{ + auto res = isl_union_map_union(copy(), umap2.release()); + return manage(res); +} + +isl::checked::union_map union_map::universe() const +{ + auto res = isl_union_map_universe(copy()); + return manage(res); +} + +isl::checked::union_set union_map::wrap() const +{ + auto res = isl_union_map_wrap(copy()); + return manage(res); +} + +isl::checked::union_map union_map::zip() const +{ + auto res = isl_union_map_zip(copy()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_map &obj) +{ + char *str = isl_union_map_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_pw_aff +union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) { + return union_pw_aff(ptr); +} +union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) { + ptr = isl_union_pw_aff_copy(ptr); + return union_pw_aff(ptr); +} + +union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr) + : ptr(ptr) {} + +union_pw_aff::union_pw_aff() + : ptr(nullptr) {} + +union_pw_aff::union_pw_aff(const union_pw_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_pw_aff::union_pw_aff(isl::checked::aff aff) +{ + auto res = isl_union_pw_aff_from_aff(aff.release()); + ptr = res; +} + +union_pw_aff::union_pw_aff(isl::checked::pw_aff pa) +{ + auto res = isl_union_pw_aff_from_pw_aff(pa.release()); + ptr = res; +} + +union_pw_aff::union_pw_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_pw_aff::~union_pw_aff() { + if (ptr) + isl_union_pw_aff_free(ptr); +} + +__isl_give isl_union_pw_aff *union_pw_aff::copy() const & { + return isl_union_pw_aff_copy(ptr); +} + +__isl_keep isl_union_pw_aff *union_pw_aff::get() const { + return ptr; +} + +__isl_give isl_union_pw_aff *union_pw_aff::release() { + isl_union_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_pw_aff::ctx() const { + return isl::checked::ctx(isl_union_pw_aff_get_ctx(ptr)); +} + +isl::checked::multi_union_pw_aff union_pw_aff::add(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).add(multi2); +} + +isl::checked::union_pw_aff union_pw_aff::add(isl::checked::union_pw_aff upa2) const +{ + auto res = isl_union_pw_aff_add(copy(), upa2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_aff::add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).add(upma2); +} + +isl::checked::union_pw_aff union_pw_aff::add(const isl::checked::aff &upa2) const +{ + return this->add(isl::checked::union_pw_aff(upa2)); +} + +isl::checked::union_pw_aff union_pw_aff::add(const isl::checked::pw_aff &upa2) const +{ + return this->add(isl::checked::union_pw_aff(upa2)); +} + +isl::checked::union_pw_multi_aff union_pw_aff::apply(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).apply(upma2); +} + +isl::checked::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const +{ + return isl::checked::union_pw_multi_aff(*this).as_multi_union_pw_aff(); +} + +isl::checked::pw_multi_aff union_pw_aff::as_pw_multi_aff() const +{ + return isl::checked::union_pw_multi_aff(*this).as_pw_multi_aff(); +} + +isl::checked::union_map union_pw_aff::as_union_map() const +{ + return isl::checked::union_pw_multi_aff(*this).as_union_map(); +} + +isl::checked::union_pw_aff union_pw_aff::at(int pos) const +{ + return isl::checked::multi_union_pw_aff(*this).at(pos); +} + +isl::checked::union_set union_pw_aff::bind(const isl::checked::multi_id &tuple) const +{ + return isl::checked::multi_union_pw_aff(*this).bind(tuple); +} + +isl::checked::union_set union_pw_aff::bind(isl::checked::id id) const +{ + auto res = isl_union_pw_aff_bind_id(copy(), id.release()); + return manage(res); +} + +isl::checked::union_set union_pw_aff::bind(const std::string &id) const +{ + return this->bind(isl::checked::id(ctx(), id)); +} + +isl::checked::union_pw_aff union_pw_aff::coalesce() const +{ + auto res = isl_union_pw_aff_coalesce(copy()); + return manage(res); +} + +isl::checked::union_set union_pw_aff::domain() const +{ + auto res = isl_union_pw_aff_domain(copy()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff::drop_unused_params() const +{ + auto res = isl_union_pw_aff_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::checked::space &space) const +{ + return isl::checked::union_pw_multi_aff(*this).extract_pw_multi_aff(space); +} + +isl::checked::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).flat_range_product(multi2); +} + +isl::checked::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).flat_range_product(upma2); +} + +isl::checked::union_pw_aff union_pw_aff::gist(isl::checked::union_set context) const +{ + auto res = isl_union_pw_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff union_pw_aff::gist_params(const isl::checked::set &context) const +{ + return isl::checked::multi_union_pw_aff(*this).gist_params(context); +} + +boolean union_pw_aff::has_range_tuple_id() const +{ + return isl::checked::multi_union_pw_aff(*this).has_range_tuple_id(); +} + +isl::checked::union_pw_aff union_pw_aff::intersect_domain(isl::checked::space space) const +{ + auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff::intersect_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff::intersect_params(isl::checked::set set) const +{ + auto res = isl_union_pw_aff_intersect_params(copy(), set.release()); + return manage(res); +} + +boolean union_pw_aff::involves_locals() const +{ + return isl::checked::union_pw_multi_aff(*this).involves_locals(); +} + +boolean union_pw_aff::involves_nan() const +{ + return isl::checked::multi_union_pw_aff(*this).involves_nan(); +} + +boolean union_pw_aff::isa_pw_multi_aff() const +{ + return isl::checked::union_pw_multi_aff(*this).isa_pw_multi_aff(); +} + +isl::checked::union_pw_aff_list union_pw_aff::list() const +{ + return isl::checked::multi_union_pw_aff(*this).list(); +} + +isl::checked::multi_union_pw_aff union_pw_aff::neg() const +{ + return isl::checked::multi_union_pw_aff(*this).neg(); +} + +boolean union_pw_aff::plain_is_empty() const +{ + return isl::checked::union_pw_multi_aff(*this).plain_is_empty(); +} + +boolean union_pw_aff::plain_is_equal(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).plain_is_equal(multi2); +} + +boolean union_pw_aff::plain_is_equal(const isl::checked::union_pw_aff &upa2) const +{ + auto res = isl_union_pw_aff_plain_is_equal(get(), upa2.get()); + return manage(res); +} + +boolean union_pw_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).plain_is_equal(upma2); +} + +boolean union_pw_aff::plain_is_equal(const isl::checked::aff &upa2) const +{ + return this->plain_is_equal(isl::checked::union_pw_aff(upa2)); +} + +boolean union_pw_aff::plain_is_equal(const isl::checked::pw_aff &upa2) const +{ + return this->plain_is_equal(isl::checked::union_pw_aff(upa2)); +} + +isl::checked::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::checked::union_pw_aff union_pw_aff::pullback(isl::checked::union_pw_multi_aff upma) const +{ + auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); + return manage(res); +} + +isl::checked::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const +{ + return isl::checked::union_pw_multi_aff(*this).pw_multi_aff_list(); +} + +isl::checked::union_pw_multi_aff union_pw_aff::range_factor_domain() const +{ + return isl::checked::union_pw_multi_aff(*this).range_factor_domain(); +} + +isl::checked::union_pw_multi_aff union_pw_aff::range_factor_range() const +{ + return isl::checked::union_pw_multi_aff(*this).range_factor_range(); +} + +isl::checked::multi_union_pw_aff union_pw_aff::range_product(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).range_product(multi2); +} + +isl::checked::union_pw_multi_aff union_pw_aff::range_product(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).range_product(upma2); +} + +isl::checked::id union_pw_aff::range_tuple_id() const +{ + return isl::checked::multi_union_pw_aff(*this).range_tuple_id(); +} + +isl::checked::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const +{ + return isl::checked::multi_union_pw_aff(*this).reset_range_tuple_id(); +} + +isl::checked::multi_union_pw_aff union_pw_aff::scale(const isl::checked::multi_val &mv) const +{ + return isl::checked::multi_union_pw_aff(*this).scale(mv); +} + +isl::checked::multi_union_pw_aff union_pw_aff::scale(const isl::checked::val &v) const +{ + return isl::checked::multi_union_pw_aff(*this).scale(v); +} + +isl::checked::multi_union_pw_aff union_pw_aff::scale(long v) const +{ + return this->scale(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_union_pw_aff union_pw_aff::scale_down(const isl::checked::multi_val &mv) const +{ + return isl::checked::multi_union_pw_aff(*this).scale_down(mv); +} + +isl::checked::multi_union_pw_aff union_pw_aff::scale_down(const isl::checked::val &v) const +{ + return isl::checked::multi_union_pw_aff(*this).scale_down(v); +} + +isl::checked::multi_union_pw_aff union_pw_aff::scale_down(long v) const +{ + return this->scale_down(isl::checked::val(ctx(), v)); +} + +isl::checked::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::checked::union_pw_aff &el) const +{ + return isl::checked::multi_union_pw_aff(*this).set_at(pos, el); +} + +isl::checked::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::checked::id &id) const +{ + return isl::checked::multi_union_pw_aff(*this).set_range_tuple(id); +} + +isl::checked::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const +{ + return this->set_range_tuple(isl::checked::id(ctx(), id)); +} + +class size union_pw_aff::size() const +{ + return isl::checked::multi_union_pw_aff(*this).size(); +} + +isl::checked::space union_pw_aff::space() const +{ + auto res = isl_union_pw_aff_get_space(get()); + return manage(res); +} + +isl::checked::space union_pw_aff::get_space() const +{ + return space(); +} + +isl::checked::multi_union_pw_aff union_pw_aff::sub(const isl::checked::multi_union_pw_aff &multi2) const +{ + return isl::checked::multi_union_pw_aff(*this).sub(multi2); +} + +isl::checked::union_pw_aff union_pw_aff::sub(isl::checked::union_pw_aff upa2) const +{ + auto res = isl_union_pw_aff_sub(copy(), upa2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_aff::sub(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).sub(upma2); +} + +isl::checked::union_pw_aff union_pw_aff::sub(const isl::checked::aff &upa2) const +{ + return this->sub(isl::checked::union_pw_aff(upa2)); +} + +isl::checked::union_pw_aff union_pw_aff::sub(const isl::checked::pw_aff &upa2) const +{ + return this->sub(isl::checked::union_pw_aff(upa2)); +} + +isl::checked::union_pw_aff union_pw_aff::subtract_domain(isl::checked::space space) const +{ + auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff::subtract_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_aff_list union_pw_aff::to_list() const +{ + auto res = isl_union_pw_aff_to_list(copy()); + return manage(res); +} + +isl::checked::multi_union_pw_aff union_pw_aff::union_add(const isl::checked::multi_union_pw_aff &mupa2) const +{ + return isl::checked::multi_union_pw_aff(*this).union_add(mupa2); +} + +isl::checked::union_pw_aff union_pw_aff::union_add(isl::checked::union_pw_aff upa2) const +{ + auto res = isl_union_pw_aff_union_add(copy(), upa2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_aff::union_add(const isl::checked::union_pw_multi_aff &upma2) const +{ + return isl::checked::union_pw_multi_aff(*this).union_add(upma2); +} + +isl::checked::union_pw_aff union_pw_aff::union_add(const isl::checked::aff &upa2) const +{ + return this->union_add(isl::checked::union_pw_aff(upa2)); +} + +isl::checked::union_pw_aff union_pw_aff::union_add(const isl::checked::pw_aff &upa2) const +{ + return this->union_add(isl::checked::union_pw_aff(upa2)); +} + +inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj) +{ + char *str = isl_union_pw_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_pw_aff_list +union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) { + return union_pw_aff_list(ptr); +} +union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) { + ptr = isl_union_pw_aff_list_copy(ptr); + return union_pw_aff_list(ptr); +} + +union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr) + : ptr(ptr) {} + +union_pw_aff_list::union_pw_aff_list() + : ptr(nullptr) {} + +union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_pw_aff_list::union_pw_aff_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_union_pw_aff_list_alloc(ctx.release(), n); + ptr = res; +} + +union_pw_aff_list::union_pw_aff_list(isl::checked::union_pw_aff el) +{ + auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release()); + ptr = res; +} + +union_pw_aff_list::union_pw_aff_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_pw_aff_list::~union_pw_aff_list() { + if (ptr) + isl_union_pw_aff_list_free(ptr); +} + +__isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & { + return isl_union_pw_aff_list_copy(ptr); +} + +__isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const { + return ptr; +} + +__isl_give isl_union_pw_aff_list *union_pw_aff_list::release() { + isl_union_pw_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_pw_aff_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_pw_aff_list::ctx() const { + return isl::checked::ctx(isl_union_pw_aff_list_get_ctx(ptr)); +} + +isl::checked::union_pw_aff_list union_pw_aff_list::add(isl::checked::union_pw_aff el) const +{ + auto res = isl_union_pw_aff_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff_list::at(int index) const +{ + auto res = isl_union_pw_aff_list_get_at(get(), index); + return manage(res); +} + +isl::checked::union_pw_aff union_pw_aff_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::union_pw_aff_list union_pw_aff_list::clear() const +{ + auto res = isl_union_pw_aff_list_clear(copy()); + return manage(res); +} + +isl::checked::union_pw_aff_list union_pw_aff_list::concat(isl::checked::union_pw_aff_list list2) const +{ + auto res = isl_union_pw_aff_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_union_pw_aff_list_drop(copy(), first, n); + return manage(res); +} + +stat union_pw_aff_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat union_pw_aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_union_pw_aff *arg_0, isl_union_pw_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_pw_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_pw_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::checked::union_pw_aff el) const +{ + auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::union_pw_aff_list union_pw_aff_list::set_at(int index, isl::checked::union_pw_aff el) const +{ + auto res = isl_union_pw_aff_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size union_pw_aff_list::size() const +{ + auto res = isl_union_pw_aff_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj) +{ + char *str = isl_union_pw_aff_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_pw_multi_aff +union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) { + return union_pw_multi_aff(ptr); +} +union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) { + ptr = isl_union_pw_multi_aff_copy(ptr); + return union_pw_multi_aff(ptr); +} + +union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr) + : ptr(ptr) {} + +union_pw_multi_aff::union_pw_multi_aff() + : ptr(nullptr) {} + +union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_pw_multi_aff::union_pw_multi_aff(isl::checked::multi_aff ma) +{ + auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release()); + ptr = res; +} + +union_pw_multi_aff::union_pw_multi_aff(isl::checked::pw_multi_aff pma) +{ + auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release()); + ptr = res; +} + +union_pw_multi_aff::union_pw_multi_aff(isl::checked::union_pw_aff upa) +{ + auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release()); + ptr = res; +} + +union_pw_multi_aff::union_pw_multi_aff(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_pw_multi_aff::~union_pw_multi_aff() { + if (ptr) + isl_union_pw_multi_aff_free(ptr); +} + +__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & { + return isl_union_pw_multi_aff_copy(ptr); +} + +__isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const { + return ptr; +} + +__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() { + isl_union_pw_multi_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_pw_multi_aff::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_pw_multi_aff::ctx() const { + return isl::checked::ctx(isl_union_pw_multi_aff_get_ctx(ptr)); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::add(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_add(copy(), upma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::apply(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release()); + return manage(res); +} + +isl::checked::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy()); + return manage(res); +} + +isl::checked::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const +{ + auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy()); + return manage(res); +} + +isl::checked::union_map union_pw_multi_aff::as_union_map() const +{ + auto res = isl_union_pw_multi_aff_as_union_map(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::coalesce() const +{ + auto res = isl_union_pw_multi_aff_coalesce(copy()); + return manage(res); +} + +isl::checked::union_set union_pw_multi_aff::domain() const +{ + auto res = isl_union_pw_multi_aff_domain(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::drop_unused_params() const +{ + auto res = isl_union_pw_multi_aff_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::empty(isl::checked::ctx ctx) +{ + auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release()); + return manage(res); +} + +isl::checked::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::checked::space space) const +{ + auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::gist(isl::checked::union_set context) const +{ + auto res = isl_union_pw_multi_aff_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::checked::space space) const +{ + auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::checked::set set) const +{ + auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release()); + return manage(res); +} + +boolean union_pw_multi_aff::involves_locals() const +{ + auto res = isl_union_pw_multi_aff_involves_locals(get()); + return manage(res); +} + +boolean union_pw_multi_aff::isa_pw_multi_aff() const +{ + auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get()); + return manage(res); +} + +boolean union_pw_multi_aff::plain_is_empty() const +{ + auto res = isl_union_pw_multi_aff_plain_is_empty(get()); + return manage(res); +} + +boolean union_pw_multi_aff::plain_is_equal(const isl::checked::union_pw_multi_aff &upma2) const +{ + auto res = isl_union_pw_multi_aff_plain_is_equal(get(), upma2.get()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::pullback(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release()); + return manage(res); +} + +isl::checked::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const +{ + auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get()); + return manage(res); +} + +isl::checked::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const +{ + return pw_multi_aff_list(); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const +{ + auto res = isl_union_pw_multi_aff_range_factor_domain(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const +{ + auto res = isl_union_pw_multi_aff_range_factor_range(copy()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::range_product(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release()); + return manage(res); +} + +isl::checked::space union_pw_multi_aff::space() const +{ + auto res = isl_union_pw_multi_aff_get_space(get()); + return manage(res); +} + +isl::checked::space union_pw_multi_aff::get_space() const +{ + return space(); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::sub(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::checked::space space) const +{ + auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::checked::union_set uset) const +{ + auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release()); + return manage(res); +} + +isl::checked::union_pw_multi_aff union_pw_multi_aff::union_add(isl::checked::union_pw_multi_aff upma2) const +{ + auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj) +{ + char *str = isl_union_pw_multi_aff_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_set +union_set manage(__isl_take isl_union_set *ptr) { + return union_set(ptr); +} +union_set manage_copy(__isl_keep isl_union_set *ptr) { + ptr = isl_union_set_copy(ptr); + return union_set(ptr); +} + +union_set::union_set(__isl_take isl_union_set *ptr) + : ptr(ptr) {} + +union_set::union_set() + : ptr(nullptr) {} + +union_set::union_set(const union_set &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_set::union_set(isl::checked::basic_set bset) +{ + auto res = isl_union_set_from_basic_set(bset.release()); + ptr = res; +} + +union_set::union_set(isl::checked::point pnt) +{ + auto res = isl_union_set_from_point(pnt.release()); + ptr = res; +} + +union_set::union_set(isl::checked::set set) +{ + auto res = isl_union_set_from_set(set.release()); + ptr = res; +} + +union_set::union_set(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_union_set_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_set &union_set::operator=(union_set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_set::~union_set() { + if (ptr) + isl_union_set_free(ptr); +} + +__isl_give isl_union_set *union_set::copy() const & { + return isl_union_set_copy(ptr); +} + +__isl_keep isl_union_set *union_set::get() const { + return ptr; +} + +__isl_give isl_union_set *union_set::release() { + isl_union_set *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_set::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_set::ctx() const { + return isl::checked::ctx(isl_union_set_get_ctx(ptr)); +} + +isl::checked::union_set union_set::affine_hull() const +{ + auto res = isl_union_set_affine_hull(copy()); + return manage(res); +} + +isl::checked::union_set union_set::apply(isl::checked::union_map umap) const +{ + auto res = isl_union_set_apply(copy(), umap.release()); + return manage(res); +} + +isl::checked::set union_set::as_set() const +{ + auto res = isl_union_set_as_set(copy()); + return manage(res); +} + +isl::checked::union_set union_set::coalesce() const +{ + auto res = isl_union_set_coalesce(copy()); + return manage(res); +} + +isl::checked::union_set union_set::compute_divs() const +{ + auto res = isl_union_set_compute_divs(copy()); + return manage(res); +} + +isl::checked::union_set union_set::detect_equalities() const +{ + auto res = isl_union_set_detect_equalities(copy()); + return manage(res); +} + +isl::checked::union_set union_set::drop_unused_params() const +{ + auto res = isl_union_set_drop_unused_params(copy()); + return manage(res); +} + +isl::checked::union_set union_set::empty(isl::checked::ctx ctx) +{ + auto res = isl_union_set_empty_ctx(ctx.release()); + return manage(res); +} + +boolean union_set::every_set(const std::function &test) const +{ + struct test_data { + std::function func; + } test_data = { test }; + auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage_copy(arg_0)); + return ret.release(); + }; + auto res = isl_union_set_every_set(get(), test_lambda, &test_data); + return manage(res); +} + +isl::checked::set union_set::extract_set(isl::checked::space space) const +{ + auto res = isl_union_set_extract_set(get(), space.release()); + return manage(res); +} + +stat union_set::foreach_point(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat union_set::foreach_set(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_set_foreach_set(get(), fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::union_set union_set::gist(isl::checked::union_set context) const +{ + auto res = isl_union_set_gist(copy(), context.release()); + return manage(res); +} + +isl::checked::union_set union_set::gist_params(isl::checked::set set) const +{ + auto res = isl_union_set_gist_params(copy(), set.release()); + return manage(res); +} + +isl::checked::union_map union_set::identity() const +{ + auto res = isl_union_set_identity(copy()); + return manage(res); +} + +isl::checked::union_set union_set::intersect(isl::checked::union_set uset2) const +{ + auto res = isl_union_set_intersect(copy(), uset2.release()); + return manage(res); +} + +isl::checked::union_set union_set::intersect_params(isl::checked::set set) const +{ + auto res = isl_union_set_intersect_params(copy(), set.release()); + return manage(res); +} + +boolean union_set::is_disjoint(const isl::checked::union_set &uset2) const +{ + auto res = isl_union_set_is_disjoint(get(), uset2.get()); + return manage(res); +} + +boolean union_set::is_empty() const +{ + auto res = isl_union_set_is_empty(get()); + return manage(res); +} + +boolean union_set::is_equal(const isl::checked::union_set &uset2) const +{ + auto res = isl_union_set_is_equal(get(), uset2.get()); + return manage(res); +} + +boolean union_set::is_strict_subset(const isl::checked::union_set &uset2) const +{ + auto res = isl_union_set_is_strict_subset(get(), uset2.get()); + return manage(res); +} + +boolean union_set::is_subset(const isl::checked::union_set &uset2) const +{ + auto res = isl_union_set_is_subset(get(), uset2.get()); + return manage(res); +} + +boolean union_set::isa_set() const +{ + auto res = isl_union_set_isa_set(get()); + return manage(res); +} + +isl::checked::union_set union_set::lexmax() const +{ + auto res = isl_union_set_lexmax(copy()); + return manage(res); +} + +isl::checked::union_set union_set::lexmin() const +{ + auto res = isl_union_set_lexmin(copy()); + return manage(res); +} + +isl::checked::set union_set::params() const +{ + auto res = isl_union_set_params(copy()); + return manage(res); +} + +isl::checked::union_set union_set::polyhedral_hull() const +{ + auto res = isl_union_set_polyhedral_hull(copy()); + return manage(res); +} + +isl::checked::union_set union_set::preimage(isl::checked::multi_aff ma) const +{ + auto res = isl_union_set_preimage_multi_aff(copy(), ma.release()); + return manage(res); +} + +isl::checked::union_set union_set::preimage(isl::checked::pw_multi_aff pma) const +{ + auto res = isl_union_set_preimage_pw_multi_aff(copy(), pma.release()); + return manage(res); +} + +isl::checked::union_set union_set::preimage(isl::checked::union_pw_multi_aff upma) const +{ + auto res = isl_union_set_preimage_union_pw_multi_aff(copy(), upma.release()); + return manage(res); +} + +isl::checked::union_set union_set::project_out_all_params() const +{ + auto res = isl_union_set_project_out_all_params(copy()); + return manage(res); +} + +isl::checked::point union_set::sample_point() const +{ + auto res = isl_union_set_sample_point(copy()); + return manage(res); +} + +isl::checked::set_list union_set::set_list() const +{ + auto res = isl_union_set_get_set_list(get()); + return manage(res); +} + +isl::checked::set_list union_set::get_set_list() const +{ + return set_list(); +} + +isl::checked::space union_set::space() const +{ + auto res = isl_union_set_get_space(get()); + return manage(res); +} + +isl::checked::space union_set::get_space() const +{ + return space(); +} + +isl::checked::union_set union_set::subtract(isl::checked::union_set uset2) const +{ + auto res = isl_union_set_subtract(copy(), uset2.release()); + return manage(res); +} + +isl::checked::union_set_list union_set::to_list() const +{ + auto res = isl_union_set_to_list(copy()); + return manage(res); +} + +isl::checked::union_set union_set::unite(isl::checked::union_set uset2) const +{ + auto res = isl_union_set_union(copy(), uset2.release()); + return manage(res); +} + +isl::checked::union_set union_set::universe() const +{ + auto res = isl_union_set_universe(copy()); + return manage(res); +} + +isl::checked::union_map union_set::unwrap() const +{ + auto res = isl_union_set_unwrap(copy()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_set &obj) +{ + char *str = isl_union_set_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::union_set_list +union_set_list manage(__isl_take isl_union_set_list *ptr) { + return union_set_list(ptr); +} +union_set_list manage_copy(__isl_keep isl_union_set_list *ptr) { + ptr = isl_union_set_list_copy(ptr); + return union_set_list(ptr); +} + +union_set_list::union_set_list(__isl_take isl_union_set_list *ptr) + : ptr(ptr) {} + +union_set_list::union_set_list() + : ptr(nullptr) {} + +union_set_list::union_set_list(const union_set_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +union_set_list::union_set_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_union_set_list_alloc(ctx.release(), n); + ptr = res; +} + +union_set_list::union_set_list(isl::checked::union_set el) +{ + auto res = isl_union_set_list_from_union_set(el.release()); + ptr = res; +} + +union_set_list::union_set_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +union_set_list &union_set_list::operator=(union_set_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_set_list::~union_set_list() { + if (ptr) + isl_union_set_list_free(ptr); +} + +__isl_give isl_union_set_list *union_set_list::copy() const & { + return isl_union_set_list_copy(ptr); +} + +__isl_keep isl_union_set_list *union_set_list::get() const { + return ptr; +} + +__isl_give isl_union_set_list *union_set_list::release() { + isl_union_set_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_set_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx union_set_list::ctx() const { + return isl::checked::ctx(isl_union_set_list_get_ctx(ptr)); +} + +isl::checked::union_set_list union_set_list::add(isl::checked::union_set el) const +{ + auto res = isl_union_set_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::union_set union_set_list::at(int index) const +{ + auto res = isl_union_set_list_get_at(get(), index); + return manage(res); +} + +isl::checked::union_set union_set_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::union_set_list union_set_list::clear() const +{ + auto res = isl_union_set_list_clear(copy()); + return manage(res); +} + +isl::checked::union_set_list union_set_list::concat(isl::checked::union_set_list list2) const +{ + auto res = isl_union_set_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::union_set_list union_set_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_union_set_list_drop(copy(), first, n); + return manage(res); +} + +stat union_set_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_set_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat union_set_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_union_set *arg_0, isl_union_set *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_set_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_union_set_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::union_set_list union_set_list::insert(unsigned int pos, isl::checked::union_set el) const +{ + auto res = isl_union_set_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::union_set_list union_set_list::set_at(int index, isl::checked::union_set el) const +{ + auto res = isl_union_set_list_set_at(copy(), index, el.release()); + return manage(res); +} + +class size union_set_list::size() const +{ + auto res = isl_union_set_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj) +{ + char *str = isl_union_set_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::val +val manage(__isl_take isl_val *ptr) { + return val(ptr); +} +val manage_copy(__isl_keep isl_val *ptr) { + ptr = isl_val_copy(ptr); + return val(ptr); +} + +val::val(__isl_take isl_val *ptr) + : ptr(ptr) {} + +val::val() + : ptr(nullptr) {} + +val::val(const val &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +val::val(isl::checked::ctx ctx, long i) +{ + auto res = isl_val_int_from_si(ctx.release(), i); + ptr = res; +} + +val::val(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_val_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +val &val::operator=(val obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +val::~val() { + if (ptr) + isl_val_free(ptr); +} + +__isl_give isl_val *val::copy() const & { + return isl_val_copy(ptr); +} + +__isl_keep isl_val *val::get() const { + return ptr; +} + +__isl_give isl_val *val::release() { + isl_val *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool val::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx val::ctx() const { + return isl::checked::ctx(isl_val_get_ctx(ptr)); +} + +isl::checked::val val::abs() const +{ + auto res = isl_val_abs(copy()); + return manage(res); +} + +boolean val::abs_eq(const isl::checked::val &v2) const +{ + auto res = isl_val_abs_eq(get(), v2.get()); + return manage(res); +} + +boolean val::abs_eq(long v2) const +{ + return this->abs_eq(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::add(isl::checked::val v2) const +{ + auto res = isl_val_add(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::add(long v2) const +{ + return this->add(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::ceil() const +{ + auto res = isl_val_ceil(copy()); + return manage(res); +} + +int val::cmp_si(long i) const +{ + auto res = isl_val_cmp_si(get(), i); + return res; +} + +long val::den_si() const +{ + auto res = isl_val_get_den_si(get()); + return res; +} + +long val::get_den_si() const +{ + return den_si(); +} + +isl::checked::val val::div(isl::checked::val v2) const +{ + auto res = isl_val_div(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::div(long v2) const +{ + return this->div(isl::checked::val(ctx(), v2)); +} + +boolean val::eq(const isl::checked::val &v2) const +{ + auto res = isl_val_eq(get(), v2.get()); + return manage(res); +} + +boolean val::eq(long v2) const +{ + return this->eq(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::floor() const +{ + auto res = isl_val_floor(copy()); + return manage(res); +} + +isl::checked::val val::gcd(isl::checked::val v2) const +{ + auto res = isl_val_gcd(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::gcd(long v2) const +{ + return this->gcd(isl::checked::val(ctx(), v2)); +} + +boolean val::ge(const isl::checked::val &v2) const +{ + auto res = isl_val_ge(get(), v2.get()); + return manage(res); +} + +boolean val::ge(long v2) const +{ + return this->ge(isl::checked::val(ctx(), v2)); +} + +boolean val::gt(const isl::checked::val &v2) const +{ + auto res = isl_val_gt(get(), v2.get()); + return manage(res); +} + +boolean val::gt(long v2) const +{ + return this->gt(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::infty(isl::checked::ctx ctx) +{ + auto res = isl_val_infty(ctx.release()); + return manage(res); +} + +isl::checked::val val::inv() const +{ + auto res = isl_val_inv(copy()); + return manage(res); +} + +boolean val::is_divisible_by(const isl::checked::val &v2) const +{ + auto res = isl_val_is_divisible_by(get(), v2.get()); + return manage(res); +} + +boolean val::is_divisible_by(long v2) const +{ + return this->is_divisible_by(isl::checked::val(ctx(), v2)); +} + +boolean val::is_infty() const +{ + auto res = isl_val_is_infty(get()); + return manage(res); +} + +boolean val::is_int() const +{ + auto res = isl_val_is_int(get()); + return manage(res); +} + +boolean val::is_nan() const +{ + auto res = isl_val_is_nan(get()); + return manage(res); +} + +boolean val::is_neg() const +{ + auto res = isl_val_is_neg(get()); + return manage(res); +} + +boolean val::is_neginfty() const +{ + auto res = isl_val_is_neginfty(get()); + return manage(res); +} + +boolean val::is_negone() const +{ + auto res = isl_val_is_negone(get()); + return manage(res); +} + +boolean val::is_nonneg() const +{ + auto res = isl_val_is_nonneg(get()); + return manage(res); +} + +boolean val::is_nonpos() const +{ + auto res = isl_val_is_nonpos(get()); + return manage(res); +} + +boolean val::is_one() const +{ + auto res = isl_val_is_one(get()); + return manage(res); +} + +boolean val::is_pos() const +{ + auto res = isl_val_is_pos(get()); + return manage(res); +} + +boolean val::is_rat() const +{ + auto res = isl_val_is_rat(get()); + return manage(res); +} + +boolean val::is_zero() const +{ + auto res = isl_val_is_zero(get()); + return manage(res); +} + +boolean val::le(const isl::checked::val &v2) const +{ + auto res = isl_val_le(get(), v2.get()); + return manage(res); +} + +boolean val::le(long v2) const +{ + return this->le(isl::checked::val(ctx(), v2)); +} + +boolean val::lt(const isl::checked::val &v2) const +{ + auto res = isl_val_lt(get(), v2.get()); + return manage(res); +} + +boolean val::lt(long v2) const +{ + return this->lt(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::max(isl::checked::val v2) const +{ + auto res = isl_val_max(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::max(long v2) const +{ + return this->max(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::min(isl::checked::val v2) const +{ + auto res = isl_val_min(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::min(long v2) const +{ + return this->min(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::mod(isl::checked::val v2) const +{ + auto res = isl_val_mod(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::mod(long v2) const +{ + return this->mod(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::mul(isl::checked::val v2) const +{ + auto res = isl_val_mul(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::mul(long v2) const +{ + return this->mul(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::nan(isl::checked::ctx ctx) +{ + auto res = isl_val_nan(ctx.release()); + return manage(res); +} + +boolean val::ne(const isl::checked::val &v2) const +{ + auto res = isl_val_ne(get(), v2.get()); + return manage(res); +} + +boolean val::ne(long v2) const +{ + return this->ne(isl::checked::val(ctx(), v2)); +} + +isl::checked::val val::neg() const +{ + auto res = isl_val_neg(copy()); + return manage(res); +} + +isl::checked::val val::neginfty(isl::checked::ctx ctx) +{ + auto res = isl_val_neginfty(ctx.release()); + return manage(res); +} + +isl::checked::val val::negone(isl::checked::ctx ctx) +{ + auto res = isl_val_negone(ctx.release()); + return manage(res); +} + +long val::num_si() const +{ + auto res = isl_val_get_num_si(get()); + return res; +} + +long val::get_num_si() const +{ + return num_si(); +} + +isl::checked::val val::one(isl::checked::ctx ctx) +{ + auto res = isl_val_one(ctx.release()); + return manage(res); +} + +isl::checked::val val::pow2() const +{ + auto res = isl_val_pow2(copy()); + return manage(res); +} + +int val::sgn() const +{ + auto res = isl_val_sgn(get()); + return res; +} + +isl::checked::val val::sub(isl::checked::val v2) const +{ + auto res = isl_val_sub(copy(), v2.release()); + return manage(res); +} + +isl::checked::val val::sub(long v2) const +{ + return this->sub(isl::checked::val(ctx(), v2)); +} + +isl::checked::val_list val::to_list() const +{ + auto res = isl_val_to_list(copy()); + return manage(res); +} + +isl::checked::val val::trunc() const +{ + auto res = isl_val_trunc(copy()); + return manage(res); +} + +isl::checked::val val::zero(isl::checked::ctx ctx) +{ + auto res = isl_val_zero(ctx.release()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const val &obj) +{ + char *str = isl_val_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} + +// implementations for isl::val_list +val_list manage(__isl_take isl_val_list *ptr) { + return val_list(ptr); +} +val_list manage_copy(__isl_keep isl_val_list *ptr) { + ptr = isl_val_list_copy(ptr); + return val_list(ptr); +} + +val_list::val_list(__isl_take isl_val_list *ptr) + : ptr(ptr) {} + +val_list::val_list() + : ptr(nullptr) {} + +val_list::val_list(const val_list &obj) + : ptr(nullptr) +{ + ptr = obj.copy(); +} + +val_list::val_list(isl::checked::ctx ctx, int n) +{ + auto res = isl_val_list_alloc(ctx.release(), n); + ptr = res; +} + +val_list::val_list(isl::checked::val el) +{ + auto res = isl_val_list_from_val(el.release()); + ptr = res; +} + +val_list::val_list(isl::checked::ctx ctx, const std::string &str) +{ + auto res = isl_val_list_read_from_str(ctx.release(), str.c_str()); + ptr = res; +} + +val_list &val_list::operator=(val_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +val_list::~val_list() { + if (ptr) + isl_val_list_free(ptr); +} + +__isl_give isl_val_list *val_list::copy() const & { + return isl_val_list_copy(ptr); +} + +__isl_keep isl_val_list *val_list::get() const { + return ptr; +} + +__isl_give isl_val_list *val_list::release() { + isl_val_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool val_list::is_null() const { + return ptr == nullptr; +} + +isl::checked::ctx val_list::ctx() const { + return isl::checked::ctx(isl_val_list_get_ctx(ptr)); +} + +isl::checked::val_list val_list::add(isl::checked::val el) const +{ + auto res = isl_val_list_add(copy(), el.release()); + return manage(res); +} + +isl::checked::val_list val_list::add(long el) const +{ + return this->add(isl::checked::val(ctx(), el)); +} + +isl::checked::val val_list::at(int index) const +{ + auto res = isl_val_list_get_at(get(), index); + return manage(res); +} + +isl::checked::val val_list::get_at(int index) const +{ + return at(index); +} + +isl::checked::val_list val_list::clear() const +{ + auto res = isl_val_list_clear(copy()); + return manage(res); +} + +isl::checked::val_list val_list::concat(isl::checked::val_list list2) const +{ + auto res = isl_val_list_concat(copy(), list2.release()); + return manage(res); +} + +isl::checked::val_list val_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl_val_list_drop(copy(), first, n); + return manage(res); +} + +stat val_list::foreach(const std::function &fn) const +{ + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_val_list_foreach(get(), fn_lambda, &fn_data); + return manage(res); +} + +stat val_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + struct follows_data { + std::function func; + } follows_data = { follows }; + auto follows_lambda = [](isl_val *arg_0, isl_val *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret.release(); + }; + struct fn_data { + std::function func; + } fn_data = { fn }; + auto fn_lambda = [](isl_val_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + }; + auto res = isl_val_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + return manage(res); +} + +isl::checked::val_list val_list::insert(unsigned int pos, isl::checked::val el) const +{ + auto res = isl_val_list_insert(copy(), pos, el.release()); + return manage(res); +} + +isl::checked::val_list val_list::insert(unsigned int pos, long el) const +{ + return this->insert(pos, isl::checked::val(ctx(), el)); +} + +isl::checked::val_list val_list::set_at(int index, isl::checked::val el) const +{ + auto res = isl_val_list_set_at(copy(), index, el.release()); + return manage(res); +} + +isl::checked::val_list val_list::set_at(int index, long el) const +{ + return this->set_at(index, isl::checked::val(ctx(), el)); +} + +class size val_list::size() const +{ + auto res = isl_val_list_size(get()); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const val_list &obj) +{ + char *str = isl_val_list_to_str(obj.get()); + if (!str) { + os.setstate(std::ios_base::badbit); + return os; + } + os << str; + free(str); + return os; +} +} // namespace checked +} // namespace isl + +#endif /* ISL_CPP_CHECKED */ diff --git a/include/isl/cpp.h b/include/isl/cpp.h new file mode 100644 index 00000000..47405ae4 --- /dev/null +++ b/include/isl/cpp.h @@ -0,0 +1,30843 @@ +/// These are automatically generated C++ bindings for isl. +/// +/// isl is a library for computing with integer sets and maps described by +/// Presburger formulas. On top of this, isl provides various tools for +/// polyhedral compilation, ranging from dependence analysis over scheduling +/// to AST generation. + +#ifndef ISL_CPP +#define ISL_CPP + +#include +#include + +#include +#include +#include +#include +#include +#include + +#if __cplusplus >= 201703L +#include +#include +#endif + +/* ISL_USE_EXCEPTIONS should be defined to 1 if exceptions are available. + * gcc and clang define __cpp_exceptions; MSVC and xlC define _CPPUNWIND. + * Older versions of gcc (e.g., 4.9) only define __EXCEPTIONS. + * If exceptions are not available, any error condition will result + * in an abort. + */ +#ifndef ISL_USE_EXCEPTIONS +#if defined(__cpp_exceptions) || defined(_CPPUNWIND) || defined(__EXCEPTIONS) +#define ISL_USE_EXCEPTIONS 1 +#else +#define ISL_USE_EXCEPTIONS 0 +#endif +#endif + +namespace isl { + +class ctx { + isl_ctx *ptr; +public: + /* implicit */ ctx(isl_ctx *ctx) : ptr(ctx) {} + isl_ctx *release() { + auto tmp = ptr; + ptr = nullptr; + return tmp; + } + isl_ctx *get() { + return ptr; + } +#if __cplusplus >= 201703L + static void free_user(void *user) { + std::any *p = static_cast(user); + delete p; + } +#endif +}; + +/* Macros hiding try/catch. + * If exceptions are not available, then no exceptions will be thrown and + * there is nothing to catch. + */ +#if ISL_USE_EXCEPTIONS +#define ISL_CPP_TRY try +#define ISL_CPP_CATCH_ALL catch (...) +#else +#define ISL_CPP_TRY if (1) +#define ISL_CPP_CATCH_ALL if (0) +#endif + +#if ISL_USE_EXCEPTIONS + +/* Class capturing isl errors. + * + * The what() return value is stored in a reference counted string + * to ensure that the copy constructor and the assignment operator + * do not throw any exceptions. + */ +class exception : public std::exception { + std::shared_ptr what_str; + +protected: + inline exception(const char *what_arg, const char *msg, + const char *file, int line); +public: + exception() {} + exception(const char *what_arg) { + what_str = std::make_shared(what_arg); + } + static inline void throw_error(enum isl_error error, const char *msg, + const char *file, int line); + virtual const char *what() const noexcept { + return what_str->c_str(); + } + + /* Default behavior on error conditions that occur inside isl calls + * performed from inside the bindings. + * In the case exceptions are available, isl should continue + * without printing a warning since the warning message + * will be included in the exception thrown from inside the bindings. + */ + static constexpr auto on_error = ISL_ON_ERROR_CONTINUE; + /* Wrapper for throwing an exception with the given message. + */ + static void throw_invalid(const char *msg, const char *file, int line) { + throw_error(isl_error_invalid, msg, file, line); + } + static inline void throw_last_error(ctx ctx); +}; + +/* Create an exception of a type described by "what_arg", with + * error message "msg" in line "line" of file "file". + * + * Create a string holding the what() return value that + * corresponds to what isl would have printed. + * If no error message or no error file was set, then use "what_arg" instead. + */ +exception::exception(const char *what_arg, const char *msg, const char *file, + int line) +{ + if (!msg || !file) + what_str = std::make_shared(what_arg); + else + what_str = std::make_shared(std::string(file) + + ":" + std::to_string(line) + ": " + msg); +} + +class exception_abort : public exception { + friend exception; + exception_abort(const char *msg, const char *file, int line) : + exception("execution aborted", msg, file, line) {} +}; + +class exception_alloc : public exception { + friend exception; + exception_alloc(const char *msg, const char *file, int line) : + exception("memory allocation failure", msg, file, line) {} +}; + +class exception_unknown : public exception { + friend exception; + exception_unknown(const char *msg, const char *file, int line) : + exception("unknown failure", msg, file, line) {} +}; + +class exception_internal : public exception { + friend exception; + exception_internal(const char *msg, const char *file, int line) : + exception("internal error", msg, file, line) {} +}; + +class exception_invalid : public exception { + friend exception; + exception_invalid(const char *msg, const char *file, int line) : + exception("invalid argument", msg, file, line) {} +}; + +class exception_quota : public exception { + friend exception; + exception_quota(const char *msg, const char *file, int line) : + exception("quota exceeded", msg, file, line) {} +}; + +class exception_unsupported : public exception { + friend exception; + exception_unsupported(const char *msg, const char *file, int line) : + exception("unsupported operation", msg, file, line) {} +}; + +/* Throw an exception of the class that corresponds to "error", with + * error message "msg" in line "line" of file "file". + * + * isl_error_none is treated as an invalid error type. + */ +void exception::throw_error(enum isl_error error, const char *msg, + const char *file, int line) +{ + switch (error) { + case isl_error_none: + break; + case isl_error_abort: throw exception_abort(msg, file, line); + case isl_error_alloc: throw exception_alloc(msg, file, line); + case isl_error_unknown: throw exception_unknown(msg, file, line); + case isl_error_internal: throw exception_internal(msg, file, line); + case isl_error_invalid: throw exception_invalid(msg, file, line); + case isl_error_quota: throw exception_quota(msg, file, line); + case isl_error_unsupported: + throw exception_unsupported(msg, file, line); + } + + throw exception_invalid("invalid error type", file, line); +} + +/* Throw an exception corresponding to the last error on "ctx" and + * reset the error. + * + * If "ctx" is NULL or if it is not in an error state at the start, + * then an invalid argument exception is thrown. + */ +void exception::throw_last_error(ctx ctx) +{ + enum isl_error error; + const char *msg, *file; + int line; + + error = isl_ctx_last_error(ctx.get()); + msg = isl_ctx_last_error_msg(ctx.get()); + file = isl_ctx_last_error_file(ctx.get()); + line = isl_ctx_last_error_line(ctx.get()); + isl_ctx_reset_error(ctx.get()); + + throw_error(error, msg, file, line); +} + +#else + +#include +#include + +class exception { +public: + /* Default behavior on error conditions that occur inside isl calls + * performed from inside the bindings. + * In the case exceptions are not available, isl should abort. + */ + static constexpr auto on_error = ISL_ON_ERROR_ABORT; + /* Wrapper for throwing an exception with the given message. + * In the case exceptions are not available, print an error and abort. + */ + static void throw_invalid(const char *msg, const char *file, int line) { + fprintf(stderr, "%s:%d: %s\n", file, line, msg); + abort(); + } + /* Throw an exception corresponding to the last + * error on "ctx". + * isl should already abort when an error condition occurs, + * so this function should never be called. + */ + static void throw_last_error(ctx ctx) { + abort(); + } +}; + +#endif + +/* Helper class for setting the on_error and resetting the option + * to the original value when leaving the scope. + */ +class options_scoped_set_on_error { + isl_ctx *ctx; + int saved_on_error; +public: + options_scoped_set_on_error(class ctx ctx, int on_error) { + this->ctx = ctx.get(); + saved_on_error = isl_options_get_on_error(this->ctx); + isl_options_set_on_error(this->ctx, on_error); + } + ~options_scoped_set_on_error() { + isl_options_set_on_error(ctx, saved_on_error); + } +}; + +} // namespace isl + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace isl { + +// forward declarations +class aff; +class aff_list; +class ast_build; +class ast_expr; +class ast_expr_id; +class ast_expr_int; +class ast_expr_op; +class ast_expr_op_access; +class ast_expr_op_add; +class ast_expr_op_address_of; +class ast_expr_op_and; +class ast_expr_op_and_then; +class ast_expr_op_call; +class ast_expr_op_cond; +class ast_expr_op_div; +class ast_expr_op_eq; +class ast_expr_op_fdiv_q; +class ast_expr_op_ge; +class ast_expr_op_gt; +class ast_expr_op_le; +class ast_expr_op_lt; +class ast_expr_op_max; +class ast_expr_op_member; +class ast_expr_op_min; +class ast_expr_op_minus; +class ast_expr_op_mul; +class ast_expr_op_or; +class ast_expr_op_or_else; +class ast_expr_op_pdiv_q; +class ast_expr_op_pdiv_r; +class ast_expr_op_select; +class ast_expr_op_sub; +class ast_expr_op_zdiv_r; +class ast_node; +class ast_node_block; +class ast_node_for; +class ast_node_if; +class ast_node_list; +class ast_node_mark; +class ast_node_user; +class basic_map; +class basic_set; +class fixed_box; +class id; +class id_list; +class id_to_ast_expr; +class id_to_id; +class map; +class map_list; +class multi_aff; +class multi_id; +class multi_pw_aff; +class multi_union_pw_aff; +class multi_val; +class point; +class pw_aff; +class pw_aff_list; +class pw_multi_aff; +class pw_multi_aff_list; +class schedule; +class schedule_constraints; +class schedule_node; +class schedule_node_band; +class schedule_node_context; +class schedule_node_domain; +class schedule_node_expansion; +class schedule_node_extension; +class schedule_node_filter; +class schedule_node_guard; +class schedule_node_leaf; +class schedule_node_mark; +class schedule_node_sequence; +class schedule_node_set; +class set; +class set_list; +class space; +class union_access_info; +class union_flow; +class union_map; +class union_pw_aff; +class union_pw_aff_list; +class union_pw_multi_aff; +class union_set; +class union_set_list; +class val; +class val_list; + +// declarations for isl::aff +inline aff manage(__isl_take isl_aff *ptr); +inline aff manage_copy(__isl_keep isl_aff *ptr); + +class aff { + friend inline aff manage(__isl_take isl_aff *ptr); + friend inline aff manage_copy(__isl_keep isl_aff *ptr); + + protected: + isl_aff *ptr = nullptr; + + inline explicit aff(__isl_take isl_aff *ptr); + + public: + inline /* implicit */ aff(); + inline /* implicit */ aff(const aff &obj); + inline explicit aff(isl::ctx ctx, const std::string &str); + inline aff &operator=(aff obj); + inline ~aff(); + inline __isl_give isl_aff *copy() const &; + inline __isl_give isl_aff *copy() && = delete; + inline __isl_keep isl_aff *get() const; + inline __isl_give isl_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::aff add(isl::aff aff2) const; + inline isl::multi_aff add(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_aff add(const isl::pw_aff &pwaff2) const; + inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const; + inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const; + inline isl::aff add_constant(isl::val v) const; + inline isl::aff add_constant(long v) const; + inline isl::multi_aff add_constant(const isl::multi_val &mv) const; + inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const; + inline isl::aff as_aff() const; + inline isl::map as_map() const; + inline isl::multi_aff as_multi_aff() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::union_map as_union_map() const; + inline isl::aff at(int pos) const; + inline isl::basic_set bind(isl::id id) const; + inline isl::basic_set bind(const std::string &id) const; + inline isl::basic_set bind(const isl::multi_id &tuple) const; + inline isl::pw_aff bind_domain(const isl::multi_id &tuple) const; + inline isl::pw_aff bind_domain_wrapped_domain(const isl::multi_id &tuple) const; + inline isl::aff ceil() const; + inline isl::pw_aff coalesce() const; + inline isl::pw_aff cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const; + inline isl::multi_val constant_multi_val() const; + inline isl::val constant_val() const; + inline isl::val get_constant_val() const; + inline isl::aff div(isl::aff aff2) const; + inline isl::pw_aff div(const isl::pw_aff &pa2) const; + inline isl::set domain() const; + inline isl::aff domain_reverse() const; + inline isl::pw_aff drop_unused_params() const; + inline isl::set eq_set(isl::aff aff2) const; + inline isl::set eq_set(const isl::pw_aff &pwaff2) const; + inline isl::val eval(isl::point pnt) const; + inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const; + inline isl::multi_aff flat_range_product(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::aff floor() const; + inline void foreach_piece(const std::function &fn) const; + inline isl::set ge_set(isl::aff aff2) const; + inline isl::set ge_set(const isl::pw_aff &pwaff2) const; + inline isl::aff gist(isl::set context) const; + inline isl::union_pw_aff gist(const isl::union_set &context) const; + inline isl::aff gist(const isl::basic_set &context) const; + inline isl::aff gist(const isl::point &context) const; + inline isl::aff gist_params(isl::set context) const; + inline isl::set gt_set(isl::aff aff2) const; + inline isl::set gt_set(const isl::pw_aff &pwaff2) const; + inline bool has_range_tuple_id() const; + inline isl::multi_aff identity() const; + inline isl::pw_aff insert_domain(const isl::space &domain) const; + inline isl::pw_aff intersect_domain(const isl::set &set) const; + inline isl::union_pw_aff intersect_domain(const isl::space &space) const; + inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const; + inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const; + inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const; + inline isl::pw_aff intersect_params(const isl::set &set) const; + inline bool involves_locals() const; + inline bool involves_nan() const; + inline bool involves_param(const isl::id &id) const; + inline bool involves_param(const std::string &id) const; + inline bool involves_param(const isl::id_list &list) const; + inline bool is_cst() const; + inline bool isa_aff() const; + inline bool isa_multi_aff() const; + inline bool isa_pw_multi_aff() const; + inline isl::set le_set(isl::aff aff2) const; + inline isl::set le_set(const isl::pw_aff &pwaff2) const; + inline isl::aff_list list() const; + inline isl::set lt_set(isl::aff aff2) const; + inline isl::set lt_set(const isl::pw_aff &pwaff2) const; + inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const; + inline isl::pw_aff max(const isl::pw_aff &pwaff2) const; + inline isl::multi_val max_multi_val() const; + inline isl::val max_val() const; + inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const; + inline isl::pw_aff min(const isl::pw_aff &pwaff2) const; + inline isl::multi_val min_multi_val() const; + inline isl::val min_val() const; + inline isl::aff mod(isl::val mod) const; + inline isl::aff mod(long mod) const; + inline isl::aff mul(isl::aff aff2) const; + inline isl::pw_aff mul(const isl::pw_aff &pwaff2) const; + inline unsigned n_piece() const; + inline isl::set ne_set(isl::aff aff2) const; + inline isl::set ne_set(const isl::pw_aff &pwaff2) const; + inline isl::aff neg() const; + inline isl::set params() const; + inline bool plain_is_empty() const; + inline bool plain_is_equal(const isl::aff &aff2) const; + inline bool plain_is_equal(const isl::multi_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::pw_aff &pwaff2) const; + inline bool plain_is_equal(const isl::pw_multi_aff &pma2) const; + inline bool plain_is_equal(const isl::union_pw_aff &upa2) const; + inline bool plain_is_equal(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff product(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const; + inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const; + inline isl::aff pullback(isl::multi_aff ma) const; + inline isl::pw_aff pullback(const isl::multi_pw_aff &mpa) const; + inline isl::pw_aff pullback(const isl::pw_multi_aff &pma) const; + inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const; + inline isl::aff pullback(const isl::aff &ma) const; + inline isl::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::pw_multi_aff range_factor_domain() const; + inline isl::pw_multi_aff range_factor_range() const; + inline isl::multi_aff range_product(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::id range_tuple_id() const; + inline isl::multi_aff reset_range_tuple_id() const; + inline isl::aff scale(isl::val v) const; + inline isl::aff scale(long v) const; + inline isl::multi_aff scale(const isl::multi_val &mv) const; + inline isl::aff scale_down(isl::val v) const; + inline isl::aff scale_down(long v) const; + inline isl::multi_aff scale_down(const isl::multi_val &mv) const; + inline isl::multi_aff set_at(int pos, const isl::aff &el) const; + inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const; + inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const; + inline isl::multi_aff set_range_tuple(const isl::id &id) const; + inline isl::multi_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::aff sub(isl::aff aff2) const; + inline isl::multi_aff sub(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_aff sub(const isl::pw_aff &pwaff2) const; + inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const; + inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_aff subtract_domain(const isl::set &set) const; + inline isl::union_pw_aff subtract_domain(const isl::space &space) const; + inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const; + inline isl::pw_aff tdiv_q(const isl::pw_aff &pa2) const; + inline isl::pw_aff tdiv_r(const isl::pw_aff &pa2) const; + inline isl::aff_list to_list() const; + inline isl::multi_pw_aff to_multi_pw_aff() const; + inline isl::multi_union_pw_aff to_multi_union_pw_aff() const; + inline isl::pw_multi_aff to_pw_multi_aff() const; + inline isl::union_pw_aff to_union_pw_aff() const; + inline isl::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::aff unbind_params_insert_domain(isl::multi_id domain) const; + inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const; + inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const; + inline isl::pw_aff union_add(const isl::pw_aff &pwaff2) const; + inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const; + inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const; + static inline isl::aff zero_on_domain(isl::space space); +}; + +// declarations for isl::aff_list +inline aff_list manage(__isl_take isl_aff_list *ptr); +inline aff_list manage_copy(__isl_keep isl_aff_list *ptr); + +class aff_list { + friend inline aff_list manage(__isl_take isl_aff_list *ptr); + friend inline aff_list manage_copy(__isl_keep isl_aff_list *ptr); + + protected: + isl_aff_list *ptr = nullptr; + + inline explicit aff_list(__isl_take isl_aff_list *ptr); + + public: + inline /* implicit */ aff_list(); + inline /* implicit */ aff_list(const aff_list &obj); + inline explicit aff_list(isl::ctx ctx, int n); + inline explicit aff_list(isl::aff el); + inline explicit aff_list(isl::ctx ctx, const std::string &str); + inline aff_list &operator=(aff_list obj); + inline ~aff_list(); + inline __isl_give isl_aff_list *copy() const &; + inline __isl_give isl_aff_list *copy() && = delete; + inline __isl_keep isl_aff_list *get() const; + inline __isl_give isl_aff_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::aff_list add(isl::aff el) const; + inline isl::aff at(int index) const; + inline isl::aff get_at(int index) const; + inline isl::aff_list clear() const; + inline isl::aff_list concat(isl::aff_list list2) const; + inline isl::aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::aff_list insert(unsigned int pos, isl::aff el) const; + inline isl::aff_list set_at(int index, isl::aff el) const; + inline unsigned size() const; +}; + +// declarations for isl::ast_build +inline ast_build manage(__isl_take isl_ast_build *ptr); +inline ast_build manage_copy(__isl_keep isl_ast_build *ptr); + +class ast_build { + friend inline ast_build manage(__isl_take isl_ast_build *ptr); + friend inline ast_build manage_copy(__isl_keep isl_ast_build *ptr); + + protected: + isl_ast_build *ptr = nullptr; + + inline explicit ast_build(__isl_take isl_ast_build *ptr); + + public: + inline /* implicit */ ast_build(); + inline /* implicit */ ast_build(const ast_build &obj); + inline explicit ast_build(isl::ctx ctx); + inline ast_build &operator=(ast_build obj); + inline ~ast_build(); + inline __isl_give isl_ast_build *copy() const &; + inline __isl_give isl_ast_build *copy() && = delete; + inline __isl_keep isl_ast_build *get() const; + inline __isl_give isl_ast_build *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + private: + inline ast_build ©_callbacks(const ast_build &obj); + struct at_each_domain_data { + std::function func; + std::exception_ptr eptr; + }; + std::shared_ptr at_each_domain_data; + static inline isl_ast_node *at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2); + inline void set_at_each_domain_data(const std::function &fn); + public: + inline isl::ast_build set_at_each_domain(const std::function &fn) const; + inline isl::ast_expr access_from(isl::multi_pw_aff mpa) const; + inline isl::ast_expr access_from(isl::pw_multi_aff pma) const; + inline isl::ast_expr call_from(isl::multi_pw_aff mpa) const; + inline isl::ast_expr call_from(isl::pw_multi_aff pma) const; + inline isl::ast_expr expr_from(isl::pw_aff pa) const; + inline isl::ast_expr expr_from(isl::set set) const; + static inline isl::ast_build from_context(isl::set set); + inline isl::ast_node node_from(isl::schedule schedule) const; + inline isl::ast_node node_from_schedule_map(isl::union_map schedule) const; + inline isl::union_map schedule() const; + inline isl::union_map get_schedule() const; +}; + +// declarations for isl::ast_expr +inline ast_expr manage(__isl_take isl_ast_expr *ptr); +inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr); + +class ast_expr { + friend inline ast_expr manage(__isl_take isl_ast_expr *ptr); + friend inline ast_expr manage_copy(__isl_keep isl_ast_expr *ptr); + + protected: + isl_ast_expr *ptr = nullptr; + + inline explicit ast_expr(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr(); + inline /* implicit */ ast_expr(const ast_expr &obj); + inline ast_expr &operator=(ast_expr obj); + inline ~ast_expr(); + inline __isl_give isl_ast_expr *copy() const &; + inline __isl_give isl_ast_expr *copy() && = delete; + inline __isl_keep isl_ast_expr *get() const; + inline __isl_give isl_ast_expr *release(); + inline bool is_null() const; + private: + template ::value>::type> + inline bool isa_type(T subtype) const; + public: + template inline bool isa() const; + template inline T as() const; + inline isl::ctx ctx() const; + + inline std::string to_C_str() const; +}; + +// declarations for isl::ast_expr_id + +class ast_expr_id : public ast_expr { + template + friend bool ast_expr::isa() const; + friend ast_expr_id ast_expr::as() const; + static const auto type = isl_ast_expr_id; + + protected: + inline explicit ast_expr_id(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_id(); + inline /* implicit */ ast_expr_id(const ast_expr_id &obj); + inline ast_expr_id &operator=(ast_expr_id obj); + inline isl::ctx ctx() const; + + inline isl::id id() const; + inline isl::id get_id() const; +}; + +// declarations for isl::ast_expr_int + +class ast_expr_int : public ast_expr { + template + friend bool ast_expr::isa() const; + friend ast_expr_int ast_expr::as() const; + static const auto type = isl_ast_expr_int; + + protected: + inline explicit ast_expr_int(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_int(); + inline /* implicit */ ast_expr_int(const ast_expr_int &obj); + inline ast_expr_int &operator=(ast_expr_int obj); + inline isl::ctx ctx() const; + + inline isl::val val() const; + inline isl::val get_val() const; +}; + +// declarations for isl::ast_expr_op + +class ast_expr_op : public ast_expr { + template + friend bool ast_expr::isa() const; + friend ast_expr_op ast_expr::as() const; + static const auto type = isl_ast_expr_op; + + protected: + inline explicit ast_expr_op(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op(); + inline /* implicit */ ast_expr_op(const ast_expr_op &obj); + inline ast_expr_op &operator=(ast_expr_op obj); + private: + template ::value>::type> + inline bool isa_type(T subtype) const; + public: + template inline bool isa() const; + template inline T as() const; + inline isl::ctx ctx() const; + + inline isl::ast_expr arg(int pos) const; + inline isl::ast_expr get_arg(int pos) const; + inline unsigned n_arg() const; + inline unsigned get_n_arg() const; +}; + +// declarations for isl::ast_expr_op_access + +class ast_expr_op_access : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_access ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_access; + + protected: + inline explicit ast_expr_op_access(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_access(); + inline /* implicit */ ast_expr_op_access(const ast_expr_op_access &obj); + inline ast_expr_op_access &operator=(ast_expr_op_access obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_add + +class ast_expr_op_add : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_add ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_add; + + protected: + inline explicit ast_expr_op_add(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_add(); + inline /* implicit */ ast_expr_op_add(const ast_expr_op_add &obj); + inline ast_expr_op_add &operator=(ast_expr_op_add obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_address_of + +class ast_expr_op_address_of : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_address_of ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_address_of; + + protected: + inline explicit ast_expr_op_address_of(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_address_of(); + inline /* implicit */ ast_expr_op_address_of(const ast_expr_op_address_of &obj); + inline ast_expr_op_address_of &operator=(ast_expr_op_address_of obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_and + +class ast_expr_op_and : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_and ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_and; + + protected: + inline explicit ast_expr_op_and(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_and(); + inline /* implicit */ ast_expr_op_and(const ast_expr_op_and &obj); + inline ast_expr_op_and &operator=(ast_expr_op_and obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_and_then + +class ast_expr_op_and_then : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_and_then ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_and_then; + + protected: + inline explicit ast_expr_op_and_then(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_and_then(); + inline /* implicit */ ast_expr_op_and_then(const ast_expr_op_and_then &obj); + inline ast_expr_op_and_then &operator=(ast_expr_op_and_then obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_call + +class ast_expr_op_call : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_call ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_call; + + protected: + inline explicit ast_expr_op_call(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_call(); + inline /* implicit */ ast_expr_op_call(const ast_expr_op_call &obj); + inline ast_expr_op_call &operator=(ast_expr_op_call obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_cond + +class ast_expr_op_cond : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_cond ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_cond; + + protected: + inline explicit ast_expr_op_cond(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_cond(); + inline /* implicit */ ast_expr_op_cond(const ast_expr_op_cond &obj); + inline ast_expr_op_cond &operator=(ast_expr_op_cond obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_div + +class ast_expr_op_div : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_div ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_div; + + protected: + inline explicit ast_expr_op_div(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_div(); + inline /* implicit */ ast_expr_op_div(const ast_expr_op_div &obj); + inline ast_expr_op_div &operator=(ast_expr_op_div obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_eq + +class ast_expr_op_eq : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_eq ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_eq; + + protected: + inline explicit ast_expr_op_eq(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_eq(); + inline /* implicit */ ast_expr_op_eq(const ast_expr_op_eq &obj); + inline ast_expr_op_eq &operator=(ast_expr_op_eq obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_fdiv_q + +class ast_expr_op_fdiv_q : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_fdiv_q ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_fdiv_q; + + protected: + inline explicit ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_fdiv_q(); + inline /* implicit */ ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj); + inline ast_expr_op_fdiv_q &operator=(ast_expr_op_fdiv_q obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_ge + +class ast_expr_op_ge : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_ge ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_ge; + + protected: + inline explicit ast_expr_op_ge(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_ge(); + inline /* implicit */ ast_expr_op_ge(const ast_expr_op_ge &obj); + inline ast_expr_op_ge &operator=(ast_expr_op_ge obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_gt + +class ast_expr_op_gt : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_gt ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_gt; + + protected: + inline explicit ast_expr_op_gt(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_gt(); + inline /* implicit */ ast_expr_op_gt(const ast_expr_op_gt &obj); + inline ast_expr_op_gt &operator=(ast_expr_op_gt obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_le + +class ast_expr_op_le : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_le ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_le; + + protected: + inline explicit ast_expr_op_le(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_le(); + inline /* implicit */ ast_expr_op_le(const ast_expr_op_le &obj); + inline ast_expr_op_le &operator=(ast_expr_op_le obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_lt + +class ast_expr_op_lt : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_lt ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_lt; + + protected: + inline explicit ast_expr_op_lt(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_lt(); + inline /* implicit */ ast_expr_op_lt(const ast_expr_op_lt &obj); + inline ast_expr_op_lt &operator=(ast_expr_op_lt obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_max + +class ast_expr_op_max : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_max ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_max; + + protected: + inline explicit ast_expr_op_max(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_max(); + inline /* implicit */ ast_expr_op_max(const ast_expr_op_max &obj); + inline ast_expr_op_max &operator=(ast_expr_op_max obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_member + +class ast_expr_op_member : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_member ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_member; + + protected: + inline explicit ast_expr_op_member(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_member(); + inline /* implicit */ ast_expr_op_member(const ast_expr_op_member &obj); + inline ast_expr_op_member &operator=(ast_expr_op_member obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_min + +class ast_expr_op_min : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_min ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_min; + + protected: + inline explicit ast_expr_op_min(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_min(); + inline /* implicit */ ast_expr_op_min(const ast_expr_op_min &obj); + inline ast_expr_op_min &operator=(ast_expr_op_min obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_minus + +class ast_expr_op_minus : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_minus ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_minus; + + protected: + inline explicit ast_expr_op_minus(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_minus(); + inline /* implicit */ ast_expr_op_minus(const ast_expr_op_minus &obj); + inline ast_expr_op_minus &operator=(ast_expr_op_minus obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_mul + +class ast_expr_op_mul : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_mul ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_mul; + + protected: + inline explicit ast_expr_op_mul(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_mul(); + inline /* implicit */ ast_expr_op_mul(const ast_expr_op_mul &obj); + inline ast_expr_op_mul &operator=(ast_expr_op_mul obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_or + +class ast_expr_op_or : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_or ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or; + + protected: + inline explicit ast_expr_op_or(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_or(); + inline /* implicit */ ast_expr_op_or(const ast_expr_op_or &obj); + inline ast_expr_op_or &operator=(ast_expr_op_or obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_or_else + +class ast_expr_op_or_else : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_or_else ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_or_else; + + protected: + inline explicit ast_expr_op_or_else(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_or_else(); + inline /* implicit */ ast_expr_op_or_else(const ast_expr_op_or_else &obj); + inline ast_expr_op_or_else &operator=(ast_expr_op_or_else obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_pdiv_q + +class ast_expr_op_pdiv_q : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_pdiv_q ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_pdiv_q; + + protected: + inline explicit ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_pdiv_q(); + inline /* implicit */ ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj); + inline ast_expr_op_pdiv_q &operator=(ast_expr_op_pdiv_q obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_pdiv_r + +class ast_expr_op_pdiv_r : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_pdiv_r ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_pdiv_r; + + protected: + inline explicit ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_pdiv_r(); + inline /* implicit */ ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj); + inline ast_expr_op_pdiv_r &operator=(ast_expr_op_pdiv_r obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_select + +class ast_expr_op_select : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_select ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_select; + + protected: + inline explicit ast_expr_op_select(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_select(); + inline /* implicit */ ast_expr_op_select(const ast_expr_op_select &obj); + inline ast_expr_op_select &operator=(ast_expr_op_select obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_sub + +class ast_expr_op_sub : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_sub ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_sub; + + protected: + inline explicit ast_expr_op_sub(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_sub(); + inline /* implicit */ ast_expr_op_sub(const ast_expr_op_sub &obj); + inline ast_expr_op_sub &operator=(ast_expr_op_sub obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_expr_op_zdiv_r + +class ast_expr_op_zdiv_r : public ast_expr_op { + template + friend bool ast_expr_op::isa() const; + friend ast_expr_op_zdiv_r ast_expr_op::as() const; + static const auto type = isl_ast_expr_op_zdiv_r; + + protected: + inline explicit ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr); + + public: + inline /* implicit */ ast_expr_op_zdiv_r(); + inline /* implicit */ ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj); + inline ast_expr_op_zdiv_r &operator=(ast_expr_op_zdiv_r obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::ast_node +inline ast_node manage(__isl_take isl_ast_node *ptr); +inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); + +class ast_node { + friend inline ast_node manage(__isl_take isl_ast_node *ptr); + friend inline ast_node manage_copy(__isl_keep isl_ast_node *ptr); + + protected: + isl_ast_node *ptr = nullptr; + + inline explicit ast_node(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node(); + inline /* implicit */ ast_node(const ast_node &obj); + inline ast_node &operator=(ast_node obj); + inline ~ast_node(); + inline __isl_give isl_ast_node *copy() const &; + inline __isl_give isl_ast_node *copy() && = delete; + inline __isl_keep isl_ast_node *get() const; + inline __isl_give isl_ast_node *release(); + inline bool is_null() const; + private: + template ::value>::type> + inline bool isa_type(T subtype) const; + public: + template inline bool isa() const; + template inline T as() const; + inline isl::ctx ctx() const; + + inline isl::ast_node map_descendant_bottom_up(const std::function &fn) const; + inline std::string to_C_str() const; + inline isl::ast_node_list to_list() const; +}; + +// declarations for isl::ast_node_block + +class ast_node_block : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_block ast_node::as() const; + static const auto type = isl_ast_node_block; + + protected: + inline explicit ast_node_block(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_block(); + inline /* implicit */ ast_node_block(const ast_node_block &obj); + inline explicit ast_node_block(isl::ast_node_list list); + inline ast_node_block &operator=(ast_node_block obj); + inline isl::ctx ctx() const; + + inline isl::ast_node_list children() const; + inline isl::ast_node_list get_children() const; +}; + +// declarations for isl::ast_node_for + +class ast_node_for : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_for ast_node::as() const; + static const auto type = isl_ast_node_for; + + protected: + inline explicit ast_node_for(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_for(); + inline /* implicit */ ast_node_for(const ast_node_for &obj); + inline ast_node_for &operator=(ast_node_for obj); + inline isl::ctx ctx() const; + + inline isl::ast_node body() const; + inline isl::ast_node get_body() const; + inline isl::ast_expr cond() const; + inline isl::ast_expr get_cond() const; + inline isl::ast_expr inc() const; + inline isl::ast_expr get_inc() const; + inline isl::ast_expr init() const; + inline isl::ast_expr get_init() const; + inline bool is_degenerate() const; + inline isl::ast_expr iterator() const; + inline isl::ast_expr get_iterator() const; +}; + +// declarations for isl::ast_node_if + +class ast_node_if : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_if ast_node::as() const; + static const auto type = isl_ast_node_if; + + protected: + inline explicit ast_node_if(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_if(); + inline /* implicit */ ast_node_if(const ast_node_if &obj); + inline ast_node_if &operator=(ast_node_if obj); + inline isl::ctx ctx() const; + + inline isl::ast_expr cond() const; + inline isl::ast_expr get_cond() const; + inline isl::ast_node else_node() const; + inline isl::ast_node get_else_node() const; + inline bool has_else_node() const; + inline isl::ast_node then_node() const; + inline isl::ast_node get_then_node() const; +}; + +// declarations for isl::ast_node_list +inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); +inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); + +class ast_node_list { + friend inline ast_node_list manage(__isl_take isl_ast_node_list *ptr); + friend inline ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr); + + protected: + isl_ast_node_list *ptr = nullptr; + + inline explicit ast_node_list(__isl_take isl_ast_node_list *ptr); + + public: + inline /* implicit */ ast_node_list(); + inline /* implicit */ ast_node_list(const ast_node_list &obj); + inline explicit ast_node_list(isl::ctx ctx, int n); + inline explicit ast_node_list(isl::ast_node el); + inline ast_node_list &operator=(ast_node_list obj); + inline ~ast_node_list(); + inline __isl_give isl_ast_node_list *copy() const &; + inline __isl_give isl_ast_node_list *copy() && = delete; + inline __isl_keep isl_ast_node_list *get() const; + inline __isl_give isl_ast_node_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::ast_node_list add(isl::ast_node el) const; + inline isl::ast_node at(int index) const; + inline isl::ast_node get_at(int index) const; + inline isl::ast_node_list clear() const; + inline isl::ast_node_list concat(isl::ast_node_list list2) const; + inline isl::ast_node_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::ast_node_list insert(unsigned int pos, isl::ast_node el) const; + inline isl::ast_node_list set_at(int index, isl::ast_node el) const; + inline unsigned size() const; +}; + +// declarations for isl::ast_node_mark + +class ast_node_mark : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_mark ast_node::as() const; + static const auto type = isl_ast_node_mark; + + protected: + inline explicit ast_node_mark(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_mark(); + inline /* implicit */ ast_node_mark(const ast_node_mark &obj); + inline ast_node_mark &operator=(ast_node_mark obj); + inline isl::ctx ctx() const; + + inline isl::id id() const; + inline isl::id get_id() const; + inline isl::ast_node node() const; + inline isl::ast_node get_node() const; +}; + +// declarations for isl::ast_node_user + +class ast_node_user : public ast_node { + template + friend bool ast_node::isa() const; + friend ast_node_user ast_node::as() const; + static const auto type = isl_ast_node_user; + + protected: + inline explicit ast_node_user(__isl_take isl_ast_node *ptr); + + public: + inline /* implicit */ ast_node_user(); + inline /* implicit */ ast_node_user(const ast_node_user &obj); + inline explicit ast_node_user(isl::ast_expr expr); + inline ast_node_user &operator=(ast_node_user obj); + inline isl::ctx ctx() const; + + inline isl::ast_expr expr() const; + inline isl::ast_expr get_expr() const; +}; + +// declarations for isl::basic_map +inline basic_map manage(__isl_take isl_basic_map *ptr); +inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); + +class basic_map { + friend inline basic_map manage(__isl_take isl_basic_map *ptr); + friend inline basic_map manage_copy(__isl_keep isl_basic_map *ptr); + + protected: + isl_basic_map *ptr = nullptr; + + inline explicit basic_map(__isl_take isl_basic_map *ptr); + + public: + inline /* implicit */ basic_map(); + inline /* implicit */ basic_map(const basic_map &obj); + inline explicit basic_map(isl::ctx ctx, const std::string &str); + inline basic_map &operator=(basic_map obj); + inline ~basic_map(); + inline __isl_give isl_basic_map *copy() const &; + inline __isl_give isl_basic_map *copy() && = delete; + inline __isl_keep isl_basic_map *get() const; + inline __isl_give isl_basic_map *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::basic_map affine_hull() const; + inline isl::basic_map apply_domain(isl::basic_map bmap2) const; + inline isl::map apply_domain(const isl::map &map2) const; + inline isl::union_map apply_domain(const isl::union_map &umap2) const; + inline isl::basic_map apply_range(isl::basic_map bmap2) const; + inline isl::map apply_range(const isl::map &map2) const; + inline isl::union_map apply_range(const isl::union_map &umap2) const; + inline isl::map as_map() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::set bind_domain(const isl::multi_id &tuple) const; + inline isl::set bind_range(const isl::multi_id &tuple) const; + inline isl::map coalesce() const; + inline isl::map complement() const; + inline isl::union_map compute_divs() const; + inline isl::map curry() const; + inline isl::basic_set deltas() const; + inline isl::basic_map detect_equalities() const; + inline isl::set domain() const; + inline isl::map domain_factor_domain() const; + inline isl::map domain_factor_range() const; + inline isl::union_map domain_map() const; + inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const; + inline isl::map domain_product(const isl::map &map2) const; + inline isl::union_map domain_product(const isl::union_map &umap2) const; + inline isl::map domain_reverse() const; + inline unsigned domain_tuple_dim() const; + inline isl::id domain_tuple_id() const; + inline isl::map drop_unused_params() const; + inline isl::map eq_at(const isl::multi_pw_aff &mpa) const; + inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const; + inline bool every_map(const std::function &test) const; + inline isl::map extract_map(const isl::space &space) const; + inline isl::map factor_domain() const; + inline isl::map factor_range() const; + inline isl::map fixed_power(const isl::val &exp) const; + inline isl::map fixed_power(long exp) const; + inline isl::basic_map flatten() const; + inline isl::basic_map flatten_domain() const; + inline isl::basic_map flatten_range() const; + inline void foreach_basic_map(const std::function &fn) const; + inline void foreach_map(const std::function &fn) const; + inline isl::basic_map gist(isl::basic_map context) const; + inline isl::map gist(const isl::map &context) const; + inline isl::union_map gist(const isl::union_map &context) const; + inline isl::map gist_domain(const isl::set &context) const; + inline isl::union_map gist_domain(const isl::union_set &uset) const; + inline isl::map gist_params(const isl::set &context) const; + inline isl::union_map gist_range(const isl::union_set &uset) const; + inline bool has_domain_tuple_id() const; + inline bool has_range_tuple_id() const; + inline isl::basic_map intersect(isl::basic_map bmap2) const; + inline isl::map intersect(const isl::map &map2) const; + inline isl::union_map intersect(const isl::union_map &umap2) const; + inline isl::basic_map intersect_domain(isl::basic_set bset) const; + inline isl::map intersect_domain(const isl::set &set) const; + inline isl::union_map intersect_domain(const isl::space &space) const; + inline isl::union_map intersect_domain(const isl::union_set &uset) const; + inline isl::basic_map intersect_domain(const isl::point &bset) const; + inline isl::map intersect_domain_factor_domain(const isl::map &factor) const; + inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const; + inline isl::map intersect_domain_factor_range(const isl::map &factor) const; + inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const; + inline isl::map intersect_domain_wrapped_domain(const isl::set &domain) const; + inline isl::union_map intersect_domain_wrapped_domain(const isl::union_set &domain) const; + inline isl::map intersect_params(const isl::set ¶ms) const; + inline isl::basic_map intersect_range(isl::basic_set bset) const; + inline isl::map intersect_range(const isl::set &set) const; + inline isl::union_map intersect_range(const isl::space &space) const; + inline isl::union_map intersect_range(const isl::union_set &uset) const; + inline isl::basic_map intersect_range(const isl::point &bset) const; + inline isl::map intersect_range_factor_domain(const isl::map &factor) const; + inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const; + inline isl::map intersect_range_factor_range(const isl::map &factor) const; + inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const; + inline isl::map intersect_range_wrapped_domain(const isl::set &domain) const; + inline isl::union_map intersect_range_wrapped_domain(const isl::union_set &domain) const; + inline bool is_bijective() const; + inline bool is_disjoint(const isl::map &map2) const; + inline bool is_disjoint(const isl::union_map &umap2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::basic_map &bmap2) const; + inline bool is_equal(const isl::map &map2) const; + inline bool is_equal(const isl::union_map &umap2) const; + inline bool is_injective() const; + inline bool is_single_valued() const; + inline bool is_strict_subset(const isl::map &map2) const; + inline bool is_strict_subset(const isl::union_map &umap2) const; + inline bool is_subset(const isl::basic_map &bmap2) const; + inline bool is_subset(const isl::map &map2) const; + inline bool is_subset(const isl::union_map &umap2) const; + inline bool isa_map() const; + inline isl::map lex_ge_at(const isl::multi_pw_aff &mpa) const; + inline isl::map lex_gt_at(const isl::multi_pw_aff &mpa) const; + inline isl::map lex_le_at(const isl::multi_pw_aff &mpa) const; + inline isl::map lex_lt_at(const isl::multi_pw_aff &mpa) const; + inline isl::map lexmax() const; + inline isl::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::map lexmin() const; + inline isl::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::map lower_bound(const isl::multi_pw_aff &lower) const; + inline isl::map_list map_list() const; + inline isl::multi_pw_aff max_multi_pw_aff() const; + inline isl::multi_pw_aff min_multi_pw_aff() const; + inline unsigned n_basic_map() const; + inline isl::set params() const; + inline isl::basic_map polyhedral_hull() const; + inline isl::map preimage_domain(const isl::multi_aff &ma) const; + inline isl::map preimage_domain(const isl::multi_pw_aff &mpa) const; + inline isl::map preimage_domain(const isl::pw_multi_aff &pma) const; + inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const; + inline isl::map preimage_range(const isl::multi_aff &ma) const; + inline isl::map preimage_range(const isl::pw_multi_aff &pma) const; + inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const; + inline isl::map product(const isl::map &map2) const; + inline isl::union_map product(const isl::union_map &umap2) const; + inline isl::map project_out_all_params() const; + inline isl::map project_out_param(const isl::id &id) const; + inline isl::map project_out_param(const std::string &id) const; + inline isl::map project_out_param(const isl::id_list &list) const; + inline isl::set range() const; + inline isl::map range_factor_domain() const; + inline isl::map range_factor_range() const; + inline isl::fixed_box range_lattice_tile() const; + inline isl::union_map range_map() const; + inline isl::map range_product(const isl::map &map2) const; + inline isl::union_map range_product(const isl::union_map &umap2) const; + inline isl::map range_reverse() const; + inline isl::fixed_box range_simple_fixed_box_hull() const; + inline unsigned range_tuple_dim() const; + inline isl::id range_tuple_id() const; + inline isl::basic_map reverse() const; + inline isl::basic_map sample() const; + inline isl::map set_domain_tuple(const isl::id &id) const; + inline isl::map set_domain_tuple(const std::string &id) const; + inline isl::map set_range_tuple(const isl::id &id) const; + inline isl::map set_range_tuple(const std::string &id) const; + inline isl::space space() const; + inline isl::map subtract(const isl::map &map2) const; + inline isl::union_map subtract(const isl::union_map &umap2) const; + inline isl::union_map subtract_domain(const isl::union_set &dom) const; + inline isl::union_map subtract_range(const isl::union_set &dom) const; + inline isl::map_list to_list() const; + inline isl::union_map to_union_map() const; + inline isl::map uncurry() const; + inline isl::map unite(isl::basic_map bmap2) const; + inline isl::map unite(const isl::map &map2) const; + inline isl::union_map unite(const isl::union_map &umap2) const; + inline isl::basic_map unshifted_simple_hull() const; + inline isl::map upper_bound(const isl::multi_pw_aff &upper) const; + inline isl::set wrap() const; + inline isl::map zip() const; +}; + +// declarations for isl::basic_set +inline basic_set manage(__isl_take isl_basic_set *ptr); +inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); + +class basic_set { + friend inline basic_set manage(__isl_take isl_basic_set *ptr); + friend inline basic_set manage_copy(__isl_keep isl_basic_set *ptr); + + protected: + isl_basic_set *ptr = nullptr; + + inline explicit basic_set(__isl_take isl_basic_set *ptr); + + public: + inline /* implicit */ basic_set(); + inline /* implicit */ basic_set(const basic_set &obj); + inline /* implicit */ basic_set(isl::point pnt); + inline explicit basic_set(isl::ctx ctx, const std::string &str); + inline basic_set &operator=(basic_set obj); + inline ~basic_set(); + inline __isl_give isl_basic_set *copy() const &; + inline __isl_give isl_basic_set *copy() && = delete; + inline __isl_keep isl_basic_set *get() const; + inline __isl_give isl_basic_set *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::basic_set affine_hull() const; + inline isl::basic_set apply(isl::basic_map bmap) const; + inline isl::set apply(const isl::map &map) const; + inline isl::union_set apply(const isl::union_map &umap) const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::set bind(const isl::multi_id &tuple) const; + inline isl::set coalesce() const; + inline isl::set complement() const; + inline isl::union_set compute_divs() const; + inline isl::basic_set detect_equalities() const; + inline isl::val dim_max_val(int pos) const; + inline isl::val dim_min_val(int pos) const; + inline isl::set drop_unused_params() const; + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(const isl::space &space) const; + inline isl::basic_set flatten() const; + inline void foreach_basic_set(const std::function &fn) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &fn) const; + inline isl::basic_set gist(isl::basic_set context) const; + inline isl::set gist(const isl::set &context) const; + inline isl::union_set gist(const isl::union_set &context) const; + inline isl::basic_set gist(const isl::point &context) const; + inline isl::set gist_params(const isl::set &context) const; + inline isl::map identity() const; + inline isl::pw_aff indicator_function() const; + inline isl::map insert_domain(const isl::space &domain) const; + inline isl::basic_set intersect(isl::basic_set bset2) const; + inline isl::set intersect(const isl::set &set2) const; + inline isl::union_set intersect(const isl::union_set &uset2) const; + inline isl::basic_set intersect(const isl::point &bset2) const; + inline isl::basic_set intersect_params(isl::basic_set bset2) const; + inline isl::set intersect_params(const isl::set ¶ms) const; + inline isl::basic_set intersect_params(const isl::point &bset2) const; + inline bool involves_locals() const; + inline bool is_disjoint(const isl::set &set2) const; + inline bool is_disjoint(const isl::union_set &uset2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::basic_set &bset2) const; + inline bool is_equal(const isl::set &set2) const; + inline bool is_equal(const isl::union_set &uset2) const; + inline bool is_equal(const isl::point &bset2) const; + inline bool is_singleton() const; + inline bool is_strict_subset(const isl::set &set2) const; + inline bool is_strict_subset(const isl::union_set &uset2) const; + inline bool is_subset(const isl::basic_set &bset2) const; + inline bool is_subset(const isl::set &set2) const; + inline bool is_subset(const isl::union_set &uset2) const; + inline bool is_subset(const isl::point &bset2) const; + inline bool is_wrapping() const; + inline bool isa_set() const; + inline isl::fixed_box lattice_tile() const; + inline isl::set lexmax() const; + inline isl::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::set lexmin() const; + inline isl::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::set lower_bound(const isl::multi_pw_aff &lower) const; + inline isl::set lower_bound(const isl::multi_val &lower) const; + inline isl::multi_pw_aff max_multi_pw_aff() const; + inline isl::val max_val(const isl::aff &obj) const; + inline isl::multi_pw_aff min_multi_pw_aff() const; + inline isl::val min_val(const isl::aff &obj) const; + inline unsigned n_basic_set() const; + inline isl::pw_aff param_pw_aff_on_domain(const isl::id &id) const; + inline isl::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline isl::basic_set params() const; + inline isl::multi_val plain_multi_val_if_fixed() const; + inline isl::basic_set polyhedral_hull() const; + inline isl::set preimage(const isl::multi_aff &ma) const; + inline isl::set preimage(const isl::multi_pw_aff &mpa) const; + inline isl::set preimage(const isl::pw_multi_aff &pma) const; + inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const; + inline isl::set product(const isl::set &set2) const; + inline isl::set project_out_all_params() const; + inline isl::set project_out_param(const isl::id &id) const; + inline isl::set project_out_param(const std::string &id) const; + inline isl::set project_out_param(const isl::id_list &list) const; + inline isl::pw_aff pw_aff_on_domain(const isl::val &v) const; + inline isl::pw_aff pw_aff_on_domain(long v) const; + inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const; + inline isl::basic_set sample() const; + inline isl::point sample_point() const; + inline isl::set_list set_list() const; + inline isl::fixed_box simple_fixed_box_hull() const; + inline isl::space space() const; + inline isl::val stride(int pos) const; + inline isl::set subtract(const isl::set &set2) const; + inline isl::union_set subtract(const isl::union_set &uset2) const; + inline isl::set_list to_list() const; + inline isl::set to_set() const; + inline isl::union_set to_union_set() const; + inline isl::map translation() const; + inline unsigned tuple_dim() const; + inline isl::set unbind_params(const isl::multi_id &tuple) const; + inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const; + inline isl::set unite(isl::basic_set bset2) const; + inline isl::set unite(const isl::set &set2) const; + inline isl::union_set unite(const isl::union_set &uset2) const; + inline isl::set unite(const isl::point &bset2) const; + inline isl::basic_set unshifted_simple_hull() const; + inline isl::map unwrap() const; + inline isl::set upper_bound(const isl::multi_pw_aff &upper) const; + inline isl::set upper_bound(const isl::multi_val &upper) const; + inline isl::set wrapped_reverse() const; +}; + +// declarations for isl::fixed_box +inline fixed_box manage(__isl_take isl_fixed_box *ptr); +inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); + +class fixed_box { + friend inline fixed_box manage(__isl_take isl_fixed_box *ptr); + friend inline fixed_box manage_copy(__isl_keep isl_fixed_box *ptr); + + protected: + isl_fixed_box *ptr = nullptr; + + inline explicit fixed_box(__isl_take isl_fixed_box *ptr); + + public: + inline /* implicit */ fixed_box(); + inline /* implicit */ fixed_box(const fixed_box &obj); + inline explicit fixed_box(isl::ctx ctx, const std::string &str); + inline fixed_box &operator=(fixed_box obj); + inline ~fixed_box(); + inline __isl_give isl_fixed_box *copy() const &; + inline __isl_give isl_fixed_box *copy() && = delete; + inline __isl_keep isl_fixed_box *get() const; + inline __isl_give isl_fixed_box *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline bool is_valid() const; + inline isl::multi_aff offset() const; + inline isl::multi_aff get_offset() const; + inline isl::multi_val size() const; + inline isl::multi_val get_size() const; + inline isl::space space() const; + inline isl::space get_space() const; +}; + +// declarations for isl::id +inline id manage(__isl_take isl_id *ptr); +inline id manage_copy(__isl_keep isl_id *ptr); + +class id { + friend inline id manage(__isl_take isl_id *ptr); + friend inline id manage_copy(__isl_keep isl_id *ptr); + + protected: + isl_id *ptr = nullptr; + + inline explicit id(__isl_take isl_id *ptr); + + public: + inline /* implicit */ id(); + inline /* implicit */ id(const id &obj); + inline explicit id(isl::ctx ctx, const std::string &str); + inline id &operator=(id obj); + inline ~id(); + inline __isl_give isl_id *copy() const &; + inline __isl_give isl_id *copy() && = delete; + inline __isl_keep isl_id *get() const; + inline __isl_give isl_id *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline std::string name() const; + inline std::string get_name() const; + inline isl::id_list to_list() const; + +#if __cplusplus >= 201703L + inline explicit id(isl::ctx ctx, const std::string &str, const std::any &any); + template + std::optional try_user() const; + template + T user() const; +#endif +}; + +// declarations for isl::id_list +inline id_list manage(__isl_take isl_id_list *ptr); +inline id_list manage_copy(__isl_keep isl_id_list *ptr); + +class id_list { + friend inline id_list manage(__isl_take isl_id_list *ptr); + friend inline id_list manage_copy(__isl_keep isl_id_list *ptr); + + protected: + isl_id_list *ptr = nullptr; + + inline explicit id_list(__isl_take isl_id_list *ptr); + + public: + inline /* implicit */ id_list(); + inline /* implicit */ id_list(const id_list &obj); + inline explicit id_list(isl::ctx ctx, int n); + inline explicit id_list(isl::id el); + inline explicit id_list(isl::ctx ctx, const std::string &str); + inline id_list &operator=(id_list obj); + inline ~id_list(); + inline __isl_give isl_id_list *copy() const &; + inline __isl_give isl_id_list *copy() && = delete; + inline __isl_keep isl_id_list *get() const; + inline __isl_give isl_id_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::id_list add(isl::id el) const; + inline isl::id_list add(const std::string &el) const; + inline isl::id at(int index) const; + inline isl::id get_at(int index) const; + inline isl::id_list clear() const; + inline isl::id_list concat(isl::id_list list2) const; + inline isl::id_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::id_list insert(unsigned int pos, isl::id el) const; + inline isl::id_list insert(unsigned int pos, const std::string &el) const; + inline isl::id_list set_at(int index, isl::id el) const; + inline isl::id_list set_at(int index, const std::string &el) const; + inline unsigned size() const; +}; + +// declarations for isl::id_to_ast_expr +inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); +inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); + +class id_to_ast_expr { + friend inline id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr); + friend inline id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr); + + protected: + isl_id_to_ast_expr *ptr = nullptr; + + inline explicit id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr); + + public: + inline /* implicit */ id_to_ast_expr(); + inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj); + inline explicit id_to_ast_expr(isl::ctx ctx, int min_size); + inline explicit id_to_ast_expr(isl::ctx ctx, const std::string &str); + inline id_to_ast_expr &operator=(id_to_ast_expr obj); + inline ~id_to_ast_expr(); + inline __isl_give isl_id_to_ast_expr *copy() const &; + inline __isl_give isl_id_to_ast_expr *copy() && = delete; + inline __isl_keep isl_id_to_ast_expr *get() const; + inline __isl_give isl_id_to_ast_expr *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline bool is_equal(const isl::id_to_ast_expr &hmap2) const; + inline isl::id_to_ast_expr set(isl::id key, isl::ast_expr val) const; + inline isl::id_to_ast_expr set(const std::string &key, const isl::ast_expr &val) const; +}; + +// declarations for isl::id_to_id +inline id_to_id manage(__isl_take isl_id_to_id *ptr); +inline id_to_id manage_copy(__isl_keep isl_id_to_id *ptr); + +class id_to_id { + friend inline id_to_id manage(__isl_take isl_id_to_id *ptr); + friend inline id_to_id manage_copy(__isl_keep isl_id_to_id *ptr); + + protected: + isl_id_to_id *ptr = nullptr; + + inline explicit id_to_id(__isl_take isl_id_to_id *ptr); + + public: + inline /* implicit */ id_to_id(); + inline /* implicit */ id_to_id(const id_to_id &obj); + inline explicit id_to_id(isl::ctx ctx, int min_size); + inline explicit id_to_id(isl::ctx ctx, const std::string &str); + inline id_to_id &operator=(id_to_id obj); + inline ~id_to_id(); + inline __isl_give isl_id_to_id *copy() const &; + inline __isl_give isl_id_to_id *copy() && = delete; + inline __isl_keep isl_id_to_id *get() const; + inline __isl_give isl_id_to_id *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline bool is_equal(const isl::id_to_id &hmap2) const; + inline isl::id_to_id set(isl::id key, isl::id val) const; + inline isl::id_to_id set(const isl::id &key, const std::string &val) const; + inline isl::id_to_id set(const std::string &key, const isl::id &val) const; + inline isl::id_to_id set(const std::string &key, const std::string &val) const; +}; + +// declarations for isl::map +inline map manage(__isl_take isl_map *ptr); +inline map manage_copy(__isl_keep isl_map *ptr); + +class map { + friend inline map manage(__isl_take isl_map *ptr); + friend inline map manage_copy(__isl_keep isl_map *ptr); + + protected: + isl_map *ptr = nullptr; + + inline explicit map(__isl_take isl_map *ptr); + + public: + inline /* implicit */ map(); + inline /* implicit */ map(const map &obj); + inline /* implicit */ map(isl::basic_map bmap); + inline explicit map(isl::ctx ctx, const std::string &str); + inline map &operator=(map obj); + inline ~map(); + inline __isl_give isl_map *copy() const &; + inline __isl_give isl_map *copy() && = delete; + inline __isl_keep isl_map *get() const; + inline __isl_give isl_map *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::basic_map affine_hull() const; + inline isl::map apply_domain(isl::map map2) const; + inline isl::union_map apply_domain(const isl::union_map &umap2) const; + inline isl::map apply_domain(const isl::basic_map &map2) const; + inline isl::map apply_range(isl::map map2) const; + inline isl::union_map apply_range(const isl::union_map &umap2) const; + inline isl::map apply_range(const isl::basic_map &map2) const; + inline isl::map as_map() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::set bind_domain(isl::multi_id tuple) const; + inline isl::set bind_range(isl::multi_id tuple) const; + inline isl::map coalesce() const; + inline isl::map complement() const; + inline isl::union_map compute_divs() const; + inline isl::map curry() const; + inline isl::set deltas() const; + inline isl::map detect_equalities() const; + inline isl::set domain() const; + inline isl::map domain_factor_domain() const; + inline isl::map domain_factor_range() const; + inline isl::union_map domain_map() const; + inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const; + inline isl::map domain_product(isl::map map2) const; + inline isl::union_map domain_product(const isl::union_map &umap2) const; + inline isl::map domain_product(const isl::basic_map &map2) const; + inline isl::map domain_reverse() const; + inline unsigned domain_tuple_dim() const; + inline isl::id domain_tuple_id() const; + inline isl::id get_domain_tuple_id() const; + inline isl::map drop_unused_params() const; + static inline isl::map empty(isl::space space); + inline isl::map eq_at(isl::multi_pw_aff mpa) const; + inline isl::union_map eq_at(const isl::multi_union_pw_aff &mupa) const; + inline isl::map eq_at(const isl::aff &mpa) const; + inline isl::map eq_at(const isl::multi_aff &mpa) const; + inline isl::map eq_at(const isl::pw_aff &mpa) const; + inline isl::map eq_at(const isl::pw_multi_aff &mpa) const; + inline bool every_map(const std::function &test) const; + inline isl::map extract_map(const isl::space &space) const; + inline isl::map factor_domain() const; + inline isl::map factor_range() const; + inline isl::map fixed_power(isl::val exp) const; + inline isl::map fixed_power(long exp) const; + inline isl::map flatten() const; + inline isl::map flatten_domain() const; + inline isl::map flatten_range() const; + inline void foreach_basic_map(const std::function &fn) const; + inline void foreach_map(const std::function &fn) const; + inline isl::map gist(isl::map context) const; + inline isl::union_map gist(const isl::union_map &context) const; + inline isl::map gist(const isl::basic_map &context) const; + inline isl::map gist_domain(isl::set context) const; + inline isl::union_map gist_domain(const isl::union_set &uset) const; + inline isl::map gist_domain(const isl::basic_set &context) const; + inline isl::map gist_domain(const isl::point &context) const; + inline isl::map gist_params(isl::set context) const; + inline isl::union_map gist_range(const isl::union_set &uset) const; + inline bool has_domain_tuple_id() const; + inline bool has_range_tuple_id() const; + inline isl::map intersect(isl::map map2) const; + inline isl::union_map intersect(const isl::union_map &umap2) const; + inline isl::map intersect(const isl::basic_map &map2) const; + inline isl::map intersect_domain(isl::set set) const; + inline isl::union_map intersect_domain(const isl::space &space) const; + inline isl::union_map intersect_domain(const isl::union_set &uset) const; + inline isl::map intersect_domain(const isl::basic_set &set) const; + inline isl::map intersect_domain(const isl::point &set) const; + inline isl::map intersect_domain_factor_domain(isl::map factor) const; + inline isl::union_map intersect_domain_factor_domain(const isl::union_map &factor) const; + inline isl::map intersect_domain_factor_domain(const isl::basic_map &factor) const; + inline isl::map intersect_domain_factor_range(isl::map factor) const; + inline isl::union_map intersect_domain_factor_range(const isl::union_map &factor) const; + inline isl::map intersect_domain_factor_range(const isl::basic_map &factor) const; + inline isl::map intersect_domain_wrapped_domain(isl::set domain) const; + inline isl::union_map intersect_domain_wrapped_domain(const isl::union_set &domain) const; + inline isl::map intersect_domain_wrapped_domain(const isl::basic_set &domain) const; + inline isl::map intersect_domain_wrapped_domain(const isl::point &domain) const; + inline isl::map intersect_params(isl::set params) const; + inline isl::map intersect_range(isl::set set) const; + inline isl::union_map intersect_range(const isl::space &space) const; + inline isl::union_map intersect_range(const isl::union_set &uset) const; + inline isl::map intersect_range(const isl::basic_set &set) const; + inline isl::map intersect_range(const isl::point &set) const; + inline isl::map intersect_range_factor_domain(isl::map factor) const; + inline isl::union_map intersect_range_factor_domain(const isl::union_map &factor) const; + inline isl::map intersect_range_factor_domain(const isl::basic_map &factor) const; + inline isl::map intersect_range_factor_range(isl::map factor) const; + inline isl::union_map intersect_range_factor_range(const isl::union_map &factor) const; + inline isl::map intersect_range_factor_range(const isl::basic_map &factor) const; + inline isl::map intersect_range_wrapped_domain(isl::set domain) const; + inline isl::union_map intersect_range_wrapped_domain(const isl::union_set &domain) const; + inline isl::map intersect_range_wrapped_domain(const isl::basic_set &domain) const; + inline isl::map intersect_range_wrapped_domain(const isl::point &domain) const; + inline bool is_bijective() const; + inline bool is_disjoint(const isl::map &map2) const; + inline bool is_disjoint(const isl::union_map &umap2) const; + inline bool is_disjoint(const isl::basic_map &map2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::map &map2) const; + inline bool is_equal(const isl::union_map &umap2) const; + inline bool is_equal(const isl::basic_map &map2) const; + inline bool is_injective() const; + inline bool is_single_valued() const; + inline bool is_strict_subset(const isl::map &map2) const; + inline bool is_strict_subset(const isl::union_map &umap2) const; + inline bool is_strict_subset(const isl::basic_map &map2) const; + inline bool is_subset(const isl::map &map2) const; + inline bool is_subset(const isl::union_map &umap2) const; + inline bool is_subset(const isl::basic_map &map2) const; + inline bool isa_map() const; + inline isl::map lex_ge_at(isl::multi_pw_aff mpa) const; + inline isl::map lex_gt_at(isl::multi_pw_aff mpa) const; + inline isl::map lex_le_at(isl::multi_pw_aff mpa) const; + inline isl::map lex_lt_at(isl::multi_pw_aff mpa) const; + inline isl::map lexmax() const; + inline isl::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::map lexmin() const; + inline isl::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::map lower_bound(isl::multi_pw_aff lower) const; + inline isl::map_list map_list() const; + inline isl::multi_pw_aff max_multi_pw_aff() const; + inline isl::multi_pw_aff min_multi_pw_aff() const; + inline unsigned n_basic_map() const; + inline isl::set params() const; + inline isl::basic_map polyhedral_hull() const; + inline isl::map preimage_domain(isl::multi_aff ma) const; + inline isl::map preimage_domain(isl::multi_pw_aff mpa) const; + inline isl::map preimage_domain(isl::pw_multi_aff pma) const; + inline isl::union_map preimage_domain(const isl::union_pw_multi_aff &upma) const; + inline isl::map preimage_range(isl::multi_aff ma) const; + inline isl::map preimage_range(isl::pw_multi_aff pma) const; + inline isl::union_map preimage_range(const isl::union_pw_multi_aff &upma) const; + inline isl::map product(isl::map map2) const; + inline isl::union_map product(const isl::union_map &umap2) const; + inline isl::map product(const isl::basic_map &map2) const; + inline isl::map project_out_all_params() const; + inline isl::map project_out_param(isl::id id) const; + inline isl::map project_out_param(const std::string &id) const; + inline isl::map project_out_param(isl::id_list list) const; + inline isl::set range() const; + inline isl::map range_factor_domain() const; + inline isl::map range_factor_range() const; + inline isl::fixed_box range_lattice_tile() const; + inline isl::fixed_box get_range_lattice_tile() const; + inline isl::union_map range_map() const; + inline isl::map range_product(isl::map map2) const; + inline isl::union_map range_product(const isl::union_map &umap2) const; + inline isl::map range_product(const isl::basic_map &map2) const; + inline isl::map range_reverse() const; + inline isl::fixed_box range_simple_fixed_box_hull() const; + inline isl::fixed_box get_range_simple_fixed_box_hull() const; + inline unsigned range_tuple_dim() const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::map reverse() const; + inline isl::basic_map sample() const; + inline isl::map set_domain_tuple(isl::id id) const; + inline isl::map set_domain_tuple(const std::string &id) const; + inline isl::map set_range_tuple(isl::id id) const; + inline isl::map set_range_tuple(const std::string &id) const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::map subtract(isl::map map2) const; + inline isl::union_map subtract(const isl::union_map &umap2) const; + inline isl::map subtract(const isl::basic_map &map2) const; + inline isl::union_map subtract_domain(const isl::union_set &dom) const; + inline isl::union_map subtract_range(const isl::union_set &dom) const; + inline isl::map_list to_list() const; + inline isl::union_map to_union_map() const; + inline isl::map uncurry() const; + inline isl::map unite(isl::map map2) const; + inline isl::union_map unite(const isl::union_map &umap2) const; + inline isl::map unite(const isl::basic_map &map2) const; + static inline isl::map universe(isl::space space); + inline isl::basic_map unshifted_simple_hull() const; + inline isl::map upper_bound(isl::multi_pw_aff upper) const; + inline isl::set wrap() const; + inline isl::map zip() const; +}; + +// declarations for isl::map_list +inline map_list manage(__isl_take isl_map_list *ptr); +inline map_list manage_copy(__isl_keep isl_map_list *ptr); + +class map_list { + friend inline map_list manage(__isl_take isl_map_list *ptr); + friend inline map_list manage_copy(__isl_keep isl_map_list *ptr); + + protected: + isl_map_list *ptr = nullptr; + + inline explicit map_list(__isl_take isl_map_list *ptr); + + public: + inline /* implicit */ map_list(); + inline /* implicit */ map_list(const map_list &obj); + inline explicit map_list(isl::ctx ctx, int n); + inline explicit map_list(isl::map el); + inline explicit map_list(isl::ctx ctx, const std::string &str); + inline map_list &operator=(map_list obj); + inline ~map_list(); + inline __isl_give isl_map_list *copy() const &; + inline __isl_give isl_map_list *copy() && = delete; + inline __isl_keep isl_map_list *get() const; + inline __isl_give isl_map_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::map_list add(isl::map el) const; + inline isl::map at(int index) const; + inline isl::map get_at(int index) const; + inline isl::map_list clear() const; + inline isl::map_list concat(isl::map_list list2) const; + inline isl::map_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::map_list insert(unsigned int pos, isl::map el) const; + inline isl::map_list set_at(int index, isl::map el) const; + inline unsigned size() const; +}; + +// declarations for isl::multi_aff +inline multi_aff manage(__isl_take isl_multi_aff *ptr); +inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); + +class multi_aff { + friend inline multi_aff manage(__isl_take isl_multi_aff *ptr); + friend inline multi_aff manage_copy(__isl_keep isl_multi_aff *ptr); + + protected: + isl_multi_aff *ptr = nullptr; + + inline explicit multi_aff(__isl_take isl_multi_aff *ptr); + + public: + inline /* implicit */ multi_aff(); + inline /* implicit */ multi_aff(const multi_aff &obj); + inline /* implicit */ multi_aff(isl::aff aff); + inline explicit multi_aff(isl::space space, isl::aff_list list); + inline explicit multi_aff(isl::ctx ctx, const std::string &str); + inline multi_aff &operator=(multi_aff obj); + inline ~multi_aff(); + inline __isl_give isl_multi_aff *copy() const &; + inline __isl_give isl_multi_aff *copy() && = delete; + inline __isl_keep isl_multi_aff *get() const; + inline __isl_give isl_multi_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_aff add(isl::multi_aff multi2) const; + inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff add(const isl::aff &multi2) const; + inline isl::multi_aff add_constant(isl::multi_val mv) const; + inline isl::multi_aff add_constant(isl::val v) const; + inline isl::multi_aff add_constant(long v) const; + inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const; + inline isl::map as_map() const; + inline isl::multi_aff as_multi_aff() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::union_map as_union_map() const; + inline isl::aff at(int pos) const; + inline isl::aff get_at(int pos) const; + inline isl::basic_set bind(isl::multi_id tuple) const; + inline isl::multi_aff bind_domain(isl::multi_id tuple) const; + inline isl::multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const; + inline isl::pw_multi_aff coalesce() const; + inline isl::multi_val constant_multi_val() const; + inline isl::multi_val get_constant_multi_val() const; + inline isl::set domain() const; + static inline isl::multi_aff domain_map(isl::space space); + inline isl::multi_aff domain_reverse() const; + inline isl::pw_multi_aff drop_unused_params() const; + inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const; + inline isl::multi_aff flat_range_product(isl::multi_aff multi2) const; + inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff flat_range_product(const isl::aff &multi2) const; + inline isl::multi_aff floor() const; + inline void foreach_piece(const std::function &fn) const; + inline isl::multi_aff gist(isl::set context) const; + inline isl::union_pw_multi_aff gist(const isl::union_set &context) const; + inline isl::multi_aff gist(const isl::basic_set &context) const; + inline isl::multi_aff gist(const isl::point &context) const; + inline isl::multi_aff gist_params(isl::set context) const; + inline bool has_range_tuple_id() const; + inline isl::multi_aff identity() const; + static inline isl::multi_aff identity_on_domain(isl::space space); + inline isl::multi_aff insert_domain(isl::space domain) const; + inline isl::pw_multi_aff intersect_domain(const isl::set &set) const; + inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const; + inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const; + inline isl::pw_multi_aff intersect_params(const isl::set &set) const; + inline bool involves_locals() const; + inline bool involves_nan() const; + inline bool involves_param(const isl::id &id) const; + inline bool involves_param(const std::string &id) const; + inline bool involves_param(const isl::id_list &list) const; + inline bool isa_multi_aff() const; + inline bool isa_pw_multi_aff() const; + inline isl::aff_list list() const; + inline isl::aff_list get_list() const; + inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const; + inline isl::multi_val max_multi_val() const; + inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const; + inline isl::multi_val min_multi_val() const; + static inline isl::multi_aff multi_val_on_domain(isl::space space, isl::multi_val mv); + inline unsigned n_piece() const; + inline isl::multi_aff neg() const; + inline bool plain_is_empty() const; + inline bool plain_is_equal(const isl::multi_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::pw_multi_aff &pma2) const; + inline bool plain_is_equal(const isl::union_pw_multi_aff &upma2) const; + inline bool plain_is_equal(const isl::aff &multi2) const; + inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff product(isl::multi_aff multi2) const; + inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const; + inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const; + inline isl::multi_aff product(const isl::aff &multi2) const; + inline isl::multi_aff pullback(isl::multi_aff ma2) const; + inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const; + inline isl::pw_multi_aff pullback(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff pullback(const isl::aff &ma2) const; + inline isl::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::pw_multi_aff range_factor_domain() const; + inline isl::pw_multi_aff range_factor_range() const; + static inline isl::multi_aff range_map(isl::space space); + inline isl::multi_aff range_product(isl::multi_aff multi2) const; + inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff range_product(const isl::aff &multi2) const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::multi_aff reset_range_tuple_id() const; + inline isl::multi_aff scale(isl::multi_val mv) const; + inline isl::multi_aff scale(isl::val v) const; + inline isl::multi_aff scale(long v) const; + inline isl::multi_aff scale_down(isl::multi_val mv) const; + inline isl::multi_aff scale_down(isl::val v) const; + inline isl::multi_aff scale_down(long v) const; + inline isl::multi_aff set_at(int pos, isl::aff el) const; + inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const; + inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const; + inline isl::multi_aff set_range_tuple(isl::id id) const; + inline isl::multi_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_aff sub(isl::multi_aff multi2) const; + inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_aff sub(const isl::aff &multi2) const; + inline isl::pw_multi_aff subtract_domain(const isl::set &set) const; + inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const; + inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const; + inline isl::pw_multi_aff_list to_list() const; + inline isl::multi_pw_aff to_multi_pw_aff() const; + inline isl::multi_union_pw_aff to_multi_union_pw_aff() const; + inline isl::pw_multi_aff to_pw_multi_aff() const; + inline isl::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::multi_aff unbind_params_insert_domain(isl::multi_id domain) const; + inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const; + inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const; + inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const; + static inline isl::multi_aff zero(isl::space space); +}; + +// declarations for isl::multi_id +inline multi_id manage(__isl_take isl_multi_id *ptr); +inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); + +class multi_id { + friend inline multi_id manage(__isl_take isl_multi_id *ptr); + friend inline multi_id manage_copy(__isl_keep isl_multi_id *ptr); + + protected: + isl_multi_id *ptr = nullptr; + + inline explicit multi_id(__isl_take isl_multi_id *ptr); + + public: + inline /* implicit */ multi_id(); + inline /* implicit */ multi_id(const multi_id &obj); + inline explicit multi_id(isl::space space, isl::id_list list); + inline explicit multi_id(isl::ctx ctx, const std::string &str); + inline multi_id &operator=(multi_id obj); + inline ~multi_id(); + inline __isl_give isl_multi_id *copy() const &; + inline __isl_give isl_multi_id *copy() && = delete; + inline __isl_keep isl_multi_id *get() const; + inline __isl_give isl_multi_id *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::id at(int pos) const; + inline isl::id get_at(int pos) const; + inline isl::multi_id flat_range_product(isl::multi_id multi2) const; + inline isl::id_list list() const; + inline isl::id_list get_list() const; + inline bool plain_is_equal(const isl::multi_id &multi2) const; + inline isl::multi_id range_product(isl::multi_id multi2) const; + inline isl::multi_id set_at(int pos, isl::id el) const; + inline isl::multi_id set_at(int pos, const std::string &el) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; +}; + +// declarations for isl::multi_pw_aff +inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); +inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); + +class multi_pw_aff { + friend inline multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr); + friend inline multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr); + + protected: + isl_multi_pw_aff *ptr = nullptr; + + inline explicit multi_pw_aff(__isl_take isl_multi_pw_aff *ptr); + + public: + inline /* implicit */ multi_pw_aff(); + inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj); + inline /* implicit */ multi_pw_aff(isl::aff aff); + inline /* implicit */ multi_pw_aff(isl::multi_aff ma); + inline /* implicit */ multi_pw_aff(isl::pw_aff pa); + inline explicit multi_pw_aff(isl::space space, isl::pw_aff_list list); + inline /* implicit */ multi_pw_aff(isl::pw_multi_aff pma); + inline explicit multi_pw_aff(isl::ctx ctx, const std::string &str); + inline multi_pw_aff &operator=(multi_pw_aff obj); + inline ~multi_pw_aff(); + inline __isl_give isl_multi_pw_aff *copy() const &; + inline __isl_give isl_multi_pw_aff *copy() && = delete; + inline __isl_keep isl_multi_pw_aff *get() const; + inline __isl_give isl_multi_pw_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_pw_aff add(isl::multi_pw_aff multi2) const; + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::multi_pw_aff add(const isl::aff &multi2) const; + inline isl::multi_pw_aff add(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff add(const isl::pw_aff &multi2) const; + inline isl::multi_pw_aff add(const isl::pw_multi_aff &multi2) const; + inline isl::multi_pw_aff add_constant(isl::multi_val mv) const; + inline isl::multi_pw_aff add_constant(isl::val v) const; + inline isl::multi_pw_aff add_constant(long v) const; + inline isl::map as_map() const; + inline isl::multi_aff as_multi_aff() const; + inline isl::set as_set() const; + inline isl::pw_aff at(int pos) const; + inline isl::pw_aff get_at(int pos) const; + inline isl::set bind(isl::multi_id tuple) const; + inline isl::multi_pw_aff bind_domain(isl::multi_id tuple) const; + inline isl::multi_pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const; + inline isl::multi_pw_aff coalesce() const; + inline isl::set domain() const; + inline isl::multi_pw_aff domain_reverse() const; + inline isl::multi_pw_aff flat_range_product(isl::multi_pw_aff multi2) const; + inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::multi_pw_aff flat_range_product(const isl::aff &multi2) const; + inline isl::multi_pw_aff flat_range_product(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff flat_range_product(const isl::pw_aff &multi2) const; + inline isl::multi_pw_aff flat_range_product(const isl::pw_multi_aff &multi2) const; + inline isl::multi_pw_aff gist(isl::set set) const; + inline isl::multi_union_pw_aff gist(const isl::union_set &context) const; + inline isl::multi_pw_aff gist(const isl::basic_set &set) const; + inline isl::multi_pw_aff gist(const isl::point &set) const; + inline isl::multi_pw_aff gist_params(isl::set set) const; + inline bool has_range_tuple_id() const; + inline isl::multi_pw_aff identity() const; + static inline isl::multi_pw_aff identity_on_domain(isl::space space); + inline isl::multi_pw_aff insert_domain(isl::space domain) const; + inline isl::multi_pw_aff intersect_domain(isl::set domain) const; + inline isl::multi_union_pw_aff intersect_domain(const isl::union_set &uset) const; + inline isl::multi_pw_aff intersect_domain(const isl::basic_set &domain) const; + inline isl::multi_pw_aff intersect_domain(const isl::point &domain) const; + inline isl::multi_pw_aff intersect_params(isl::set set) const; + inline bool involves_nan() const; + inline bool involves_param(const isl::id &id) const; + inline bool involves_param(const std::string &id) const; + inline bool involves_param(const isl::id_list &list) const; + inline bool isa_multi_aff() const; + inline isl::pw_aff_list list() const; + inline isl::pw_aff_list get_list() const; + inline isl::multi_pw_aff max(isl::multi_pw_aff multi2) const; + inline isl::multi_val max_multi_val() const; + inline isl::multi_pw_aff min(isl::multi_pw_aff multi2) const; + inline isl::multi_val min_multi_val() const; + inline isl::multi_pw_aff neg() const; + inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::aff &multi2) const; + inline bool plain_is_equal(const isl::multi_aff &multi2) const; + inline bool plain_is_equal(const isl::pw_aff &multi2) const; + inline bool plain_is_equal(const isl::pw_multi_aff &multi2) const; + inline isl::multi_pw_aff product(isl::multi_pw_aff multi2) const; + inline isl::multi_pw_aff pullback(isl::multi_aff ma) const; + inline isl::multi_pw_aff pullback(isl::multi_pw_aff mpa2) const; + inline isl::multi_pw_aff pullback(isl::pw_multi_aff pma) const; + inline isl::multi_union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const; + inline isl::multi_pw_aff range_product(isl::multi_pw_aff multi2) const; + inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::multi_pw_aff range_product(const isl::aff &multi2) const; + inline isl::multi_pw_aff range_product(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff range_product(const isl::pw_aff &multi2) const; + inline isl::multi_pw_aff range_product(const isl::pw_multi_aff &multi2) const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::multi_pw_aff reset_range_tuple_id() const; + inline isl::multi_pw_aff scale(isl::multi_val mv) const; + inline isl::multi_pw_aff scale(isl::val v) const; + inline isl::multi_pw_aff scale(long v) const; + inline isl::multi_pw_aff scale_down(isl::multi_val mv) const; + inline isl::multi_pw_aff scale_down(isl::val v) const; + inline isl::multi_pw_aff scale_down(long v) const; + inline isl::multi_pw_aff set_at(int pos, isl::pw_aff el) const; + inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const; + inline isl::multi_pw_aff set_range_tuple(isl::id id) const; + inline isl::multi_pw_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_pw_aff sub(isl::multi_pw_aff multi2) const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::multi_pw_aff sub(const isl::aff &multi2) const; + inline isl::multi_pw_aff sub(const isl::multi_aff &multi2) const; + inline isl::multi_pw_aff sub(const isl::pw_aff &multi2) const; + inline isl::multi_pw_aff sub(const isl::pw_multi_aff &multi2) const; + inline isl::multi_pw_aff unbind_params_insert_domain(isl::multi_id domain) const; + inline isl::multi_pw_aff union_add(isl::multi_pw_aff mpa2) const; + inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const; + inline isl::multi_pw_aff union_add(const isl::aff &mpa2) const; + inline isl::multi_pw_aff union_add(const isl::multi_aff &mpa2) const; + inline isl::multi_pw_aff union_add(const isl::pw_aff &mpa2) const; + inline isl::multi_pw_aff union_add(const isl::pw_multi_aff &mpa2) const; + static inline isl::multi_pw_aff zero(isl::space space); +}; + +// declarations for isl::multi_union_pw_aff +inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); +inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); + +class multi_union_pw_aff { + friend inline multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr); + friend inline multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr); + + protected: + isl_multi_union_pw_aff *ptr = nullptr; + + inline explicit multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr); + + public: + inline /* implicit */ multi_union_pw_aff(); + inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj); + inline /* implicit */ multi_union_pw_aff(isl::multi_pw_aff mpa); + inline /* implicit */ multi_union_pw_aff(isl::union_pw_aff upa); + inline explicit multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list); + inline explicit multi_union_pw_aff(isl::ctx ctx, const std::string &str); + inline multi_union_pw_aff &operator=(multi_union_pw_aff obj); + inline ~multi_union_pw_aff(); + inline __isl_give isl_multi_union_pw_aff *copy() const &; + inline __isl_give isl_multi_union_pw_aff *copy() && = delete; + inline __isl_keep isl_multi_union_pw_aff *get() const; + inline __isl_give isl_multi_union_pw_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_union_pw_aff add(isl::multi_union_pw_aff multi2) const; + inline isl::union_pw_aff at(int pos) const; + inline isl::union_pw_aff get_at(int pos) const; + inline isl::union_set bind(isl::multi_id tuple) const; + inline isl::multi_union_pw_aff coalesce() const; + inline isl::union_set domain() const; + inline isl::multi_union_pw_aff flat_range_product(isl::multi_union_pw_aff multi2) const; + inline isl::multi_union_pw_aff gist(isl::union_set context) const; + inline isl::multi_union_pw_aff gist_params(isl::set context) const; + inline bool has_range_tuple_id() const; + inline isl::multi_union_pw_aff intersect_domain(isl::union_set uset) const; + inline isl::multi_union_pw_aff intersect_params(isl::set params) const; + inline bool involves_nan() const; + inline isl::union_pw_aff_list list() const; + inline isl::union_pw_aff_list get_list() const; + inline isl::multi_union_pw_aff neg() const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline isl::multi_union_pw_aff pullback(isl::union_pw_multi_aff upma) const; + inline isl::multi_union_pw_aff range_product(isl::multi_union_pw_aff multi2) const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::multi_union_pw_aff reset_range_tuple_id() const; + inline isl::multi_union_pw_aff scale(isl::multi_val mv) const; + inline isl::multi_union_pw_aff scale(isl::val v) const; + inline isl::multi_union_pw_aff scale(long v) const; + inline isl::multi_union_pw_aff scale_down(isl::multi_val mv) const; + inline isl::multi_union_pw_aff scale_down(isl::val v) const; + inline isl::multi_union_pw_aff scale_down(long v) const; + inline isl::multi_union_pw_aff set_at(int pos, isl::union_pw_aff el) const; + inline isl::multi_union_pw_aff set_range_tuple(isl::id id) const; + inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_union_pw_aff sub(isl::multi_union_pw_aff multi2) const; + inline isl::multi_union_pw_aff union_add(isl::multi_union_pw_aff mupa2) const; + static inline isl::multi_union_pw_aff zero(isl::space space); +}; + +// declarations for isl::multi_val +inline multi_val manage(__isl_take isl_multi_val *ptr); +inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); + +class multi_val { + friend inline multi_val manage(__isl_take isl_multi_val *ptr); + friend inline multi_val manage_copy(__isl_keep isl_multi_val *ptr); + + protected: + isl_multi_val *ptr = nullptr; + + inline explicit multi_val(__isl_take isl_multi_val *ptr); + + public: + inline /* implicit */ multi_val(); + inline /* implicit */ multi_val(const multi_val &obj); + inline explicit multi_val(isl::space space, isl::val_list list); + inline explicit multi_val(isl::ctx ctx, const std::string &str); + inline multi_val &operator=(multi_val obj); + inline ~multi_val(); + inline __isl_give isl_multi_val *copy() const &; + inline __isl_give isl_multi_val *copy() && = delete; + inline __isl_keep isl_multi_val *get() const; + inline __isl_give isl_multi_val *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_val add(isl::multi_val multi2) const; + inline isl::multi_val add(isl::val v) const; + inline isl::multi_val add(long v) const; + inline isl::val at(int pos) const; + inline isl::val get_at(int pos) const; + inline isl::multi_val flat_range_product(isl::multi_val multi2) const; + inline bool has_range_tuple_id() const; + inline bool involves_nan() const; + inline isl::val_list list() const; + inline isl::val_list get_list() const; + inline isl::multi_val max(isl::multi_val multi2) const; + inline isl::multi_val min(isl::multi_val multi2) const; + inline isl::multi_val neg() const; + inline bool plain_is_equal(const isl::multi_val &multi2) const; + inline isl::multi_val product(isl::multi_val multi2) const; + inline isl::multi_val range_product(isl::multi_val multi2) const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::multi_val reset_range_tuple_id() const; + inline isl::multi_val scale(isl::multi_val mv) const; + inline isl::multi_val scale(isl::val v) const; + inline isl::multi_val scale(long v) const; + inline isl::multi_val scale_down(isl::multi_val mv) const; + inline isl::multi_val scale_down(isl::val v) const; + inline isl::multi_val scale_down(long v) const; + inline isl::multi_val set_at(int pos, isl::val el) const; + inline isl::multi_val set_at(int pos, long el) const; + inline isl::multi_val set_range_tuple(isl::id id) const; + inline isl::multi_val set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_val sub(isl::multi_val multi2) const; + static inline isl::multi_val zero(isl::space space); +}; + +// declarations for isl::point +inline point manage(__isl_take isl_point *ptr); +inline point manage_copy(__isl_keep isl_point *ptr); + +class point { + friend inline point manage(__isl_take isl_point *ptr); + friend inline point manage_copy(__isl_keep isl_point *ptr); + + protected: + isl_point *ptr = nullptr; + + inline explicit point(__isl_take isl_point *ptr); + + public: + inline /* implicit */ point(); + inline /* implicit */ point(const point &obj); + inline point &operator=(point obj); + inline ~point(); + inline __isl_give isl_point *copy() const &; + inline __isl_give isl_point *copy() && = delete; + inline __isl_keep isl_point *get() const; + inline __isl_give isl_point *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::basic_set affine_hull() const; + inline isl::basic_set apply(const isl::basic_map &bmap) const; + inline isl::set apply(const isl::map &map) const; + inline isl::union_set apply(const isl::union_map &umap) const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::set bind(const isl::multi_id &tuple) const; + inline isl::set coalesce() const; + inline isl::set complement() const; + inline isl::union_set compute_divs() const; + inline isl::basic_set detect_equalities() const; + inline isl::val dim_max_val(int pos) const; + inline isl::val dim_min_val(int pos) const; + inline isl::set drop_unused_params() const; + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(const isl::space &space) const; + inline isl::basic_set flatten() const; + inline void foreach_basic_set(const std::function &fn) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &fn) const; + inline isl::basic_set gist(const isl::basic_set &context) const; + inline isl::set gist(const isl::set &context) const; + inline isl::union_set gist(const isl::union_set &context) const; + inline isl::set gist_params(const isl::set &context) const; + inline isl::map identity() const; + inline isl::pw_aff indicator_function() const; + inline isl::map insert_domain(const isl::space &domain) const; + inline isl::basic_set intersect(const isl::basic_set &bset2) const; + inline isl::set intersect(const isl::set &set2) const; + inline isl::union_set intersect(const isl::union_set &uset2) const; + inline isl::basic_set intersect_params(const isl::basic_set &bset2) const; + inline isl::set intersect_params(const isl::set ¶ms) const; + inline bool involves_locals() const; + inline bool is_disjoint(const isl::set &set2) const; + inline bool is_disjoint(const isl::union_set &uset2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::basic_set &bset2) const; + inline bool is_equal(const isl::set &set2) const; + inline bool is_equal(const isl::union_set &uset2) const; + inline bool is_singleton() const; + inline bool is_strict_subset(const isl::set &set2) const; + inline bool is_strict_subset(const isl::union_set &uset2) const; + inline bool is_subset(const isl::basic_set &bset2) const; + inline bool is_subset(const isl::set &set2) const; + inline bool is_subset(const isl::union_set &uset2) const; + inline bool is_wrapping() const; + inline bool isa_set() const; + inline isl::fixed_box lattice_tile() const; + inline isl::set lexmax() const; + inline isl::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::set lexmin() const; + inline isl::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::set lower_bound(const isl::multi_pw_aff &lower) const; + inline isl::set lower_bound(const isl::multi_val &lower) const; + inline isl::multi_pw_aff max_multi_pw_aff() const; + inline isl::val max_val(const isl::aff &obj) const; + inline isl::multi_pw_aff min_multi_pw_aff() const; + inline isl::val min_val(const isl::aff &obj) const; + inline isl::multi_val multi_val() const; + inline isl::multi_val get_multi_val() const; + inline unsigned n_basic_set() const; + inline isl::pw_aff param_pw_aff_on_domain(const isl::id &id) const; + inline isl::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline isl::basic_set params() const; + inline isl::multi_val plain_multi_val_if_fixed() const; + inline isl::basic_set polyhedral_hull() const; + inline isl::set preimage(const isl::multi_aff &ma) const; + inline isl::set preimage(const isl::multi_pw_aff &mpa) const; + inline isl::set preimage(const isl::pw_multi_aff &pma) const; + inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const; + inline isl::set product(const isl::set &set2) const; + inline isl::set project_out_all_params() const; + inline isl::set project_out_param(const isl::id &id) const; + inline isl::set project_out_param(const std::string &id) const; + inline isl::set project_out_param(const isl::id_list &list) const; + inline isl::pw_aff pw_aff_on_domain(const isl::val &v) const; + inline isl::pw_aff pw_aff_on_domain(long v) const; + inline isl::pw_multi_aff pw_multi_aff_on_domain(const isl::multi_val &mv) const; + inline isl::basic_set sample() const; + inline isl::point sample_point() const; + inline isl::set_list set_list() const; + inline isl::fixed_box simple_fixed_box_hull() const; + inline isl::space space() const; + inline isl::val stride(int pos) const; + inline isl::set subtract(const isl::set &set2) const; + inline isl::union_set subtract(const isl::union_set &uset2) const; + inline isl::set_list to_list() const; + inline isl::set to_set() const; + inline isl::union_set to_union_set() const; + inline isl::map translation() const; + inline unsigned tuple_dim() const; + inline isl::set unbind_params(const isl::multi_id &tuple) const; + inline isl::map unbind_params_insert_domain(const isl::multi_id &domain) const; + inline isl::set unite(const isl::basic_set &bset2) const; + inline isl::set unite(const isl::set &set2) const; + inline isl::union_set unite(const isl::union_set &uset2) const; + inline isl::basic_set unshifted_simple_hull() const; + inline isl::map unwrap() const; + inline isl::set upper_bound(const isl::multi_pw_aff &upper) const; + inline isl::set upper_bound(const isl::multi_val &upper) const; + inline isl::set wrapped_reverse() const; +}; + +// declarations for isl::pw_aff +inline pw_aff manage(__isl_take isl_pw_aff *ptr); +inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); + +class pw_aff { + friend inline pw_aff manage(__isl_take isl_pw_aff *ptr); + friend inline pw_aff manage_copy(__isl_keep isl_pw_aff *ptr); + + protected: + isl_pw_aff *ptr = nullptr; + + inline explicit pw_aff(__isl_take isl_pw_aff *ptr); + + public: + inline /* implicit */ pw_aff(); + inline /* implicit */ pw_aff(const pw_aff &obj); + inline /* implicit */ pw_aff(isl::aff aff); + inline explicit pw_aff(isl::ctx ctx, const std::string &str); + inline pw_aff &operator=(pw_aff obj); + inline ~pw_aff(); + inline __isl_give isl_pw_aff *copy() const &; + inline __isl_give isl_pw_aff *copy() && = delete; + inline __isl_keep isl_pw_aff *get() const; + inline __isl_give isl_pw_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_aff add(isl::pw_aff pwaff2) const; + inline isl::pw_multi_aff add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_aff add(const isl::union_pw_aff &upa2) const; + inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_aff add(const isl::aff &pwaff2) const; + inline isl::pw_aff add_constant(isl::val v) const; + inline isl::pw_aff add_constant(long v) const; + inline isl::pw_multi_aff add_constant(const isl::multi_val &mv) const; + inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const; + inline isl::aff as_aff() const; + inline isl::map as_map() const; + inline isl::multi_aff as_multi_aff() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::union_map as_union_map() const; + inline isl::pw_aff at(int pos) const; + inline isl::set bind(const isl::multi_id &tuple) const; + inline isl::set bind(isl::id id) const; + inline isl::set bind(const std::string &id) const; + inline isl::pw_aff bind_domain(isl::multi_id tuple) const; + inline isl::pw_aff bind_domain_wrapped_domain(isl::multi_id tuple) const; + inline isl::pw_aff ceil() const; + inline isl::pw_aff coalesce() const; + inline isl::pw_aff cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const; + inline isl::pw_aff div(isl::pw_aff pa2) const; + inline isl::set domain() const; + inline isl::pw_aff domain_reverse() const; + inline isl::pw_aff drop_unused_params() const; + inline isl::set eq_set(isl::pw_aff pwaff2) const; + inline isl::val eval(isl::point pnt) const; + inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const; + inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff flat_range_product(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_aff floor() const; + inline void foreach_piece(const std::function &fn) const; + inline isl::set ge_set(isl::pw_aff pwaff2) const; + inline isl::pw_aff gist(isl::set context) const; + inline isl::union_pw_aff gist(const isl::union_set &context) const; + inline isl::pw_aff gist(const isl::basic_set &context) const; + inline isl::pw_aff gist(const isl::point &context) const; + inline isl::pw_aff gist_params(isl::set context) const; + inline isl::set gt_set(isl::pw_aff pwaff2) const; + inline bool has_range_tuple_id() const; + inline isl::multi_pw_aff identity() const; + inline isl::pw_aff insert_domain(isl::space domain) const; + inline isl::pw_aff intersect_domain(isl::set set) const; + inline isl::union_pw_aff intersect_domain(const isl::space &space) const; + inline isl::union_pw_aff intersect_domain(const isl::union_set &uset) const; + inline isl::pw_aff intersect_domain(const isl::basic_set &set) const; + inline isl::pw_aff intersect_domain(const isl::point &set) const; + inline isl::union_pw_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const; + inline isl::union_pw_aff intersect_domain_wrapped_range(const isl::union_set &uset) const; + inline isl::pw_aff intersect_params(isl::set set) const; + inline bool involves_locals() const; + inline bool involves_nan() const; + inline bool involves_param(const isl::id &id) const; + inline bool involves_param(const std::string &id) const; + inline bool involves_param(const isl::id_list &list) const; + inline bool isa_aff() const; + inline bool isa_multi_aff() const; + inline bool isa_pw_multi_aff() const; + inline isl::set le_set(isl::pw_aff pwaff2) const; + inline isl::pw_aff_list list() const; + inline isl::set lt_set(isl::pw_aff pwaff2) const; + inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const; + inline isl::pw_aff max(isl::pw_aff pwaff2) const; + inline isl::pw_aff max(const isl::aff &pwaff2) const; + inline isl::multi_val max_multi_val() const; + inline isl::val max_val() const; + inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const; + inline isl::pw_aff min(isl::pw_aff pwaff2) const; + inline isl::pw_aff min(const isl::aff &pwaff2) const; + inline isl::multi_val min_multi_val() const; + inline isl::val min_val() const; + inline isl::pw_aff mod(isl::val mod) const; + inline isl::pw_aff mod(long mod) const; + inline isl::pw_aff mul(isl::pw_aff pwaff2) const; + inline unsigned n_piece() const; + inline isl::set ne_set(isl::pw_aff pwaff2) const; + inline isl::pw_aff neg() const; + static inline isl::pw_aff param_on_domain(isl::set domain, isl::id id); + inline isl::set params() const; + inline bool plain_is_empty() const; + inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::pw_aff &pwaff2) const; + inline bool plain_is_equal(const isl::pw_multi_aff &pma2) const; + inline bool plain_is_equal(const isl::union_pw_aff &upa2) const; + inline bool plain_is_equal(const isl::union_pw_multi_aff &upma2) const; + inline bool plain_is_equal(const isl::aff &pwaff2) const; + inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const; + inline isl::pw_multi_aff product(const isl::pw_multi_aff &pma2) const; + inline isl::pw_aff pullback(isl::multi_aff ma) const; + inline isl::pw_aff pullback(isl::multi_pw_aff mpa) const; + inline isl::pw_aff pullback(isl::pw_multi_aff pma) const; + inline isl::union_pw_aff pullback(const isl::union_pw_multi_aff &upma) const; + inline isl::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::pw_multi_aff range_factor_domain() const; + inline isl::pw_multi_aff range_factor_range() const; + inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff range_product(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::id range_tuple_id() const; + inline isl::multi_pw_aff reset_range_tuple_id() const; + inline isl::pw_aff scale(isl::val v) const; + inline isl::pw_aff scale(long v) const; + inline isl::pw_multi_aff scale(const isl::multi_val &mv) const; + inline isl::pw_aff scale_down(isl::val f) const; + inline isl::pw_aff scale_down(long f) const; + inline isl::pw_multi_aff scale_down(const isl::multi_val &mv) const; + inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const; + inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const; + inline isl::pw_multi_aff set_range_tuple(const isl::id &id) const; + inline isl::pw_multi_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_aff sub(isl::pw_aff pwaff2) const; + inline isl::pw_multi_aff sub(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_aff sub(const isl::union_pw_aff &upa2) const; + inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_aff sub(const isl::aff &pwaff2) const; + inline isl::pw_aff subtract_domain(isl::set set) const; + inline isl::union_pw_aff subtract_domain(const isl::space &space) const; + inline isl::union_pw_aff subtract_domain(const isl::union_set &uset) const; + inline isl::pw_aff subtract_domain(const isl::basic_set &set) const; + inline isl::pw_aff subtract_domain(const isl::point &set) const; + inline isl::pw_aff tdiv_q(isl::pw_aff pa2) const; + inline isl::pw_aff tdiv_r(isl::pw_aff pa2) const; + inline isl::pw_aff_list to_list() const; + inline isl::multi_pw_aff to_multi_pw_aff() const; + inline isl::union_pw_aff to_union_pw_aff() const; + inline isl::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const; + inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const; + inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const; + inline isl::pw_aff union_add(isl::pw_aff pwaff2) const; + inline isl::pw_multi_aff union_add(const isl::pw_multi_aff &pma2) const; + inline isl::union_pw_aff union_add(const isl::union_pw_aff &upa2) const; + inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_aff union_add(const isl::aff &pwaff2) const; +}; + +// declarations for isl::pw_aff_list +inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); +inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); + +class pw_aff_list { + friend inline pw_aff_list manage(__isl_take isl_pw_aff_list *ptr); + friend inline pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr); + + protected: + isl_pw_aff_list *ptr = nullptr; + + inline explicit pw_aff_list(__isl_take isl_pw_aff_list *ptr); + + public: + inline /* implicit */ pw_aff_list(); + inline /* implicit */ pw_aff_list(const pw_aff_list &obj); + inline explicit pw_aff_list(isl::ctx ctx, int n); + inline explicit pw_aff_list(isl::pw_aff el); + inline explicit pw_aff_list(isl::ctx ctx, const std::string &str); + inline pw_aff_list &operator=(pw_aff_list obj); + inline ~pw_aff_list(); + inline __isl_give isl_pw_aff_list *copy() const &; + inline __isl_give isl_pw_aff_list *copy() && = delete; + inline __isl_keep isl_pw_aff_list *get() const; + inline __isl_give isl_pw_aff_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::pw_aff_list add(isl::pw_aff el) const; + inline isl::pw_aff at(int index) const; + inline isl::pw_aff get_at(int index) const; + inline isl::pw_aff_list clear() const; + inline isl::pw_aff_list concat(isl::pw_aff_list list2) const; + inline isl::pw_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::pw_aff_list insert(unsigned int pos, isl::pw_aff el) const; + inline isl::pw_aff_list set_at(int index, isl::pw_aff el) const; + inline unsigned size() const; +}; + +// declarations for isl::pw_multi_aff +inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); +inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); + +class pw_multi_aff { + friend inline pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr); + friend inline pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr); + + protected: + isl_pw_multi_aff *ptr = nullptr; + + inline explicit pw_multi_aff(__isl_take isl_pw_multi_aff *ptr); + + public: + inline /* implicit */ pw_multi_aff(); + inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj); + inline /* implicit */ pw_multi_aff(isl::multi_aff ma); + inline /* implicit */ pw_multi_aff(isl::pw_aff pa); + inline explicit pw_multi_aff(isl::ctx ctx, const std::string &str); + inline pw_multi_aff &operator=(pw_multi_aff obj); + inline ~pw_multi_aff(); + inline __isl_give isl_pw_multi_aff *copy() const &; + inline __isl_give isl_pw_multi_aff *copy() && = delete; + inline __isl_keep isl_pw_multi_aff *get() const; + inline __isl_give isl_pw_multi_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_pw_aff add(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff add(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff add(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff add(const isl::pw_aff &pma2) const; + inline isl::pw_multi_aff add_constant(isl::multi_val mv) const; + inline isl::pw_multi_aff add_constant(isl::val v) const; + inline isl::pw_multi_aff add_constant(long v) const; + inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const; + inline isl::map as_map() const; + inline isl::multi_aff as_multi_aff() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::union_map as_union_map() const; + inline isl::pw_aff at(int pos) const; + inline isl::pw_aff get_at(int pos) const; + inline isl::set bind(const isl::multi_id &tuple) const; + inline isl::pw_multi_aff bind_domain(isl::multi_id tuple) const; + inline isl::pw_multi_aff bind_domain_wrapped_domain(isl::multi_id tuple) const; + inline isl::pw_multi_aff coalesce() const; + inline isl::set domain() const; + static inline isl::pw_multi_aff domain_map(isl::space space); + inline isl::pw_multi_aff domain_reverse() const; + inline isl::pw_multi_aff drop_unused_params() const; + inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const; + inline isl::multi_pw_aff flat_range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff flat_range_product(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff flat_range_product(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff flat_range_product(const isl::pw_aff &pma2) const; + inline void foreach_piece(const std::function &fn) const; + inline isl::pw_multi_aff gist(isl::set set) const; + inline isl::union_pw_multi_aff gist(const isl::union_set &context) const; + inline isl::pw_multi_aff gist(const isl::basic_set &set) const; + inline isl::pw_multi_aff gist(const isl::point &set) const; + inline isl::pw_multi_aff gist_params(isl::set set) const; + inline bool has_range_tuple_id() const; + inline isl::multi_pw_aff identity() const; + static inline isl::pw_multi_aff identity_on_domain(isl::space space); + inline isl::pw_multi_aff insert_domain(isl::space domain) const; + inline isl::pw_multi_aff intersect_domain(isl::set set) const; + inline isl::union_pw_multi_aff intersect_domain(const isl::space &space) const; + inline isl::union_pw_multi_aff intersect_domain(const isl::union_set &uset) const; + inline isl::pw_multi_aff intersect_domain(const isl::basic_set &set) const; + inline isl::pw_multi_aff intersect_domain(const isl::point &set) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(const isl::union_set &uset) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_range(const isl::union_set &uset) const; + inline isl::pw_multi_aff intersect_params(isl::set set) const; + inline bool involves_locals() const; + inline bool involves_nan() const; + inline bool involves_param(const isl::id &id) const; + inline bool involves_param(const std::string &id) const; + inline bool involves_param(const isl::id_list &list) const; + inline bool isa_multi_aff() const; + inline bool isa_pw_multi_aff() const; + inline isl::pw_aff_list list() const; + inline isl::multi_pw_aff max(const isl::multi_pw_aff &multi2) const; + inline isl::multi_val max_multi_val() const; + inline isl::multi_pw_aff min(const isl::multi_pw_aff &multi2) const; + inline isl::multi_val min_multi_val() const; + static inline isl::pw_multi_aff multi_val_on_domain(isl::set domain, isl::multi_val mv); + inline unsigned n_piece() const; + inline isl::multi_pw_aff neg() const; + inline bool plain_is_empty() const; + inline bool plain_is_equal(const isl::multi_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::pw_multi_aff &pma2) const; + inline bool plain_is_equal(const isl::union_pw_multi_aff &upma2) const; + inline bool plain_is_equal(const isl::multi_aff &pma2) const; + inline bool plain_is_equal(const isl::pw_aff &pma2) const; + inline isl::pw_multi_aff preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const; + inline isl::multi_pw_aff product(const isl::multi_pw_aff &multi2) const; + inline isl::pw_multi_aff product(isl::pw_multi_aff pma2) const; + inline isl::pw_multi_aff product(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff product(const isl::pw_aff &pma2) const; + inline isl::multi_pw_aff pullback(const isl::multi_pw_aff &mpa2) const; + inline isl::pw_multi_aff pullback(isl::multi_aff ma) const; + inline isl::pw_multi_aff pullback(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff pullback(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::pw_multi_aff range_factor_domain() const; + inline isl::pw_multi_aff range_factor_range() const; + static inline isl::pw_multi_aff range_map(isl::space space); + inline isl::multi_pw_aff range_product(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff range_product(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff range_product(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff range_product(const isl::pw_aff &pma2) const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::multi_pw_aff reset_range_tuple_id() const; + inline isl::pw_multi_aff scale(isl::multi_val mv) const; + inline isl::pw_multi_aff scale(isl::val v) const; + inline isl::pw_multi_aff scale(long v) const; + inline isl::pw_multi_aff scale_down(isl::multi_val mv) const; + inline isl::pw_multi_aff scale_down(isl::val v) const; + inline isl::pw_multi_aff scale_down(long v) const; + inline isl::multi_pw_aff set_at(int pos, const isl::pw_aff &el) const; + inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const; + inline isl::pw_multi_aff set_range_tuple(isl::id id) const; + inline isl::pw_multi_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_pw_aff sub(const isl::multi_pw_aff &multi2) const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::pw_multi_aff sub(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff sub(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff sub(const isl::pw_aff &pma2) const; + inline isl::pw_multi_aff subtract_domain(isl::set set) const; + inline isl::union_pw_multi_aff subtract_domain(const isl::space &space) const; + inline isl::union_pw_multi_aff subtract_domain(const isl::union_set &uset) const; + inline isl::pw_multi_aff subtract_domain(const isl::basic_set &set) const; + inline isl::pw_multi_aff subtract_domain(const isl::point &set) const; + inline isl::pw_multi_aff_list to_list() const; + inline isl::multi_pw_aff to_multi_pw_aff() const; + inline isl::union_pw_multi_aff to_union_pw_multi_aff() const; + inline isl::multi_pw_aff unbind_params_insert_domain(const isl::multi_id &domain) const; + inline isl::multi_pw_aff union_add(const isl::multi_pw_aff &mpa2) const; + inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const; + inline isl::pw_multi_aff union_add(isl::pw_multi_aff pma2) const; + inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const; + inline isl::pw_multi_aff union_add(const isl::multi_aff &pma2) const; + inline isl::pw_multi_aff union_add(const isl::pw_aff &pma2) const; + static inline isl::pw_multi_aff zero(isl::space space); +}; + +// declarations for isl::pw_multi_aff_list +inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); +inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); + +class pw_multi_aff_list { + friend inline pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr); + friend inline pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr); + + protected: + isl_pw_multi_aff_list *ptr = nullptr; + + inline explicit pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr); + + public: + inline /* implicit */ pw_multi_aff_list(); + inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj); + inline explicit pw_multi_aff_list(isl::ctx ctx, int n); + inline explicit pw_multi_aff_list(isl::pw_multi_aff el); + inline explicit pw_multi_aff_list(isl::ctx ctx, const std::string &str); + inline pw_multi_aff_list &operator=(pw_multi_aff_list obj); + inline ~pw_multi_aff_list(); + inline __isl_give isl_pw_multi_aff_list *copy() const &; + inline __isl_give isl_pw_multi_aff_list *copy() && = delete; + inline __isl_keep isl_pw_multi_aff_list *get() const; + inline __isl_give isl_pw_multi_aff_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::pw_multi_aff_list add(isl::pw_multi_aff el) const; + inline isl::pw_multi_aff at(int index) const; + inline isl::pw_multi_aff get_at(int index) const; + inline isl::pw_multi_aff_list clear() const; + inline isl::pw_multi_aff_list concat(isl::pw_multi_aff_list list2) const; + inline isl::pw_multi_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::pw_multi_aff_list insert(unsigned int pos, isl::pw_multi_aff el) const; + inline isl::pw_multi_aff_list set_at(int index, isl::pw_multi_aff el) const; + inline unsigned size() const; +}; + +// declarations for isl::schedule +inline schedule manage(__isl_take isl_schedule *ptr); +inline schedule manage_copy(__isl_keep isl_schedule *ptr); + +class schedule { + friend inline schedule manage(__isl_take isl_schedule *ptr); + friend inline schedule manage_copy(__isl_keep isl_schedule *ptr); + + protected: + isl_schedule *ptr = nullptr; + + inline explicit schedule(__isl_take isl_schedule *ptr); + + public: + inline /* implicit */ schedule(); + inline /* implicit */ schedule(const schedule &obj); + inline explicit schedule(isl::ctx ctx, const std::string &str); + inline schedule &operator=(schedule obj); + inline ~schedule(); + inline __isl_give isl_schedule *copy() const &; + inline __isl_give isl_schedule *copy() && = delete; + inline __isl_keep isl_schedule *get() const; + inline __isl_give isl_schedule *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_set domain() const; + inline isl::union_set get_domain() const; + static inline isl::schedule from_domain(isl::union_set domain); + inline isl::union_map map() const; + inline isl::union_map get_map() const; + inline isl::schedule pullback(isl::union_pw_multi_aff upma) const; + inline isl::schedule_node root() const; + inline isl::schedule_node get_root() const; +}; + +// declarations for isl::schedule_constraints +inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); +inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); + +class schedule_constraints { + friend inline schedule_constraints manage(__isl_take isl_schedule_constraints *ptr); + friend inline schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr); + + protected: + isl_schedule_constraints *ptr = nullptr; + + inline explicit schedule_constraints(__isl_take isl_schedule_constraints *ptr); + + public: + inline /* implicit */ schedule_constraints(); + inline /* implicit */ schedule_constraints(const schedule_constraints &obj); + inline explicit schedule_constraints(isl::ctx ctx, const std::string &str); + inline schedule_constraints &operator=(schedule_constraints obj); + inline ~schedule_constraints(); + inline __isl_give isl_schedule_constraints *copy() const &; + inline __isl_give isl_schedule_constraints *copy() && = delete; + inline __isl_keep isl_schedule_constraints *get() const; + inline __isl_give isl_schedule_constraints *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_map coincidence() const; + inline isl::union_map get_coincidence() const; + inline isl::schedule compute_schedule() const; + inline isl::union_map conditional_validity() const; + inline isl::union_map get_conditional_validity() const; + inline isl::union_map conditional_validity_condition() const; + inline isl::union_map get_conditional_validity_condition() const; + inline isl::set context() const; + inline isl::set get_context() const; + inline isl::union_set domain() const; + inline isl::union_set get_domain() const; + static inline isl::schedule_constraints on_domain(isl::union_set domain); + inline isl::union_map proximity() const; + inline isl::union_map get_proximity() const; + inline isl::schedule_constraints set_coincidence(isl::union_map coincidence) const; + inline isl::schedule_constraints set_conditional_validity(isl::union_map condition, isl::union_map validity) const; + inline isl::schedule_constraints set_context(isl::set context) const; + inline isl::schedule_constraints set_proximity(isl::union_map proximity) const; + inline isl::schedule_constraints set_validity(isl::union_map validity) const; + inline isl::union_map validity() const; + inline isl::union_map get_validity() const; +}; + +// declarations for isl::schedule_node +inline schedule_node manage(__isl_take isl_schedule_node *ptr); +inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); + +class schedule_node { + friend inline schedule_node manage(__isl_take isl_schedule_node *ptr); + friend inline schedule_node manage_copy(__isl_keep isl_schedule_node *ptr); + + protected: + isl_schedule_node *ptr = nullptr; + + inline explicit schedule_node(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node(); + inline /* implicit */ schedule_node(const schedule_node &obj); + inline schedule_node &operator=(schedule_node obj); + inline ~schedule_node(); + inline __isl_give isl_schedule_node *copy() const &; + inline __isl_give isl_schedule_node *copy() && = delete; + inline __isl_keep isl_schedule_node *get() const; + inline __isl_give isl_schedule_node *release(); + inline bool is_null() const; + private: + template ::value>::type> + inline bool isa_type(T subtype) const; + public: + template inline bool isa() const; + template inline T as() const; + inline isl::ctx ctx() const; + + inline isl::schedule_node ancestor(int generation) const; + inline unsigned ancestor_child_position(const isl::schedule_node &ancestor) const; + inline unsigned get_ancestor_child_position(const isl::schedule_node &ancestor) const; + inline isl::schedule_node child(int pos) const; + inline unsigned child_position() const; + inline unsigned get_child_position() const; + inline bool every_descendant(const std::function &test) const; + inline isl::schedule_node first_child() const; + inline void foreach_ancestor_top_down(const std::function &fn) const; + inline void foreach_descendant_top_down(const std::function &fn) const; + static inline isl::schedule_node from_domain(isl::union_set domain); + static inline isl::schedule_node from_extension(isl::union_map extension); + inline isl::schedule_node graft_after(isl::schedule_node graft) const; + inline isl::schedule_node graft_before(isl::schedule_node graft) const; + inline bool has_children() const; + inline bool has_next_sibling() const; + inline bool has_parent() const; + inline bool has_previous_sibling() const; + inline isl::schedule_node insert_context(isl::set context) const; + inline isl::schedule_node insert_filter(isl::union_set filter) const; + inline isl::schedule_node insert_guard(isl::set context) const; + inline isl::schedule_node insert_mark(isl::id mark) const; + inline isl::schedule_node insert_mark(const std::string &mark) const; + inline isl::schedule_node insert_partial_schedule(isl::multi_union_pw_aff schedule) const; + inline isl::schedule_node insert_sequence(isl::union_set_list filters) const; + inline isl::schedule_node insert_set(isl::union_set_list filters) const; + inline bool is_equal(const isl::schedule_node &node2) const; + inline bool is_subtree_anchored() const; + inline isl::schedule_node map_descendant_bottom_up(const std::function &fn) const; + inline unsigned n_children() const; + inline isl::schedule_node next_sibling() const; + inline isl::schedule_node order_after(isl::union_set filter) const; + inline isl::schedule_node order_before(isl::union_set filter) const; + inline isl::schedule_node parent() const; + inline isl::multi_union_pw_aff prefix_schedule_multi_union_pw_aff() const; + inline isl::multi_union_pw_aff get_prefix_schedule_multi_union_pw_aff() const; + inline isl::union_map prefix_schedule_union_map() const; + inline isl::union_map get_prefix_schedule_union_map() const; + inline isl::union_pw_multi_aff prefix_schedule_union_pw_multi_aff() const; + inline isl::union_pw_multi_aff get_prefix_schedule_union_pw_multi_aff() const; + inline isl::schedule_node previous_sibling() const; + inline isl::schedule_node root() const; + inline isl::schedule schedule() const; + inline isl::schedule get_schedule() const; + inline isl::schedule_node shared_ancestor(const isl::schedule_node &node2) const; + inline isl::schedule_node get_shared_ancestor(const isl::schedule_node &node2) const; + inline unsigned tree_depth() const; + inline unsigned get_tree_depth() const; +}; + +// declarations for isl::schedule_node_band + +class schedule_node_band : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_band schedule_node::as() const; + static const auto type = isl_schedule_node_band; + + protected: + inline explicit schedule_node_band(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_band(); + inline /* implicit */ schedule_node_band(const schedule_node_band &obj); + inline schedule_node_band &operator=(schedule_node_band obj); + inline isl::ctx ctx() const; + + inline isl::union_set ast_build_options() const; + inline isl::union_set get_ast_build_options() const; + inline isl::set ast_isolate_option() const; + inline isl::set get_ast_isolate_option() const; + inline bool member_get_coincident(int pos) const; + inline schedule_node_band member_set_coincident(int pos, int coincident) const; + inline schedule_node_band mod(isl::multi_val mv) const; + inline unsigned n_member() const; + inline isl::multi_union_pw_aff partial_schedule() const; + inline isl::multi_union_pw_aff get_partial_schedule() const; + inline bool permutable() const; + inline bool get_permutable() const; + inline schedule_node_band scale(isl::multi_val mv) const; + inline schedule_node_band scale_down(isl::multi_val mv) const; + inline schedule_node_band set_ast_build_options(isl::union_set options) const; + inline schedule_node_band set_permutable(int permutable) const; + inline schedule_node_band shift(isl::multi_union_pw_aff shift) const; + inline schedule_node_band split(int pos) const; + inline schedule_node_band tile(isl::multi_val sizes) const; + inline schedule_node_band member_set_ast_loop_default(int pos) const; + inline schedule_node_band member_set_ast_loop_atomic(int pos) const; + inline schedule_node_band member_set_ast_loop_unroll(int pos) const; + inline schedule_node_band member_set_ast_loop_separate(int pos) const; +}; + +// declarations for isl::schedule_node_context + +class schedule_node_context : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_context schedule_node::as() const; + static const auto type = isl_schedule_node_context; + + protected: + inline explicit schedule_node_context(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_context(); + inline /* implicit */ schedule_node_context(const schedule_node_context &obj); + inline schedule_node_context &operator=(schedule_node_context obj); + inline isl::ctx ctx() const; + + inline isl::set context() const; + inline isl::set get_context() const; +}; + +// declarations for isl::schedule_node_domain + +class schedule_node_domain : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_domain schedule_node::as() const; + static const auto type = isl_schedule_node_domain; + + protected: + inline explicit schedule_node_domain(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_domain(); + inline /* implicit */ schedule_node_domain(const schedule_node_domain &obj); + inline schedule_node_domain &operator=(schedule_node_domain obj); + inline isl::ctx ctx() const; + + inline isl::union_set domain() const; + inline isl::union_set get_domain() const; +}; + +// declarations for isl::schedule_node_expansion + +class schedule_node_expansion : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_expansion schedule_node::as() const; + static const auto type = isl_schedule_node_expansion; + + protected: + inline explicit schedule_node_expansion(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_expansion(); + inline /* implicit */ schedule_node_expansion(const schedule_node_expansion &obj); + inline schedule_node_expansion &operator=(schedule_node_expansion obj); + inline isl::ctx ctx() const; + + inline isl::union_pw_multi_aff contraction() const; + inline isl::union_pw_multi_aff get_contraction() const; + inline isl::union_map expansion() const; + inline isl::union_map get_expansion() const; +}; + +// declarations for isl::schedule_node_extension + +class schedule_node_extension : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_extension schedule_node::as() const; + static const auto type = isl_schedule_node_extension; + + protected: + inline explicit schedule_node_extension(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_extension(); + inline /* implicit */ schedule_node_extension(const schedule_node_extension &obj); + inline schedule_node_extension &operator=(schedule_node_extension obj); + inline isl::ctx ctx() const; + + inline isl::union_map extension() const; + inline isl::union_map get_extension() const; +}; + +// declarations for isl::schedule_node_filter + +class schedule_node_filter : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_filter schedule_node::as() const; + static const auto type = isl_schedule_node_filter; + + protected: + inline explicit schedule_node_filter(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_filter(); + inline /* implicit */ schedule_node_filter(const schedule_node_filter &obj); + inline schedule_node_filter &operator=(schedule_node_filter obj); + inline isl::ctx ctx() const; + + inline isl::union_set filter() const; + inline isl::union_set get_filter() const; +}; + +// declarations for isl::schedule_node_guard + +class schedule_node_guard : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_guard schedule_node::as() const; + static const auto type = isl_schedule_node_guard; + + protected: + inline explicit schedule_node_guard(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_guard(); + inline /* implicit */ schedule_node_guard(const schedule_node_guard &obj); + inline schedule_node_guard &operator=(schedule_node_guard obj); + inline isl::ctx ctx() const; + + inline isl::set guard() const; + inline isl::set get_guard() const; +}; + +// declarations for isl::schedule_node_leaf + +class schedule_node_leaf : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_leaf schedule_node::as() const; + static const auto type = isl_schedule_node_leaf; + + protected: + inline explicit schedule_node_leaf(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_leaf(); + inline /* implicit */ schedule_node_leaf(const schedule_node_leaf &obj); + inline schedule_node_leaf &operator=(schedule_node_leaf obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_mark + +class schedule_node_mark : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_mark schedule_node::as() const; + static const auto type = isl_schedule_node_mark; + + protected: + inline explicit schedule_node_mark(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_mark(); + inline /* implicit */ schedule_node_mark(const schedule_node_mark &obj); + inline schedule_node_mark &operator=(schedule_node_mark obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_sequence + +class schedule_node_sequence : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_sequence schedule_node::as() const; + static const auto type = isl_schedule_node_sequence; + + protected: + inline explicit schedule_node_sequence(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_sequence(); + inline /* implicit */ schedule_node_sequence(const schedule_node_sequence &obj); + inline schedule_node_sequence &operator=(schedule_node_sequence obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::schedule_node_set + +class schedule_node_set : public schedule_node { + template + friend bool schedule_node::isa() const; + friend schedule_node_set schedule_node::as() const; + static const auto type = isl_schedule_node_set; + + protected: + inline explicit schedule_node_set(__isl_take isl_schedule_node *ptr); + + public: + inline /* implicit */ schedule_node_set(); + inline /* implicit */ schedule_node_set(const schedule_node_set &obj); + inline schedule_node_set &operator=(schedule_node_set obj); + inline isl::ctx ctx() const; + +}; + +// declarations for isl::set +inline set manage(__isl_take isl_set *ptr); +inline set manage_copy(__isl_keep isl_set *ptr); + +class set { + friend inline set manage(__isl_take isl_set *ptr); + friend inline set manage_copy(__isl_keep isl_set *ptr); + + protected: + isl_set *ptr = nullptr; + + inline explicit set(__isl_take isl_set *ptr); + + public: + inline /* implicit */ set(); + inline /* implicit */ set(const set &obj); + inline /* implicit */ set(isl::basic_set bset); + inline /* implicit */ set(isl::point pnt); + inline explicit set(isl::ctx ctx, const std::string &str); + inline set &operator=(set obj); + inline ~set(); + inline __isl_give isl_set *copy() const &; + inline __isl_give isl_set *copy() && = delete; + inline __isl_keep isl_set *get() const; + inline __isl_give isl_set *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::basic_set affine_hull() const; + inline isl::set apply(isl::map map) const; + inline isl::union_set apply(const isl::union_map &umap) const; + inline isl::set apply(const isl::basic_map &map) const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::set as_set() const; + inline isl::set bind(isl::multi_id tuple) const; + inline isl::set coalesce() const; + inline isl::set complement() const; + inline isl::union_set compute_divs() const; + inline isl::set detect_equalities() const; + inline isl::val dim_max_val(int pos) const; + inline isl::val dim_min_val(int pos) const; + inline isl::set drop_unused_params() const; + static inline isl::set empty(isl::space space); + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(const isl::space &space) const; + inline isl::set flatten() const; + inline void foreach_basic_set(const std::function &fn) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &fn) const; + inline isl::set gist(isl::set context) const; + inline isl::union_set gist(const isl::union_set &context) const; + inline isl::set gist(const isl::basic_set &context) const; + inline isl::set gist(const isl::point &context) const; + inline isl::set gist_params(isl::set context) const; + inline isl::map identity() const; + inline isl::pw_aff indicator_function() const; + inline isl::map insert_domain(isl::space domain) const; + inline isl::set intersect(isl::set set2) const; + inline isl::union_set intersect(const isl::union_set &uset2) const; + inline isl::set intersect(const isl::basic_set &set2) const; + inline isl::set intersect(const isl::point &set2) const; + inline isl::set intersect_params(isl::set params) const; + inline bool involves_locals() const; + inline bool is_disjoint(const isl::set &set2) const; + inline bool is_disjoint(const isl::union_set &uset2) const; + inline bool is_disjoint(const isl::basic_set &set2) const; + inline bool is_disjoint(const isl::point &set2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::set &set2) const; + inline bool is_equal(const isl::union_set &uset2) const; + inline bool is_equal(const isl::basic_set &set2) const; + inline bool is_equal(const isl::point &set2) const; + inline bool is_singleton() const; + inline bool is_strict_subset(const isl::set &set2) const; + inline bool is_strict_subset(const isl::union_set &uset2) const; + inline bool is_strict_subset(const isl::basic_set &set2) const; + inline bool is_strict_subset(const isl::point &set2) const; + inline bool is_subset(const isl::set &set2) const; + inline bool is_subset(const isl::union_set &uset2) const; + inline bool is_subset(const isl::basic_set &set2) const; + inline bool is_subset(const isl::point &set2) const; + inline bool is_wrapping() const; + inline bool isa_set() const; + inline isl::fixed_box lattice_tile() const; + inline isl::fixed_box get_lattice_tile() const; + inline isl::set lexmax() const; + inline isl::pw_multi_aff lexmax_pw_multi_aff() const; + inline isl::set lexmin() const; + inline isl::pw_multi_aff lexmin_pw_multi_aff() const; + inline isl::set lower_bound(isl::multi_pw_aff lower) const; + inline isl::set lower_bound(isl::multi_val lower) const; + inline isl::multi_pw_aff max_multi_pw_aff() const; + inline isl::val max_val(const isl::aff &obj) const; + inline isl::multi_pw_aff min_multi_pw_aff() const; + inline isl::val min_val(const isl::aff &obj) const; + inline unsigned n_basic_set() const; + inline isl::pw_aff param_pw_aff_on_domain(isl::id id) const; + inline isl::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline isl::set params() const; + inline isl::multi_val plain_multi_val_if_fixed() const; + inline isl::multi_val get_plain_multi_val_if_fixed() const; + inline isl::basic_set polyhedral_hull() const; + inline isl::set preimage(isl::multi_aff ma) const; + inline isl::set preimage(isl::multi_pw_aff mpa) const; + inline isl::set preimage(isl::pw_multi_aff pma) const; + inline isl::union_set preimage(const isl::union_pw_multi_aff &upma) const; + inline isl::set product(isl::set set2) const; + inline isl::set project_out_all_params() const; + inline isl::set project_out_param(isl::id id) const; + inline isl::set project_out_param(const std::string &id) const; + inline isl::set project_out_param(isl::id_list list) const; + inline isl::pw_aff pw_aff_on_domain(isl::val v) const; + inline isl::pw_aff pw_aff_on_domain(long v) const; + inline isl::pw_multi_aff pw_multi_aff_on_domain(isl::multi_val mv) const; + inline isl::basic_set sample() const; + inline isl::point sample_point() const; + inline isl::set_list set_list() const; + inline isl::fixed_box simple_fixed_box_hull() const; + inline isl::fixed_box get_simple_fixed_box_hull() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::val stride(int pos) const; + inline isl::val get_stride(int pos) const; + inline isl::set subtract(isl::set set2) const; + inline isl::union_set subtract(const isl::union_set &uset2) const; + inline isl::set subtract(const isl::basic_set &set2) const; + inline isl::set subtract(const isl::point &set2) const; + inline isl::set_list to_list() const; + inline isl::union_set to_union_set() const; + inline isl::map translation() const; + inline unsigned tuple_dim() const; + inline isl::set unbind_params(isl::multi_id tuple) const; + inline isl::map unbind_params_insert_domain(isl::multi_id domain) const; + inline isl::set unite(isl::set set2) const; + inline isl::union_set unite(const isl::union_set &uset2) const; + inline isl::set unite(const isl::basic_set &set2) const; + inline isl::set unite(const isl::point &set2) const; + static inline isl::set universe(isl::space space); + inline isl::basic_set unshifted_simple_hull() const; + inline isl::map unwrap() const; + inline isl::set upper_bound(isl::multi_pw_aff upper) const; + inline isl::set upper_bound(isl::multi_val upper) const; + inline isl::set wrapped_reverse() const; +}; + +// declarations for isl::set_list +inline set_list manage(__isl_take isl_set_list *ptr); +inline set_list manage_copy(__isl_keep isl_set_list *ptr); + +class set_list { + friend inline set_list manage(__isl_take isl_set_list *ptr); + friend inline set_list manage_copy(__isl_keep isl_set_list *ptr); + + protected: + isl_set_list *ptr = nullptr; + + inline explicit set_list(__isl_take isl_set_list *ptr); + + public: + inline /* implicit */ set_list(); + inline /* implicit */ set_list(const set_list &obj); + inline explicit set_list(isl::ctx ctx, int n); + inline explicit set_list(isl::set el); + inline explicit set_list(isl::ctx ctx, const std::string &str); + inline set_list &operator=(set_list obj); + inline ~set_list(); + inline __isl_give isl_set_list *copy() const &; + inline __isl_give isl_set_list *copy() && = delete; + inline __isl_keep isl_set_list *get() const; + inline __isl_give isl_set_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::set_list add(isl::set el) const; + inline isl::set at(int index) const; + inline isl::set get_at(int index) const; + inline isl::set_list clear() const; + inline isl::set_list concat(isl::set_list list2) const; + inline isl::set_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::set_list insert(unsigned int pos, isl::set el) const; + inline isl::set_list set_at(int index, isl::set el) const; + inline unsigned size() const; +}; + +// declarations for isl::space +inline space manage(__isl_take isl_space *ptr); +inline space manage_copy(__isl_keep isl_space *ptr); + +class space { + friend inline space manage(__isl_take isl_space *ptr); + friend inline space manage_copy(__isl_keep isl_space *ptr); + + protected: + isl_space *ptr = nullptr; + + inline explicit space(__isl_take isl_space *ptr); + + public: + inline /* implicit */ space(); + inline /* implicit */ space(const space &obj); + inline explicit space(isl::ctx ctx, const std::string &str); + inline space &operator=(space obj); + inline ~space(); + inline __isl_give isl_space *copy() const &; + inline __isl_give isl_space *copy() && = delete; + inline __isl_keep isl_space *get() const; + inline __isl_give isl_space *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::space add_named_tuple(isl::id tuple_id, unsigned int dim) const; + inline isl::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const; + inline isl::space add_param(isl::id id) const; + inline isl::space add_param(const std::string &id) const; + inline isl::space add_unnamed_tuple(unsigned int dim) const; + inline isl::space curry() const; + inline isl::space domain() const; + inline isl::multi_aff domain_map_multi_aff() const; + inline isl::pw_multi_aff domain_map_pw_multi_aff() const; + inline isl::space domain_reverse() const; + inline isl::id domain_tuple_id() const; + inline isl::id get_domain_tuple_id() const; + inline isl::space drop_all_params() const; + inline isl::space flatten_domain() const; + inline isl::space flatten_range() const; + inline bool has_domain_tuple_id() const; + inline bool has_range_tuple_id() const; + inline isl::multi_aff identity_multi_aff_on_domain() const; + inline isl::multi_pw_aff identity_multi_pw_aff_on_domain() const; + inline isl::pw_multi_aff identity_pw_multi_aff_on_domain() const; + inline bool is_equal(const isl::space &space2) const; + inline bool is_wrapping() const; + inline isl::space map_from_set() const; + inline isl::multi_aff multi_aff(isl::aff_list list) const; + inline isl::multi_aff multi_aff_on_domain(isl::multi_val mv) const; + inline isl::multi_id multi_id(isl::id_list list) const; + inline isl::multi_pw_aff multi_pw_aff(isl::pw_aff_list list) const; + inline isl::multi_union_pw_aff multi_union_pw_aff(isl::union_pw_aff_list list) const; + inline isl::multi_val multi_val(isl::val_list list) const; + inline isl::aff param_aff_on_domain(isl::id id) const; + inline isl::aff param_aff_on_domain(const std::string &id) const; + inline isl::space params() const; + inline isl::space product(isl::space right) const; + inline isl::space range() const; + inline isl::multi_aff range_map_multi_aff() const; + inline isl::pw_multi_aff range_map_pw_multi_aff() const; + inline isl::space range_reverse() const; + inline isl::id range_tuple_id() const; + inline isl::id get_range_tuple_id() const; + inline isl::space reverse() const; + inline isl::space set_domain_tuple(isl::id id) const; + inline isl::space set_domain_tuple(const std::string &id) const; + inline isl::space set_range_tuple(isl::id id) const; + inline isl::space set_range_tuple(const std::string &id) const; + inline isl::space uncurry() const; + static inline isl::space unit(isl::ctx ctx); + inline isl::map universe_map() const; + inline isl::set universe_set() const; + inline isl::space unwrap() const; + inline isl::space wrap() const; + inline isl::space wrapped_reverse() const; + inline isl::aff zero_aff_on_domain() const; + inline isl::multi_aff zero_multi_aff() const; + inline isl::multi_pw_aff zero_multi_pw_aff() const; + inline isl::multi_union_pw_aff zero_multi_union_pw_aff() const; + inline isl::multi_val zero_multi_val() const; +}; + +// declarations for isl::union_access_info +inline union_access_info manage(__isl_take isl_union_access_info *ptr); +inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); + +class union_access_info { + friend inline union_access_info manage(__isl_take isl_union_access_info *ptr); + friend inline union_access_info manage_copy(__isl_keep isl_union_access_info *ptr); + + protected: + isl_union_access_info *ptr = nullptr; + + inline explicit union_access_info(__isl_take isl_union_access_info *ptr); + + public: + inline /* implicit */ union_access_info(); + inline /* implicit */ union_access_info(const union_access_info &obj); + inline explicit union_access_info(isl::union_map sink); + inline union_access_info &operator=(union_access_info obj); + inline ~union_access_info(); + inline __isl_give isl_union_access_info *copy() const &; + inline __isl_give isl_union_access_info *copy() && = delete; + inline __isl_keep isl_union_access_info *get() const; + inline __isl_give isl_union_access_info *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_flow compute_flow() const; + inline isl::union_access_info set_kill(isl::union_map kill) const; + inline isl::union_access_info set_may_source(isl::union_map may_source) const; + inline isl::union_access_info set_must_source(isl::union_map must_source) const; + inline isl::union_access_info set_schedule(isl::schedule schedule) const; + inline isl::union_access_info set_schedule_map(isl::union_map schedule_map) const; +}; + +// declarations for isl::union_flow +inline union_flow manage(__isl_take isl_union_flow *ptr); +inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); + +class union_flow { + friend inline union_flow manage(__isl_take isl_union_flow *ptr); + friend inline union_flow manage_copy(__isl_keep isl_union_flow *ptr); + + protected: + isl_union_flow *ptr = nullptr; + + inline explicit union_flow(__isl_take isl_union_flow *ptr); + + public: + inline /* implicit */ union_flow(); + inline /* implicit */ union_flow(const union_flow &obj); + inline union_flow &operator=(union_flow obj); + inline ~union_flow(); + inline __isl_give isl_union_flow *copy() const &; + inline __isl_give isl_union_flow *copy() && = delete; + inline __isl_keep isl_union_flow *get() const; + inline __isl_give isl_union_flow *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_map full_may_dependence() const; + inline isl::union_map get_full_may_dependence() const; + inline isl::union_map full_must_dependence() const; + inline isl::union_map get_full_must_dependence() const; + inline isl::union_map may_dependence() const; + inline isl::union_map get_may_dependence() const; + inline isl::union_map may_no_source() const; + inline isl::union_map get_may_no_source() const; + inline isl::union_map must_dependence() const; + inline isl::union_map get_must_dependence() const; + inline isl::union_map must_no_source() const; + inline isl::union_map get_must_no_source() const; +}; + +// declarations for isl::union_map +inline union_map manage(__isl_take isl_union_map *ptr); +inline union_map manage_copy(__isl_keep isl_union_map *ptr); + +class union_map { + friend inline union_map manage(__isl_take isl_union_map *ptr); + friend inline union_map manage_copy(__isl_keep isl_union_map *ptr); + + protected: + isl_union_map *ptr = nullptr; + + inline explicit union_map(__isl_take isl_union_map *ptr); + + public: + inline /* implicit */ union_map(); + inline /* implicit */ union_map(const union_map &obj); + inline /* implicit */ union_map(isl::basic_map bmap); + inline /* implicit */ union_map(isl::map map); + inline explicit union_map(isl::ctx ctx, const std::string &str); + inline union_map &operator=(union_map obj); + inline ~union_map(); + inline __isl_give isl_union_map *copy() const &; + inline __isl_give isl_union_map *copy() && = delete; + inline __isl_keep isl_union_map *get() const; + inline __isl_give isl_union_map *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_map affine_hull() const; + inline isl::union_map apply_domain(isl::union_map umap2) const; + inline isl::union_map apply_range(isl::union_map umap2) const; + inline isl::map as_map() const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::union_pw_multi_aff as_union_pw_multi_aff() const; + inline isl::union_set bind_range(isl::multi_id tuple) const; + inline isl::union_map coalesce() const; + inline isl::union_map compute_divs() const; + inline isl::union_map curry() const; + inline isl::union_set deltas() const; + inline isl::union_map detect_equalities() const; + inline isl::union_set domain() const; + inline isl::union_map domain_factor_domain() const; + inline isl::union_map domain_factor_range() const; + inline isl::union_map domain_map() const; + inline isl::union_pw_multi_aff domain_map_union_pw_multi_aff() const; + inline isl::union_map domain_product(isl::union_map umap2) const; + inline isl::union_map domain_reverse() const; + inline isl::union_map drop_unused_params() const; + static inline isl::union_map empty(isl::ctx ctx); + inline isl::union_map eq_at(isl::multi_union_pw_aff mupa) const; + inline bool every_map(const std::function &test) const; + inline isl::map extract_map(isl::space space) const; + inline isl::union_map factor_domain() const; + inline isl::union_map factor_range() const; + inline isl::union_map fixed_power(isl::val exp) const; + inline isl::union_map fixed_power(long exp) const; + inline void foreach_map(const std::function &fn) const; + static inline isl::union_map from(isl::multi_union_pw_aff mupa); + static inline isl::union_map from(isl::union_pw_multi_aff upma); + static inline isl::union_map from_domain(isl::union_set uset); + static inline isl::union_map from_domain_and_range(isl::union_set domain, isl::union_set range); + static inline isl::union_map from_range(isl::union_set uset); + inline isl::union_map gist(isl::union_map context) const; + inline isl::union_map gist_domain(isl::union_set uset) const; + inline isl::union_map gist_params(isl::set set) const; + inline isl::union_map gist_range(isl::union_set uset) const; + inline isl::union_map intersect(isl::union_map umap2) const; + inline isl::union_map intersect_domain(isl::space space) const; + inline isl::union_map intersect_domain(isl::union_set uset) const; + inline isl::union_map intersect_domain_factor_domain(isl::union_map factor) const; + inline isl::union_map intersect_domain_factor_range(isl::union_map factor) const; + inline isl::union_map intersect_domain_wrapped_domain(isl::union_set domain) const; + inline isl::union_map intersect_params(isl::set set) const; + inline isl::union_map intersect_range(isl::space space) const; + inline isl::union_map intersect_range(isl::union_set uset) const; + inline isl::union_map intersect_range_factor_domain(isl::union_map factor) const; + inline isl::union_map intersect_range_factor_range(isl::union_map factor) const; + inline isl::union_map intersect_range_wrapped_domain(isl::union_set domain) const; + inline bool is_bijective() const; + inline bool is_disjoint(const isl::union_map &umap2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::union_map &umap2) const; + inline bool is_injective() const; + inline bool is_single_valued() const; + inline bool is_strict_subset(const isl::union_map &umap2) const; + inline bool is_subset(const isl::union_map &umap2) const; + inline bool isa_map() const; + inline isl::union_map lexmax() const; + inline isl::union_map lexmin() const; + inline isl::map_list map_list() const; + inline isl::map_list get_map_list() const; + inline isl::set params() const; + inline isl::union_map polyhedral_hull() const; + inline isl::union_map preimage_domain(isl::multi_aff ma) const; + inline isl::union_map preimage_domain(isl::multi_pw_aff mpa) const; + inline isl::union_map preimage_domain(isl::pw_multi_aff pma) const; + inline isl::union_map preimage_domain(isl::union_pw_multi_aff upma) const; + inline isl::union_map preimage_range(isl::multi_aff ma) const; + inline isl::union_map preimage_range(isl::pw_multi_aff pma) const; + inline isl::union_map preimage_range(isl::union_pw_multi_aff upma) const; + inline isl::union_map product(isl::union_map umap2) const; + inline isl::union_map project_out_all_params() const; + inline isl::union_map project_out_param(isl::id id) const; + inline isl::union_map project_out_param(const std::string &id) const; + inline isl::union_map project_out_param(isl::id_list list) const; + inline isl::union_set range() const; + inline isl::union_map range_factor_domain() const; + inline isl::union_map range_factor_range() const; + inline isl::union_map range_map() const; + inline isl::union_map range_product(isl::union_map umap2) const; + inline isl::union_map range_reverse() const; + inline isl::union_map reverse() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::union_map subtract(isl::union_map umap2) const; + inline isl::union_map subtract_domain(isl::union_set dom) const; + inline isl::union_map subtract_range(isl::union_set dom) const; + inline isl::union_map uncurry() const; + inline isl::union_map unite(isl::union_map umap2) const; + inline isl::union_map universe() const; + inline isl::union_set wrap() const; + inline isl::union_map zip() const; +}; + +// declarations for isl::union_pw_aff +inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); +inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); + +class union_pw_aff { + friend inline union_pw_aff manage(__isl_take isl_union_pw_aff *ptr); + friend inline union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr); + + protected: + isl_union_pw_aff *ptr = nullptr; + + inline explicit union_pw_aff(__isl_take isl_union_pw_aff *ptr); + + public: + inline /* implicit */ union_pw_aff(); + inline /* implicit */ union_pw_aff(const union_pw_aff &obj); + inline /* implicit */ union_pw_aff(isl::aff aff); + inline /* implicit */ union_pw_aff(isl::pw_aff pa); + inline explicit union_pw_aff(isl::ctx ctx, const std::string &str); + inline union_pw_aff &operator=(union_pw_aff obj); + inline ~union_pw_aff(); + inline __isl_give isl_union_pw_aff *copy() const &; + inline __isl_give isl_union_pw_aff *copy() && = delete; + inline __isl_keep isl_union_pw_aff *get() const; + inline __isl_give isl_union_pw_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::multi_union_pw_aff add(const isl::multi_union_pw_aff &multi2) const; + inline isl::union_pw_aff add(isl::union_pw_aff upa2) const; + inline isl::union_pw_multi_aff add(const isl::union_pw_multi_aff &upma2) const; + inline isl::union_pw_aff add(const isl::aff &upa2) const; + inline isl::union_pw_aff add(const isl::pw_aff &upa2) const; + inline isl::union_pw_multi_aff apply(const isl::union_pw_multi_aff &upma2) const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::union_map as_union_map() const; + inline isl::union_pw_aff at(int pos) const; + inline isl::union_set bind(const isl::multi_id &tuple) const; + inline isl::union_set bind(isl::id id) const; + inline isl::union_set bind(const std::string &id) const; + inline isl::union_pw_aff coalesce() const; + inline isl::union_set domain() const; + inline isl::union_pw_aff drop_unused_params() const; + inline isl::pw_multi_aff extract_pw_multi_aff(const isl::space &space) const; + inline isl::multi_union_pw_aff flat_range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::union_pw_multi_aff flat_range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::union_pw_aff gist(isl::union_set context) const; + inline isl::multi_union_pw_aff gist_params(const isl::set &context) const; + inline bool has_range_tuple_id() const; + inline isl::union_pw_aff intersect_domain(isl::space space) const; + inline isl::union_pw_aff intersect_domain(isl::union_set uset) const; + inline isl::union_pw_aff intersect_domain_wrapped_domain(isl::union_set uset) const; + inline isl::union_pw_aff intersect_domain_wrapped_range(isl::union_set uset) const; + inline isl::union_pw_aff intersect_params(isl::set set) const; + inline bool involves_locals() const; + inline bool involves_nan() const; + inline bool isa_pw_multi_aff() const; + inline isl::union_pw_aff_list list() const; + inline isl::multi_union_pw_aff neg() const; + inline bool plain_is_empty() const; + inline bool plain_is_equal(const isl::multi_union_pw_aff &multi2) const; + inline bool plain_is_equal(const isl::union_pw_aff &upa2) const; + inline bool plain_is_equal(const isl::union_pw_multi_aff &upma2) const; + inline bool plain_is_equal(const isl::aff &upa2) const; + inline bool plain_is_equal(const isl::pw_aff &upa2) const; + inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const; + inline isl::union_pw_aff pullback(isl::union_pw_multi_aff upma) const; + inline isl::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::union_pw_multi_aff range_factor_domain() const; + inline isl::union_pw_multi_aff range_factor_range() const; + inline isl::multi_union_pw_aff range_product(const isl::multi_union_pw_aff &multi2) const; + inline isl::union_pw_multi_aff range_product(const isl::union_pw_multi_aff &upma2) const; + inline isl::id range_tuple_id() const; + inline isl::multi_union_pw_aff reset_range_tuple_id() const; + inline isl::multi_union_pw_aff scale(const isl::multi_val &mv) const; + inline isl::multi_union_pw_aff scale(const isl::val &v) const; + inline isl::multi_union_pw_aff scale(long v) const; + inline isl::multi_union_pw_aff scale_down(const isl::multi_val &mv) const; + inline isl::multi_union_pw_aff scale_down(const isl::val &v) const; + inline isl::multi_union_pw_aff scale_down(long v) const; + inline isl::multi_union_pw_aff set_at(int pos, const isl::union_pw_aff &el) const; + inline isl::multi_union_pw_aff set_range_tuple(const isl::id &id) const; + inline isl::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline unsigned size() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::multi_union_pw_aff sub(const isl::multi_union_pw_aff &multi2) const; + inline isl::union_pw_aff sub(isl::union_pw_aff upa2) const; + inline isl::union_pw_multi_aff sub(const isl::union_pw_multi_aff &upma2) const; + inline isl::union_pw_aff sub(const isl::aff &upa2) const; + inline isl::union_pw_aff sub(const isl::pw_aff &upa2) const; + inline isl::union_pw_aff subtract_domain(isl::space space) const; + inline isl::union_pw_aff subtract_domain(isl::union_set uset) const; + inline isl::union_pw_aff_list to_list() const; + inline isl::multi_union_pw_aff union_add(const isl::multi_union_pw_aff &mupa2) const; + inline isl::union_pw_aff union_add(isl::union_pw_aff upa2) const; + inline isl::union_pw_multi_aff union_add(const isl::union_pw_multi_aff &upma2) const; + inline isl::union_pw_aff union_add(const isl::aff &upa2) const; + inline isl::union_pw_aff union_add(const isl::pw_aff &upa2) const; +}; + +// declarations for isl::union_pw_aff_list +inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); +inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); + +class union_pw_aff_list { + friend inline union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr); + friend inline union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr); + + protected: + isl_union_pw_aff_list *ptr = nullptr; + + inline explicit union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr); + + public: + inline /* implicit */ union_pw_aff_list(); + inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj); + inline explicit union_pw_aff_list(isl::ctx ctx, int n); + inline explicit union_pw_aff_list(isl::union_pw_aff el); + inline explicit union_pw_aff_list(isl::ctx ctx, const std::string &str); + inline union_pw_aff_list &operator=(union_pw_aff_list obj); + inline ~union_pw_aff_list(); + inline __isl_give isl_union_pw_aff_list *copy() const &; + inline __isl_give isl_union_pw_aff_list *copy() && = delete; + inline __isl_keep isl_union_pw_aff_list *get() const; + inline __isl_give isl_union_pw_aff_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_pw_aff_list add(isl::union_pw_aff el) const; + inline isl::union_pw_aff at(int index) const; + inline isl::union_pw_aff get_at(int index) const; + inline isl::union_pw_aff_list clear() const; + inline isl::union_pw_aff_list concat(isl::union_pw_aff_list list2) const; + inline isl::union_pw_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::union_pw_aff_list insert(unsigned int pos, isl::union_pw_aff el) const; + inline isl::union_pw_aff_list set_at(int index, isl::union_pw_aff el) const; + inline unsigned size() const; +}; + +// declarations for isl::union_pw_multi_aff +inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); +inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); + +class union_pw_multi_aff { + friend inline union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr); + friend inline union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr); + + protected: + isl_union_pw_multi_aff *ptr = nullptr; + + inline explicit union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr); + + public: + inline /* implicit */ union_pw_multi_aff(); + inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj); + inline /* implicit */ union_pw_multi_aff(isl::multi_aff ma); + inline /* implicit */ union_pw_multi_aff(isl::pw_multi_aff pma); + inline /* implicit */ union_pw_multi_aff(isl::union_pw_aff upa); + inline explicit union_pw_multi_aff(isl::ctx ctx, const std::string &str); + inline union_pw_multi_aff &operator=(union_pw_multi_aff obj); + inline ~union_pw_multi_aff(); + inline __isl_give isl_union_pw_multi_aff *copy() const &; + inline __isl_give isl_union_pw_multi_aff *copy() && = delete; + inline __isl_keep isl_union_pw_multi_aff *get() const; + inline __isl_give isl_union_pw_multi_aff *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_pw_multi_aff add(isl::union_pw_multi_aff upma2) const; + inline isl::union_pw_multi_aff apply(isl::union_pw_multi_aff upma2) const; + inline isl::multi_union_pw_aff as_multi_union_pw_aff() const; + inline isl::pw_multi_aff as_pw_multi_aff() const; + inline isl::union_map as_union_map() const; + inline isl::union_pw_multi_aff coalesce() const; + inline isl::union_set domain() const; + inline isl::union_pw_multi_aff drop_unused_params() const; + static inline isl::union_pw_multi_aff empty(isl::ctx ctx); + inline isl::pw_multi_aff extract_pw_multi_aff(isl::space space) const; + inline isl::union_pw_multi_aff flat_range_product(isl::union_pw_multi_aff upma2) const; + inline isl::union_pw_multi_aff gist(isl::union_set context) const; + inline isl::union_pw_multi_aff intersect_domain(isl::space space) const; + inline isl::union_pw_multi_aff intersect_domain(isl::union_set uset) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_domain(isl::union_set uset) const; + inline isl::union_pw_multi_aff intersect_domain_wrapped_range(isl::union_set uset) const; + inline isl::union_pw_multi_aff intersect_params(isl::set set) const; + inline bool involves_locals() const; + inline bool isa_pw_multi_aff() const; + inline bool plain_is_empty() const; + inline bool plain_is_equal(const isl::union_pw_multi_aff &upma2) const; + inline isl::union_pw_multi_aff preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const; + inline isl::union_pw_multi_aff pullback(isl::union_pw_multi_aff upma2) const; + inline isl::pw_multi_aff_list pw_multi_aff_list() const; + inline isl::pw_multi_aff_list get_pw_multi_aff_list() const; + inline isl::union_pw_multi_aff range_factor_domain() const; + inline isl::union_pw_multi_aff range_factor_range() const; + inline isl::union_pw_multi_aff range_product(isl::union_pw_multi_aff upma2) const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::union_pw_multi_aff sub(isl::union_pw_multi_aff upma2) const; + inline isl::union_pw_multi_aff subtract_domain(isl::space space) const; + inline isl::union_pw_multi_aff subtract_domain(isl::union_set uset) const; + inline isl::union_pw_multi_aff union_add(isl::union_pw_multi_aff upma2) const; +}; + +// declarations for isl::union_set +inline union_set manage(__isl_take isl_union_set *ptr); +inline union_set manage_copy(__isl_keep isl_union_set *ptr); + +class union_set { + friend inline union_set manage(__isl_take isl_union_set *ptr); + friend inline union_set manage_copy(__isl_keep isl_union_set *ptr); + + protected: + isl_union_set *ptr = nullptr; + + inline explicit union_set(__isl_take isl_union_set *ptr); + + public: + inline /* implicit */ union_set(); + inline /* implicit */ union_set(const union_set &obj); + inline /* implicit */ union_set(isl::basic_set bset); + inline /* implicit */ union_set(isl::point pnt); + inline /* implicit */ union_set(isl::set set); + inline explicit union_set(isl::ctx ctx, const std::string &str); + inline union_set &operator=(union_set obj); + inline ~union_set(); + inline __isl_give isl_union_set *copy() const &; + inline __isl_give isl_union_set *copy() && = delete; + inline __isl_keep isl_union_set *get() const; + inline __isl_give isl_union_set *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_set affine_hull() const; + inline isl::union_set apply(isl::union_map umap) const; + inline isl::set as_set() const; + inline isl::union_set coalesce() const; + inline isl::union_set compute_divs() const; + inline isl::union_set detect_equalities() const; + inline isl::union_set drop_unused_params() const; + static inline isl::union_set empty(isl::ctx ctx); + inline bool every_set(const std::function &test) const; + inline isl::set extract_set(isl::space space) const; + inline void foreach_point(const std::function &fn) const; + inline void foreach_set(const std::function &fn) const; + inline isl::union_set gist(isl::union_set context) const; + inline isl::union_set gist_params(isl::set set) const; + inline isl::union_map identity() const; + inline isl::union_set intersect(isl::union_set uset2) const; + inline isl::union_set intersect_params(isl::set set) const; + inline bool is_disjoint(const isl::union_set &uset2) const; + inline bool is_empty() const; + inline bool is_equal(const isl::union_set &uset2) const; + inline bool is_strict_subset(const isl::union_set &uset2) const; + inline bool is_subset(const isl::union_set &uset2) const; + inline bool isa_set() const; + inline isl::union_set lexmax() const; + inline isl::union_set lexmin() const; + inline isl::set params() const; + inline isl::union_set polyhedral_hull() const; + inline isl::union_set preimage(isl::multi_aff ma) const; + inline isl::union_set preimage(isl::pw_multi_aff pma) const; + inline isl::union_set preimage(isl::union_pw_multi_aff upma) const; + inline isl::union_set project_out_all_params() const; + inline isl::point sample_point() const; + inline isl::set_list set_list() const; + inline isl::set_list get_set_list() const; + inline isl::space space() const; + inline isl::space get_space() const; + inline isl::union_set subtract(isl::union_set uset2) const; + inline isl::union_set_list to_list() const; + inline isl::union_set unite(isl::union_set uset2) const; + inline isl::union_set universe() const; + inline isl::union_map unwrap() const; +}; + +// declarations for isl::union_set_list +inline union_set_list manage(__isl_take isl_union_set_list *ptr); +inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); + +class union_set_list { + friend inline union_set_list manage(__isl_take isl_union_set_list *ptr); + friend inline union_set_list manage_copy(__isl_keep isl_union_set_list *ptr); + + protected: + isl_union_set_list *ptr = nullptr; + + inline explicit union_set_list(__isl_take isl_union_set_list *ptr); + + public: + inline /* implicit */ union_set_list(); + inline /* implicit */ union_set_list(const union_set_list &obj); + inline explicit union_set_list(isl::ctx ctx, int n); + inline explicit union_set_list(isl::union_set el); + inline explicit union_set_list(isl::ctx ctx, const std::string &str); + inline union_set_list &operator=(union_set_list obj); + inline ~union_set_list(); + inline __isl_give isl_union_set_list *copy() const &; + inline __isl_give isl_union_set_list *copy() && = delete; + inline __isl_keep isl_union_set_list *get() const; + inline __isl_give isl_union_set_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::union_set_list add(isl::union_set el) const; + inline isl::union_set at(int index) const; + inline isl::union_set get_at(int index) const; + inline isl::union_set_list clear() const; + inline isl::union_set_list concat(isl::union_set_list list2) const; + inline isl::union_set_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::union_set_list insert(unsigned int pos, isl::union_set el) const; + inline isl::union_set_list set_at(int index, isl::union_set el) const; + inline unsigned size() const; +}; + +// declarations for isl::val +inline val manage(__isl_take isl_val *ptr); +inline val manage_copy(__isl_keep isl_val *ptr); + +class val { + friend inline val manage(__isl_take isl_val *ptr); + friend inline val manage_copy(__isl_keep isl_val *ptr); + + protected: + isl_val *ptr = nullptr; + + inline explicit val(__isl_take isl_val *ptr); + + public: + inline /* implicit */ val(); + inline /* implicit */ val(const val &obj); + inline explicit val(isl::ctx ctx, long i); + inline explicit val(isl::ctx ctx, const std::string &str); + inline val &operator=(val obj); + inline ~val(); + inline __isl_give isl_val *copy() const &; + inline __isl_give isl_val *copy() && = delete; + inline __isl_keep isl_val *get() const; + inline __isl_give isl_val *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::val abs() const; + inline bool abs_eq(const isl::val &v2) const; + inline bool abs_eq(long v2) const; + inline isl::val add(isl::val v2) const; + inline isl::val add(long v2) const; + inline isl::val ceil() const; + inline int cmp_si(long i) const; + inline long den_si() const; + inline long get_den_si() const; + inline isl::val div(isl::val v2) const; + inline isl::val div(long v2) const; + inline bool eq(const isl::val &v2) const; + inline bool eq(long v2) const; + inline isl::val floor() const; + inline isl::val gcd(isl::val v2) const; + inline isl::val gcd(long v2) const; + inline bool ge(const isl::val &v2) const; + inline bool ge(long v2) const; + inline bool gt(const isl::val &v2) const; + inline bool gt(long v2) const; + static inline isl::val infty(isl::ctx ctx); + inline isl::val inv() const; + inline bool is_divisible_by(const isl::val &v2) const; + inline bool is_divisible_by(long v2) const; + inline bool is_infty() const; + inline bool is_int() const; + inline bool is_nan() const; + inline bool is_neg() const; + inline bool is_neginfty() const; + inline bool is_negone() const; + inline bool is_nonneg() const; + inline bool is_nonpos() const; + inline bool is_one() const; + inline bool is_pos() const; + inline bool is_rat() const; + inline bool is_zero() const; + inline bool le(const isl::val &v2) const; + inline bool le(long v2) const; + inline bool lt(const isl::val &v2) const; + inline bool lt(long v2) const; + inline isl::val max(isl::val v2) const; + inline isl::val max(long v2) const; + inline isl::val min(isl::val v2) const; + inline isl::val min(long v2) const; + inline isl::val mod(isl::val v2) const; + inline isl::val mod(long v2) const; + inline isl::val mul(isl::val v2) const; + inline isl::val mul(long v2) const; + static inline isl::val nan(isl::ctx ctx); + inline bool ne(const isl::val &v2) const; + inline bool ne(long v2) const; + inline isl::val neg() const; + static inline isl::val neginfty(isl::ctx ctx); + static inline isl::val negone(isl::ctx ctx); + inline long num_si() const; + inline long get_num_si() const; + static inline isl::val one(isl::ctx ctx); + inline isl::val pow2() const; + inline int sgn() const; + inline isl::val sub(isl::val v2) const; + inline isl::val sub(long v2) const; + inline isl::val_list to_list() const; + inline isl::val trunc() const; + static inline isl::val zero(isl::ctx ctx); +}; + +// declarations for isl::val_list +inline val_list manage(__isl_take isl_val_list *ptr); +inline val_list manage_copy(__isl_keep isl_val_list *ptr); + +class val_list { + friend inline val_list manage(__isl_take isl_val_list *ptr); + friend inline val_list manage_copy(__isl_keep isl_val_list *ptr); + + protected: + isl_val_list *ptr = nullptr; + + inline explicit val_list(__isl_take isl_val_list *ptr); + + public: + inline /* implicit */ val_list(); + inline /* implicit */ val_list(const val_list &obj); + inline explicit val_list(isl::ctx ctx, int n); + inline explicit val_list(isl::val el); + inline explicit val_list(isl::ctx ctx, const std::string &str); + inline val_list &operator=(val_list obj); + inline ~val_list(); + inline __isl_give isl_val_list *copy() const &; + inline __isl_give isl_val_list *copy() && = delete; + inline __isl_keep isl_val_list *get() const; + inline __isl_give isl_val_list *release(); + inline bool is_null() const; + inline isl::ctx ctx() const; + + inline isl::val_list add(isl::val el) const; + inline isl::val_list add(long el) const; + inline isl::val at(int index) const; + inline isl::val get_at(int index) const; + inline isl::val_list clear() const; + inline isl::val_list concat(isl::val_list list2) const; + inline isl::val_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function &fn) const; + inline void foreach_scc(const std::function &follows, const std::function &fn) const; + inline isl::val_list insert(unsigned int pos, isl::val el) const; + inline isl::val_list insert(unsigned int pos, long el) const; + inline isl::val_list set_at(int index, isl::val el) const; + inline isl::val_list set_at(int index, long el) const; + inline unsigned size() const; +}; + +// implementations for isl::aff +aff manage(__isl_take isl_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return aff(ptr); +} +aff manage_copy(__isl_keep isl_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return aff(ptr); +} + +aff::aff(__isl_take isl_aff *ptr) + : ptr(ptr) {} + +aff::aff() + : ptr(nullptr) {} + +aff::aff(const aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +aff::aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +aff &aff::operator=(aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +aff::~aff() { + if (ptr) + isl_aff_free(ptr); +} + +__isl_give isl_aff *aff::copy() const & { + return isl_aff_copy(ptr); +} + +__isl_keep isl_aff *aff::get() const { + return ptr; +} + +__isl_give isl_aff *aff::release() { + isl_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx aff::ctx() const { + return isl::ctx(isl_aff_get_ctx(ptr)); +} + +isl::aff aff::add(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_add(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff aff::add(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).add(multi2); +} + +isl::multi_pw_aff aff::add(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).add(multi2); +} + +isl::multi_union_pw_aff aff::add(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).add(multi2); +} + +isl::pw_aff aff::add(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).add(pwaff2); +} + +isl::pw_multi_aff aff::add(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).add(pma2); +} + +isl::union_pw_aff aff::add(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).add(upa2); +} + +isl::union_pw_multi_aff aff::add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).add(upma2); +} + +isl::aff aff::add_constant(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_add_constant_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff aff::add_constant(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_constant(isl::val(ctx(), v)); +} + +isl::multi_aff aff::add_constant(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).add_constant(mv); +} + +isl::union_pw_multi_aff aff::apply(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).apply(upma2); +} + +isl::aff aff::as_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).as_aff(); +} + +isl::map aff::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).as_map(); +} + +isl::multi_aff aff::as_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).as_multi_aff(); +} + +isl::multi_union_pw_aff aff::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff aff::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).as_pw_multi_aff(); +} + +isl::set aff::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).as_set(); +} + +isl::union_map aff::as_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).as_union_map(); +} + +isl::aff aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).at(pos); +} + +isl::basic_set aff::bind(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_bind_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_set aff::bind(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->bind(isl::id(ctx(), id)); +} + +isl::basic_set aff::bind(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).bind(tuple); +} + +isl::pw_aff aff::bind_domain(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).bind_domain(tuple); +} + +isl::pw_aff aff::bind_domain_wrapped_domain(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).bind_domain_wrapped_domain(tuple); +} + +isl::aff aff::ceil() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_ceil(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).coalesce(); +} + +isl::pw_aff aff::cond(const isl::pw_aff &pwaff_true, const isl::pw_aff &pwaff_false) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).cond(pwaff_true, pwaff_false); +} + +isl::multi_val aff::constant_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).constant_multi_val(); +} + +isl::val aff::constant_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_get_constant_val(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val aff::get_constant_val() const +{ + return constant_val(); +} + +isl::aff aff::div(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_div(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff aff::div(const isl::pw_aff &pa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).div(pa2); +} + +isl::set aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).domain(); +} + +isl::aff aff::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff aff::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).drop_unused_params(); +} + +isl::set aff::eq_set(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_eq_set(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::eq_set(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).eq_set(pwaff2); +} + +isl::val aff::eval(isl::point pnt) const +{ + if (!ptr || pnt.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_eval(copy(), pnt.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff aff::extract_pw_multi_aff(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).extract_pw_multi_aff(space); +} + +isl::multi_aff aff::flat_range_product(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).flat_range_product(multi2); +} + +isl::multi_pw_aff aff::flat_range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).flat_range_product(multi2); +} + +isl::multi_union_pw_aff aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).flat_range_product(multi2); +} + +isl::pw_multi_aff aff::flat_range_product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).flat_range_product(pma2); +} + +isl::union_pw_multi_aff aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).flat_range_product(upma2); +} + +isl::aff aff::floor() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_floor(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void aff::foreach_piece(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).foreach_piece(fn); +} + +isl::set aff::ge_set(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_ge_set(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::ge_set(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).ge_set(pwaff2); +} + +isl::aff aff::gist(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff aff::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).gist(context); +} + +isl::aff aff::gist(const isl::basic_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::aff aff::gist(const isl::point &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::aff aff::gist_params(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_gist_params(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::gt_set(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_gt_set(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::gt_set(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).gt_set(pwaff2); +} + +bool aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).has_range_tuple_id(); +} + +isl::multi_aff aff::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).identity(); +} + +isl::pw_aff aff::insert_domain(const isl::space &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).insert_domain(domain); +} + +isl::pw_aff aff::intersect_domain(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).intersect_domain(set); +} + +isl::union_pw_aff aff::intersect_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).intersect_domain(space); +} + +isl::union_pw_aff aff::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).intersect_domain(uset); +} + +isl::union_pw_aff aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::union_pw_aff aff::intersect_domain_wrapped_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::pw_aff aff::intersect_params(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).intersect_params(set); +} + +bool aff::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).involves_locals(); +} + +bool aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).involves_nan(); +} + +bool aff::involves_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).involves_param(id); +} + +bool aff::involves_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->involves_param(isl::id(ctx(), id)); +} + +bool aff::involves_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).involves_param(list); +} + +bool aff::is_cst() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_is_cst(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool aff::isa_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).isa_aff(); +} + +bool aff::isa_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).isa_multi_aff(); +} + +bool aff::isa_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).isa_pw_multi_aff(); +} + +isl::set aff::le_set(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_le_set(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::le_set(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).le_set(pwaff2); +} + +isl::aff_list aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).list(); +} + +isl::set aff::lt_set(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_lt_set(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::lt_set(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).lt_set(pwaff2); +} + +isl::multi_pw_aff aff::max(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).max(multi2); +} + +isl::pw_aff aff::max(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).max(pwaff2); +} + +isl::multi_val aff::max_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).max_multi_val(); +} + +isl::val aff::max_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).max_val(); +} + +isl::multi_pw_aff aff::min(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).min(multi2); +} + +isl::pw_aff aff::min(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).min(pwaff2); +} + +isl::multi_val aff::min_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).min_multi_val(); +} + +isl::val aff::min_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).min_val(); +} + +isl::aff aff::mod(isl::val mod) const +{ + if (!ptr || mod.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_mod_val(copy(), mod.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff aff::mod(long mod) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->mod(isl::val(ctx(), mod)); +} + +isl::aff aff::mul(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_mul(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff aff::mul(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).mul(pwaff2); +} + +unsigned aff::n_piece() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).n_piece(); +} + +isl::set aff::ne_set(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_ne_set(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::ne_set(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).ne_set(pwaff2); +} + +isl::aff aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set aff::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).params(); +} + +bool aff::plain_is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_empty(); +} + +bool aff::plain_is_equal(const isl::aff &aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_plain_is_equal(get(), aff2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool aff::plain_is_equal(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).plain_is_equal(multi2); +} + +bool aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_equal(multi2); +} + +bool aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_equal(multi2); +} + +bool aff::plain_is_equal(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_equal(pwaff2); +} + +bool aff::plain_is_equal(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_equal(pma2); +} + +bool aff::plain_is_equal(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_equal(upa2); +} + +bool aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).plain_is_equal(upma2); +} + +isl::pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::union_pw_multi_aff aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::multi_aff aff::product(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).product(multi2); +} + +isl::multi_pw_aff aff::product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).product(multi2); +} + +isl::pw_multi_aff aff::product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).product(pma2); +} + +isl::aff aff::pullback(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_pullback_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff aff::pullback(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).pullback(mpa); +} + +isl::pw_aff aff::pullback(const isl::pw_multi_aff &pma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).pullback(pma); +} + +isl::union_pw_aff aff::pullback(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).pullback(upma); +} + +isl::aff aff::pullback(const isl::aff &ma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->pullback(isl::multi_aff(ma)); +} + +isl::pw_multi_aff_list aff::pw_multi_aff_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).pw_multi_aff_list(); +} + +isl::pw_multi_aff aff::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).range_factor_domain(); +} + +isl::pw_multi_aff aff::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).range_factor_range(); +} + +isl::multi_aff aff::range_product(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).range_product(multi2); +} + +isl::multi_pw_aff aff::range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).range_product(multi2); +} + +isl::multi_union_pw_aff aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).range_product(multi2); +} + +isl::pw_multi_aff aff::range_product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).range_product(pma2); +} + +isl::union_pw_multi_aff aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).range_product(upma2); +} + +isl::id aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).range_tuple_id(); +} + +isl::multi_aff aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).reset_range_tuple_id(); +} + +isl::aff aff::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_aff aff::scale(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).scale(mv); +} + +isl::aff aff::scale_down(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_scale_down_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff aff::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_aff aff::scale_down(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).scale_down(mv); +} + +isl::multi_aff aff::set_at(int pos, const isl::aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).set_at(pos, el); +} + +isl::multi_pw_aff aff::set_at(int pos, const isl::pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).set_at(pos, el); +} + +isl::multi_union_pw_aff aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).set_at(pos, el); +} + +isl::multi_aff aff::set_range_tuple(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).set_range_tuple(id); +} + +isl::multi_aff aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).size(); +} + +isl::space aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).space(); +} + +isl::aff aff::sub(isl::aff aff2) const +{ + if (!ptr || aff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_sub(copy(), aff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff aff::sub(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).sub(multi2); +} + +isl::multi_pw_aff aff::sub(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).sub(multi2); +} + +isl::multi_union_pw_aff aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).sub(multi2); +} + +isl::pw_aff aff::sub(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).sub(pwaff2); +} + +isl::pw_multi_aff aff::sub(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).sub(pma2); +} + +isl::union_pw_aff aff::sub(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).sub(upa2); +} + +isl::union_pw_multi_aff aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).sub(upma2); +} + +isl::pw_aff aff::subtract_domain(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).subtract_domain(set); +} + +isl::union_pw_aff aff::subtract_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).subtract_domain(space); +} + +isl::union_pw_aff aff::subtract_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).subtract_domain(uset); +} + +isl::pw_aff aff::tdiv_q(const isl::pw_aff &pa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).tdiv_q(pa2); +} + +isl::pw_aff aff::tdiv_r(const isl::pw_aff &pa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).tdiv_r(pa2); +} + +isl::aff_list aff::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff aff::to_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).to_multi_pw_aff(); +} + +isl::multi_union_pw_aff aff::to_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).to_multi_union_pw_aff(); +} + +isl::pw_multi_aff aff::to_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_aff(*this).to_pw_multi_aff(); +} + +isl::union_pw_aff aff::to_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).to_union_pw_aff(); +} + +isl::union_pw_multi_aff aff::to_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).to_union_pw_multi_aff(); +} + +isl::aff aff::unbind_params_insert_domain(isl::multi_id domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_unbind_params_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff aff::union_add(const isl::multi_pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).union_add(mpa2); +} + +isl::multi_union_pw_aff aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).union_add(mupa2); +} + +isl::pw_aff aff::union_add(const isl::pw_aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).union_add(pwaff2); +} + +isl::pw_multi_aff aff::union_add(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).union_add(pma2); +} + +isl::union_pw_aff aff::union_add(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).union_add(upa2); +} + +isl::union_pw_multi_aff aff::union_add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_aff(*this).union_add(upma2); +} + +isl::aff aff::zero_on_domain(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_zero_on_domain_space(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::aff_list +aff_list manage(__isl_take isl_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return aff_list(ptr); +} +aff_list manage_copy(__isl_keep isl_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_aff_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_aff_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return aff_list(ptr); +} + +aff_list::aff_list(__isl_take isl_aff_list *ptr) + : ptr(ptr) {} + +aff_list::aff_list() + : ptr(nullptr) {} + +aff_list::aff_list(const aff_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_aff_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +aff_list::aff_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +aff_list::aff_list(isl::aff el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_from_aff(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +aff_list::aff_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +aff_list &aff_list::operator=(aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +aff_list::~aff_list() { + if (ptr) + isl_aff_list_free(ptr); +} + +__isl_give isl_aff_list *aff_list::copy() const & { + return isl_aff_list_copy(ptr); +} + +__isl_keep isl_aff_list *aff_list::get() const { + return ptr; +} + +__isl_give isl_aff_list *aff_list::release() { + isl_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool aff_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx aff_list::ctx() const { + return isl::ctx(isl_aff_list_get_ctx(ptr)); +} + +isl::aff_list aff_list::add(isl::aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff aff_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff aff_list::get_at(int index) const +{ + return at(index); +} + +isl::aff_list aff_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff_list aff_list::concat(isl::aff_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff_list aff_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void aff_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_aff_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_aff *arg_0, isl_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::aff_list aff_list::insert(unsigned int pos, isl::aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff_list aff_list::set_at(int index, isl::aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned aff_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_aff_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const aff_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_aff_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_aff_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_build +ast_build manage(__isl_take isl_ast_build *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return ast_build(ptr); +} +ast_build manage_copy(__isl_keep isl_ast_build *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_build_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_ast_build_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return ast_build(ptr); +} + +ast_build::ast_build(__isl_take isl_ast_build *ptr) + : ptr(ptr) {} + +ast_build::ast_build() + : ptr(nullptr) {} + +ast_build::ast_build(const ast_build &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_build_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + copy_callbacks(obj); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +ast_build::ast_build(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_alloc(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +ast_build &ast_build::operator=(ast_build obj) { + std::swap(this->ptr, obj.ptr); + copy_callbacks(obj); + return *this; +} + +ast_build::~ast_build() { + if (ptr) + isl_ast_build_free(ptr); +} + +__isl_give isl_ast_build *ast_build::copy() const & { + return isl_ast_build_copy(ptr); +} + +__isl_keep isl_ast_build *ast_build::get() const { + return ptr; +} + +__isl_give isl_ast_build *ast_build::release() { + if (at_each_domain_data) + exception::throw_invalid("cannot release object with persistent callbacks", __FILE__, __LINE__); + isl_ast_build *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_build::is_null() const { + return ptr == nullptr; +} + +isl::ctx ast_build::ctx() const { + return isl::ctx(isl_ast_build_get_ctx(ptr)); +} + +ast_build &ast_build::copy_callbacks(const ast_build &obj) +{ + at_each_domain_data = obj.at_each_domain_data; + return *this; +} + +isl_ast_node *ast_build::at_each_domain(isl_ast_node *arg_0, isl_ast_build *arg_1, void *arg_2) +{ + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage(arg_0), manage_copy(arg_1)); + return ret.release(); + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return NULL; + } +} + +void ast_build::set_at_each_domain_data(const std::function &fn) +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_build_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + at_each_domain_data = std::make_shared(); + at_each_domain_data->func = fn; + ptr = isl_ast_build_set_at_each_domain(ptr, &at_each_domain, at_each_domain_data.get()); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +isl::ast_build ast_build::set_at_each_domain(const std::function &fn) const +{ + auto copy = *this; + copy.set_at_each_domain_data(fn); + return copy; +} + +isl::ast_expr ast_build::access_from(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_access_from_multi_pw_aff(get(), mpa.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_build::access_from(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_access_from_pw_multi_aff(get(), pma.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_build::call_from(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_call_from_multi_pw_aff(get(), mpa.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_build::call_from(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_call_from_pw_multi_aff(get(), pma.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_build::expr_from(isl::pw_aff pa) const +{ + if (!ptr || pa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_expr_from_pw_aff(get(), pa.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_build::expr_from(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_expr_from_set(get(), set.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_build ast_build::from_context(isl::set set) +{ + if (set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = set.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_from_context(set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_build::node_from(isl::schedule schedule) const +{ + if (!ptr || schedule.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_node_from_schedule(get(), schedule.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_build::node_from_schedule_map(isl::union_map schedule) const +{ + if (!ptr || schedule.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_node_from_schedule_map(get(), schedule.release()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map ast_build::schedule() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_build_get_schedule(get()); + if (at_each_domain_data && at_each_domain_data->eptr) { + std::exception_ptr eptr = at_each_domain_data->eptr; + at_each_domain_data->eptr = nullptr; + std::rethrow_exception(eptr); + } + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map ast_build::get_schedule() const +{ + return schedule(); +} + +// implementations for isl::ast_expr +ast_expr manage(__isl_take isl_ast_expr *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return ast_expr(ptr); +} +ast_expr manage_copy(__isl_keep isl_ast_expr *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_ast_expr_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return ast_expr(ptr); +} + +ast_expr::ast_expr(__isl_take isl_ast_expr *ptr) + : ptr(ptr) {} + +ast_expr::ast_expr() + : ptr(nullptr) {} + +ast_expr::ast_expr(const ast_expr &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +ast_expr &ast_expr::operator=(ast_expr obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +ast_expr::~ast_expr() { + if (ptr) + isl_ast_expr_free(ptr); +} + +__isl_give isl_ast_expr *ast_expr::copy() const & { + return isl_ast_expr_copy(ptr); +} + +__isl_keep isl_ast_expr *ast_expr::get() const { + return ptr; +} + +__isl_give isl_ast_expr *ast_expr::release() { + isl_ast_expr *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_expr::is_null() const { + return ptr == nullptr; +} + +template +bool ast_expr::isa_type(T subtype) const +{ + if (is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl_ast_expr_get_type(get()) == subtype; +} +template +bool ast_expr::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr::as() const +{ + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); +} + +isl::ctx ast_expr::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +std::string ast_expr::to_C_str() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_expr_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_id +ast_expr_id::ast_expr_id(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} + +ast_expr_id::ast_expr_id() + : ast_expr() {} + +ast_expr_id::ast_expr_id(const ast_expr_id &obj) + : ast_expr(obj) +{ +} + +ast_expr_id &ast_expr_id::operator=(ast_expr_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_id::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +isl::id ast_expr_id::id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_expr_id_get_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id ast_expr_id::get_id() const +{ + return id(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_id &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_int +ast_expr_int::ast_expr_int(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} + +ast_expr_int::ast_expr_int() + : ast_expr() {} + +ast_expr_int::ast_expr_int(const ast_expr_int &obj) + : ast_expr(obj) +{ +} + +ast_expr_int &ast_expr_int::operator=(ast_expr_int obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_int::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +isl::val ast_expr_int::val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_expr_int_get_val(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val ast_expr_int::get_val() const +{ + return val(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_int &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op +ast_expr_op::ast_expr_op(__isl_take isl_ast_expr *ptr) + : ast_expr(ptr) {} + +ast_expr_op::ast_expr_op() + : ast_expr() {} + +ast_expr_op::ast_expr_op(const ast_expr_op &obj) + : ast_expr(obj) +{ +} + +ast_expr_op &ast_expr_op::operator=(ast_expr_op obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +template +bool ast_expr_op::isa_type(T subtype) const +{ + if (is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl_ast_expr_op_get_type(get()) == subtype; +} +template +bool ast_expr_op::isa() const +{ + return isa_type(T::type); +} +template +T ast_expr_op::as() const +{ + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); +} + +isl::ctx ast_expr_op::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +isl::ast_expr ast_expr_op::arg(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_expr_op_get_arg(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_expr_op::get_arg(int pos) const +{ + return arg(pos); +} + +unsigned ast_expr_op::n_arg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_expr_op_get_n_arg(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +unsigned ast_expr_op::get_n_arg() const +{ + return n_arg(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_access +ast_expr_op_access::ast_expr_op_access(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_access::ast_expr_op_access() + : ast_expr_op() {} + +ast_expr_op_access::ast_expr_op_access(const ast_expr_op_access &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_access &ast_expr_op_access::operator=(ast_expr_op_access obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_access::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_access &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_add +ast_expr_op_add::ast_expr_op_add(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_add::ast_expr_op_add() + : ast_expr_op() {} + +ast_expr_op_add::ast_expr_op_add(const ast_expr_op_add &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_add &ast_expr_op_add::operator=(ast_expr_op_add obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_add::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_add &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_address_of +ast_expr_op_address_of::ast_expr_op_address_of(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_address_of::ast_expr_op_address_of() + : ast_expr_op() {} + +ast_expr_op_address_of::ast_expr_op_address_of(const ast_expr_op_address_of &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_address_of &ast_expr_op_address_of::operator=(ast_expr_op_address_of obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_address_of::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_address_of &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_and +ast_expr_op_and::ast_expr_op_and(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_and::ast_expr_op_and() + : ast_expr_op() {} + +ast_expr_op_and::ast_expr_op_and(const ast_expr_op_and &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_and &ast_expr_op_and::operator=(ast_expr_op_and obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_and::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_and_then +ast_expr_op_and_then::ast_expr_op_and_then(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_and_then::ast_expr_op_and_then() + : ast_expr_op() {} + +ast_expr_op_and_then::ast_expr_op_and_then(const ast_expr_op_and_then &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_and_then &ast_expr_op_and_then::operator=(ast_expr_op_and_then obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_and_then::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_and_then &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_call +ast_expr_op_call::ast_expr_op_call(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_call::ast_expr_op_call() + : ast_expr_op() {} + +ast_expr_op_call::ast_expr_op_call(const ast_expr_op_call &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_call &ast_expr_op_call::operator=(ast_expr_op_call obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_call::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_call &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_cond +ast_expr_op_cond::ast_expr_op_cond(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_cond::ast_expr_op_cond() + : ast_expr_op() {} + +ast_expr_op_cond::ast_expr_op_cond(const ast_expr_op_cond &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_cond &ast_expr_op_cond::operator=(ast_expr_op_cond obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_cond::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_cond &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_div +ast_expr_op_div::ast_expr_op_div(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_div::ast_expr_op_div() + : ast_expr_op() {} + +ast_expr_op_div::ast_expr_op_div(const ast_expr_op_div &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_div &ast_expr_op_div::operator=(ast_expr_op_div obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_div::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_div &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_eq +ast_expr_op_eq::ast_expr_op_eq(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_eq::ast_expr_op_eq() + : ast_expr_op() {} + +ast_expr_op_eq::ast_expr_op_eq(const ast_expr_op_eq &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_eq &ast_expr_op_eq::operator=(ast_expr_op_eq obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_eq::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_eq &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_fdiv_q +ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_fdiv_q::ast_expr_op_fdiv_q() + : ast_expr_op() {} + +ast_expr_op_fdiv_q::ast_expr_op_fdiv_q(const ast_expr_op_fdiv_q &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_fdiv_q &ast_expr_op_fdiv_q::operator=(ast_expr_op_fdiv_q obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_fdiv_q::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_fdiv_q &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_ge +ast_expr_op_ge::ast_expr_op_ge(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_ge::ast_expr_op_ge() + : ast_expr_op() {} + +ast_expr_op_ge::ast_expr_op_ge(const ast_expr_op_ge &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_ge &ast_expr_op_ge::operator=(ast_expr_op_ge obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_ge::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_ge &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_gt +ast_expr_op_gt::ast_expr_op_gt(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_gt::ast_expr_op_gt() + : ast_expr_op() {} + +ast_expr_op_gt::ast_expr_op_gt(const ast_expr_op_gt &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_gt &ast_expr_op_gt::operator=(ast_expr_op_gt obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_gt::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_gt &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_le +ast_expr_op_le::ast_expr_op_le(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_le::ast_expr_op_le() + : ast_expr_op() {} + +ast_expr_op_le::ast_expr_op_le(const ast_expr_op_le &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_le &ast_expr_op_le::operator=(ast_expr_op_le obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_le::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_le &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_lt +ast_expr_op_lt::ast_expr_op_lt(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_lt::ast_expr_op_lt() + : ast_expr_op() {} + +ast_expr_op_lt::ast_expr_op_lt(const ast_expr_op_lt &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_lt &ast_expr_op_lt::operator=(ast_expr_op_lt obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_lt::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_lt &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_max +ast_expr_op_max::ast_expr_op_max(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_max::ast_expr_op_max() + : ast_expr_op() {} + +ast_expr_op_max::ast_expr_op_max(const ast_expr_op_max &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_max &ast_expr_op_max::operator=(ast_expr_op_max obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_max::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_max &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_member +ast_expr_op_member::ast_expr_op_member(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_member::ast_expr_op_member() + : ast_expr_op() {} + +ast_expr_op_member::ast_expr_op_member(const ast_expr_op_member &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_member &ast_expr_op_member::operator=(ast_expr_op_member obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_member::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_member &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_min +ast_expr_op_min::ast_expr_op_min(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_min::ast_expr_op_min() + : ast_expr_op() {} + +ast_expr_op_min::ast_expr_op_min(const ast_expr_op_min &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_min &ast_expr_op_min::operator=(ast_expr_op_min obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_min::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_min &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_minus +ast_expr_op_minus::ast_expr_op_minus(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_minus::ast_expr_op_minus() + : ast_expr_op() {} + +ast_expr_op_minus::ast_expr_op_minus(const ast_expr_op_minus &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_minus &ast_expr_op_minus::operator=(ast_expr_op_minus obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_minus::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_minus &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_mul +ast_expr_op_mul::ast_expr_op_mul(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_mul::ast_expr_op_mul() + : ast_expr_op() {} + +ast_expr_op_mul::ast_expr_op_mul(const ast_expr_op_mul &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_mul &ast_expr_op_mul::operator=(ast_expr_op_mul obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_mul::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_mul &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_or +ast_expr_op_or::ast_expr_op_or(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_or::ast_expr_op_or() + : ast_expr_op() {} + +ast_expr_op_or::ast_expr_op_or(const ast_expr_op_or &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_or &ast_expr_op_or::operator=(ast_expr_op_or obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_or::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_or_else +ast_expr_op_or_else::ast_expr_op_or_else(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_or_else::ast_expr_op_or_else() + : ast_expr_op() {} + +ast_expr_op_or_else::ast_expr_op_or_else(const ast_expr_op_or_else &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_or_else &ast_expr_op_or_else::operator=(ast_expr_op_or_else obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_or_else::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_or_else &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_pdiv_q +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q() + : ast_expr_op() {} + +ast_expr_op_pdiv_q::ast_expr_op_pdiv_q(const ast_expr_op_pdiv_q &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_pdiv_q &ast_expr_op_pdiv_q::operator=(ast_expr_op_pdiv_q obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_pdiv_q::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_q &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_pdiv_r +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r() + : ast_expr_op() {} + +ast_expr_op_pdiv_r::ast_expr_op_pdiv_r(const ast_expr_op_pdiv_r &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_pdiv_r &ast_expr_op_pdiv_r::operator=(ast_expr_op_pdiv_r obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_pdiv_r::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_pdiv_r &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_select +ast_expr_op_select::ast_expr_op_select(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_select::ast_expr_op_select() + : ast_expr_op() {} + +ast_expr_op_select::ast_expr_op_select(const ast_expr_op_select &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_select &ast_expr_op_select::operator=(ast_expr_op_select obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_select::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_select &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_sub +ast_expr_op_sub::ast_expr_op_sub(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_sub::ast_expr_op_sub() + : ast_expr_op() {} + +ast_expr_op_sub::ast_expr_op_sub(const ast_expr_op_sub &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_sub &ast_expr_op_sub::operator=(ast_expr_op_sub obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_sub::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_sub &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_expr_op_zdiv_r +ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(__isl_take isl_ast_expr *ptr) + : ast_expr_op(ptr) {} + +ast_expr_op_zdiv_r::ast_expr_op_zdiv_r() + : ast_expr_op() {} + +ast_expr_op_zdiv_r::ast_expr_op_zdiv_r(const ast_expr_op_zdiv_r &obj) + : ast_expr_op(obj) +{ +} + +ast_expr_op_zdiv_r &ast_expr_op_zdiv_r::operator=(ast_expr_op_zdiv_r obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_expr_op_zdiv_r::ctx() const { + return isl::ctx(isl_ast_expr_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_expr_op_zdiv_r &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node +ast_node manage(__isl_take isl_ast_node *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return ast_node(ptr); +} +ast_node manage_copy(__isl_keep isl_ast_node *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_ast_node_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return ast_node(ptr); +} + +ast_node::ast_node(__isl_take isl_ast_node *ptr) + : ptr(ptr) {} + +ast_node::ast_node() + : ptr(nullptr) {} + +ast_node::ast_node(const ast_node &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +ast_node &ast_node::operator=(ast_node obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +ast_node::~ast_node() { + if (ptr) + isl_ast_node_free(ptr); +} + +__isl_give isl_ast_node *ast_node::copy() const & { + return isl_ast_node_copy(ptr); +} + +__isl_keep isl_ast_node *ast_node::get() const { + return ptr; +} + +__isl_give isl_ast_node *ast_node::release() { + isl_ast_node *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_node::is_null() const { + return ptr == nullptr; +} + +template +bool ast_node::isa_type(T subtype) const +{ + if (is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl_ast_node_get_type(get()) == subtype; +} +template +bool ast_node::isa() const +{ + return isa_type(T::type); +} +template +T ast_node::as() const +{ + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); +} + +isl::ctx ast_node::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::ast_node ast_node::map_descendant_bottom_up(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_ast_node * { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return NULL; + } + }; + auto res = isl_ast_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +std::string ast_node::to_C_str() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_to_C_str(get()); + std::string tmp(res); + free(res); + return tmp; +} + +isl::ast_node_list ast_node::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_block +ast_node_block::ast_node_block(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_block::ast_node_block() + : ast_node() {} + +ast_node_block::ast_node_block(const ast_node_block &obj) + : ast_node(obj) +{ +} + +ast_node_block::ast_node_block(isl::ast_node_list list) +{ + if (list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = list.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_block_from_children(list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +ast_node_block &ast_node_block::operator=(ast_node_block obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_node_block::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::ast_node_list ast_node_block::children() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_block_get_children(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node_list ast_node_block::get_children() const +{ + return children(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_block &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_for +ast_node_for::ast_node_for(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_for::ast_node_for() + : ast_node() {} + +ast_node_for::ast_node_for(const ast_node_for &obj) + : ast_node(obj) +{ +} + +ast_node_for &ast_node_for::operator=(ast_node_for obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_node_for::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::ast_node ast_node_for::body() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_for_get_body(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_node_for::get_body() const +{ + return body(); +} + +isl::ast_expr ast_node_for::cond() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_for_get_cond(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_node_for::get_cond() const +{ + return cond(); +} + +isl::ast_expr ast_node_for::inc() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_for_get_inc(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_node_for::get_inc() const +{ + return inc(); +} + +isl::ast_expr ast_node_for::init() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_for_get_init(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_node_for::get_init() const +{ + return init(); +} + +bool ast_node_for::is_degenerate() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_for_is_degenerate(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::ast_expr ast_node_for::iterator() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_for_get_iterator(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_node_for::get_iterator() const +{ + return iterator(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_for &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_if +ast_node_if::ast_node_if(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_if::ast_node_if() + : ast_node() {} + +ast_node_if::ast_node_if(const ast_node_if &obj) + : ast_node(obj) +{ +} + +ast_node_if &ast_node_if::operator=(ast_node_if obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_node_if::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::ast_expr ast_node_if::cond() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_if_get_cond(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_node_if::get_cond() const +{ + return cond(); +} + +isl::ast_node ast_node_if::else_node() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_if_get_else_node(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_node_if::get_else_node() const +{ + return else_node(); +} + +bool ast_node_if::has_else_node() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_if_has_else_node(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::ast_node ast_node_if::then_node() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_if_get_then_node(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_node_if::get_then_node() const +{ + return then_node(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_if &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_list +ast_node_list manage(__isl_take isl_ast_node_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return ast_node_list(ptr); +} +ast_node_list manage_copy(__isl_keep isl_ast_node_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_ast_node_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return ast_node_list(ptr); +} + +ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr) + : ptr(ptr) {} + +ast_node_list::ast_node_list() + : ptr(nullptr) {} + +ast_node_list::ast_node_list(const ast_node_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +ast_node_list::ast_node_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +ast_node_list::ast_node_list(isl::ast_node el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_from_ast_node(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +ast_node_list &ast_node_list::operator=(ast_node_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +ast_node_list::~ast_node_list() { + if (ptr) + isl_ast_node_list_free(ptr); +} + +__isl_give isl_ast_node_list *ast_node_list::copy() const & { + return isl_ast_node_list_copy(ptr); +} + +__isl_keep isl_ast_node_list *ast_node_list::get() const { + return ptr; +} + +__isl_give isl_ast_node_list *ast_node_list::release() { + isl_ast_node_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool ast_node_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx ast_node_list::ctx() const { + return isl::ctx(isl_ast_node_list_get_ctx(ptr)); +} + +isl::ast_node_list ast_node_list::add(isl::ast_node el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_node_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_node_list::get_at(int index) const +{ + return at(index); +} + +isl::ast_node_list ast_node_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node_list ast_node_list::concat(isl::ast_node_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node_list ast_node_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void ast_node_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_ast_node *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_ast_node_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void ast_node_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_ast_node *arg_0, isl_ast_node *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_ast_node_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_ast_node_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::ast_node_list ast_node_list::insert(unsigned int pos, isl::ast_node el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node_list ast_node_list::set_at(int index, isl::ast_node el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned ast_node_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_mark +ast_node_mark::ast_node_mark(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_mark::ast_node_mark() + : ast_node() {} + +ast_node_mark::ast_node_mark(const ast_node_mark &obj) + : ast_node(obj) +{ +} + +ast_node_mark &ast_node_mark::operator=(ast_node_mark obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_node_mark::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::id ast_node_mark::id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_mark_get_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id ast_node_mark::get_id() const +{ + return id(); +} + +isl::ast_node ast_node_mark::node() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_mark_get_node(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_node ast_node_mark::get_node() const +{ + return node(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_mark &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::ast_node_user +ast_node_user::ast_node_user(__isl_take isl_ast_node *ptr) + : ast_node(ptr) {} + +ast_node_user::ast_node_user() + : ast_node() {} + +ast_node_user::ast_node_user(const ast_node_user &obj) + : ast_node(obj) +{ +} + +ast_node_user::ast_node_user(isl::ast_expr expr) +{ + if (expr.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = expr.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_user_from_expr(expr.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +ast_node_user &ast_node_user::operator=(ast_node_user obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx ast_node_user::ctx() const { + return isl::ctx(isl_ast_node_get_ctx(ptr)); +} + +isl::ast_expr ast_node_user::expr() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_ast_node_user_get_expr(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::ast_expr ast_node_user::get_expr() const +{ + return expr(); +} + +inline std::ostream &operator<<(std::ostream &os, const ast_node_user &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_ast_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_ast_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::basic_map +basic_map manage(__isl_take isl_basic_map *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return basic_map(ptr); +} +basic_map manage_copy(__isl_keep isl_basic_map *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_basic_map_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_basic_map_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return basic_map(ptr); +} + +basic_map::basic_map(__isl_take isl_basic_map *ptr) + : ptr(ptr) {} + +basic_map::basic_map() + : ptr(nullptr) {} + +basic_map::basic_map(const basic_map &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_basic_map_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +basic_map::basic_map(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +basic_map &basic_map::operator=(basic_map obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +basic_map::~basic_map() { + if (ptr) + isl_basic_map_free(ptr); +} + +__isl_give isl_basic_map *basic_map::copy() const & { + return isl_basic_map_copy(ptr); +} + +__isl_keep isl_basic_map *basic_map::get() const { + return ptr; +} + +__isl_give isl_basic_map *basic_map::release() { + isl_basic_map *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool basic_map::is_null() const { + return ptr == nullptr; +} + +isl::ctx basic_map::ctx() const { + return isl::ctx(isl_basic_map_get_ctx(ptr)); +} + +isl::basic_map basic_map::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_affine_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map basic_map::apply_domain(isl::basic_map bmap2) const +{ + if (!ptr || bmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_apply_domain(copy(), bmap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::apply_domain(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).apply_domain(map2); +} + +isl::union_map basic_map::apply_domain(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).apply_domain(umap2); +} + +isl::basic_map basic_map::apply_range(isl::basic_map bmap2) const +{ + if (!ptr || bmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_apply_range(copy(), bmap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::apply_range(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).apply_range(map2); +} + +isl::union_map basic_map::apply_range(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).apply_range(umap2); +} + +isl::map basic_map::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).as_map(); +} + +isl::multi_union_pw_aff basic_map::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff basic_map::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).as_pw_multi_aff(); +} + +isl::union_pw_multi_aff basic_map::as_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).as_union_pw_multi_aff(); +} + +isl::set basic_map::bind_domain(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).bind_domain(tuple); +} + +isl::set basic_map::bind_range(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).bind_range(tuple); +} + +isl::map basic_map::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).coalesce(); +} + +isl::map basic_map::complement() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).complement(); +} + +isl::union_map basic_map::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).compute_divs(); +} + +isl::map basic_map::curry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).curry(); +} + +isl::basic_set basic_map::deltas() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_deltas(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map basic_map::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_detect_equalities(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set basic_map::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain(); +} + +isl::map basic_map::domain_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_factor_domain(); +} + +isl::map basic_map::domain_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_factor_range(); +} + +isl::union_map basic_map::domain_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_map(); +} + +isl::union_pw_multi_aff basic_map::domain_map_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_map_union_pw_multi_aff(); +} + +isl::map basic_map::domain_product(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_product(map2); +} + +isl::union_map basic_map::domain_product(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_product(umap2); +} + +isl::map basic_map::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_reverse(); +} + +unsigned basic_map::domain_tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_tuple_dim(); +} + +isl::id basic_map::domain_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).domain_tuple_id(); +} + +isl::map basic_map::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).drop_unused_params(); +} + +isl::map basic_map::eq_at(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).eq_at(mpa); +} + +isl::union_map basic_map::eq_at(const isl::multi_union_pw_aff &mupa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).eq_at(mupa); +} + +bool basic_map::every_map(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).every_map(test); +} + +isl::map basic_map::extract_map(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).extract_map(space); +} + +isl::map basic_map::factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).factor_domain(); +} + +isl::map basic_map::factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).factor_range(); +} + +isl::map basic_map::fixed_power(const isl::val &exp) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).fixed_power(exp); +} + +isl::map basic_map::fixed_power(long exp) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->fixed_power(isl::val(ctx(), exp)); +} + +isl::basic_map basic_map::flatten() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_flatten(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map basic_map::flatten_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_flatten_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map basic_map::flatten_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_flatten_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void basic_map::foreach_basic_map(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).foreach_basic_map(fn); +} + +void basic_map::foreach_map(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).foreach_map(fn); +} + +isl::basic_map basic_map::gist(isl::basic_map context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::gist(const isl::map &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).gist(context); +} + +isl::union_map basic_map::gist(const isl::union_map &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).gist(context); +} + +isl::map basic_map::gist_domain(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).gist_domain(context); +} + +isl::union_map basic_map::gist_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).gist_domain(uset); +} + +isl::map basic_map::gist_params(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).gist_params(context); +} + +isl::union_map basic_map::gist_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).gist_range(uset); +} + +bool basic_map::has_domain_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).has_domain_tuple_id(); +} + +bool basic_map::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).has_range_tuple_id(); +} + +isl::basic_map basic_map::intersect(isl::basic_map bmap2) const +{ + if (!ptr || bmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_intersect(copy(), bmap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::intersect(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect(map2); +} + +isl::union_map basic_map::intersect(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect(umap2); +} + +isl::basic_map basic_map::intersect_domain(isl::basic_set bset) const +{ + if (!ptr || bset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_intersect_domain(copy(), bset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::intersect_domain(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain(set); +} + +isl::union_map basic_map::intersect_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain(space); +} + +isl::union_map basic_map::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain(uset); +} + +isl::basic_map basic_map::intersect_domain(const isl::point &bset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::basic_set(bset)); +} + +isl::map basic_map::intersect_domain_factor_domain(const isl::map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain_factor_domain(factor); +} + +isl::union_map basic_map::intersect_domain_factor_domain(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain_factor_domain(factor); +} + +isl::map basic_map::intersect_domain_factor_range(const isl::map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain_factor_range(factor); +} + +isl::union_map basic_map::intersect_domain_factor_range(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain_factor_range(factor); +} + +isl::map basic_map::intersect_domain_wrapped_domain(const isl::set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain_wrapped_domain(domain); +} + +isl::union_map basic_map::intersect_domain_wrapped_domain(const isl::union_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_domain_wrapped_domain(domain); +} + +isl::map basic_map::intersect_params(const isl::set ¶ms) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_params(params); +} + +isl::basic_map basic_map::intersect_range(isl::basic_set bset) const +{ + if (!ptr || bset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_intersect_range(copy(), bset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::intersect_range(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range(set); +} + +isl::union_map basic_map::intersect_range(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range(space); +} + +isl::union_map basic_map::intersect_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range(uset); +} + +isl::basic_map basic_map::intersect_range(const isl::point &bset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range(isl::basic_set(bset)); +} + +isl::map basic_map::intersect_range_factor_domain(const isl::map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range_factor_domain(factor); +} + +isl::union_map basic_map::intersect_range_factor_domain(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range_factor_domain(factor); +} + +isl::map basic_map::intersect_range_factor_range(const isl::map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range_factor_range(factor); +} + +isl::union_map basic_map::intersect_range_factor_range(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range_factor_range(factor); +} + +isl::map basic_map::intersect_range_wrapped_domain(const isl::set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range_wrapped_domain(domain); +} + +isl::union_map basic_map::intersect_range_wrapped_domain(const isl::union_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).intersect_range_wrapped_domain(domain); +} + +bool basic_map::is_bijective() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_bijective(); +} + +bool basic_map::is_disjoint(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_disjoint(map2); +} + +bool basic_map::is_disjoint(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_disjoint(umap2); +} + +bool basic_map::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_map::is_equal(const isl::basic_map &bmap2) const +{ + if (!ptr || bmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_is_equal(get(), bmap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_map::is_equal(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_equal(map2); +} + +bool basic_map::is_equal(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_equal(umap2); +} + +bool basic_map::is_injective() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_injective(); +} + +bool basic_map::is_single_valued() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_single_valued(); +} + +bool basic_map::is_strict_subset(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_strict_subset(map2); +} + +bool basic_map::is_strict_subset(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_strict_subset(umap2); +} + +bool basic_map::is_subset(const isl::basic_map &bmap2) const +{ + if (!ptr || bmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_is_subset(get(), bmap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_map::is_subset(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_subset(map2); +} + +bool basic_map::is_subset(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).is_subset(umap2); +} + +bool basic_map::isa_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).isa_map(); +} + +isl::map basic_map::lex_ge_at(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lex_ge_at(mpa); +} + +isl::map basic_map::lex_gt_at(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lex_gt_at(mpa); +} + +isl::map basic_map::lex_le_at(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lex_le_at(mpa); +} + +isl::map basic_map::lex_lt_at(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lex_lt_at(mpa); +} + +isl::map basic_map::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_lexmax(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff basic_map::lexmax_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lexmax_pw_multi_aff(); +} + +isl::map basic_map::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_lexmin(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff basic_map::lexmin_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lexmin_pw_multi_aff(); +} + +isl::map basic_map::lower_bound(const isl::multi_pw_aff &lower) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).lower_bound(lower); +} + +isl::map_list basic_map::map_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).map_list(); +} + +isl::multi_pw_aff basic_map::max_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).max_multi_pw_aff(); +} + +isl::multi_pw_aff basic_map::min_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).min_multi_pw_aff(); +} + +unsigned basic_map::n_basic_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).n_basic_map(); +} + +isl::set basic_map::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).params(); +} + +isl::basic_map basic_map::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).polyhedral_hull(); +} + +isl::map basic_map::preimage_domain(const isl::multi_aff &ma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_domain(ma); +} + +isl::map basic_map::preimage_domain(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_domain(mpa); +} + +isl::map basic_map::preimage_domain(const isl::pw_multi_aff &pma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_domain(pma); +} + +isl::union_map basic_map::preimage_domain(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_domain(upma); +} + +isl::map basic_map::preimage_range(const isl::multi_aff &ma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_range(ma); +} + +isl::map basic_map::preimage_range(const isl::pw_multi_aff &pma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_range(pma); +} + +isl::union_map basic_map::preimage_range(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).preimage_range(upma); +} + +isl::map basic_map::product(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).product(map2); +} + +isl::union_map basic_map::product(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).product(umap2); +} + +isl::map basic_map::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).project_out_all_params(); +} + +isl::map basic_map::project_out_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).project_out_param(id); +} + +isl::map basic_map::project_out_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->project_out_param(isl::id(ctx(), id)); +} + +isl::map basic_map::project_out_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).project_out_param(list); +} + +isl::set basic_map::range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range(); +} + +isl::map basic_map::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_factor_domain(); +} + +isl::map basic_map::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_factor_range(); +} + +isl::fixed_box basic_map::range_lattice_tile() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_lattice_tile(); +} + +isl::union_map basic_map::range_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_map(); +} + +isl::map basic_map::range_product(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_product(map2); +} + +isl::union_map basic_map::range_product(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_product(umap2); +} + +isl::map basic_map::range_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_reverse(); +} + +isl::fixed_box basic_map::range_simple_fixed_box_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_simple_fixed_box_hull(); +} + +unsigned basic_map::range_tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_tuple_dim(); +} + +isl::id basic_map::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).range_tuple_id(); +} + +isl::basic_map basic_map::reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map basic_map::sample() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_sample(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::set_domain_tuple(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).set_domain_tuple(id); +} + +isl::map basic_map::set_domain_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_domain_tuple(isl::id(ctx(), id)); +} + +isl::map basic_map::set_range_tuple(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).set_range_tuple(id); +} + +isl::map basic_map::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +isl::space basic_map::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).space(); +} + +isl::map basic_map::subtract(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).subtract(map2); +} + +isl::union_map basic_map::subtract(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).subtract(umap2); +} + +isl::union_map basic_map::subtract_domain(const isl::union_set &dom) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).subtract_domain(dom); +} + +isl::union_map basic_map::subtract_range(const isl::union_set &dom) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).subtract_range(dom); +} + +isl::map_list basic_map::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).to_list(); +} + +isl::union_map basic_map::to_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).to_union_map(); +} + +isl::map basic_map::uncurry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).uncurry(); +} + +isl::map basic_map::unite(isl::basic_map bmap2) const +{ + if (!ptr || bmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_map_union(copy(), bmap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map basic_map::unite(const isl::map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).unite(map2); +} + +isl::union_map basic_map::unite(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).unite(umap2); +} + +isl::basic_map basic_map::unshifted_simple_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).unshifted_simple_hull(); +} + +isl::map basic_map::upper_bound(const isl::multi_pw_aff &upper) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).upper_bound(upper); +} + +isl::set basic_map::wrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).wrap(); +} + +isl::map basic_map::zip() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::map(*this).zip(); +} + +inline std::ostream &operator<<(std::ostream &os, const basic_map &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_basic_map_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_basic_map_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::basic_set +basic_set manage(__isl_take isl_basic_set *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return basic_set(ptr); +} +basic_set manage_copy(__isl_keep isl_basic_set *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_basic_set_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_basic_set_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return basic_set(ptr); +} + +basic_set::basic_set(__isl_take isl_basic_set *ptr) + : ptr(ptr) {} + +basic_set::basic_set() + : ptr(nullptr) {} + +basic_set::basic_set(const basic_set &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_basic_set_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +basic_set::basic_set(isl::point pnt) +{ + if (pnt.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pnt.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_from_point(pnt.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +basic_set::basic_set(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +basic_set &basic_set::operator=(basic_set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +basic_set::~basic_set() { + if (ptr) + isl_basic_set_free(ptr); +} + +__isl_give isl_basic_set *basic_set::copy() const & { + return isl_basic_set_copy(ptr); +} + +__isl_keep isl_basic_set *basic_set::get() const { + return ptr; +} + +__isl_give isl_basic_set *basic_set::release() { + isl_basic_set *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool basic_set::is_null() const { + return ptr == nullptr; +} + +isl::ctx basic_set::ctx() const { + return isl::ctx(isl_basic_set_get_ctx(ptr)); +} + +isl::basic_set basic_set::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_affine_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_set basic_set::apply(isl::basic_map bmap) const +{ + if (!ptr || bmap.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_apply(copy(), bmap.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set basic_set::apply(const isl::map &map) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).apply(map); +} + +isl::union_set basic_set::apply(const isl::union_map &umap) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).apply(umap); +} + +isl::pw_multi_aff basic_set::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).as_pw_multi_aff(); +} + +isl::set basic_set::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).as_set(); +} + +isl::set basic_set::bind(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).bind(tuple); +} + +isl::set basic_set::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).coalesce(); +} + +isl::set basic_set::complement() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).complement(); +} + +isl::union_set basic_set::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).compute_divs(); +} + +isl::basic_set basic_set::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_detect_equalities(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val basic_set::dim_max_val(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_dim_max_val(copy(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val basic_set::dim_min_val(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).dim_min_val(pos); +} + +isl::set basic_set::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).drop_unused_params(); +} + +bool basic_set::every_set(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).every_set(test); +} + +isl::set basic_set::extract_set(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).extract_set(space); +} + +isl::basic_set basic_set::flatten() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_flatten(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void basic_set::foreach_basic_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).foreach_basic_set(fn); +} + +void basic_set::foreach_point(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).foreach_point(fn); +} + +void basic_set::foreach_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).foreach_set(fn); +} + +isl::basic_set basic_set::gist(isl::basic_set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set basic_set::gist(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).gist(context); +} + +isl::union_set basic_set::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).gist(context); +} + +isl::basic_set basic_set::gist(const isl::point &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::basic_set(context)); +} + +isl::set basic_set::gist_params(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).gist_params(context); +} + +isl::map basic_set::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).identity(); +} + +isl::pw_aff basic_set::indicator_function() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).indicator_function(); +} + +isl::map basic_set::insert_domain(const isl::space &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).insert_domain(domain); +} + +isl::basic_set basic_set::intersect(isl::basic_set bset2) const +{ + if (!ptr || bset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_intersect(copy(), bset2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set basic_set::intersect(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).intersect(set2); +} + +isl::union_set basic_set::intersect(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).intersect(uset2); +} + +isl::basic_set basic_set::intersect(const isl::point &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect(isl::basic_set(bset2)); +} + +isl::basic_set basic_set::intersect_params(isl::basic_set bset2) const +{ + if (!ptr || bset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_intersect_params(copy(), bset2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set basic_set::intersect_params(const isl::set ¶ms) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).intersect_params(params); +} + +isl::basic_set basic_set::intersect_params(const isl::point &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_params(isl::basic_set(bset2)); +} + +bool basic_set::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).involves_locals(); +} + +bool basic_set::is_disjoint(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_disjoint(set2); +} + +bool basic_set::is_disjoint(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_disjoint(uset2); +} + +bool basic_set::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_set::is_equal(const isl::basic_set &bset2) const +{ + if (!ptr || bset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_is_equal(get(), bset2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_set::is_equal(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_equal(set2); +} + +bool basic_set::is_equal(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_equal(uset2); +} + +bool basic_set::is_equal(const isl::point &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_equal(isl::basic_set(bset2)); +} + +bool basic_set::is_singleton() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_singleton(); +} + +bool basic_set::is_strict_subset(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_strict_subset(set2); +} + +bool basic_set::is_strict_subset(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_strict_subset(uset2); +} + +bool basic_set::is_subset(const isl::basic_set &bset2) const +{ + if (!ptr || bset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_is_subset(get(), bset2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_set::is_subset(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_subset(set2); +} + +bool basic_set::is_subset(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).is_subset(uset2); +} + +bool basic_set::is_subset(const isl::point &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_subset(isl::basic_set(bset2)); +} + +bool basic_set::is_wrapping() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_is_wrapping(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool basic_set::isa_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).isa_set(); +} + +isl::fixed_box basic_set::lattice_tile() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).lattice_tile(); +} + +isl::set basic_set::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_lexmax(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff basic_set::lexmax_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).lexmax_pw_multi_aff(); +} + +isl::set basic_set::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_lexmin(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff basic_set::lexmin_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).lexmin_pw_multi_aff(); +} + +isl::set basic_set::lower_bound(const isl::multi_pw_aff &lower) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).lower_bound(lower); +} + +isl::set basic_set::lower_bound(const isl::multi_val &lower) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).lower_bound(lower); +} + +isl::multi_pw_aff basic_set::max_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).max_multi_pw_aff(); +} + +isl::val basic_set::max_val(const isl::aff &obj) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).max_val(obj); +} + +isl::multi_pw_aff basic_set::min_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).min_multi_pw_aff(); +} + +isl::val basic_set::min_val(const isl::aff &obj) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).min_val(obj); +} + +unsigned basic_set::n_basic_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).n_basic_set(); +} + +isl::pw_aff basic_set::param_pw_aff_on_domain(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).param_pw_aff_on_domain(id); +} + +isl::pw_aff basic_set::param_pw_aff_on_domain(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->param_pw_aff_on_domain(isl::id(ctx(), id)); +} + +isl::basic_set basic_set::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val basic_set::plain_multi_val_if_fixed() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).plain_multi_val_if_fixed(); +} + +isl::basic_set basic_set::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).polyhedral_hull(); +} + +isl::set basic_set::preimage(const isl::multi_aff &ma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).preimage(ma); +} + +isl::set basic_set::preimage(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).preimage(mpa); +} + +isl::set basic_set::preimage(const isl::pw_multi_aff &pma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).preimage(pma); +} + +isl::union_set basic_set::preimage(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).preimage(upma); +} + +isl::set basic_set::product(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).product(set2); +} + +isl::set basic_set::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).project_out_all_params(); +} + +isl::set basic_set::project_out_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).project_out_param(id); +} + +isl::set basic_set::project_out_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->project_out_param(isl::id(ctx(), id)); +} + +isl::set basic_set::project_out_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).project_out_param(list); +} + +isl::pw_aff basic_set::pw_aff_on_domain(const isl::val &v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).pw_aff_on_domain(v); +} + +isl::pw_aff basic_set::pw_aff_on_domain(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->pw_aff_on_domain(isl::val(ctx(), v)); +} + +isl::pw_multi_aff basic_set::pw_multi_aff_on_domain(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).pw_multi_aff_on_domain(mv); +} + +isl::basic_set basic_set::sample() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_sample(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::point basic_set::sample_point() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_sample_point(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list basic_set::set_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).set_list(); +} + +isl::fixed_box basic_set::simple_fixed_box_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).simple_fixed_box_hull(); +} + +isl::space basic_set::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).space(); +} + +isl::val basic_set::stride(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).stride(pos); +} + +isl::set basic_set::subtract(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).subtract(set2); +} + +isl::union_set basic_set::subtract(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).subtract(uset2); +} + +isl::set_list basic_set::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).to_list(); +} + +isl::set basic_set::to_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_to_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set basic_set::to_union_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).to_union_set(); +} + +isl::map basic_set::translation() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).translation(); +} + +unsigned basic_set::tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).tuple_dim(); +} + +isl::set basic_set::unbind_params(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).unbind_params(tuple); +} + +isl::map basic_set::unbind_params_insert_domain(const isl::multi_id &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).unbind_params_insert_domain(domain); +} + +isl::set basic_set::unite(isl::basic_set bset2) const +{ + if (!ptr || bset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_basic_set_union(copy(), bset2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set basic_set::unite(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).unite(set2); +} + +isl::union_set basic_set::unite(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).unite(uset2); +} + +isl::set basic_set::unite(const isl::point &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->unite(isl::basic_set(bset2)); +} + +isl::basic_set basic_set::unshifted_simple_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).unshifted_simple_hull(); +} + +isl::map basic_set::unwrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).unwrap(); +} + +isl::set basic_set::upper_bound(const isl::multi_pw_aff &upper) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).upper_bound(upper); +} + +isl::set basic_set::upper_bound(const isl::multi_val &upper) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).upper_bound(upper); +} + +isl::set basic_set::wrapped_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::set(*this).wrapped_reverse(); +} + +inline std::ostream &operator<<(std::ostream &os, const basic_set &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_basic_set_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_basic_set_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::fixed_box +fixed_box manage(__isl_take isl_fixed_box *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return fixed_box(ptr); +} +fixed_box manage_copy(__isl_keep isl_fixed_box *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_fixed_box_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_fixed_box_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return fixed_box(ptr); +} + +fixed_box::fixed_box(__isl_take isl_fixed_box *ptr) + : ptr(ptr) {} + +fixed_box::fixed_box() + : ptr(nullptr) {} + +fixed_box::fixed_box(const fixed_box &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_fixed_box_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +fixed_box::fixed_box(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_fixed_box_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +fixed_box &fixed_box::operator=(fixed_box obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +fixed_box::~fixed_box() { + if (ptr) + isl_fixed_box_free(ptr); +} + +__isl_give isl_fixed_box *fixed_box::copy() const & { + return isl_fixed_box_copy(ptr); +} + +__isl_keep isl_fixed_box *fixed_box::get() const { + return ptr; +} + +__isl_give isl_fixed_box *fixed_box::release() { + isl_fixed_box *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool fixed_box::is_null() const { + return ptr == nullptr; +} + +isl::ctx fixed_box::ctx() const { + return isl::ctx(isl_fixed_box_get_ctx(ptr)); +} + +bool fixed_box::is_valid() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_fixed_box_is_valid(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_aff fixed_box::offset() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_fixed_box_get_offset(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff fixed_box::get_offset() const +{ + return offset(); +} + +isl::multi_val fixed_box::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_fixed_box_get_size(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val fixed_box::get_size() const +{ + return size(); +} + +isl::space fixed_box::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_fixed_box_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space fixed_box::get_space() const +{ + return space(); +} + +inline std::ostream &operator<<(std::ostream &os, const fixed_box &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_fixed_box_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_fixed_box_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::id +id manage(__isl_take isl_id *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return id(ptr); +} +id manage_copy(__isl_keep isl_id *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_id_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return id(ptr); +} + +id::id(__isl_take isl_id *ptr) + : ptr(ptr) {} + +id::id() + : ptr(nullptr) {} + +id::id(const id &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +id::id(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id &id::operator=(id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id::~id() { + if (ptr) + isl_id_free(ptr); +} + +__isl_give isl_id *id::copy() const & { + return isl_id_copy(ptr); +} + +__isl_keep isl_id *id::get() const { + return ptr; +} + +__isl_give isl_id *id::release() { + isl_id *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id::is_null() const { + return ptr == nullptr; +} + +isl::ctx id::ctx() const { + return isl::ctx(isl_id_get_ctx(ptr)); +} + +std::string id::name() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_get_name(get()); + std::string tmp(res); + return tmp; +} + +std::string id::get_name() const +{ + return name(); +} + +isl::id_list id::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +#if __cplusplus >= 201703L +id::id(isl::ctx ctx, const std::string &str, const std::any &any) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + std::any *p = new std::any(any); + auto res = isl_id_alloc(ctx.get(), str.c_str(), p); + res = isl_id_set_free_user(res, &ctx::free_user); + if (!res) { + delete p; + exception::throw_last_error(saved_ctx); + } + ptr = res; +} + +template +std::optional id::try_user() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + std::any *p = (std::any *) isl_id_get_user(ptr); + if (!p) + return std::nullopt; + if (isl_id_get_free_user(ptr) != &ctx::free_user) + return std::nullopt; + T *res = std::any_cast(p); + if (!res) + return std::nullopt; + return *res; +} + +template +T id::user() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + std::any *p = (std::any *) isl_id_get_user(ptr); + if (!p) + exception::throw_invalid("no user pointer", __FILE__, __LINE__); + if (isl_id_get_free_user(ptr) != &ctx::free_user) + exception::throw_invalid("user pointer not attached by C++ interface", __FILE__, __LINE__); + T *res = std::any_cast(p); + if (!res) + exception::throw_invalid("user pointer not of given type", __FILE__, __LINE__); + return *res; +} +#endif + +inline std::ostream &operator<<(std::ostream &os, const id &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_id_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::id_list +id_list manage(__isl_take isl_id_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return id_list(ptr); +} +id_list manage_copy(__isl_keep isl_id_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_id_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return id_list(ptr); +} + +id_list::id_list(__isl_take isl_id_list *ptr) + : ptr(ptr) {} + +id_list::id_list() + : ptr(nullptr) {} + +id_list::id_list(const id_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +id_list::id_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_list::id_list(isl::id el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_from_id(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_list::id_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_list &id_list::operator=(id_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id_list::~id_list() { + if (ptr) + isl_id_list_free(ptr); +} + +__isl_give isl_id_list *id_list::copy() const & { + return isl_id_list_copy(ptr); +} + +__isl_keep isl_id_list *id_list::get() const { + return ptr; +} + +__isl_give isl_id_list *id_list::release() { + isl_id_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx id_list::ctx() const { + return isl::ctx(isl_id_list_get_ctx(ptr)); +} + +isl::id_list id_list::add(isl::id el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list id_list::add(const std::string &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::id(ctx(), el)); +} + +isl::id id_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id id_list::get_at(int index) const +{ + return at(index); +} + +isl::id_list id_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list id_list::concat(isl::id_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list id_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void id_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_id *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_id_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void id_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_id *arg_0, isl_id *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_id_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_id_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::id_list id_list::insert(unsigned int pos, isl::id el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list id_list::insert(unsigned int pos, const std::string &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->insert(pos, isl::id(ctx(), el)); +} + +isl::id_list id_list::set_at(int index, isl::id el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list id_list::set_at(int index, const std::string &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_at(index, isl::id(ctx(), el)); +} + +unsigned id_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const id_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_id_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::id_to_ast_expr +id_to_ast_expr manage(__isl_take isl_id_to_ast_expr *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return id_to_ast_expr(ptr); +} +id_to_ast_expr manage_copy(__isl_keep isl_id_to_ast_expr *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_to_ast_expr_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_id_to_ast_expr_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return id_to_ast_expr(ptr); +} + +id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr) + : ptr(ptr) {} + +id_to_ast_expr::id_to_ast_expr() + : ptr(nullptr) {} + +id_to_ast_expr::id_to_ast_expr(const id_to_ast_expr &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_to_ast_expr_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +id_to_ast_expr::id_to_ast_expr(isl::ctx ctx, int min_size) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_ast_expr_alloc(ctx.release(), min_size); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_to_ast_expr::id_to_ast_expr(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_ast_expr_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_to_ast_expr &id_to_ast_expr::operator=(id_to_ast_expr obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id_to_ast_expr::~id_to_ast_expr() { + if (ptr) + isl_id_to_ast_expr_free(ptr); +} + +__isl_give isl_id_to_ast_expr *id_to_ast_expr::copy() const & { + return isl_id_to_ast_expr_copy(ptr); +} + +__isl_keep isl_id_to_ast_expr *id_to_ast_expr::get() const { + return ptr; +} + +__isl_give isl_id_to_ast_expr *id_to_ast_expr::release() { + isl_id_to_ast_expr *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id_to_ast_expr::is_null() const { + return ptr == nullptr; +} + +isl::ctx id_to_ast_expr::ctx() const { + return isl::ctx(isl_id_to_ast_expr_get_ctx(ptr)); +} + +bool id_to_ast_expr::is_equal(const isl::id_to_ast_expr &hmap2) const +{ + if (!ptr || hmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_ast_expr_is_equal(get(), hmap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::id_to_ast_expr id_to_ast_expr::set(isl::id key, isl::ast_expr val) const +{ + if (!ptr || key.is_null() || val.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_ast_expr_set(copy(), key.release(), val.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_to_ast_expr id_to_ast_expr::set(const std::string &key, const isl::ast_expr &val) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set(isl::id(ctx(), key), val); +} + +inline std::ostream &operator<<(std::ostream &os, const id_to_ast_expr &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_to_ast_expr_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_id_to_ast_expr_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::id_to_id +id_to_id manage(__isl_take isl_id_to_id *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return id_to_id(ptr); +} +id_to_id manage_copy(__isl_keep isl_id_to_id *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_to_id_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_id_to_id_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return id_to_id(ptr); +} + +id_to_id::id_to_id(__isl_take isl_id_to_id *ptr) + : ptr(ptr) {} + +id_to_id::id_to_id() + : ptr(nullptr) {} + +id_to_id::id_to_id(const id_to_id &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_to_id_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +id_to_id::id_to_id(isl::ctx ctx, int min_size) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_id_alloc(ctx.release(), min_size); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_to_id::id_to_id(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_id_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +id_to_id &id_to_id::operator=(id_to_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +id_to_id::~id_to_id() { + if (ptr) + isl_id_to_id_free(ptr); +} + +__isl_give isl_id_to_id *id_to_id::copy() const & { + return isl_id_to_id_copy(ptr); +} + +__isl_keep isl_id_to_id *id_to_id::get() const { + return ptr; +} + +__isl_give isl_id_to_id *id_to_id::release() { + isl_id_to_id *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool id_to_id::is_null() const { + return ptr == nullptr; +} + +isl::ctx id_to_id::ctx() const { + return isl::ctx(isl_id_to_id_get_ctx(ptr)); +} + +bool id_to_id::is_equal(const isl::id_to_id &hmap2) const +{ + if (!ptr || hmap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_id_is_equal(get(), hmap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::id_to_id id_to_id::set(isl::id key, isl::id val) const +{ + if (!ptr || key.is_null() || val.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_id_to_id_set(copy(), key.release(), val.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_to_id id_to_id::set(const isl::id &key, const std::string &val) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set(key, isl::id(ctx(), val)); +} + +isl::id_to_id id_to_id::set(const std::string &key, const isl::id &val) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set(isl::id(ctx(), key), val); +} + +isl::id_to_id id_to_id::set(const std::string &key, const std::string &val) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set(isl::id(ctx(), key), isl::id(ctx(), val)); +} + +inline std::ostream &operator<<(std::ostream &os, const id_to_id &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_id_to_id_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_id_to_id_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::map +map manage(__isl_take isl_map *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return map(ptr); +} +map manage_copy(__isl_keep isl_map *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_map_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_map_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return map(ptr); +} + +map::map(__isl_take isl_map *ptr) + : ptr(ptr) {} + +map::map() + : ptr(nullptr) {} + +map::map(const map &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_map_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +map::map(isl::basic_map bmap) +{ + if (bmap.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = bmap.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_from_basic_map(bmap.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +map::map(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +map &map::operator=(map obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +map::~map() { + if (ptr) + isl_map_free(ptr); +} + +__isl_give isl_map *map::copy() const & { + return isl_map_copy(ptr); +} + +__isl_keep isl_map *map::get() const { + return ptr; +} + +__isl_give isl_map *map::release() { + isl_map *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool map::is_null() const { + return ptr == nullptr; +} + +isl::ctx map::ctx() const { + return isl::ctx(isl_map_get_ctx(ptr)); +} + +isl::basic_map map::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_affine_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::apply_domain(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_apply_domain(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::apply_domain(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).apply_domain(umap2); +} + +isl::map map::apply_domain(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->apply_domain(isl::map(map2)); +} + +isl::map map::apply_range(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_apply_range(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::apply_range(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).apply_range(umap2); +} + +isl::map map::apply_range(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->apply_range(isl::map(map2)); +} + +isl::map map::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).as_map(); +} + +isl::multi_union_pw_aff map::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff map::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_as_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff map::as_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).as_union_pw_multi_aff(); +} + +isl::set map::bind_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_bind_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set map::bind_range(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_bind_range(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::complement() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_complement(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).compute_divs(); +} + +isl::map map::curry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_curry(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set map::deltas() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_deltas(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_detect_equalities(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set map::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::domain_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_domain_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::domain_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_domain_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::domain_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).domain_map(); +} + +isl::union_pw_multi_aff map::domain_map_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).domain_map_union_pw_multi_aff(); +} + +isl::map map::domain_product(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_domain_product(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::domain_product(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).domain_product(umap2); +} + +isl::map map::domain_product(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->domain_product(isl::map(map2)); +} + +isl::map map::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned map::domain_tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_domain_tuple_dim(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::id map::domain_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_get_domain_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id map::get_domain_tuple_id() const +{ + return domain_tuple_id(); +} + +isl::map map::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::empty(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_empty(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::eq_at(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_eq_at_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::eq_at(const isl::multi_union_pw_aff &mupa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).eq_at(mupa); +} + +isl::map map::eq_at(const isl::aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->eq_at(isl::multi_pw_aff(mpa)); +} + +isl::map map::eq_at(const isl::multi_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->eq_at(isl::multi_pw_aff(mpa)); +} + +isl::map map::eq_at(const isl::pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->eq_at(isl::multi_pw_aff(mpa)); +} + +isl::map map::eq_at(const isl::pw_multi_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->eq_at(isl::multi_pw_aff(mpa)); +} + +bool map::every_map(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).every_map(test); +} + +isl::map map::extract_map(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).extract_map(space); +} + +isl::map map::factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::fixed_power(isl::val exp) const +{ + if (!ptr || exp.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_fixed_power_val(copy(), exp.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::fixed_power(long exp) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->fixed_power(isl::val(ctx(), exp)); +} + +isl::map map::flatten() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_flatten(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::flatten_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_flatten_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::flatten_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_flatten_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void map::foreach_basic_map(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_basic_map *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_map_foreach_basic_map(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void map::foreach_map(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).foreach_map(fn); +} + +isl::map map::gist(isl::map context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::gist(const isl::union_map &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).gist(context); +} + +isl::map map::gist(const isl::basic_map &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::map(context)); +} + +isl::map map::gist_domain(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_gist_domain(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::gist_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).gist_domain(uset); +} + +isl::map map::gist_domain(const isl::basic_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist_domain(isl::set(context)); +} + +isl::map map::gist_domain(const isl::point &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist_domain(isl::set(context)); +} + +isl::map map::gist_params(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_gist_params(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::gist_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).gist_range(uset); +} + +bool map::has_domain_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_has_domain_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::map map::intersect(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect(umap2); +} + +isl::map map::intersect(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect(isl::map(map2)); +} + +isl::map map::intersect_domain(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_domain(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_domain(space); +} + +isl::union_map map::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_domain(uset); +} + +isl::map map::intersect_domain(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(set)); +} + +isl::map map::intersect_domain(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(set)); +} + +isl::map map::intersect_domain_factor_domain(isl::map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_domain_factor_domain(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_domain_factor_domain(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_domain_factor_domain(factor); +} + +isl::map map::intersect_domain_factor_domain(const isl::basic_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain_factor_domain(isl::map(factor)); +} + +isl::map map::intersect_domain_factor_range(isl::map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_domain_factor_range(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_domain_factor_range(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_domain_factor_range(factor); +} + +isl::map map::intersect_domain_factor_range(const isl::basic_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain_factor_range(isl::map(factor)); +} + +isl::map map::intersect_domain_wrapped_domain(isl::set domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_domain_wrapped_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_domain_wrapped_domain(const isl::union_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_domain_wrapped_domain(domain); +} + +isl::map map::intersect_domain_wrapped_domain(const isl::basic_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain_wrapped_domain(isl::set(domain)); +} + +isl::map map::intersect_domain_wrapped_domain(const isl::point &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain_wrapped_domain(isl::set(domain)); +} + +isl::map map::intersect_params(isl::set params) const +{ + if (!ptr || params.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_params(copy(), params.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::intersect_range(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_range(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_range(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_range(space); +} + +isl::union_map map::intersect_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_range(uset); +} + +isl::map map::intersect_range(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range(isl::set(set)); +} + +isl::map map::intersect_range(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range(isl::set(set)); +} + +isl::map map::intersect_range_factor_domain(isl::map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_range_factor_domain(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_range_factor_domain(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_range_factor_domain(factor); +} + +isl::map map::intersect_range_factor_domain(const isl::basic_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range_factor_domain(isl::map(factor)); +} + +isl::map map::intersect_range_factor_range(isl::map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_range_factor_range(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_range_factor_range(const isl::union_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_range_factor_range(factor); +} + +isl::map map::intersect_range_factor_range(const isl::basic_map &factor) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range_factor_range(isl::map(factor)); +} + +isl::map map::intersect_range_wrapped_domain(isl::set domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_intersect_range_wrapped_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::intersect_range_wrapped_domain(const isl::union_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).intersect_range_wrapped_domain(domain); +} + +isl::map map::intersect_range_wrapped_domain(const isl::basic_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range_wrapped_domain(isl::set(domain)); +} + +isl::map map::intersect_range_wrapped_domain(const isl::point &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_range_wrapped_domain(isl::set(domain)); +} + +bool map::is_bijective() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_bijective(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_disjoint(const isl::map &map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_disjoint(get(), map2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_disjoint(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).is_disjoint(umap2); +} + +bool map::is_disjoint(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_disjoint(isl::map(map2)); +} + +bool map::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_equal(const isl::map &map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_equal(get(), map2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_equal(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).is_equal(umap2); +} + +bool map::is_equal(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_equal(isl::map(map2)); +} + +bool map::is_injective() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_injective(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_single_valued() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_single_valued(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_strict_subset(const isl::map &map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_strict_subset(get(), map2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_strict_subset(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).is_strict_subset(umap2); +} + +bool map::is_strict_subset(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_strict_subset(isl::map(map2)); +} + +bool map::is_subset(const isl::map &map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_is_subset(get(), map2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool map::is_subset(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).is_subset(umap2); +} + +bool map::is_subset(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_subset(isl::map(map2)); +} + +bool map::isa_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).isa_map(); +} + +isl::map map::lex_ge_at(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lex_ge_at_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::lex_gt_at(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lex_gt_at_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::lex_le_at(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lex_le_at_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::lex_lt_at(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lex_lt_at_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lexmax(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff map::lexmax_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lexmax_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lexmin(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff map::lexmin_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lexmin_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::lower_bound(isl::multi_pw_aff lower) const +{ + if (!ptr || lower.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_lower_bound_multi_pw_aff(copy(), lower.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map_list map::map_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).map_list(); +} + +isl::multi_pw_aff map::max_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_max_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff map::min_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_min_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned map::n_basic_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_n_basic_map(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::set map::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map map::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_polyhedral_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::preimage_domain(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_preimage_domain_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::preimage_domain(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::preimage_domain(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_preimage_domain_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::preimage_domain(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).preimage_domain(upma); +} + +isl::map map::preimage_range(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_preimage_range_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::preimage_range(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_preimage_range_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::preimage_range(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).preimage_range(upma); +} + +isl::map map::product(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_product(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::product(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).product(umap2); +} + +isl::map map::product(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->product(isl::map(map2)); +} + +isl::map map::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_project_out_all_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::project_out_param(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_project_out_param_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::project_out_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->project_out_param(isl::id(ctx(), id)); +} + +isl::map map::project_out_param(isl::id_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_project_out_param_id_list(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set map::range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_range_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_range_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::fixed_box map::range_lattice_tile() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_get_range_lattice_tile(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::fixed_box map::get_range_lattice_tile() const +{ + return range_lattice_tile(); +} + +isl::union_map map::range_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).range_map(); +} + +isl::map map::range_product(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_range_product(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::range_product(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).range_product(umap2); +} + +isl::map map::range_product(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::map(map2)); +} + +isl::map map::range_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_range_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::fixed_box map::range_simple_fixed_box_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_get_range_simple_fixed_box_hull(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::fixed_box map::get_range_simple_fixed_box_hull() const +{ + return range_simple_fixed_box_hull(); +} + +unsigned map::range_tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_range_tuple_dim(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::id map::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id map::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::map map::reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map map::sample() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_sample(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::set_domain_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_set_domain_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::set_domain_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_domain_tuple(isl::id(ctx(), id)); +} + +isl::map map::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +isl::space map::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space map::get_space() const +{ + return space(); +} + +isl::map map::subtract(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_subtract(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::subtract(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).subtract(umap2); +} + +isl::map map::subtract(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract(isl::map(map2)); +} + +isl::union_map map::subtract_domain(const isl::union_set &dom) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).subtract_domain(dom); +} + +isl::union_map map::subtract_range(const isl::union_set &dom) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).subtract_range(dom); +} + +isl::map_list map::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::to_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_to_union_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::uncurry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_uncurry(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::unite(isl::map map2) const +{ + if (!ptr || map2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_union(copy(), map2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map map::unite(const isl::union_map &umap2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_map(*this).unite(umap2); +} + +isl::map map::unite(const isl::basic_map &map2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->unite(isl::map(map2)); +} + +isl::map map::universe(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_universe(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_map map::unshifted_simple_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_unshifted_simple_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::upper_bound(isl::multi_pw_aff upper) const +{ + if (!ptr || upper.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_upper_bound_multi_pw_aff(copy(), upper.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set map::wrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_wrap(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map::zip() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_zip(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const map &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_map_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_map_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::map_list +map_list manage(__isl_take isl_map_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return map_list(ptr); +} +map_list manage_copy(__isl_keep isl_map_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_map_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_map_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return map_list(ptr); +} + +map_list::map_list(__isl_take isl_map_list *ptr) + : ptr(ptr) {} + +map_list::map_list() + : ptr(nullptr) {} + +map_list::map_list(const map_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_map_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +map_list::map_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +map_list::map_list(isl::map el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_from_map(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +map_list::map_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +map_list &map_list::operator=(map_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +map_list::~map_list() { + if (ptr) + isl_map_list_free(ptr); +} + +__isl_give isl_map_list *map_list::copy() const & { + return isl_map_list_copy(ptr); +} + +__isl_keep isl_map_list *map_list::get() const { + return ptr; +} + +__isl_give isl_map_list *map_list::release() { + isl_map_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool map_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx map_list::ctx() const { + return isl::ctx(isl_map_list_get_ctx(ptr)); +} + +isl::map_list map_list::add(isl::map el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map map_list::get_at(int index) const +{ + return at(index); +} + +isl::map_list map_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map_list map_list::concat(isl::map_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map_list map_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void map_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_map_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void map_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_map *arg_0, isl_map *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_map_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_map_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::map_list map_list::insert(unsigned int pos, isl::map el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map_list map_list::set_at(int index, isl::map el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned map_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_map_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const map_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_map_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_map_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::multi_aff +multi_aff manage(__isl_take isl_multi_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return multi_aff(ptr); +} +multi_aff manage_copy(__isl_keep isl_multi_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_multi_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return multi_aff(ptr); +} + +multi_aff::multi_aff(__isl_take isl_multi_aff *ptr) + : ptr(ptr) {} + +multi_aff::multi_aff() + : ptr(nullptr) {} + +multi_aff::multi_aff(const multi_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +multi_aff::multi_aff(isl::aff aff) +{ + if (aff.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = aff.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_from_aff(aff.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_aff::multi_aff(isl::space space, isl::aff_list list) +{ + if (space.is_null() || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_from_aff_list(space.release(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_aff::multi_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_aff &multi_aff::operator=(multi_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_aff::~multi_aff() { + if (ptr) + isl_multi_aff_free(ptr); +} + +__isl_give isl_multi_aff *multi_aff::copy() const & { + return isl_multi_aff_copy(ptr); +} + +__isl_keep isl_multi_aff *multi_aff::get() const { + return ptr; +} + +__isl_give isl_multi_aff *multi_aff::release() { + isl_multi_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx multi_aff::ctx() const { + return isl::ctx(isl_multi_aff_get_ctx(ptr)); +} + +isl::multi_aff multi_aff::add(isl::multi_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_add(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::add(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add(multi2); +} + +isl::multi_union_pw_aff multi_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add(multi2); +} + +isl::pw_multi_aff multi_aff::add(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add(pma2); +} + +isl::union_pw_multi_aff multi_aff::add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add(upma2); +} + +isl::multi_aff multi_aff::add(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::multi_aff(multi2)); +} + +isl::multi_aff multi_aff::add_constant(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_add_constant_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::add_constant(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_add_constant_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::add_constant(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_constant(isl::val(ctx(), v)); +} + +isl::union_pw_multi_aff multi_aff::apply(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).apply(upma2); +} + +isl::map multi_aff::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_as_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::as_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).as_multi_aff(); +} + +isl::multi_union_pw_aff multi_aff::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff multi_aff::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).as_pw_multi_aff(); +} + +isl::set multi_aff::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_as_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map multi_aff::as_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).as_union_map(); +} + +isl::aff multi_aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_get_at(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff multi_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::basic_set multi_aff::bind(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_bind(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::bind_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_bind_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff multi_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).coalesce(); +} + +isl::multi_val multi_aff::constant_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_get_constant_multi_val(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_aff::get_constant_multi_val() const +{ + return constant_multi_val(); +} + +isl::set multi_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).domain(); +} + +isl::multi_aff multi_aff::domain_map(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_domain_map(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff multi_aff::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).drop_unused_params(); +} + +isl::pw_multi_aff multi_aff::extract_pw_multi_aff(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).extract_pw_multi_aff(space); +} + +isl::multi_aff multi_aff::flat_range_product(isl::multi_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_flat_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).flat_range_product(multi2); +} + +isl::multi_union_pw_aff multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).flat_range_product(multi2); +} + +isl::pw_multi_aff multi_aff::flat_range_product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).flat_range_product(pma2); +} + +isl::union_pw_multi_aff multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).flat_range_product(upma2); +} + +isl::multi_aff multi_aff::flat_range_product(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::multi_aff(multi2)); +} + +isl::multi_aff multi_aff::floor() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_floor(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void multi_aff::foreach_piece(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).foreach_piece(fn); +} + +isl::multi_aff multi_aff::gist(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff multi_aff::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).gist(context); +} + +isl::multi_aff multi_aff::gist(const isl::basic_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::multi_aff multi_aff::gist(const isl::point &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::multi_aff multi_aff::gist_params(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_gist_params(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_aff multi_aff::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_identity_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::identity_on_domain(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_identity_on_domain_space(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::insert_domain(isl::space domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff multi_aff::intersect_domain(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).intersect_domain(set); +} + +isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).intersect_domain(space); +} + +isl::union_pw_multi_aff multi_aff::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).intersect_domain(uset); +} + +isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::union_pw_multi_aff multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::pw_multi_aff multi_aff::intersect_params(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).intersect_params(set); +} + +bool multi_aff::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_involves_locals(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_involves_nan(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_aff::involves_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).involves_param(id); +} + +bool multi_aff::involves_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->involves_param(isl::id(ctx(), id)); +} + +bool multi_aff::involves_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).involves_param(list); +} + +bool multi_aff::isa_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).isa_multi_aff(); +} + +bool multi_aff::isa_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).isa_pw_multi_aff(); +} + +isl::aff_list multi_aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_get_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff_list multi_aff::get_list() const +{ + return list(); +} + +isl::multi_pw_aff multi_aff::max(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).max(multi2); +} + +isl::multi_val multi_aff::max_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).max_multi_val(); +} + +isl::multi_pw_aff multi_aff::min(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).min(multi2); +} + +isl::multi_val multi_aff::min_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).min_multi_val(); +} + +isl::multi_aff multi_aff::multi_val_on_domain(isl::space space, isl::multi_val mv) +{ + if (space.is_null() || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_multi_val_on_domain_space(space.release(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned multi_aff::n_piece() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).n_piece(); +} + +isl::multi_aff multi_aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_aff::plain_is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_empty(); +} + +bool multi_aff::plain_is_equal(const isl::multi_aff &multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_plain_is_equal(get(), multi2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_equal(multi2); +} + +bool multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_equal(multi2); +} + +bool multi_aff::plain_is_equal(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_equal(pma2); +} + +bool multi_aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_equal(upma2); +} + +bool multi_aff::plain_is_equal(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::multi_aff(multi2)); +} + +isl::pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::union_pw_multi_aff multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::multi_aff multi_aff::product(isl::multi_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).product(multi2); +} + +isl::pw_multi_aff multi_aff::product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).product(pma2); +} + +isl::multi_aff multi_aff::product(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->product(isl::multi_aff(multi2)); +} + +isl::multi_aff multi_aff::pullback(isl::multi_aff ma2) const +{ + if (!ptr || ma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_pullback_multi_aff(copy(), ma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::pullback(const isl::multi_pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).pullback(mpa2); +} + +isl::pw_multi_aff multi_aff::pullback(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).pullback(pma2); +} + +isl::union_pw_multi_aff multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).pullback(upma2); +} + +isl::multi_aff multi_aff::pullback(const isl::aff &ma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->pullback(isl::multi_aff(ma2)); +} + +isl::pw_multi_aff_list multi_aff::pw_multi_aff_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).pw_multi_aff_list(); +} + +isl::pw_multi_aff multi_aff::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_factor_domain(); +} + +isl::pw_multi_aff multi_aff::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_factor_range(); +} + +isl::multi_aff multi_aff::range_map(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_range_map(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::range_product(isl::multi_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_product(multi2); +} + +isl::multi_union_pw_aff multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_product(multi2); +} + +isl::pw_multi_aff multi_aff::range_product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_product(pma2); +} + +isl::union_pw_multi_aff multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_product(upma2); +} + +isl::multi_aff multi_aff::range_product(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::multi_aff(multi2)); +} + +isl::id multi_aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_aff multi_aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_reset_range_tuple_id(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::scale(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_scale_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_aff multi_aff::scale_down(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_scale_down_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::scale_down(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_scale_down_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_aff multi_aff::set_at(int pos, isl::aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_set_at(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::set_at(int pos, const isl::pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).set_at(pos, el); +} + +isl::multi_union_pw_aff multi_aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).set_at(pos, el); +} + +isl::multi_aff multi_aff::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned multi_aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::space multi_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space multi_aff::get_space() const +{ + return space(); +} + +isl::multi_aff multi_aff::sub(isl::multi_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_sub(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::sub(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).sub(multi2); +} + +isl::multi_union_pw_aff multi_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).sub(multi2); +} + +isl::pw_multi_aff multi_aff::sub(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).sub(pma2); +} + +isl::union_pw_multi_aff multi_aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).sub(upma2); +} + +isl::multi_aff multi_aff::sub(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::multi_aff(multi2)); +} + +isl::pw_multi_aff multi_aff::subtract_domain(const isl::set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).subtract_domain(set); +} + +isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).subtract_domain(space); +} + +isl::union_pw_multi_aff multi_aff::subtract_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).subtract_domain(uset); +} + +isl::pw_multi_aff_list multi_aff::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).to_list(); +} + +isl::multi_pw_aff multi_aff::to_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_to_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_aff::to_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_to_multi_union_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff multi_aff::to_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_to_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff multi_aff::to_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).to_union_pw_multi_aff(); +} + +isl::multi_aff multi_aff::unbind_params_insert_domain(isl::multi_id domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_unbind_params_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_aff::union_add(const isl::multi_pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).union_add(mpa2); +} + +isl::multi_union_pw_aff multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).union_add(mupa2); +} + +isl::pw_multi_aff multi_aff::union_add(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).union_add(pma2); +} + +isl::union_pw_multi_aff multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).union_add(upma2); +} + +isl::multi_aff multi_aff::zero(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_aff_zero(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_multi_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::multi_id +multi_id manage(__isl_take isl_multi_id *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return multi_id(ptr); +} +multi_id manage_copy(__isl_keep isl_multi_id *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_id_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_multi_id_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return multi_id(ptr); +} + +multi_id::multi_id(__isl_take isl_multi_id *ptr) + : ptr(ptr) {} + +multi_id::multi_id() + : ptr(nullptr) {} + +multi_id::multi_id(const multi_id &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_id_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +multi_id::multi_id(isl::space space, isl::id_list list) +{ + if (space.is_null() || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_from_id_list(space.release(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_id::multi_id(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_id &multi_id::operator=(multi_id obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_id::~multi_id() { + if (ptr) + isl_multi_id_free(ptr); +} + +__isl_give isl_multi_id *multi_id::copy() const & { + return isl_multi_id_copy(ptr); +} + +__isl_keep isl_multi_id *multi_id::get() const { + return ptr; +} + +__isl_give isl_multi_id *multi_id::release() { + isl_multi_id *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_id::is_null() const { + return ptr == nullptr; +} + +isl::ctx multi_id::ctx() const { + return isl::ctx(isl_multi_id_get_ctx(ptr)); +} + +isl::id multi_id::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_get_at(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_id::get_at(int pos) const +{ + return at(pos); +} + +isl::multi_id multi_id::flat_range_product(isl::multi_id multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_flat_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list multi_id::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_get_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id_list multi_id::get_list() const +{ + return list(); +} + +bool multi_id::plain_is_equal(const isl::multi_id &multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_plain_is_equal(get(), multi2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_id multi_id::range_product(isl::multi_id multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_id multi_id::set_at(int pos, isl::id el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_set_at(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_id multi_id::set_at(int pos, const std::string &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_at(pos, isl::id(ctx(), el)); +} + +unsigned multi_id::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::space multi_id::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_id_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space multi_id::get_space() const +{ + return space(); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_id &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_id_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_multi_id_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::multi_pw_aff +multi_pw_aff manage(__isl_take isl_multi_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return multi_pw_aff(ptr); +} +multi_pw_aff manage_copy(__isl_keep isl_multi_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_pw_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_multi_pw_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return multi_pw_aff(ptr); +} + +multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr) + : ptr(ptr) {} + +multi_pw_aff::multi_pw_aff() + : ptr(nullptr) {} + +multi_pw_aff::multi_pw_aff(const multi_pw_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_pw_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +multi_pw_aff::multi_pw_aff(isl::aff aff) +{ + if (aff.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = aff.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_from_aff(aff.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::multi_aff ma) +{ + if (ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ma.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_from_multi_aff(ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::pw_aff pa) +{ + if (pa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_from_pw_aff(pa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::space space, isl::pw_aff_list list) +{ + if (space.is_null() || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_from_pw_aff_list(space.release(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::pw_multi_aff pma) +{ + if (pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pma.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_from_pw_multi_aff(pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_pw_aff::multi_pw_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_pw_aff &multi_pw_aff::operator=(multi_pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_pw_aff::~multi_pw_aff() { + if (ptr) + isl_multi_pw_aff_free(ptr); +} + +__isl_give isl_multi_pw_aff *multi_pw_aff::copy() const & { + return isl_multi_pw_aff_copy(ptr); +} + +__isl_keep isl_multi_pw_aff *multi_pw_aff::get() const { + return ptr; +} + +__isl_give isl_multi_pw_aff *multi_pw_aff::release() { + isl_multi_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx multi_pw_aff::ctx() const { + return isl::ctx(isl_multi_pw_aff_get_ctx(ptr)); +} + +isl::multi_pw_aff multi_pw_aff::add(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_add(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).add(multi2); +} + +isl::multi_pw_aff multi_pw_aff::add(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::add(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::add(const isl::pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::add(const isl::pw_multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::add_constant(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_add_constant_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::add_constant(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_add_constant_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::add_constant(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_constant(isl::val(ctx(), v)); +} + +isl::map multi_pw_aff::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_as_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff multi_pw_aff::as_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_as_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set multi_pw_aff::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_as_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff multi_pw_aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_get_at(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff multi_pw_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::set multi_pw_aff::bind(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_bind(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::bind_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_bind_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set multi_pw_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::flat_range_product(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_flat_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).flat_range_product(multi2); +} + +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::flat_range_product(const isl::pw_multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::gist(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_gist(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).gist(context); +} + +isl::multi_pw_aff multi_pw_aff::gist(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(set)); +} + +isl::multi_pw_aff multi_pw_aff::gist(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(set)); +} + +isl::multi_pw_aff multi_pw_aff::gist_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_gist_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_pw_aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_pw_aff multi_pw_aff::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_identity_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::identity_on_domain(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_identity_on_domain_space(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::insert_domain(isl::space domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::intersect_domain(isl::set domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_intersect_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).intersect_domain(uset); +} + +isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::basic_set &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(domain)); +} + +isl::multi_pw_aff multi_pw_aff::intersect_domain(const isl::point &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(domain)); +} + +isl::multi_pw_aff multi_pw_aff::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_pw_aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_involves_nan(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_pw_aff::involves_param(const isl::id &id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_involves_param_id(get(), id.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_pw_aff::involves_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->involves_param(isl::id(ctx(), id)); +} + +bool multi_pw_aff::involves_param(const isl::id_list &list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_involves_param_id_list(get(), list.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_pw_aff::isa_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_isa_multi_aff(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::pw_aff_list multi_pw_aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_get_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff_list multi_pw_aff::get_list() const +{ + return list(); +} + +isl::multi_pw_aff multi_pw_aff::max(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_max(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_pw_aff::max_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_max_multi_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::min(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_min(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_pw_aff::min_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_min_multi_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_plain_is_equal(get(), multi2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).plain_is_equal(multi2); +} + +bool multi_pw_aff::plain_is_equal(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +bool multi_pw_aff::plain_is_equal(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +bool multi_pw_aff::plain_is_equal(const isl::pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +bool multi_pw_aff::plain_is_equal(const isl::pw_multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::product(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_pullback_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::pullback(isl::multi_pw_aff mpa2) const +{ + if (!ptr || mpa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_pullback_multi_pw_aff(copy(), mpa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::pullback(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::pullback(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).pullback(upma); +} + +isl::multi_pw_aff multi_pw_aff::range_product(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).range_product(multi2); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::range_product(const isl::pw_multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::multi_pw_aff(multi2)); +} + +isl::id multi_pw_aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_pw_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_pw_aff multi_pw_aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_reset_range_tuple_id(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::scale(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_scale_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_pw_aff multi_pw_aff::scale_down(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_scale_down_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::scale_down(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_scale_down_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_pw_aff multi_pw_aff::set_at(int pos, isl::pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_set_at(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).set_at(pos, el); +} + +isl::multi_pw_aff multi_pw_aff::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned multi_pw_aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::space multi_pw_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space multi_pw_aff::get_space() const +{ + return space(); +} + +isl::multi_pw_aff multi_pw_aff::sub(isl::multi_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_sub(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).sub(multi2); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::sub(const isl::pw_multi_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::multi_pw_aff(multi2)); +} + +isl::multi_pw_aff multi_pw_aff::unbind_params_insert_domain(isl::multi_id domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_unbind_params_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff multi_pw_aff::union_add(isl::multi_pw_aff mpa2) const +{ + if (!ptr || mpa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_union_add(copy(), mpa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).union_add(mupa2); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::multi_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::union_add(const isl::pw_multi_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::multi_pw_aff(mpa2)); +} + +isl::multi_pw_aff multi_pw_aff::zero(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_pw_aff_zero(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_pw_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_pw_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_multi_pw_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::multi_union_pw_aff +multi_union_pw_aff manage(__isl_take isl_multi_union_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return multi_union_pw_aff(ptr); +} +multi_union_pw_aff manage_copy(__isl_keep isl_multi_union_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_union_pw_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_multi_union_pw_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return multi_union_pw_aff(ptr); +} + +multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr) + : ptr(ptr) {} + +multi_union_pw_aff::multi_union_pw_aff() + : ptr(nullptr) {} + +multi_union_pw_aff::multi_union_pw_aff(const multi_union_pw_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_union_pw_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +multi_union_pw_aff::multi_union_pw_aff(isl::multi_pw_aff mpa) +{ + if (mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = mpa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_from_multi_pw_aff(mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_union_pw_aff::multi_union_pw_aff(isl::union_pw_aff upa) +{ + if (upa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = upa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_from_union_pw_aff(upa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_union_pw_aff::multi_union_pw_aff(isl::space space, isl::union_pw_aff_list list) +{ + if (space.is_null() || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_from_union_pw_aff_list(space.release(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_union_pw_aff::multi_union_pw_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_union_pw_aff &multi_union_pw_aff::operator=(multi_union_pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_union_pw_aff::~multi_union_pw_aff() { + if (ptr) + isl_multi_union_pw_aff_free(ptr); +} + +__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::copy() const & { + return isl_multi_union_pw_aff_copy(ptr); +} + +__isl_keep isl_multi_union_pw_aff *multi_union_pw_aff::get() const { + return ptr; +} + +__isl_give isl_multi_union_pw_aff *multi_union_pw_aff::release() { + isl_multi_union_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_union_pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx multi_union_pw_aff::ctx() const { + return isl::ctx(isl_multi_union_pw_aff_get_ctx(ptr)); +} + +isl::multi_union_pw_aff multi_union_pw_aff::add(isl::multi_union_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_add(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff multi_union_pw_aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_get_at(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff multi_union_pw_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::union_set multi_union_pw_aff::bind(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_bind(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set multi_union_pw_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::flat_range_product(isl::multi_union_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_flat_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::gist(isl::union_set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::gist_params(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_gist_params(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_union_pw_aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_union_pw_aff multi_union_pw_aff::intersect_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_intersect_domain(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::intersect_params(isl::set params) const +{ + if (!ptr || params.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_intersect_params(copy(), params.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_union_pw_aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_involves_nan(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::union_pw_aff_list multi_union_pw_aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_get_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff_list multi_union_pw_aff::get_list() const +{ + return list(); +} + +isl::multi_union_pw_aff multi_union_pw_aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_plain_is_equal(get(), multi2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_union_pw_aff multi_union_pw_aff::pullback(isl::union_pw_multi_aff upma) const +{ + if (!ptr || upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::range_product(isl::multi_union_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_union_pw_aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_union_pw_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_union_pw_aff multi_union_pw_aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_reset_range_tuple_id(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_scale_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_scale_down_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale_down(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_scale_down_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_union_pw_aff multi_union_pw_aff::set_at(int pos, isl::union_pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_set_at(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned multi_union_pw_aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::space multi_union_pw_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space multi_union_pw_aff::get_space() const +{ + return space(); +} + +isl::multi_union_pw_aff multi_union_pw_aff::sub(isl::multi_union_pw_aff multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_sub(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::union_add(isl::multi_union_pw_aff mupa2) const +{ + if (!ptr || mupa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_union_add(copy(), mupa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff multi_union_pw_aff::zero(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_union_pw_aff_zero(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_union_pw_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_union_pw_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_multi_union_pw_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::multi_val +multi_val manage(__isl_take isl_multi_val *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return multi_val(ptr); +} +multi_val manage_copy(__isl_keep isl_multi_val *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_val_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_multi_val_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return multi_val(ptr); +} + +multi_val::multi_val(__isl_take isl_multi_val *ptr) + : ptr(ptr) {} + +multi_val::multi_val() + : ptr(nullptr) {} + +multi_val::multi_val(const multi_val &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_val_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +multi_val::multi_val(isl::space space, isl::val_list list) +{ + if (space.is_null() || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_from_val_list(space.release(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_val::multi_val(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +multi_val &multi_val::operator=(multi_val obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +multi_val::~multi_val() { + if (ptr) + isl_multi_val_free(ptr); +} + +__isl_give isl_multi_val *multi_val::copy() const & { + return isl_multi_val_copy(ptr); +} + +__isl_keep isl_multi_val *multi_val::get() const { + return ptr; +} + +__isl_give isl_multi_val *multi_val::release() { + isl_multi_val *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool multi_val::is_null() const { + return ptr == nullptr; +} + +isl::ctx multi_val::ctx() const { + return isl::ctx(isl_multi_val_get_ctx(ptr)); +} + +isl::multi_val multi_val::add(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_add(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::add(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_add_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::add(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::val(ctx(), v)); +} + +isl::val multi_val::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_get_at(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val multi_val::get_at(int pos) const +{ + return at(pos); +} + +isl::multi_val multi_val::flat_range_product(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_flat_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_val::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool multi_val::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_involves_nan(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::val_list multi_val::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_get_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val_list multi_val::get_list() const +{ + return list(); +} + +isl::multi_val multi_val::max(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_max(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::min(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_min(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool multi_val::plain_is_equal(const isl::multi_val &multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_plain_is_equal(get(), multi2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_val multi_val::product(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::range_product(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_range_product(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_val::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id multi_val::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_val multi_val::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_reset_range_tuple_id(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::scale(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_scale_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_val multi_val::scale_down(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_scale_down_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::scale_down(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_scale_down_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_val multi_val::set_at(int pos, isl::val el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_set_at(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::set_at(int pos, long el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_at(pos, isl::val(ctx(), el)); +} + +isl::multi_val multi_val::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned multi_val::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::space multi_val::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space multi_val::get_space() const +{ + return space(); +} + +isl::multi_val multi_val::sub(isl::multi_val multi2) const +{ + if (!ptr || multi2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_sub(copy(), multi2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val multi_val::zero(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_multi_val_zero(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const multi_val &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_multi_val_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_multi_val_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::point +point manage(__isl_take isl_point *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return point(ptr); +} +point manage_copy(__isl_keep isl_point *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_point_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_point_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return point(ptr); +} + +point::point(__isl_take isl_point *ptr) + : ptr(ptr) {} + +point::point() + : ptr(nullptr) {} + +point::point(const point &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_point_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +point &point::operator=(point obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +point::~point() { + if (ptr) + isl_point_free(ptr); +} + +__isl_give isl_point *point::copy() const & { + return isl_point_copy(ptr); +} + +__isl_keep isl_point *point::get() const { + return ptr; +} + +__isl_give isl_point *point::release() { + isl_point *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool point::is_null() const { + return ptr == nullptr; +} + +isl::ctx point::ctx() const { + return isl::ctx(isl_point_get_ctx(ptr)); +} + +isl::basic_set point::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).affine_hull(); +} + +isl::basic_set point::apply(const isl::basic_map &bmap) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).apply(bmap); +} + +isl::set point::apply(const isl::map &map) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).apply(map); +} + +isl::union_set point::apply(const isl::union_map &umap) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).apply(umap); +} + +isl::pw_multi_aff point::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).as_pw_multi_aff(); +} + +isl::set point::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).as_set(); +} + +isl::set point::bind(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).bind(tuple); +} + +isl::set point::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).coalesce(); +} + +isl::set point::complement() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).complement(); +} + +isl::union_set point::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).compute_divs(); +} + +isl::basic_set point::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).detect_equalities(); +} + +isl::val point::dim_max_val(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).dim_max_val(pos); +} + +isl::val point::dim_min_val(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).dim_min_val(pos); +} + +isl::set point::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).drop_unused_params(); +} + +bool point::every_set(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).every_set(test); +} + +isl::set point::extract_set(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).extract_set(space); +} + +isl::basic_set point::flatten() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).flatten(); +} + +void point::foreach_basic_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).foreach_basic_set(fn); +} + +void point::foreach_point(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).foreach_point(fn); +} + +void point::foreach_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).foreach_set(fn); +} + +isl::basic_set point::gist(const isl::basic_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).gist(context); +} + +isl::set point::gist(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).gist(context); +} + +isl::union_set point::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).gist(context); +} + +isl::set point::gist_params(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).gist_params(context); +} + +isl::map point::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).identity(); +} + +isl::pw_aff point::indicator_function() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).indicator_function(); +} + +isl::map point::insert_domain(const isl::space &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).insert_domain(domain); +} + +isl::basic_set point::intersect(const isl::basic_set &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).intersect(bset2); +} + +isl::set point::intersect(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).intersect(set2); +} + +isl::union_set point::intersect(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).intersect(uset2); +} + +isl::basic_set point::intersect_params(const isl::basic_set &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).intersect_params(bset2); +} + +isl::set point::intersect_params(const isl::set ¶ms) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).intersect_params(params); +} + +bool point::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).involves_locals(); +} + +bool point::is_disjoint(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_disjoint(set2); +} + +bool point::is_disjoint(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_disjoint(uset2); +} + +bool point::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_empty(); +} + +bool point::is_equal(const isl::basic_set &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_equal(bset2); +} + +bool point::is_equal(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_equal(set2); +} + +bool point::is_equal(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_equal(uset2); +} + +bool point::is_singleton() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_singleton(); +} + +bool point::is_strict_subset(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_strict_subset(set2); +} + +bool point::is_strict_subset(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_strict_subset(uset2); +} + +bool point::is_subset(const isl::basic_set &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_subset(bset2); +} + +bool point::is_subset(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_subset(set2); +} + +bool point::is_subset(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_subset(uset2); +} + +bool point::is_wrapping() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).is_wrapping(); +} + +bool point::isa_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).isa_set(); +} + +isl::fixed_box point::lattice_tile() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lattice_tile(); +} + +isl::set point::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lexmax(); +} + +isl::pw_multi_aff point::lexmax_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lexmax_pw_multi_aff(); +} + +isl::set point::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lexmin(); +} + +isl::pw_multi_aff point::lexmin_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lexmin_pw_multi_aff(); +} + +isl::set point::lower_bound(const isl::multi_pw_aff &lower) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lower_bound(lower); +} + +isl::set point::lower_bound(const isl::multi_val &lower) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).lower_bound(lower); +} + +isl::multi_pw_aff point::max_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).max_multi_pw_aff(); +} + +isl::val point::max_val(const isl::aff &obj) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).max_val(obj); +} + +isl::multi_pw_aff point::min_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).min_multi_pw_aff(); +} + +isl::val point::min_val(const isl::aff &obj) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).min_val(obj); +} + +isl::multi_val point::multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_point_get_multi_val(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val point::get_multi_val() const +{ + return multi_val(); +} + +unsigned point::n_basic_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).n_basic_set(); +} + +isl::pw_aff point::param_pw_aff_on_domain(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).param_pw_aff_on_domain(id); +} + +isl::pw_aff point::param_pw_aff_on_domain(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->param_pw_aff_on_domain(isl::id(ctx(), id)); +} + +isl::basic_set point::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).params(); +} + +isl::multi_val point::plain_multi_val_if_fixed() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).plain_multi_val_if_fixed(); +} + +isl::basic_set point::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).polyhedral_hull(); +} + +isl::set point::preimage(const isl::multi_aff &ma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).preimage(ma); +} + +isl::set point::preimage(const isl::multi_pw_aff &mpa) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).preimage(mpa); +} + +isl::set point::preimage(const isl::pw_multi_aff &pma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).preimage(pma); +} + +isl::union_set point::preimage(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).preimage(upma); +} + +isl::set point::product(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).product(set2); +} + +isl::set point::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).project_out_all_params(); +} + +isl::set point::project_out_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).project_out_param(id); +} + +isl::set point::project_out_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->project_out_param(isl::id(ctx(), id)); +} + +isl::set point::project_out_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).project_out_param(list); +} + +isl::pw_aff point::pw_aff_on_domain(const isl::val &v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).pw_aff_on_domain(v); +} + +isl::pw_aff point::pw_aff_on_domain(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->pw_aff_on_domain(isl::val(ctx(), v)); +} + +isl::pw_multi_aff point::pw_multi_aff_on_domain(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).pw_multi_aff_on_domain(mv); +} + +isl::basic_set point::sample() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).sample(); +} + +isl::point point::sample_point() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).sample_point(); +} + +isl::set_list point::set_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).set_list(); +} + +isl::fixed_box point::simple_fixed_box_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).simple_fixed_box_hull(); +} + +isl::space point::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).space(); +} + +isl::val point::stride(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).stride(pos); +} + +isl::set point::subtract(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).subtract(set2); +} + +isl::union_set point::subtract(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).subtract(uset2); +} + +isl::set_list point::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).to_list(); +} + +isl::set point::to_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_point_to_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set point::to_union_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).to_union_set(); +} + +isl::map point::translation() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).translation(); +} + +unsigned point::tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).tuple_dim(); +} + +isl::set point::unbind_params(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unbind_params(tuple); +} + +isl::map point::unbind_params_insert_domain(const isl::multi_id &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unbind_params_insert_domain(domain); +} + +isl::set point::unite(const isl::basic_set &bset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unite(bset2); +} + +isl::set point::unite(const isl::set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unite(set2); +} + +isl::union_set point::unite(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unite(uset2); +} + +isl::basic_set point::unshifted_simple_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unshifted_simple_hull(); +} + +isl::map point::unwrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).unwrap(); +} + +isl::set point::upper_bound(const isl::multi_pw_aff &upper) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).upper_bound(upper); +} + +isl::set point::upper_bound(const isl::multi_val &upper) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).upper_bound(upper); +} + +isl::set point::wrapped_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::basic_set(*this).wrapped_reverse(); +} + +inline std::ostream &operator<<(std::ostream &os, const point &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_point_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_point_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::pw_aff +pw_aff manage(__isl_take isl_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return pw_aff(ptr); +} +pw_aff manage_copy(__isl_keep isl_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_pw_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return pw_aff(ptr); +} + +pw_aff::pw_aff(__isl_take isl_pw_aff *ptr) + : ptr(ptr) {} + +pw_aff::pw_aff() + : ptr(nullptr) {} + +pw_aff::pw_aff(const pw_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +pw_aff::pw_aff(isl::aff aff) +{ + if (aff.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = aff.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_from_aff(aff.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_aff::pw_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_aff &pw_aff::operator=(pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_aff::~pw_aff() { + if (ptr) + isl_pw_aff_free(ptr); +} + +__isl_give isl_pw_aff *pw_aff::copy() const & { + return isl_pw_aff_copy(ptr); +} + +__isl_keep isl_pw_aff *pw_aff::get() const { + return ptr; +} + +__isl_give isl_pw_aff *pw_aff::release() { + isl_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx pw_aff::ctx() const { + return isl::ctx(isl_pw_aff_get_ctx(ptr)); +} + +isl::multi_pw_aff pw_aff::add(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add(multi2); +} + +isl::multi_union_pw_aff pw_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).add(multi2); +} + +isl::pw_aff pw_aff::add(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_add(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_aff::add(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add(pma2); +} + +isl::union_pw_aff pw_aff::add(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).add(upa2); +} + +isl::union_pw_multi_aff pw_aff::add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).add(upma2); +} + +isl::pw_aff pw_aff::add(const isl::aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::pw_aff(pwaff2)); +} + +isl::pw_aff pw_aff::add_constant(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_add_constant_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::add_constant(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_constant(isl::val(ctx(), v)); +} + +isl::pw_multi_aff pw_aff::add_constant(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).add_constant(mv); +} + +isl::union_pw_multi_aff pw_aff::apply(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).apply(upma2); +} + +isl::aff pw_aff::as_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_as_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map pw_aff::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_as_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff pw_aff::as_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).as_multi_aff(); +} + +isl::multi_union_pw_aff pw_aff::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff pw_aff::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).as_pw_multi_aff(); +} + +isl::set pw_aff::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).as_set(); +} + +isl::union_map pw_aff::as_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).as_union_map(); +} + +isl::pw_aff pw_aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).at(pos); +} + +isl::set pw_aff::bind(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).bind(tuple); +} + +isl::set pw_aff::bind(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_bind_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set pw_aff::bind(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->bind(isl::id(ctx(), id)); +} + +isl::pw_aff pw_aff::bind_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_bind_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::ceil() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_ceil(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::cond(isl::pw_aff pwaff_true, isl::pw_aff pwaff_false) const +{ + if (!ptr || pwaff_true.is_null() || pwaff_false.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_cond(copy(), pwaff_true.release(), pwaff_false.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::div(isl::pw_aff pa2) const +{ + if (!ptr || pa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_div(copy(), pa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set pw_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set pw_aff::eq_set(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_eq_set(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val pw_aff::eval(isl::point pnt) const +{ + if (!ptr || pnt.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_eval(copy(), pnt.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_aff::extract_pw_multi_aff(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).extract_pw_multi_aff(space); +} + +isl::multi_pw_aff pw_aff::flat_range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).flat_range_product(multi2); +} + +isl::multi_union_pw_aff pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).flat_range_product(multi2); +} + +isl::pw_multi_aff pw_aff::flat_range_product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).flat_range_product(pma2); +} + +isl::union_pw_multi_aff pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).flat_range_product(upma2); +} + +isl::pw_aff pw_aff::floor() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_floor(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void pw_aff::foreach_piece(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).foreach_piece(fn); +} + +isl::set pw_aff::ge_set(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_ge_set(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::gist(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff pw_aff::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).gist(context); +} + +isl::pw_aff pw_aff::gist(const isl::basic_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::pw_aff pw_aff::gist(const isl::point &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::pw_aff pw_aff::gist_params(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_gist_params(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set pw_aff::gt_set(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_gt_set(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool pw_aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).has_range_tuple_id(); +} + +isl::multi_pw_aff pw_aff::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).identity(); +} + +isl::pw_aff pw_aff::insert_domain(isl::space domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::intersect_domain(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_intersect_domain(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff pw_aff::intersect_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).intersect_domain(space); +} + +isl::union_pw_aff pw_aff::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).intersect_domain(uset); +} + +isl::pw_aff pw_aff::intersect_domain(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(set)); +} + +isl::pw_aff pw_aff::intersect_domain(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(set)); +} + +isl::union_pw_aff pw_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::union_pw_aff pw_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::pw_aff pw_aff::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool pw_aff::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).involves_locals(); +} + +bool pw_aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).involves_nan(); +} + +bool pw_aff::involves_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).involves_param(id); +} + +bool pw_aff::involves_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->involves_param(isl::id(ctx(), id)); +} + +bool pw_aff::involves_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).involves_param(list); +} + +bool pw_aff::isa_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_isa_aff(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool pw_aff::isa_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).isa_multi_aff(); +} + +bool pw_aff::isa_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).isa_pw_multi_aff(); +} + +isl::set pw_aff::le_set(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_le_set(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff_list pw_aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).list(); +} + +isl::set pw_aff::lt_set(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_lt_set(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_aff::max(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).max(multi2); +} + +isl::pw_aff pw_aff::max(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_max(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::max(const isl::aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->max(isl::pw_aff(pwaff2)); +} + +isl::multi_val pw_aff::max_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).max_multi_val(); +} + +isl::val pw_aff::max_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_max_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_aff::min(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).min(multi2); +} + +isl::pw_aff pw_aff::min(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_min(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::min(const isl::aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->min(isl::pw_aff(pwaff2)); +} + +isl::multi_val pw_aff::min_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).min_multi_val(); +} + +isl::val pw_aff::min_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_min_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::mod(isl::val mod) const +{ + if (!ptr || mod.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_mod_val(copy(), mod.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::mod(long mod) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->mod(isl::val(ctx(), mod)); +} + +isl::pw_aff pw_aff::mul(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_mul(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned pw_aff::n_piece() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).n_piece(); +} + +isl::set pw_aff::ne_set(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_ne_set(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::param_on_domain(isl::set domain, isl::id id) +{ + if (domain.is_null() || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = domain.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_param_on_domain_id(domain.release(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set pw_aff::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool pw_aff::plain_is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).plain_is_empty(); +} + +bool pw_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_equal(multi2); +} + +bool pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).plain_is_equal(multi2); +} + +bool pw_aff::plain_is_equal(const isl::pw_aff &pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_plain_is_equal(get(), pwaff2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool pw_aff::plain_is_equal(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).plain_is_equal(pma2); +} + +bool pw_aff::plain_is_equal(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).plain_is_equal(upa2); +} + +bool pw_aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).plain_is_equal(upma2); +} + +bool pw_aff::plain_is_equal(const isl::aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::pw_aff(pwaff2)); +} + +isl::pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).preimage_domain_wrapped_domain(pma2); +} + +isl::union_pw_multi_aff pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::multi_pw_aff pw_aff::product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).product(multi2); +} + +isl::pw_multi_aff pw_aff::product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).product(pma2); +} + +isl::pw_aff pw_aff::pullback(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_pullback_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::pullback(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_pullback_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::pullback(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_pullback_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff pw_aff::pullback(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).pullback(upma); +} + +isl::pw_multi_aff_list pw_aff::pw_multi_aff_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).pw_multi_aff_list(); +} + +isl::pw_multi_aff pw_aff::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_factor_domain(); +} + +isl::pw_multi_aff pw_aff::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_factor_range(); +} + +isl::multi_pw_aff pw_aff::range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_product(multi2); +} + +isl::multi_union_pw_aff pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).range_product(multi2); +} + +isl::pw_multi_aff pw_aff::range_product(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_product(pma2); +} + +isl::union_pw_multi_aff pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).range_product(upma2); +} + +isl::id pw_aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).range_tuple_id(); +} + +isl::multi_pw_aff pw_aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).reset_range_tuple_id(); +} + +isl::pw_aff pw_aff::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::pw_multi_aff pw_aff::scale(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).scale(mv); +} + +isl::pw_aff pw_aff::scale_down(isl::val f) const +{ + if (!ptr || f.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_scale_down_val(copy(), f.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::scale_down(long f) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), f)); +} + +isl::pw_multi_aff pw_aff::scale_down(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).scale_down(mv); +} + +isl::multi_pw_aff pw_aff::set_at(int pos, const isl::pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).set_at(pos, el); +} + +isl::multi_union_pw_aff pw_aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).set_at(pos, el); +} + +isl::pw_multi_aff pw_aff::set_range_tuple(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).set_range_tuple(id); +} + +isl::pw_multi_aff pw_aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned pw_aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).size(); +} + +isl::space pw_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space pw_aff::get_space() const +{ + return space(); +} + +isl::multi_pw_aff pw_aff::sub(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).sub(multi2); +} + +isl::multi_union_pw_aff pw_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).sub(multi2); +} + +isl::pw_aff pw_aff::sub(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_sub(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_aff::sub(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).sub(pma2); +} + +isl::union_pw_aff pw_aff::sub(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).sub(upa2); +} + +isl::union_pw_multi_aff pw_aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).sub(upma2); +} + +isl::pw_aff pw_aff::sub(const isl::aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::pw_aff(pwaff2)); +} + +isl::pw_aff pw_aff::subtract_domain(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_subtract_domain(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff pw_aff::subtract_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).subtract_domain(space); +} + +isl::union_pw_aff pw_aff::subtract_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).subtract_domain(uset); +} + +isl::pw_aff pw_aff::subtract_domain(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract_domain(isl::set(set)); +} + +isl::pw_aff pw_aff::subtract_domain(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract_domain(isl::set(set)); +} + +isl::pw_aff pw_aff::tdiv_q(isl::pw_aff pa2) const +{ + if (!ptr || pa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_tdiv_q(copy(), pa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff::tdiv_r(isl::pw_aff pa2) const +{ + if (!ptr || pa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_tdiv_r(copy(), pa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff_list pw_aff::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_aff::to_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).to_multi_pw_aff(); +} + +isl::union_pw_aff pw_aff::to_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_to_union_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_aff::to_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).to_union_pw_multi_aff(); +} + +isl::multi_pw_aff pw_aff::unbind_params_insert_domain(const isl::multi_id &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).unbind_params_insert_domain(domain); +} + +isl::multi_pw_aff pw_aff::union_add(const isl::multi_pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).union_add(mpa2); +} + +isl::multi_union_pw_aff pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).union_add(mupa2); +} + +isl::pw_aff pw_aff::union_add(isl::pw_aff pwaff2) const +{ + if (!ptr || pwaff2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_union_add(copy(), pwaff2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_aff::union_add(const isl::pw_multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::pw_multi_aff(*this).union_add(pma2); +} + +isl::union_pw_aff pw_aff::union_add(const isl::union_pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).union_add(upa2); +} + +isl::union_pw_multi_aff pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_aff(*this).union_add(upma2); +} + +isl::pw_aff pw_aff::union_add(const isl::aff &pwaff2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::pw_aff(pwaff2)); +} + +inline std::ostream &operator<<(std::ostream &os, const pw_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_pw_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::pw_aff_list +pw_aff_list manage(__isl_take isl_pw_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return pw_aff_list(ptr); +} +pw_aff_list manage_copy(__isl_keep isl_pw_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_aff_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_pw_aff_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return pw_aff_list(ptr); +} + +pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr) + : ptr(ptr) {} + +pw_aff_list::pw_aff_list() + : ptr(nullptr) {} + +pw_aff_list::pw_aff_list(const pw_aff_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_aff_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +pw_aff_list::pw_aff_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_aff_list::pw_aff_list(isl::pw_aff el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_from_pw_aff(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_aff_list::pw_aff_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_aff_list &pw_aff_list::operator=(pw_aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_aff_list::~pw_aff_list() { + if (ptr) + isl_pw_aff_list_free(ptr); +} + +__isl_give isl_pw_aff_list *pw_aff_list::copy() const & { + return isl_pw_aff_list_copy(ptr); +} + +__isl_keep isl_pw_aff_list *pw_aff_list::get() const { + return ptr; +} + +__isl_give isl_pw_aff_list *pw_aff_list::release() { + isl_pw_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_aff_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx pw_aff_list::ctx() const { + return isl::ctx(isl_pw_aff_list_get_ctx(ptr)); +} + +isl::pw_aff_list pw_aff_list::add(isl::pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_aff_list::get_at(int index) const +{ + return at(index); +} + +isl::pw_aff_list pw_aff_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff_list pw_aff_list::concat(isl::pw_aff_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff_list pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void pw_aff_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_pw_aff_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void pw_aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_pw_aff *arg_0, isl_pw_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_pw_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::pw_aff_list pw_aff_list::insert(unsigned int pos, isl::pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff_list pw_aff_list::set_at(int index, isl::pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned pw_aff_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_aff_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const pw_aff_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_aff_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_pw_aff_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::pw_multi_aff +pw_multi_aff manage(__isl_take isl_pw_multi_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return pw_multi_aff(ptr); +} +pw_multi_aff manage_copy(__isl_keep isl_pw_multi_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_multi_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_pw_multi_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return pw_multi_aff(ptr); +} + +pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr) + : ptr(ptr) {} + +pw_multi_aff::pw_multi_aff() + : ptr(nullptr) {} + +pw_multi_aff::pw_multi_aff(const pw_multi_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_multi_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +pw_multi_aff::pw_multi_aff(isl::multi_aff ma) +{ + if (ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ma.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_from_multi_aff(ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_multi_aff::pw_multi_aff(isl::pw_aff pa) +{ + if (pa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_from_pw_aff(pa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_multi_aff::pw_multi_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_multi_aff &pw_multi_aff::operator=(pw_multi_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_multi_aff::~pw_multi_aff() { + if (ptr) + isl_pw_multi_aff_free(ptr); +} + +__isl_give isl_pw_multi_aff *pw_multi_aff::copy() const & { + return isl_pw_multi_aff_copy(ptr); +} + +__isl_keep isl_pw_multi_aff *pw_multi_aff::get() const { + return ptr; +} + +__isl_give isl_pw_multi_aff *pw_multi_aff::release() { + isl_pw_multi_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_multi_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx pw_multi_aff::ctx() const { + return isl::ctx(isl_pw_multi_aff_get_ctx(ptr)); +} + +isl::multi_pw_aff pw_multi_aff::add(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).add(multi2); +} + +isl::multi_union_pw_aff pw_multi_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).add(multi2); +} + +isl::pw_multi_aff pw_multi_aff::add(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_add(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).add(upma2); +} + +isl::pw_multi_aff pw_multi_aff::add(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::add(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::add_constant(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_add_constant_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::add_constant(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_add_constant_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::add_constant(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_constant(isl::val(ctx(), v)); +} + +isl::union_pw_multi_aff pw_multi_aff::apply(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).apply(upma2); +} + +isl::map pw_multi_aff::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_as_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff pw_multi_aff::as_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_as_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff pw_multi_aff::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff pw_multi_aff::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).as_pw_multi_aff(); +} + +isl::set pw_multi_aff::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_as_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map pw_multi_aff::as_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).as_union_map(); +} + +isl::pw_aff pw_multi_aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_get_at(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff pw_multi_aff::get_at(int pos) const +{ + return at(pos); +} + +isl::set pw_multi_aff::bind(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).bind(tuple); +} + +isl::pw_multi_aff pw_multi_aff::bind_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_bind_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::bind_domain_wrapped_domain(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_bind_domain_wrapped_domain(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set pw_multi_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::domain_map(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_domain_map(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::extract_pw_multi_aff(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space); +} + +isl::multi_pw_aff pw_multi_aff::flat_range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).flat_range_product(multi2); +} + +isl::multi_union_pw_aff pw_multi_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).flat_range_product(multi2); +} + +isl::pw_multi_aff pw_multi_aff::flat_range_product(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_flat_range_product(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).flat_range_product(upma2); +} + +isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::flat_range_product(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->flat_range_product(isl::pw_multi_aff(pma2)); +} + +void pw_multi_aff::foreach_piece(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, isl_multi_aff *arg_1, void *arg_2) -> isl_stat { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + (data->func)(manage(arg_0), manage(arg_1)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_pw_multi_aff_foreach_piece(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::pw_multi_aff pw_multi_aff::gist(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_gist(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).gist(context); +} + +isl::pw_multi_aff pw_multi_aff::gist(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(set)); +} + +isl::pw_multi_aff pw_multi_aff::gist(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(set)); +} + +isl::pw_multi_aff pw_multi_aff::gist_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_gist_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool pw_multi_aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_pw_aff pw_multi_aff::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).identity(); +} + +isl::pw_multi_aff pw_multi_aff::identity_on_domain(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_identity_on_domain_space(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::insert_domain(isl::space domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::intersect_domain(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_intersect_domain(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).intersect_domain(space); +} + +isl::union_pw_multi_aff pw_multi_aff::intersect_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).intersect_domain(uset); +} + +isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(set)); +} + +isl::pw_multi_aff pw_multi_aff::intersect_domain(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect_domain(isl::set(set)); +} + +isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_domain(uset); +} + +isl::union_pw_multi_aff pw_multi_aff::intersect_domain_wrapped_range(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).intersect_domain_wrapped_range(uset); +} + +isl::pw_multi_aff pw_multi_aff::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool pw_multi_aff::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_involves_locals(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool pw_multi_aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).involves_nan(); +} + +bool pw_multi_aff::involves_param(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).involves_param(id); +} + +bool pw_multi_aff::involves_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->involves_param(isl::id(ctx(), id)); +} + +bool pw_multi_aff::involves_param(const isl::id_list &list) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).involves_param(list); +} + +bool pw_multi_aff::isa_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_isa_multi_aff(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool pw_multi_aff::isa_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).isa_pw_multi_aff(); +} + +isl::pw_aff_list pw_multi_aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).list(); +} + +isl::multi_pw_aff pw_multi_aff::max(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).max(multi2); +} + +isl::multi_val pw_multi_aff::max_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_max_multi_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_multi_aff::min(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).min(multi2); +} + +isl::multi_val pw_multi_aff::min_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_min_multi_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::multi_val_on_domain(isl::set domain, isl::multi_val mv) +{ + if (domain.is_null() || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = domain.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_multi_val_on_domain(domain.release(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned pw_multi_aff::n_piece() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_n_piece(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_pw_aff pw_multi_aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).neg(); +} + +bool pw_multi_aff::plain_is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).plain_is_empty(); +} + +bool pw_multi_aff::plain_is_equal(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).plain_is_equal(multi2); +} + +bool pw_multi_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).plain_is_equal(multi2); +} + +bool pw_multi_aff::plain_is_equal(const isl::pw_multi_aff &pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_plain_is_equal(get(), pma2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool pw_multi_aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).plain_is_equal(upma2); +} + +bool pw_multi_aff::plain_is_equal(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::pw_multi_aff(pma2)); +} + +bool pw_multi_aff::plain_is_equal(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::preimage_domain_wrapped_domain(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->preimage_domain_wrapped_domain(isl::pw_multi_aff(pma2)); +} + +isl::multi_pw_aff pw_multi_aff::product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).product(multi2); +} + +isl::pw_multi_aff pw_multi_aff::product(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_product(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::product(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->product(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::product(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->product(isl::pw_multi_aff(pma2)); +} + +isl::multi_pw_aff pw_multi_aff::pullback(const isl::multi_pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).pullback(mpa2); +} + +isl::pw_multi_aff pw_multi_aff::pullback(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_pullback_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::pullback(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_pullback_pw_multi_aff(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::pullback(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).pullback(upma2); +} + +isl::pw_multi_aff_list pw_multi_aff::pw_multi_aff_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).pw_multi_aff_list(); +} + +isl::pw_multi_aff pw_multi_aff::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_range_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_range_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::range_map(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_range_map(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_multi_aff::range_product(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).range_product(multi2); +} + +isl::multi_union_pw_aff pw_multi_aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).range_product(multi2); +} + +isl::pw_multi_aff pw_multi_aff::range_product(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_range_product(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).range_product(upma2); +} + +isl::pw_multi_aff pw_multi_aff::range_product(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::range_product(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->range_product(isl::pw_multi_aff(pma2)); +} + +isl::id pw_multi_aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id pw_multi_aff::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::multi_pw_aff pw_multi_aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).reset_range_tuple_id(); +} + +isl::pw_multi_aff pw_multi_aff::scale(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_scale_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::scale(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_scale_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::pw_multi_aff pw_multi_aff::scale_down(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_scale_down_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::scale_down(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_scale_down_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_pw_aff pw_multi_aff::set_at(int pos, const isl::pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).set_at(pos, el); +} + +isl::multi_union_pw_aff pw_multi_aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).set_at(pos, el); +} + +isl::pw_multi_aff pw_multi_aff::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned pw_multi_aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).size(); +} + +isl::space pw_multi_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space pw_multi_aff::get_space() const +{ + return space(); +} + +isl::multi_pw_aff pw_multi_aff::sub(const isl::multi_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).sub(multi2); +} + +isl::multi_union_pw_aff pw_multi_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).sub(multi2); +} + +isl::pw_multi_aff pw_multi_aff::sub(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_sub(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).sub(upma2); +} + +isl::pw_multi_aff pw_multi_aff::sub(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::sub(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::subtract_domain(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_subtract_domain(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).subtract_domain(space); +} + +isl::union_pw_multi_aff pw_multi_aff::subtract_domain(const isl::union_set &uset) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).subtract_domain(uset); +} + +isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::basic_set &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract_domain(isl::set(set)); +} + +isl::pw_multi_aff pw_multi_aff::subtract_domain(const isl::point &set) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract_domain(isl::set(set)); +} + +isl::pw_multi_aff_list pw_multi_aff::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_multi_aff::to_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_to_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::to_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_to_union_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff pw_multi_aff::unbind_params_insert_domain(const isl::multi_id &domain) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).unbind_params_insert_domain(domain); +} + +isl::multi_pw_aff pw_multi_aff::union_add(const isl::multi_pw_aff &mpa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).union_add(mpa2); +} + +isl::multi_union_pw_aff pw_multi_aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_pw_aff(*this).union_add(mupa2); +} + +isl::pw_multi_aff pw_multi_aff::union_add(isl::pw_multi_aff pma2) const +{ + if (!ptr || pma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_union_add(copy(), pma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff pw_multi_aff::union_add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).union_add(upma2); +} + +isl::pw_multi_aff pw_multi_aff::union_add(const isl::multi_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::union_add(const isl::pw_aff &pma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::pw_multi_aff(pma2)); +} + +isl::pw_multi_aff pw_multi_aff::zero(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_zero(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_multi_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_pw_multi_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::pw_multi_aff_list +pw_multi_aff_list manage(__isl_take isl_pw_multi_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return pw_multi_aff_list(ptr); +} +pw_multi_aff_list manage_copy(__isl_keep isl_pw_multi_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_multi_aff_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_pw_multi_aff_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return pw_multi_aff_list(ptr); +} + +pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr) + : ptr(ptr) {} + +pw_multi_aff_list::pw_multi_aff_list() + : ptr(nullptr) {} + +pw_multi_aff_list::pw_multi_aff_list(const pw_multi_aff_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_multi_aff_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_multi_aff_list::pw_multi_aff_list(isl::pw_multi_aff el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_from_pw_multi_aff(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_multi_aff_list::pw_multi_aff_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +pw_multi_aff_list &pw_multi_aff_list::operator=(pw_multi_aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +pw_multi_aff_list::~pw_multi_aff_list() { + if (ptr) + isl_pw_multi_aff_list_free(ptr); +} + +__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::copy() const & { + return isl_pw_multi_aff_list_copy(ptr); +} + +__isl_keep isl_pw_multi_aff_list *pw_multi_aff_list::get() const { + return ptr; +} + +__isl_give isl_pw_multi_aff_list *pw_multi_aff_list::release() { + isl_pw_multi_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool pw_multi_aff_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx pw_multi_aff_list::ctx() const { + return isl::ctx(isl_pw_multi_aff_list_get_ctx(ptr)); +} + +isl::pw_multi_aff_list pw_multi_aff_list::add(isl::pw_multi_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff pw_multi_aff_list::get_at(int index) const +{ + return at(index); +} + +isl::pw_multi_aff_list pw_multi_aff_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff_list pw_multi_aff_list::concat(isl::pw_multi_aff_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff_list pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void pw_multi_aff_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_multi_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_pw_multi_aff_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void pw_multi_aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_pw_multi_aff *arg_0, isl_pw_multi_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_pw_multi_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_pw_multi_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::pw_multi_aff_list pw_multi_aff_list::insert(unsigned int pos, isl::pw_multi_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff_list pw_multi_aff_list::set_at(int index, isl::pw_multi_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned pw_multi_aff_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_pw_multi_aff_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const pw_multi_aff_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_pw_multi_aff_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_pw_multi_aff_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule +schedule manage(__isl_take isl_schedule *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return schedule(ptr); +} +schedule manage_copy(__isl_keep isl_schedule *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_schedule_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return schedule(ptr); +} + +schedule::schedule(__isl_take isl_schedule *ptr) + : ptr(ptr) {} + +schedule::schedule() + : ptr(nullptr) {} + +schedule::schedule(const schedule &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +schedule::schedule(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +schedule &schedule::operator=(schedule obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +schedule::~schedule() { + if (ptr) + isl_schedule_free(ptr); +} + +__isl_give isl_schedule *schedule::copy() const & { + return isl_schedule_copy(ptr); +} + +__isl_keep isl_schedule *schedule::get() const { + return ptr; +} + +__isl_give isl_schedule *schedule::release() { + isl_schedule *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool schedule::is_null() const { + return ptr == nullptr; +} + +isl::ctx schedule::ctx() const { + return isl::ctx(isl_schedule_get_ctx(ptr)); +} + +isl::union_set schedule::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_get_domain(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set schedule::get_domain() const +{ + return domain(); +} + +isl::schedule schedule::from_domain(isl::union_set domain) +{ + if (domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = domain.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_from_domain(domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule::map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_get_map(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule::get_map() const +{ + return map(); +} + +isl::schedule schedule::pullback(isl::union_pw_multi_aff upma) const +{ + if (!ptr || upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_pullback_union_pw_multi_aff(copy(), upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule::root() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_get_root(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule::get_root() const +{ + return root(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_constraints +schedule_constraints manage(__isl_take isl_schedule_constraints *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return schedule_constraints(ptr); +} +schedule_constraints manage_copy(__isl_keep isl_schedule_constraints *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_constraints_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_schedule_constraints_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return schedule_constraints(ptr); +} + +schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr) + : ptr(ptr) {} + +schedule_constraints::schedule_constraints() + : ptr(nullptr) {} + +schedule_constraints::schedule_constraints(const schedule_constraints &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_constraints_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +schedule_constraints::schedule_constraints(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +schedule_constraints &schedule_constraints::operator=(schedule_constraints obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +schedule_constraints::~schedule_constraints() { + if (ptr) + isl_schedule_constraints_free(ptr); +} + +__isl_give isl_schedule_constraints *schedule_constraints::copy() const & { + return isl_schedule_constraints_copy(ptr); +} + +__isl_keep isl_schedule_constraints *schedule_constraints::get() const { + return ptr; +} + +__isl_give isl_schedule_constraints *schedule_constraints::release() { + isl_schedule_constraints *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool schedule_constraints::is_null() const { + return ptr == nullptr; +} + +isl::ctx schedule_constraints::ctx() const { + return isl::ctx(isl_schedule_constraints_get_ctx(ptr)); +} + +isl::union_map schedule_constraints::coincidence() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_coincidence(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::get_coincidence() const +{ + return coincidence(); +} + +isl::schedule schedule_constraints::compute_schedule() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_compute_schedule(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::conditional_validity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_conditional_validity(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::get_conditional_validity() const +{ + return conditional_validity(); +} + +isl::union_map schedule_constraints::conditional_validity_condition() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_conditional_validity_condition(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::get_conditional_validity_condition() const +{ + return conditional_validity_condition(); +} + +isl::set schedule_constraints::context() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_context(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set schedule_constraints::get_context() const +{ + return context(); +} + +isl::union_set schedule_constraints::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_domain(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set schedule_constraints::get_domain() const +{ + return domain(); +} + +isl::schedule_constraints schedule_constraints::on_domain(isl::union_set domain) +{ + if (domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = domain.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_on_domain(domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::proximity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_proximity(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::get_proximity() const +{ + return proximity(); +} + +isl::schedule_constraints schedule_constraints::set_coincidence(isl::union_map coincidence) const +{ + if (!ptr || coincidence.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_set_coincidence(copy(), coincidence.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_constraints schedule_constraints::set_conditional_validity(isl::union_map condition, isl::union_map validity) const +{ + if (!ptr || condition.is_null() || validity.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_set_conditional_validity(copy(), condition.release(), validity.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_constraints schedule_constraints::set_context(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_set_context(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_constraints schedule_constraints::set_proximity(isl::union_map proximity) const +{ + if (!ptr || proximity.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_set_proximity(copy(), proximity.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_constraints schedule_constraints::set_validity(isl::union_map validity) const +{ + if (!ptr || validity.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_set_validity(copy(), validity.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::validity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_constraints_get_validity(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_constraints::get_validity() const +{ + return validity(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_constraints &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_constraints_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_constraints_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node +schedule_node manage(__isl_take isl_schedule_node *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return schedule_node(ptr); +} +schedule_node manage_copy(__isl_keep isl_schedule_node *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_schedule_node_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return schedule_node(ptr); +} + +schedule_node::schedule_node(__isl_take isl_schedule_node *ptr) + : ptr(ptr) {} + +schedule_node::schedule_node() + : ptr(nullptr) {} + +schedule_node::schedule_node(const schedule_node &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +schedule_node &schedule_node::operator=(schedule_node obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +schedule_node::~schedule_node() { + if (ptr) + isl_schedule_node_free(ptr); +} + +__isl_give isl_schedule_node *schedule_node::copy() const & { + return isl_schedule_node_copy(ptr); +} + +__isl_keep isl_schedule_node *schedule_node::get() const { + return ptr; +} + +__isl_give isl_schedule_node *schedule_node::release() { + isl_schedule_node *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool schedule_node::is_null() const { + return ptr == nullptr; +} + +template +bool schedule_node::isa_type(T subtype) const +{ + if (is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl_schedule_node_get_type(get()) == subtype; +} +template +bool schedule_node::isa() const +{ + return isa_type(T::type); +} +template +T schedule_node::as() const +{ + if (!isa()) + exception::throw_invalid("not an object of the requested subtype", __FILE__, __LINE__); + return T(copy()); +} + +isl::ctx schedule_node::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::schedule_node schedule_node::ancestor(int generation) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_ancestor(copy(), generation); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned schedule_node::ancestor_child_position(const isl::schedule_node &ancestor) const +{ + if (!ptr || ancestor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_ancestor_child_position(get(), ancestor.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +unsigned schedule_node::get_ancestor_child_position(const isl::schedule_node &ancestor) const +{ + return ancestor_child_position(ancestor); +} + +isl::schedule_node schedule_node::child(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_child(copy(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned schedule_node::child_position() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_child_position(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +unsigned schedule_node::get_child_position() const +{ + return child_position(); +} + +bool schedule_node::every_descendant(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct test_data { + std::function func; + std::exception_ptr eptr; + } test_data = { test }; + auto test_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + auto res = isl_schedule_node_every_descendant(get(), test_lambda, &test_data); + if (test_data.eptr) + std::rethrow_exception(test_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::schedule_node schedule_node::first_child() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_first_child(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void schedule_node::foreach_ancestor_top_down(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage_copy(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_schedule_node_foreach_ancestor_top_down(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void schedule_node::foreach_descendant_top_down(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + auto res = isl_schedule_node_foreach_descendant_top_down(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::schedule_node schedule_node::from_domain(isl::union_set domain) +{ + if (domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = domain.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_from_domain(domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::from_extension(isl::union_map extension) +{ + if (extension.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = extension.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_from_extension(extension.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::graft_after(isl::schedule_node graft) const +{ + if (!ptr || graft.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_graft_after(copy(), graft.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::graft_before(isl::schedule_node graft) const +{ + if (!ptr || graft.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_graft_before(copy(), graft.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool schedule_node::has_children() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_has_children(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool schedule_node::has_next_sibling() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_has_next_sibling(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool schedule_node::has_parent() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_has_parent(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool schedule_node::has_previous_sibling() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_has_previous_sibling(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::schedule_node schedule_node::insert_context(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_context(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::insert_filter(isl::union_set filter) const +{ + if (!ptr || filter.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_filter(copy(), filter.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::insert_guard(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_guard(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::insert_mark(isl::id mark) const +{ + if (!ptr || mark.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_mark(copy(), mark.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::insert_mark(const std::string &mark) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->insert_mark(isl::id(ctx(), mark)); +} + +isl::schedule_node schedule_node::insert_partial_schedule(isl::multi_union_pw_aff schedule) const +{ + if (!ptr || schedule.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_partial_schedule(copy(), schedule.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::insert_sequence(isl::union_set_list filters) const +{ + if (!ptr || filters.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_sequence(copy(), filters.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::insert_set(isl::union_set_list filters) const +{ + if (!ptr || filters.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_insert_set(copy(), filters.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool schedule_node::is_equal(const isl::schedule_node &node2) const +{ + if (!ptr || node2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_is_equal(get(), node2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool schedule_node::is_subtree_anchored() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_is_subtree_anchored(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::schedule_node schedule_node::map_descendant_bottom_up(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_schedule_node *arg_0, void *arg_1) -> isl_schedule_node * { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage(arg_0)); + return ret.release(); + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return NULL; + } + }; + auto res = isl_schedule_node_map_descendant_bottom_up(copy(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned schedule_node::n_children() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_n_children(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::schedule_node schedule_node::next_sibling() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_next_sibling(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::order_after(isl::union_set filter) const +{ + if (!ptr || filter.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_order_after(copy(), filter.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::order_before(isl::union_set filter) const +{ + if (!ptr || filter.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_order_before(copy(), filter.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::parent() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_parent(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff schedule_node::prefix_schedule_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff schedule_node::get_prefix_schedule_multi_union_pw_aff() const +{ + return prefix_schedule_multi_union_pw_aff(); +} + +isl::union_map schedule_node::prefix_schedule_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_prefix_schedule_union_map(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_node::get_prefix_schedule_union_map() const +{ + return prefix_schedule_union_map(); +} + +isl::union_pw_multi_aff schedule_node::prefix_schedule_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff schedule_node::get_prefix_schedule_union_pw_multi_aff() const +{ + return prefix_schedule_union_pw_multi_aff(); +} + +isl::schedule_node schedule_node::previous_sibling() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_previous_sibling(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::root() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_root(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule schedule_node::schedule() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_schedule(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule schedule_node::get_schedule() const +{ + return schedule(); +} + +isl::schedule_node schedule_node::shared_ancestor(const isl::schedule_node &node2) const +{ + if (!ptr || node2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_shared_ancestor(get(), node2.get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::schedule_node schedule_node::get_shared_ancestor(const isl::schedule_node &node2) const +{ + return shared_ancestor(node2); +} + +unsigned schedule_node::tree_depth() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_get_tree_depth(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +unsigned schedule_node::get_tree_depth() const +{ + return tree_depth(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_band +schedule_node_band::schedule_node_band(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_band::schedule_node_band() + : schedule_node() {} + +schedule_node_band::schedule_node_band(const schedule_node_band &obj) + : schedule_node(obj) +{ +} + +schedule_node_band &schedule_node_band::operator=(schedule_node_band obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_band::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::union_set schedule_node_band::ast_build_options() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_get_ast_build_options(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set schedule_node_band::get_ast_build_options() const +{ + return ast_build_options(); +} + +isl::set schedule_node_band::ast_isolate_option() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_get_ast_isolate_option(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set schedule_node_band::get_ast_isolate_option() const +{ + return ast_isolate_option(); +} + +bool schedule_node_band::member_get_coincident(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_member_get_coincident(get(), pos); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +schedule_node_band schedule_node_band::member_set_coincident(int pos, int coincident) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_member_set_coincident(copy(), pos, coincident); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::mod(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_mod(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +unsigned schedule_node_band::n_member() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_n_member(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_union_pw_aff schedule_node_band::partial_schedule() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_get_partial_schedule(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff schedule_node_band::get_partial_schedule() const +{ + return partial_schedule(); +} + +bool schedule_node_band::permutable() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_get_permutable(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool schedule_node_band::get_permutable() const +{ + return permutable(); +} + +schedule_node_band schedule_node_band::scale(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_scale(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::scale_down(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_scale_down(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::set_ast_build_options(isl::union_set options) const +{ + if (!ptr || options.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_set_ast_build_options(copy(), options.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::set_permutable(int permutable) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_set_permutable(copy(), permutable); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::shift(isl::multi_union_pw_aff shift) const +{ + if (!ptr || shift.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_shift(copy(), shift.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::split(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_split(copy(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::tile(isl::multi_val sizes) const +{ + if (!ptr || sizes.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_tile(copy(), sizes.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_default(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_default); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_atomic(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_atomic); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_unroll(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_unroll); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +schedule_node_band schedule_node_band::member_set_ast_loop_separate(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_band_member_set_ast_loop_type(copy(), pos, isl_ast_loop_separate); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res).as(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_band &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_context +schedule_node_context::schedule_node_context(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_context::schedule_node_context() + : schedule_node() {} + +schedule_node_context::schedule_node_context(const schedule_node_context &obj) + : schedule_node(obj) +{ +} + +schedule_node_context &schedule_node_context::operator=(schedule_node_context obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_context::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::set schedule_node_context::context() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_context_get_context(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set schedule_node_context::get_context() const +{ + return context(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_context &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_domain +schedule_node_domain::schedule_node_domain(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_domain::schedule_node_domain() + : schedule_node() {} + +schedule_node_domain::schedule_node_domain(const schedule_node_domain &obj) + : schedule_node(obj) +{ +} + +schedule_node_domain &schedule_node_domain::operator=(schedule_node_domain obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_domain::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::union_set schedule_node_domain::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_domain_get_domain(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set schedule_node_domain::get_domain() const +{ + return domain(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_domain &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_expansion +schedule_node_expansion::schedule_node_expansion(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_expansion::schedule_node_expansion() + : schedule_node() {} + +schedule_node_expansion::schedule_node_expansion(const schedule_node_expansion &obj) + : schedule_node(obj) +{ +} + +schedule_node_expansion &schedule_node_expansion::operator=(schedule_node_expansion obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_expansion::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::union_pw_multi_aff schedule_node_expansion::contraction() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_expansion_get_contraction(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff schedule_node_expansion::get_contraction() const +{ + return contraction(); +} + +isl::union_map schedule_node_expansion::expansion() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_expansion_get_expansion(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_node_expansion::get_expansion() const +{ + return expansion(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_expansion &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_extension +schedule_node_extension::schedule_node_extension(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_extension::schedule_node_extension() + : schedule_node() {} + +schedule_node_extension::schedule_node_extension(const schedule_node_extension &obj) + : schedule_node(obj) +{ +} + +schedule_node_extension &schedule_node_extension::operator=(schedule_node_extension obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_extension::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::union_map schedule_node_extension::extension() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_extension_get_extension(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map schedule_node_extension::get_extension() const +{ + return extension(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_extension &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_filter +schedule_node_filter::schedule_node_filter(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_filter::schedule_node_filter() + : schedule_node() {} + +schedule_node_filter::schedule_node_filter(const schedule_node_filter &obj) + : schedule_node(obj) +{ +} + +schedule_node_filter &schedule_node_filter::operator=(schedule_node_filter obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_filter::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::union_set schedule_node_filter::filter() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_filter_get_filter(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set schedule_node_filter::get_filter() const +{ + return filter(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_filter &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_guard +schedule_node_guard::schedule_node_guard(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_guard::schedule_node_guard() + : schedule_node() {} + +schedule_node_guard::schedule_node_guard(const schedule_node_guard &obj) + : schedule_node(obj) +{ +} + +schedule_node_guard &schedule_node_guard::operator=(schedule_node_guard obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_guard::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +isl::set schedule_node_guard::guard() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_schedule_node_guard_get_guard(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set schedule_node_guard::get_guard() const +{ + return guard(); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_guard &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_leaf +schedule_node_leaf::schedule_node_leaf(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_leaf::schedule_node_leaf() + : schedule_node() {} + +schedule_node_leaf::schedule_node_leaf(const schedule_node_leaf &obj) + : schedule_node(obj) +{ +} + +schedule_node_leaf &schedule_node_leaf::operator=(schedule_node_leaf obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_leaf::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_leaf &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_mark +schedule_node_mark::schedule_node_mark(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_mark::schedule_node_mark() + : schedule_node() {} + +schedule_node_mark::schedule_node_mark(const schedule_node_mark &obj) + : schedule_node(obj) +{ +} + +schedule_node_mark &schedule_node_mark::operator=(schedule_node_mark obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_mark::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_mark &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_sequence +schedule_node_sequence::schedule_node_sequence(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_sequence::schedule_node_sequence() + : schedule_node() {} + +schedule_node_sequence::schedule_node_sequence(const schedule_node_sequence &obj) + : schedule_node(obj) +{ +} + +schedule_node_sequence &schedule_node_sequence::operator=(schedule_node_sequence obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_sequence::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_sequence &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::schedule_node_set +schedule_node_set::schedule_node_set(__isl_take isl_schedule_node *ptr) + : schedule_node(ptr) {} + +schedule_node_set::schedule_node_set() + : schedule_node() {} + +schedule_node_set::schedule_node_set(const schedule_node_set &obj) + : schedule_node(obj) +{ +} + +schedule_node_set &schedule_node_set::operator=(schedule_node_set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +isl::ctx schedule_node_set::ctx() const { + return isl::ctx(isl_schedule_node_get_ctx(ptr)); +} + +inline std::ostream &operator<<(std::ostream &os, const schedule_node_set &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_schedule_node_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_schedule_node_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::set +set manage(__isl_take isl_set *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return set(ptr); +} +set manage_copy(__isl_keep isl_set *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_set_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_set_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return set(ptr); +} + +set::set(__isl_take isl_set *ptr) + : ptr(ptr) {} + +set::set() + : ptr(nullptr) {} + +set::set(const set &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_set_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +set::set(isl::basic_set bset) +{ + if (bset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = bset.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_from_basic_set(bset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +set::set(isl::point pnt) +{ + if (pnt.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pnt.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_from_point(pnt.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +set::set(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +set &set::operator=(set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +set::~set() { + if (ptr) + isl_set_free(ptr); +} + +__isl_give isl_set *set::copy() const & { + return isl_set_copy(ptr); +} + +__isl_keep isl_set *set::get() const { + return ptr; +} + +__isl_give isl_set *set::release() { + isl_set *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool set::is_null() const { + return ptr == nullptr; +} + +isl::ctx set::ctx() const { + return isl::ctx(isl_set_get_ctx(ptr)); +} + +isl::basic_set set::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_affine_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::apply(isl::map map) const +{ + if (!ptr || map.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_apply(copy(), map.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::apply(const isl::union_map &umap) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).apply(umap); +} + +isl::set set::apply(const isl::basic_map &map) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->apply(isl::map(map)); +} + +isl::pw_multi_aff set::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_as_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).as_set(); +} + +isl::set set::bind(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_bind(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::complement() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_complement(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).compute_divs(); +} + +isl::set set::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_detect_equalities(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val set::dim_max_val(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_dim_max_val(copy(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val set::dim_min_val(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_dim_min_val(copy(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::empty(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_empty(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool set::every_set(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).every_set(test); +} + +isl::set set::extract_set(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).extract_set(space); +} + +isl::set set::flatten() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_flatten(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void set::foreach_basic_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_basic_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_set_foreach_basic_set(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void set::foreach_point(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_set_foreach_point(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void set::foreach_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).foreach_set(fn); +} + +isl::set set::gist(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::gist(const isl::union_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).gist(context); +} + +isl::set set::gist(const isl::basic_set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::set set::gist(const isl::point &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gist(isl::set(context)); +} + +isl::set set::gist_params(isl::set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_gist_params(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map set::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_identity(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff set::indicator_function() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_indicator_function(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map set::insert_domain(isl::space domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::intersect(isl::set set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_intersect(copy(), set2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::intersect(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).intersect(uset2); +} + +isl::set set::intersect(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect(isl::set(set2)); +} + +isl::set set::intersect(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->intersect(isl::set(set2)); +} + +isl::set set::intersect_params(isl::set params) const +{ + if (!ptr || params.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_intersect_params(copy(), params.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool set::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_involves_locals(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_disjoint(const isl::set &set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_disjoint(get(), set2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_disjoint(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).is_disjoint(uset2); +} + +bool set::is_disjoint(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_disjoint(isl::set(set2)); +} + +bool set::is_disjoint(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_disjoint(isl::set(set2)); +} + +bool set::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_equal(const isl::set &set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_equal(get(), set2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_equal(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).is_equal(uset2); +} + +bool set::is_equal(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_equal(isl::set(set2)); +} + +bool set::is_equal(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_equal(isl::set(set2)); +} + +bool set::is_singleton() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_singleton(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_strict_subset(const isl::set &set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_strict_subset(get(), set2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_strict_subset(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).is_strict_subset(uset2); +} + +bool set::is_strict_subset(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_strict_subset(isl::set(set2)); +} + +bool set::is_strict_subset(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_strict_subset(isl::set(set2)); +} + +bool set::is_subset(const isl::set &set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_subset(get(), set2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::is_subset(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).is_subset(uset2); +} + +bool set::is_subset(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_subset(isl::set(set2)); +} + +bool set::is_subset(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_subset(isl::set(set2)); +} + +bool set::is_wrapping() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_is_wrapping(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool set::isa_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).isa_set(); +} + +isl::fixed_box set::lattice_tile() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_get_lattice_tile(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::fixed_box set::get_lattice_tile() const +{ + return lattice_tile(); +} + +isl::set set::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_lexmax(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff set::lexmax_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_lexmax_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_lexmin(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff set::lexmin_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_lexmin_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::lower_bound(isl::multi_pw_aff lower) const +{ + if (!ptr || lower.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_lower_bound_multi_pw_aff(copy(), lower.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::lower_bound(isl::multi_val lower) const +{ + if (!ptr || lower.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_lower_bound_multi_val(copy(), lower.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff set::max_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_max_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val set::max_val(const isl::aff &obj) const +{ + if (!ptr || obj.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_max_val(get(), obj.get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff set::min_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_min_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val set::min_val(const isl::aff &obj) const +{ + if (!ptr || obj.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_min_val(get(), obj.get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned set::n_basic_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_n_basic_set(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::pw_aff set::param_pw_aff_on_domain(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_param_pw_aff_on_domain_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff set::param_pw_aff_on_domain(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->param_pw_aff_on_domain(isl::id(ctx(), id)); +} + +isl::set set::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val set::plain_multi_val_if_fixed() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_get_plain_multi_val_if_fixed(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val set::get_plain_multi_val_if_fixed() const +{ + return plain_multi_val_if_fixed(); +} + +isl::basic_set set::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_polyhedral_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::preimage(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_preimage_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::preimage(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_preimage_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::preimage(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_preimage_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::preimage(const isl::union_pw_multi_aff &upma) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).preimage(upma); +} + +isl::set set::product(isl::set set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_product(copy(), set2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_project_out_all_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::project_out_param(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_project_out_param_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::project_out_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->project_out_param(isl::id(ctx(), id)); +} + +isl::set set::project_out_param(isl::id_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_project_out_param_id_list(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff set::pw_aff_on_domain(isl::val v) const +{ + if (!ptr || v.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_pw_aff_on_domain_val(copy(), v.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_aff set::pw_aff_on_domain(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->pw_aff_on_domain(isl::val(ctx(), v)); +} + +isl::pw_multi_aff set::pw_multi_aff_on_domain(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_pw_multi_aff_on_domain_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_set set::sample() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_sample(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::point set::sample_point() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_sample_point(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list set::set_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).set_list(); +} + +isl::fixed_box set::simple_fixed_box_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_get_simple_fixed_box_hull(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::fixed_box set::get_simple_fixed_box_hull() const +{ + return simple_fixed_box_hull(); +} + +isl::space set::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space set::get_space() const +{ + return space(); +} + +isl::val set::stride(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_get_stride(get(), pos); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val set::get_stride(int pos) const +{ + return stride(pos); +} + +isl::set set::subtract(isl::set set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_subtract(copy(), set2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::subtract(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).subtract(uset2); +} + +isl::set set::subtract(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract(isl::set(set2)); +} + +isl::set set::subtract(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->subtract(isl::set(set2)); +} + +isl::set_list set::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::to_union_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_to_union_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map set::translation() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_translation(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned set::tuple_dim() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_tuple_dim(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::set set::unbind_params(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_unbind_params(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map set::unbind_params_insert_domain(isl::multi_id domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_unbind_params_insert_domain(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::unite(isl::set set2) const +{ + if (!ptr || set2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_union(copy(), set2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set set::unite(const isl::union_set &uset2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_set(*this).unite(uset2); +} + +isl::set set::unite(const isl::basic_set &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->unite(isl::set(set2)); +} + +isl::set set::unite(const isl::point &set2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->unite(isl::set(set2)); +} + +isl::set set::universe(isl::space space) +{ + if (space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = space.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_universe(space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::basic_set set::unshifted_simple_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_unshifted_simple_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map set::unwrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_unwrap(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::upper_bound(isl::multi_pw_aff upper) const +{ + if (!ptr || upper.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_upper_bound_multi_pw_aff(copy(), upper.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::upper_bound(isl::multi_val upper) const +{ + if (!ptr || upper.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_upper_bound_multi_val(copy(), upper.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set::wrapped_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_wrapped_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const set &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_set_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_set_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::set_list +set_list manage(__isl_take isl_set_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return set_list(ptr); +} +set_list manage_copy(__isl_keep isl_set_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_set_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_set_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return set_list(ptr); +} + +set_list::set_list(__isl_take isl_set_list *ptr) + : ptr(ptr) {} + +set_list::set_list() + : ptr(nullptr) {} + +set_list::set_list(const set_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_set_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +set_list::set_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +set_list::set_list(isl::set el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_from_set(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +set_list::set_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +set_list &set_list::operator=(set_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +set_list::~set_list() { + if (ptr) + isl_set_list_free(ptr); +} + +__isl_give isl_set_list *set_list::copy() const & { + return isl_set_list_copy(ptr); +} + +__isl_keep isl_set_list *set_list::get() const { + return ptr; +} + +__isl_give isl_set_list *set_list::release() { + isl_set_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool set_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx set_list::ctx() const { + return isl::ctx(isl_set_list_get_ctx(ptr)); +} + +isl::set_list set_list::add(isl::set el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set set_list::get_at(int index) const +{ + return at(index); +} + +isl::set_list set_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list set_list::concat(isl::set_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list set_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void set_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_set_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void set_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_set *arg_0, isl_set *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_set_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_set_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::set_list set_list::insert(unsigned int pos, isl::set el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list set_list::set_at(int index, isl::set el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned set_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_set_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const set_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_set_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_set_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::space +space manage(__isl_take isl_space *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return space(ptr); +} +space manage_copy(__isl_keep isl_space *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_space_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_space_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return space(ptr); +} + +space::space(__isl_take isl_space *ptr) + : ptr(ptr) {} + +space::space() + : ptr(nullptr) {} + +space::space(const space &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_space_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +space::space(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +space &space::operator=(space obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +space::~space() { + if (ptr) + isl_space_free(ptr); +} + +__isl_give isl_space *space::copy() const & { + return isl_space_copy(ptr); +} + +__isl_keep isl_space *space::get() const { + return ptr; +} + +__isl_give isl_space *space::release() { + isl_space *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool space::is_null() const { + return ptr == nullptr; +} + +isl::ctx space::ctx() const { + return isl::ctx(isl_space_get_ctx(ptr)); +} + +isl::space space::add_named_tuple(isl::id tuple_id, unsigned int dim) const +{ + if (!ptr || tuple_id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_add_named_tuple_id_ui(copy(), tuple_id.release(), dim); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_named_tuple(isl::id(ctx(), tuple_id), dim); +} + +isl::space space::add_param(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_add_param_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::add_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add_param(isl::id(ctx(), id)); +} + +isl::space space::add_unnamed_tuple(unsigned int dim) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_add_unnamed_tuple_ui(copy(), dim); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::curry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_curry(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff space::domain_map_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_domain_map_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff space::domain_map_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_domain_map_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id space::domain_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_get_domain_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id space::get_domain_tuple_id() const +{ + return domain_tuple_id(); +} + +isl::space space::drop_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_drop_all_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::flatten_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_flatten_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::flatten_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_flatten_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool space::has_domain_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_has_domain_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool space::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_has_range_tuple_id(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::multi_aff space::identity_multi_aff_on_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_identity_multi_aff_on_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff space::identity_multi_pw_aff_on_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_identity_multi_pw_aff_on_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff space::identity_pw_multi_aff_on_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_identity_pw_multi_aff_on_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool space::is_equal(const isl::space &space2) const +{ + if (!ptr || space2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_is_equal(get(), space2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool space::is_wrapping() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_is_wrapping(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::space space::map_from_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_map_from_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff space::multi_aff(isl::aff_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_multi_aff(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff space::multi_aff_on_domain(isl::multi_val mv) const +{ + if (!ptr || mv.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_multi_aff_on_domain_multi_val(copy(), mv.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_id space::multi_id(isl::id_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_multi_id(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff space::multi_pw_aff(isl::pw_aff_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_multi_pw_aff(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff space::multi_union_pw_aff(isl::union_pw_aff_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_multi_union_pw_aff(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val space::multi_val(isl::val_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_multi_val(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff space::param_aff_on_domain(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_param_aff_on_domain_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff space::param_aff_on_domain(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->param_aff_on_domain(isl::id(ctx(), id)); +} + +isl::space space::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::product(isl::space right) const +{ + if (!ptr || right.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_product(copy(), right.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff space::range_map_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_range_map_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff space::range_map_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_range_map_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::range_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_range_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id space::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_get_range_tuple_id(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::id space::get_range_tuple_id() const +{ + return range_tuple_id(); +} + +isl::space space::reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::set_domain_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_set_domain_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::set_domain_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_domain_tuple(isl::id(ctx(), id)); +} + +isl::space space::set_range_tuple(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_set_range_tuple_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +isl::space space::uncurry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_uncurry(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::unit(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_unit(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map space::universe_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_universe_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set space::universe_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_universe_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::unwrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_unwrap(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::wrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_wrap(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space space::wrapped_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_wrapped_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::aff space::zero_aff_on_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_zero_aff_on_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_aff space::zero_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_zero_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_pw_aff space::zero_multi_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_zero_multi_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff space::zero_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_zero_multi_union_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_val space::zero_multi_val() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_space_zero_multi_val(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const space &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_space_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_space_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_access_info +union_access_info manage(__isl_take isl_union_access_info *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_access_info(ptr); +} +union_access_info manage_copy(__isl_keep isl_union_access_info *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_access_info_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_access_info_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_access_info(ptr); +} + +union_access_info::union_access_info(__isl_take isl_union_access_info *ptr) + : ptr(ptr) {} + +union_access_info::union_access_info() + : ptr(nullptr) {} + +union_access_info::union_access_info(const union_access_info &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_access_info_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_access_info::union_access_info(isl::union_map sink) +{ + if (sink.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = sink.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_from_sink(sink.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_access_info &union_access_info::operator=(union_access_info obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_access_info::~union_access_info() { + if (ptr) + isl_union_access_info_free(ptr); +} + +__isl_give isl_union_access_info *union_access_info::copy() const & { + return isl_union_access_info_copy(ptr); +} + +__isl_keep isl_union_access_info *union_access_info::get() const { + return ptr; +} + +__isl_give isl_union_access_info *union_access_info::release() { + isl_union_access_info *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_access_info::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_access_info::ctx() const { + return isl::ctx(isl_union_access_info_get_ctx(ptr)); +} + +isl::union_flow union_access_info::compute_flow() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_compute_flow(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_access_info union_access_info::set_kill(isl::union_map kill) const +{ + if (!ptr || kill.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_set_kill(copy(), kill.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_access_info union_access_info::set_may_source(isl::union_map may_source) const +{ + if (!ptr || may_source.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_set_may_source(copy(), may_source.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_access_info union_access_info::set_must_source(isl::union_map must_source) const +{ + if (!ptr || must_source.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_set_must_source(copy(), must_source.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_access_info union_access_info::set_schedule(isl::schedule schedule) const +{ + if (!ptr || schedule.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_set_schedule(copy(), schedule.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_access_info union_access_info::set_schedule_map(isl::union_map schedule_map) const +{ + if (!ptr || schedule_map.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_access_info_set_schedule_map(copy(), schedule_map.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_access_info &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_access_info_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_access_info_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_flow +union_flow manage(__isl_take isl_union_flow *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_flow(ptr); +} +union_flow manage_copy(__isl_keep isl_union_flow *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_flow_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_flow_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_flow(ptr); +} + +union_flow::union_flow(__isl_take isl_union_flow *ptr) + : ptr(ptr) {} + +union_flow::union_flow() + : ptr(nullptr) {} + +union_flow::union_flow(const union_flow &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_flow_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_flow &union_flow::operator=(union_flow obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_flow::~union_flow() { + if (ptr) + isl_union_flow_free(ptr); +} + +__isl_give isl_union_flow *union_flow::copy() const & { + return isl_union_flow_copy(ptr); +} + +__isl_keep isl_union_flow *union_flow::get() const { + return ptr; +} + +__isl_give isl_union_flow *union_flow::release() { + isl_union_flow *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_flow::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_flow::ctx() const { + return isl::ctx(isl_union_flow_get_ctx(ptr)); +} + +isl::union_map union_flow::full_may_dependence() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_flow_get_full_may_dependence(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_flow::get_full_may_dependence() const +{ + return full_may_dependence(); +} + +isl::union_map union_flow::full_must_dependence() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_flow_get_full_must_dependence(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_flow::get_full_must_dependence() const +{ + return full_must_dependence(); +} + +isl::union_map union_flow::may_dependence() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_flow_get_may_dependence(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_flow::get_may_dependence() const +{ + return may_dependence(); +} + +isl::union_map union_flow::may_no_source() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_flow_get_may_no_source(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_flow::get_may_no_source() const +{ + return may_no_source(); +} + +isl::union_map union_flow::must_dependence() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_flow_get_must_dependence(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_flow::get_must_dependence() const +{ + return must_dependence(); +} + +isl::union_map union_flow::must_no_source() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_flow_get_must_no_source(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_flow::get_must_no_source() const +{ + return must_no_source(); +} + +inline std::ostream &operator<<(std::ostream &os, const union_flow &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_flow_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_flow_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_map +union_map manage(__isl_take isl_union_map *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_map(ptr); +} +union_map manage_copy(__isl_keep isl_union_map *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_map_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_map_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_map(ptr); +} + +union_map::union_map(__isl_take isl_union_map *ptr) + : ptr(ptr) {} + +union_map::union_map() + : ptr(nullptr) {} + +union_map::union_map(const union_map &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_map_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_map::union_map(isl::basic_map bmap) +{ + if (bmap.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = bmap.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_basic_map(bmap.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_map::union_map(isl::map map) +{ + if (map.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = map.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_map(map.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_map::union_map(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_map &union_map::operator=(union_map obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_map::~union_map() { + if (ptr) + isl_union_map_free(ptr); +} + +__isl_give isl_union_map *union_map::copy() const & { + return isl_union_map_copy(ptr); +} + +__isl_keep isl_union_map *union_map::get() const { + return ptr; +} + +__isl_give isl_union_map *union_map::release() { + isl_union_map *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_map::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_map::ctx() const { + return isl::ctx(isl_union_map_get_ctx(ptr)); +} + +isl::union_map union_map::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_affine_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::apply_domain(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_apply_domain(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::apply_range(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_apply_range(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map union_map::as_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_as_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff union_map::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_as_multi_union_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_map::as_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_as_union_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_map::bind_range(isl::multi_id tuple) const +{ + if (!ptr || tuple.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_bind_range(copy(), tuple.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_compute_divs(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::curry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_curry(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_map::deltas() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_deltas(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_detect_equalities(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_map::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::domain_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::domain_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::domain_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_map::domain_map_union_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain_map_union_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::domain_product(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain_product(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::domain_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_domain_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::empty(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_empty_ctx(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::eq_at(isl::multi_union_pw_aff mupa) const +{ + if (!ptr || mupa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_eq_at_multi_union_pw_aff(copy(), mupa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool union_map::every_map(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct test_data { + std::function func; + std::exception_ptr eptr; + } test_data = { test }; + auto test_lambda = [](isl_map *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + auto res = isl_union_map_every_map(get(), test_lambda, &test_data); + if (test_data.eptr) + std::rethrow_exception(test_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::map union_map::extract_map(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_extract_map(get(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::fixed_power(isl::val exp) const +{ + if (!ptr || exp.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_fixed_power_val(copy(), exp.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::fixed_power(long exp) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->fixed_power(isl::val(ctx(), exp)); +} + +void union_map::foreach_map(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_map *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_map_foreach_map(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::union_map union_map::from(isl::multi_union_pw_aff mupa) +{ + if (mupa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = mupa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_multi_union_pw_aff(mupa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::from(isl::union_pw_multi_aff upma) +{ + if (upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = upma.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_union_pw_multi_aff(upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::from_domain(isl::union_set uset) +{ + if (uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = uset.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_domain(uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::from_domain_and_range(isl::union_set domain, isl::union_set range) +{ + if (domain.is_null() || range.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = domain.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_domain_and_range(domain.release(), range.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::from_range(isl::union_set uset) +{ + if (uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = uset.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_from_range(uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::gist(isl::union_map context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::gist_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_gist_domain(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::gist_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_gist_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::gist_range(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_gist_range(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_domain(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_domain_space(copy(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_domain_union_set(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_domain_factor_domain(isl::union_map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_domain_factor_domain(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_domain_factor_range(isl::union_map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_domain_factor_range(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_domain_wrapped_domain(isl::union_set domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_domain_wrapped_domain_union_set(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_range(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_range_space(copy(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_range(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_range_union_set(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_range_factor_domain(isl::union_map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_range_factor_domain(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_range_factor_range(isl::union_map factor) const +{ + if (!ptr || factor.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_range_factor_range(copy(), factor.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::intersect_range_wrapped_domain(isl::union_set domain) const +{ + if (!ptr || domain.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_intersect_range_wrapped_domain_union_set(copy(), domain.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool union_map::is_bijective() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_bijective(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_disjoint(const isl::union_map &umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_disjoint(get(), umap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_equal(const isl::union_map &umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_equal(get(), umap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_injective() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_injective(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_single_valued() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_single_valued(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_strict_subset(const isl::union_map &umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_strict_subset(get(), umap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::is_subset(const isl::union_map &umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_is_subset(get(), umap2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_map::isa_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_isa_map(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::union_map union_map::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_lexmax(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_lexmin(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map_list union_map::map_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_get_map_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::map_list union_map::get_map_list() const +{ + return map_list(); +} + +isl::set union_map::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_polyhedral_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_domain(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_domain_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_domain(isl::multi_pw_aff mpa) const +{ + if (!ptr || mpa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_domain_multi_pw_aff(copy(), mpa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_domain(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_domain_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_domain(isl::union_pw_multi_aff upma) const +{ + if (!ptr || upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_domain_union_pw_multi_aff(copy(), upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_range(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_range_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_range(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_range_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::preimage_range(isl::union_pw_multi_aff upma) const +{ + if (!ptr || upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_preimage_range_union_pw_multi_aff(copy(), upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::product(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_product(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_project_out_all_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::project_out_param(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_project_out_param_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::project_out_param(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->project_out_param(isl::id(ctx(), id)); +} + +isl::union_map union_map::project_out_param(isl::id_list list) const +{ + if (!ptr || list.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_project_out_param_id_list(copy(), list.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_map::range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_range_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_range_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::range_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_range_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::range_product(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_range_product(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::range_reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_range_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::reverse() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_reverse(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space union_map::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space union_map::get_space() const +{ + return space(); +} + +isl::union_map union_map::subtract(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_subtract(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::subtract_domain(isl::union_set dom) const +{ + if (!ptr || dom.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_subtract_domain(copy(), dom.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::subtract_range(isl::union_set dom) const +{ + if (!ptr || dom.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_subtract_range(copy(), dom.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::uncurry() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_uncurry(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::unite(isl::union_map umap2) const +{ + if (!ptr || umap2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_union(copy(), umap2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::universe() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_universe(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_map::wrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_wrap(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_map::zip() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_map_zip(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_map &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_map_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_map_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_pw_aff +union_pw_aff manage(__isl_take isl_union_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_pw_aff(ptr); +} +union_pw_aff manage_copy(__isl_keep isl_union_pw_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_pw_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_pw_aff(ptr); +} + +union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr) + : ptr(ptr) {} + +union_pw_aff::union_pw_aff() + : ptr(nullptr) {} + +union_pw_aff::union_pw_aff(const union_pw_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_pw_aff::union_pw_aff(isl::aff aff) +{ + if (aff.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = aff.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_from_aff(aff.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_aff::union_pw_aff(isl::pw_aff pa) +{ + if (pa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_from_pw_aff(pa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_aff::union_pw_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_aff &union_pw_aff::operator=(union_pw_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_pw_aff::~union_pw_aff() { + if (ptr) + isl_union_pw_aff_free(ptr); +} + +__isl_give isl_union_pw_aff *union_pw_aff::copy() const & { + return isl_union_pw_aff_copy(ptr); +} + +__isl_keep isl_union_pw_aff *union_pw_aff::get() const { + return ptr; +} + +__isl_give isl_union_pw_aff *union_pw_aff::release() { + isl_union_pw_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_pw_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_pw_aff::ctx() const { + return isl::ctx(isl_union_pw_aff_get_ctx(ptr)); +} + +isl::multi_union_pw_aff union_pw_aff::add(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).add(multi2); +} + +isl::union_pw_aff union_pw_aff::add(isl::union_pw_aff upa2) const +{ + if (!ptr || upa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_add(copy(), upa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_aff::add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).add(upma2); +} + +isl::union_pw_aff union_pw_aff::add(const isl::aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::union_pw_aff(upa2)); +} + +isl::union_pw_aff union_pw_aff::add(const isl::pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::union_pw_aff(upa2)); +} + +isl::union_pw_multi_aff union_pw_aff::apply(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).apply(upma2); +} + +isl::multi_union_pw_aff union_pw_aff::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).as_multi_union_pw_aff(); +} + +isl::pw_multi_aff union_pw_aff::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).as_pw_multi_aff(); +} + +isl::union_map union_pw_aff::as_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).as_union_map(); +} + +isl::union_pw_aff union_pw_aff::at(int pos) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).at(pos); +} + +isl::union_set union_pw_aff::bind(const isl::multi_id &tuple) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).bind(tuple); +} + +isl::union_set union_pw_aff::bind(isl::id id) const +{ + if (!ptr || id.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_bind_id(copy(), id.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_pw_aff::bind(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->bind(isl::id(ctx(), id)); +} + +isl::union_pw_aff union_pw_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_pw_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff union_pw_aff::extract_pw_multi_aff(const isl::space &space) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).extract_pw_multi_aff(space); +} + +isl::multi_union_pw_aff union_pw_aff::flat_range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).flat_range_product(multi2); +} + +isl::union_pw_multi_aff union_pw_aff::flat_range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).flat_range_product(upma2); +} + +isl::union_pw_aff union_pw_aff::gist(isl::union_set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff union_pw_aff::gist_params(const isl::set &context) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).gist_params(context); +} + +bool union_pw_aff::has_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).has_range_tuple_id(); +} + +isl::union_pw_aff union_pw_aff::intersect_domain(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_intersect_domain_space(copy(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff::intersect_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_intersect_domain_union_set(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_intersect_domain_wrapped_domain(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff::intersect_domain_wrapped_range(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_intersect_domain_wrapped_range(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool union_pw_aff::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).involves_locals(); +} + +bool union_pw_aff::involves_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).involves_nan(); +} + +bool union_pw_aff::isa_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).isa_pw_multi_aff(); +} + +isl::union_pw_aff_list union_pw_aff::list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).list(); +} + +isl::multi_union_pw_aff union_pw_aff::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).neg(); +} + +bool union_pw_aff::plain_is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).plain_is_empty(); +} + +bool union_pw_aff::plain_is_equal(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).plain_is_equal(multi2); +} + +bool union_pw_aff::plain_is_equal(const isl::union_pw_aff &upa2) const +{ + if (!ptr || upa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_plain_is_equal(get(), upa2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_pw_aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).plain_is_equal(upma2); +} + +bool union_pw_aff::plain_is_equal(const isl::aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::union_pw_aff(upa2)); +} + +bool union_pw_aff::plain_is_equal(const isl::pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->plain_is_equal(isl::union_pw_aff(upa2)); +} + +isl::union_pw_multi_aff union_pw_aff::preimage_domain_wrapped_domain(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).preimage_domain_wrapped_domain(upma2); +} + +isl::union_pw_aff union_pw_aff::pullback(isl::union_pw_multi_aff upma) const +{ + if (!ptr || upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_pullback_union_pw_multi_aff(copy(), upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff_list union_pw_aff::pw_multi_aff_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).pw_multi_aff_list(); +} + +isl::union_pw_multi_aff union_pw_aff::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).range_factor_domain(); +} + +isl::union_pw_multi_aff union_pw_aff::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).range_factor_range(); +} + +isl::multi_union_pw_aff union_pw_aff::range_product(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).range_product(multi2); +} + +isl::union_pw_multi_aff union_pw_aff::range_product(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).range_product(upma2); +} + +isl::id union_pw_aff::range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).range_tuple_id(); +} + +isl::multi_union_pw_aff union_pw_aff::reset_range_tuple_id() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).reset_range_tuple_id(); +} + +isl::multi_union_pw_aff union_pw_aff::scale(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).scale(mv); +} + +isl::multi_union_pw_aff union_pw_aff::scale(const isl::val &v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).scale(v); +} + +isl::multi_union_pw_aff union_pw_aff::scale(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale(isl::val(ctx(), v)); +} + +isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::multi_val &mv) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).scale_down(mv); +} + +isl::multi_union_pw_aff union_pw_aff::scale_down(const isl::val &v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).scale_down(v); +} + +isl::multi_union_pw_aff union_pw_aff::scale_down(long v) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->scale_down(isl::val(ctx(), v)); +} + +isl::multi_union_pw_aff union_pw_aff::set_at(int pos, const isl::union_pw_aff &el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).set_at(pos, el); +} + +isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const isl::id &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).set_range_tuple(id); +} + +isl::multi_union_pw_aff union_pw_aff::set_range_tuple(const std::string &id) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_range_tuple(isl::id(ctx(), id)); +} + +unsigned union_pw_aff::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).size(); +} + +isl::space union_pw_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space union_pw_aff::get_space() const +{ + return space(); +} + +isl::multi_union_pw_aff union_pw_aff::sub(const isl::multi_union_pw_aff &multi2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).sub(multi2); +} + +isl::union_pw_aff union_pw_aff::sub(isl::union_pw_aff upa2) const +{ + if (!ptr || upa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_sub(copy(), upa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_aff::sub(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).sub(upma2); +} + +isl::union_pw_aff union_pw_aff::sub(const isl::aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::union_pw_aff(upa2)); +} + +isl::union_pw_aff union_pw_aff::sub(const isl::pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::union_pw_aff(upa2)); +} + +isl::union_pw_aff union_pw_aff::subtract_domain(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_subtract_domain_space(copy(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff::subtract_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_subtract_domain_union_set(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff_list union_pw_aff::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff union_pw_aff::union_add(const isl::multi_union_pw_aff &mupa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::multi_union_pw_aff(*this).union_add(mupa2); +} + +isl::union_pw_aff union_pw_aff::union_add(isl::union_pw_aff upa2) const +{ + if (!ptr || upa2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_union_add(copy(), upa2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_aff::union_add(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return isl::union_pw_multi_aff(*this).union_add(upma2); +} + +isl::union_pw_aff union_pw_aff::union_add(const isl::aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::union_pw_aff(upa2)); +} + +isl::union_pw_aff union_pw_aff::union_add(const isl::pw_aff &upa2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->union_add(isl::union_pw_aff(upa2)); +} + +inline std::ostream &operator<<(std::ostream &os, const union_pw_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_pw_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_pw_aff_list +union_pw_aff_list manage(__isl_take isl_union_pw_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_pw_aff_list(ptr); +} +union_pw_aff_list manage_copy(__isl_keep isl_union_pw_aff_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_aff_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_pw_aff_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_pw_aff_list(ptr); +} + +union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr) + : ptr(ptr) {} + +union_pw_aff_list::union_pw_aff_list() + : ptr(nullptr) {} + +union_pw_aff_list::union_pw_aff_list(const union_pw_aff_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_aff_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_aff_list::union_pw_aff_list(isl::union_pw_aff el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_from_union_pw_aff(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_aff_list::union_pw_aff_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_aff_list &union_pw_aff_list::operator=(union_pw_aff_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_pw_aff_list::~union_pw_aff_list() { + if (ptr) + isl_union_pw_aff_list_free(ptr); +} + +__isl_give isl_union_pw_aff_list *union_pw_aff_list::copy() const & { + return isl_union_pw_aff_list_copy(ptr); +} + +__isl_keep isl_union_pw_aff_list *union_pw_aff_list::get() const { + return ptr; +} + +__isl_give isl_union_pw_aff_list *union_pw_aff_list::release() { + isl_union_pw_aff_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_pw_aff_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_pw_aff_list::ctx() const { + return isl::ctx(isl_union_pw_aff_list_get_ctx(ptr)); +} + +isl::union_pw_aff_list union_pw_aff_list::add(isl::union_pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff union_pw_aff_list::get_at(int index) const +{ + return at(index); +} + +isl::union_pw_aff_list union_pw_aff_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff_list union_pw_aff_list::concat(isl::union_pw_aff_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff_list union_pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void union_pw_aff_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_pw_aff *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_pw_aff_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void union_pw_aff_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_union_pw_aff *arg_0, isl_union_pw_aff *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_pw_aff_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_pw_aff_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::union_pw_aff_list union_pw_aff_list::insert(unsigned int pos, isl::union_pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_aff_list union_pw_aff_list::set_at(int index, isl::union_pw_aff el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned union_pw_aff_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_aff_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const union_pw_aff_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_aff_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_pw_aff_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_pw_multi_aff +union_pw_multi_aff manage(__isl_take isl_union_pw_multi_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_pw_multi_aff(ptr); +} +union_pw_multi_aff manage_copy(__isl_keep isl_union_pw_multi_aff *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_multi_aff_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_pw_multi_aff_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_pw_multi_aff(ptr); +} + +union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr) + : ptr(ptr) {} + +union_pw_multi_aff::union_pw_multi_aff() + : ptr(nullptr) {} + +union_pw_multi_aff::union_pw_multi_aff(const union_pw_multi_aff &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_multi_aff_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_pw_multi_aff::union_pw_multi_aff(isl::multi_aff ma) +{ + if (ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ma.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_from_multi_aff(ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_multi_aff::union_pw_multi_aff(isl::pw_multi_aff pma) +{ + if (pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pma.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_from_pw_multi_aff(pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_multi_aff::union_pw_multi_aff(isl::union_pw_aff upa) +{ + if (upa.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = upa.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_from_union_pw_aff(upa.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_multi_aff::union_pw_multi_aff(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_pw_multi_aff &union_pw_multi_aff::operator=(union_pw_multi_aff obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_pw_multi_aff::~union_pw_multi_aff() { + if (ptr) + isl_union_pw_multi_aff_free(ptr); +} + +__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::copy() const & { + return isl_union_pw_multi_aff_copy(ptr); +} + +__isl_keep isl_union_pw_multi_aff *union_pw_multi_aff::get() const { + return ptr; +} + +__isl_give isl_union_pw_multi_aff *union_pw_multi_aff::release() { + isl_union_pw_multi_aff *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_pw_multi_aff::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_pw_multi_aff::ctx() const { + return isl::ctx(isl_union_pw_multi_aff_get_ctx(ptr)); +} + +isl::union_pw_multi_aff union_pw_multi_aff::add(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_add(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::apply(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_apply_union_pw_multi_aff(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::multi_union_pw_aff union_pw_multi_aff::as_multi_union_pw_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_as_multi_union_pw_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff union_pw_multi_aff::as_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_as_pw_multi_aff(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_pw_multi_aff::as_union_map() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_as_union_map(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_pw_multi_aff::domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::empty(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_empty_ctx(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff union_pw_multi_aff::extract_pw_multi_aff(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_extract_pw_multi_aff(get(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::flat_range_product(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_flat_range_product(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::gist(isl::union_set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_intersect_domain_space(copy(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_intersect_domain_union_set(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_domain(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::intersect_domain_wrapped_range(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_intersect_domain_wrapped_range(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool union_pw_multi_aff::involves_locals() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_involves_locals(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_pw_multi_aff::isa_pw_multi_aff() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_isa_pw_multi_aff(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_pw_multi_aff::plain_is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_plain_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_pw_multi_aff::plain_is_equal(const isl::union_pw_multi_aff &upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_plain_is_equal(get(), upma2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::union_pw_multi_aff union_pw_multi_aff::preimage_domain_wrapped_domain(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::pullback(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_pullback_union_pw_multi_aff(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff_list union_pw_multi_aff::pw_multi_aff_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_get_pw_multi_aff_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::pw_multi_aff_list union_pw_multi_aff::get_pw_multi_aff_list() const +{ + return pw_multi_aff_list(); +} + +isl::union_pw_multi_aff union_pw_multi_aff::range_factor_domain() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_range_factor_domain(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::range_factor_range() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_range_factor_range(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::range_product(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_range_product(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space union_pw_multi_aff::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space union_pw_multi_aff::get_space() const +{ + return space(); +} + +isl::union_pw_multi_aff union_pw_multi_aff::sub(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_sub(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_subtract_domain_space(copy(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::subtract_domain(isl::union_set uset) const +{ + if (!ptr || uset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_subtract_domain_union_set(copy(), uset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_pw_multi_aff union_pw_multi_aff::union_add(isl::union_pw_multi_aff upma2) const +{ + if (!ptr || upma2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_pw_multi_aff_union_add(copy(), upma2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_pw_multi_aff &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_pw_multi_aff_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_pw_multi_aff_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_set +union_set manage(__isl_take isl_union_set *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_set(ptr); +} +union_set manage_copy(__isl_keep isl_union_set *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_set_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_set_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_set(ptr); +} + +union_set::union_set(__isl_take isl_union_set *ptr) + : ptr(ptr) {} + +union_set::union_set() + : ptr(nullptr) {} + +union_set::union_set(const union_set &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_set_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_set::union_set(isl::basic_set bset) +{ + if (bset.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = bset.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_from_basic_set(bset.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set::union_set(isl::point pnt) +{ + if (pnt.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = pnt.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_from_point(pnt.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set::union_set(isl::set set) +{ + if (set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = set.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_from_set(set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set::union_set(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set &union_set::operator=(union_set obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_set::~union_set() { + if (ptr) + isl_union_set_free(ptr); +} + +__isl_give isl_union_set *union_set::copy() const & { + return isl_union_set_copy(ptr); +} + +__isl_keep isl_union_set *union_set::get() const { + return ptr; +} + +__isl_give isl_union_set *union_set::release() { + isl_union_set *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_set::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_set::ctx() const { + return isl::ctx(isl_union_set_get_ctx(ptr)); +} + +isl::union_set union_set::affine_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_affine_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::apply(isl::union_map umap) const +{ + if (!ptr || umap.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_apply(copy(), umap.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set union_set::as_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_as_set(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::coalesce() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_coalesce(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::compute_divs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_compute_divs(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::detect_equalities() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_detect_equalities(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::drop_unused_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_drop_unused_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::empty(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_empty_ctx(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool union_set::every_set(const std::function &test) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct test_data { + std::function func; + std::exception_ptr eptr; + } test_data = { test }; + auto test_lambda = [](isl_set *arg_0, void *arg_1) -> isl_bool { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + auto res = isl_union_set_every_set(get(), test_lambda, &test_data); + if (test_data.eptr) + std::rethrow_exception(test_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::set union_set::extract_set(isl::space space) const +{ + if (!ptr || space.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_extract_set(get(), space.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void union_set::foreach_point(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_point *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_set_foreach_point(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void union_set::foreach_set(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_set_foreach_set(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::union_set union_set::gist(isl::union_set context) const +{ + if (!ptr || context.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_gist(copy(), context.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::gist_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_gist_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_set::identity() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_identity(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::intersect(isl::union_set uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_intersect(copy(), uset2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::intersect_params(isl::set set) const +{ + if (!ptr || set.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_intersect_params(copy(), set.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool union_set::is_disjoint(const isl::union_set &uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_is_disjoint(get(), uset2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_set::is_empty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_is_empty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_set::is_equal(const isl::union_set &uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_is_equal(get(), uset2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_set::is_strict_subset(const isl::union_set &uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_is_strict_subset(get(), uset2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_set::is_subset(const isl::union_set &uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_is_subset(get(), uset2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool union_set::isa_set() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_isa_set(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +isl::union_set union_set::lexmax() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_lexmax(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::lexmin() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_lexmin(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set union_set::params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::polyhedral_hull() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_polyhedral_hull(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::preimage(isl::multi_aff ma) const +{ + if (!ptr || ma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_preimage_multi_aff(copy(), ma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::preimage(isl::pw_multi_aff pma) const +{ + if (!ptr || pma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_preimage_pw_multi_aff(copy(), pma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::preimage(isl::union_pw_multi_aff upma) const +{ + if (!ptr || upma.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_preimage_union_pw_multi_aff(copy(), upma.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::project_out_all_params() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_project_out_all_params(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::point union_set::sample_point() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_sample_point(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list union_set::set_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_get_set_list(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::set_list union_set::get_set_list() const +{ + return set_list(); +} + +isl::space union_set::space() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_get_space(get()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::space union_set::get_space() const +{ + return space(); +} + +isl::union_set union_set::subtract(isl::union_set uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_subtract(copy(), uset2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set_list union_set::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::unite(isl::union_set uset2) const +{ + if (!ptr || uset2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_union(copy(), uset2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set::universe() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_universe(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_map union_set::unwrap() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_unwrap(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const union_set &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_set_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_set_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::union_set_list +union_set_list manage(__isl_take isl_union_set_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return union_set_list(ptr); +} +union_set_list manage_copy(__isl_keep isl_union_set_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_set_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_union_set_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return union_set_list(ptr); +} + +union_set_list::union_set_list(__isl_take isl_union_set_list *ptr) + : ptr(ptr) {} + +union_set_list::union_set_list() + : ptr(nullptr) {} + +union_set_list::union_set_list(const union_set_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_set_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +union_set_list::union_set_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set_list::union_set_list(isl::union_set el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_from_union_set(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set_list::union_set_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +union_set_list &union_set_list::operator=(union_set_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +union_set_list::~union_set_list() { + if (ptr) + isl_union_set_list_free(ptr); +} + +__isl_give isl_union_set_list *union_set_list::copy() const & { + return isl_union_set_list_copy(ptr); +} + +__isl_keep isl_union_set_list *union_set_list::get() const { + return ptr; +} + +__isl_give isl_union_set_list *union_set_list::release() { + isl_union_set_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool union_set_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx union_set_list::ctx() const { + return isl::ctx(isl_union_set_list_get_ctx(ptr)); +} + +isl::union_set_list union_set_list::add(isl::union_set el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set union_set_list::get_at(int index) const +{ + return at(index); +} + +isl::union_set_list union_set_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set_list union_set_list::concat(isl::union_set_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set_list union_set_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void union_set_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_set *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_set_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void union_set_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_union_set *arg_0, isl_union_set *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_union_set_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_union_set_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::union_set_list union_set_list::insert(unsigned int pos, isl::union_set el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::union_set_list union_set_list::set_at(int index, isl::union_set el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +unsigned union_set_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_union_set_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const union_set_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_union_set_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_union_set_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::val +val manage(__isl_take isl_val *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return val(ptr); +} +val manage_copy(__isl_keep isl_val *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_val_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_val_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return val(ptr); +} + +val::val(__isl_take isl_val *ptr) + : ptr(ptr) {} + +val::val() + : ptr(nullptr) {} + +val::val(const val &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_val_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +val::val(isl::ctx ctx, long i) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_int_from_si(ctx.release(), i); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +val::val(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +val &val::operator=(val obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +val::~val() { + if (ptr) + isl_val_free(ptr); +} + +__isl_give isl_val *val::copy() const & { + return isl_val_copy(ptr); +} + +__isl_keep isl_val *val::get() const { + return ptr; +} + +__isl_give isl_val *val::release() { + isl_val *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool val::is_null() const { + return ptr == nullptr; +} + +isl::ctx val::ctx() const { + return isl::ctx(isl_val_get_ctx(ptr)); +} + +isl::val val::abs() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_abs(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool val::abs_eq(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_abs_eq(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::abs_eq(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->abs_eq(isl::val(ctx(), v2)); +} + +isl::val val::add(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_add(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::add(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::val(ctx(), v2)); +} + +isl::val val::ceil() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_ceil(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +int val::cmp_si(long i) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_cmp_si(get(), i); + return res; +} + +long val::den_si() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_get_den_si(get()); + return res; +} + +long val::get_den_si() const +{ + return den_si(); +} + +isl::val val::div(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_div(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::div(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->div(isl::val(ctx(), v2)); +} + +bool val::eq(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_eq(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::eq(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->eq(isl::val(ctx(), v2)); +} + +isl::val val::floor() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_floor(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::gcd(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_gcd(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::gcd(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gcd(isl::val(ctx(), v2)); +} + +bool val::ge(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_ge(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::ge(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->ge(isl::val(ctx(), v2)); +} + +bool val::gt(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_gt(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::gt(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->gt(isl::val(ctx(), v2)); +} + +isl::val val::infty(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_infty(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::inv() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_inv(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool val::is_divisible_by(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_divisible_by(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_divisible_by(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->is_divisible_by(isl::val(ctx(), v2)); +} + +bool val::is_infty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_infty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_int() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_int(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_nan() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_nan(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_neg(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_neginfty() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_neginfty(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_negone() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_negone(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_nonneg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_nonneg(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_nonpos() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_nonpos(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_one() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_one(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_pos() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_pos(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_rat() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_rat(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::is_zero() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_is_zero(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::le(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_le(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::le(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->le(isl::val(ctx(), v2)); +} + +bool val::lt(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_lt(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::lt(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->lt(isl::val(ctx(), v2)); +} + +isl::val val::max(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_max(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::max(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->max(isl::val(ctx(), v2)); +} + +isl::val val::min(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_min(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::min(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->min(isl::val(ctx(), v2)); +} + +isl::val val::mod(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_mod(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::mod(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->mod(isl::val(ctx(), v2)); +} + +isl::val val::mul(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_mul(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::mul(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->mul(isl::val(ctx(), v2)); +} + +isl::val val::nan(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_nan(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +bool val::ne(const isl::val &v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_ne(get(), v2.get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +bool val::ne(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->ne(isl::val(ctx(), v2)); +} + +isl::val val::neg() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_neg(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::neginfty(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_neginfty(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::negone(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_negone(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +long val::num_si() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_get_num_si(get()); + return res; +} + +long val::get_num_si() const +{ + return num_si(); +} + +isl::val val::one(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_one(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::pow2() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_pow2(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +int val::sgn() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_sgn(get()); + return res; +} + +isl::val val::sub(isl::val v2) const +{ + if (!ptr || v2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_sub(copy(), v2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::sub(long v2) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->sub(isl::val(ctx(), v2)); +} + +isl::val_list val::to_list() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_to_list(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::trunc() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_trunc(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val::zero(isl::ctx ctx) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_zero(ctx.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +inline std::ostream &operator<<(std::ostream &os, const val &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_val_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_val_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} + +// implementations for isl::val_list +val_list manage(__isl_take isl_val_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return val_list(ptr); +} +val_list manage_copy(__isl_keep isl_val_list *ptr) { + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_val_list_get_ctx(ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = isl_val_list_copy(ptr); + if (!ptr) + exception::throw_last_error(saved_ctx); + return val_list(ptr); +} + +val_list::val_list(__isl_take isl_val_list *ptr) + : ptr(ptr) {} + +val_list::val_list() + : ptr(nullptr) {} + +val_list::val_list(const val_list &obj) + : ptr(nullptr) +{ + if (!obj.ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_val_list_get_ctx(obj.ptr); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + ptr = obj.copy(); + if (!ptr) + exception::throw_last_error(saved_ctx); +} + +val_list::val_list(isl::ctx ctx, int n) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_alloc(ctx.release(), n); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +val_list::val_list(isl::val el) +{ + if (el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = el.ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_from_val(el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +val_list::val_list(isl::ctx ctx, const std::string &str) +{ + auto saved_ctx = ctx; + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_read_from_str(ctx.release(), str.c_str()); + if (!res) + exception::throw_last_error(saved_ctx); + ptr = res; +} + +val_list &val_list::operator=(val_list obj) { + std::swap(this->ptr, obj.ptr); + return *this; +} + +val_list::~val_list() { + if (ptr) + isl_val_list_free(ptr); +} + +__isl_give isl_val_list *val_list::copy() const & { + return isl_val_list_copy(ptr); +} + +__isl_keep isl_val_list *val_list::get() const { + return ptr; +} + +__isl_give isl_val_list *val_list::release() { + isl_val_list *tmp = ptr; + ptr = nullptr; + return tmp; +} + +bool val_list::is_null() const { + return ptr == nullptr; +} + +isl::ctx val_list::ctx() const { + return isl::ctx(isl_val_list_get_ctx(ptr)); +} + +isl::val_list val_list::add(isl::val el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_add(copy(), el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val_list val_list::add(long el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->add(isl::val(ctx(), el)); +} + +isl::val val_list::at(int index) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_get_at(get(), index); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val val_list::get_at(int index) const +{ + return at(index); +} + +isl::val_list val_list::clear() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_clear(copy()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val_list val_list::concat(isl::val_list list2) const +{ + if (!ptr || list2.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_concat(copy(), list2.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val_list val_list::drop(unsigned int first, unsigned int n) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_drop(copy(), first, n); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +void val_list::foreach(const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_val *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_val_list_foreach(get(), fn_lambda, &fn_data); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +void val_list::foreach_scc(const std::function &follows, const std::function &fn) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + struct follows_data { + std::function func; + std::exception_ptr eptr; + } follows_data = { follows }; + auto follows_lambda = [](isl_val *arg_0, isl_val *arg_1, void *arg_2) -> isl_bool { + auto *data = static_cast(arg_2); + ISL_CPP_TRY { + auto ret = (data->func)(manage_copy(arg_0), manage_copy(arg_1)); + return ret ? isl_bool_true : isl_bool_false; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_bool_error; + } + }; + struct fn_data { + std::function func; + std::exception_ptr eptr; + } fn_data = { fn }; + auto fn_lambda = [](isl_val_list *arg_0, void *arg_1) -> isl_stat { + auto *data = static_cast(arg_1); + ISL_CPP_TRY { + (data->func)(manage(arg_0)); + return isl_stat_ok; + } ISL_CPP_CATCH_ALL { + data->eptr = std::current_exception(); + return isl_stat_error; + } + }; + auto res = isl_val_list_foreach_scc(get(), follows_lambda, &follows_data, fn_lambda, &fn_data); + if (follows_data.eptr) + std::rethrow_exception(follows_data.eptr); + if (fn_data.eptr) + std::rethrow_exception(fn_data.eptr); + if (res < 0) + exception::throw_last_error(saved_ctx); + return; +} + +isl::val_list val_list::insert(unsigned int pos, isl::val el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_insert(copy(), pos, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val_list val_list::insert(unsigned int pos, long el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->insert(pos, isl::val(ctx(), el)); +} + +isl::val_list val_list::set_at(int index, isl::val el) const +{ + if (!ptr || el.is_null()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_set_at(copy(), index, el.release()); + if (!res) + exception::throw_last_error(saved_ctx); + return manage(res); +} + +isl::val_list val_list::set_at(int index, long el) const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + return this->set_at(index, isl::val(ctx(), el)); +} + +unsigned val_list::size() const +{ + if (!ptr) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = ctx(); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + auto res = isl_val_list_size(get()); + if (res < 0) + exception::throw_last_error(saved_ctx); + return res; +} + +inline std::ostream &operator<<(std::ostream &os, const val_list &obj) +{ + if (!obj.get()) + exception::throw_invalid("NULL input", __FILE__, __LINE__); + auto saved_ctx = isl_val_list_get_ctx(obj.get()); + options_scoped_set_on_error saved_on_error(saved_ctx, exception::on_error); + char *str = isl_val_list_to_str(obj.get()); + if (!str) + exception::throw_last_error(saved_ctx); + os << str; + free(str); + return os; +} +} // namespace isl + +#endif /* ISL_CPP */ diff --git a/include/isl/typed_cpp.h b/include/isl/typed_cpp.h new file mode 100644 index 00000000..7186e41d --- /dev/null +++ b/include/isl/typed_cpp.h @@ -0,0 +1,52664 @@ +/// These are automatically generated templated C++ bindings for isl. +/// +/// isl is a library for computing with integer sets and maps described by +/// Presburger formulas. On top of this, isl provides various tools for +/// polyhedral compilation, ranging from dependence analysis over scheduling +/// to AST generation. + +#ifndef ISL_TYPED_CPP +#define ISL_TYPED_CPP + +#include + +#include + +namespace isl { +namespace typed { + +template +struct pair {}; + +struct Anonymous; + + +template +struct aff; + +template +using aff_on = aff; + +template +struct aff_list; + +template +using aff_list_on = aff_list; + +template +struct basic_map; + +template +struct basic_set; + +template +struct fixed_box; + +template +struct id; + +template +struct id_list; + +template +struct map; + +template +struct map_list; + +template +struct multi_aff; + +template +struct multi_id; + +template +struct multi_pw_aff; + +template +struct multi_union_pw_aff; + +template +struct multi_val; + +template +struct point; + +template +struct pw_aff; + +template +using pw_aff_on = pw_aff; + +template +struct pw_aff_list; + +template +using pw_aff_list_on = pw_aff_list; + +template +struct pw_multi_aff; + +template +struct pw_multi_aff_list; + +template +struct set; + +template +struct set_list; + +template +struct space; + +template +struct union_map; + +template +struct union_pw_aff; + +template +using union_pw_aff_on = union_pw_aff; + +template +struct union_pw_aff_list; + +template +using union_pw_aff_list_on = union_pw_aff_list; + +template +struct union_pw_multi_aff; + +template +struct union_set; + +template +struct union_set_list; + +template +struct val; + +template +struct val_list; + +template <> +struct aff : public isl::aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + aff() = default; + aff(const isl::aff &obj) : isl::aff(obj) {} + static aff from(const isl::aff &obj) { + return aff(obj); + } + inline explicit aff(const isl::ctx &ctx, const std::string &str); + inline typed::aff add(const typed::aff &aff2) const; + inline typed::multi_aff add(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff add_constant(const typed::val &v) const; + inline typed::aff add_constant(long v) const; + inline typed::multi_aff add_constant(const typed::multi_val &mv) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff as_aff() const; + inline typed::map as_map() const = delete; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::union_map as_union_map() const = delete; + inline typed::aff at(int pos) const; + inline typed::basic_set<> bind(const typed::id &id) const; + inline typed::basic_set<> bind(const std::string &id) const; + inline typed::basic_set<> bind(const typed::multi_id &tuple) const; + inline typed::pw_aff bind_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::aff ceil() const; + inline typed::pw_aff coalesce() const; + inline typed::pw_aff cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const; + inline typed::multi_val constant_multi_val() const; + inline typed::val constant_val() const; + inline typed::val get_constant_val() const = delete; + inline typed::set<> domain() const; + inline typed::aff domain_reverse() const = delete; + inline typed::pw_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::aff floor() const; + inline typed::set ge_set(const typed::aff<> &aff2) const = delete; + inline typed::set ge_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::aff gist(const typed::set<> &context) const; + inline typed::union_pw_aff gist(const typed::union_set<> &context) const; + inline typed::aff gist(const typed::basic_set<> &context) const; + inline typed::aff gist(const typed::point<> &context) const; + inline typed::aff gist_params(const typed::set<> &context) const; + inline typed::aff gist_params(const typed::basic_set<> &context) const; + inline typed::aff gist_params(const typed::point<> &context) const; + inline typed::set gt_set(const typed::aff<> &aff2) const = delete; + inline typed::set gt_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::multi_aff identity() const; + template + inline typed::pw_aff insert_domain(const typed::space &domain) const; + inline typed::pw_aff intersect_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_aff intersect_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_aff intersect_params(const typed::set<> &set) const; + inline typed::set le_set(const typed::aff<> &aff2) const = delete; + inline typed::set le_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::aff_list list() const; + inline typed::set lt_set(const typed::aff<> &aff2) const = delete; + inline typed::set lt_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff max(const typed::pw_aff &pwaff2) const; + inline typed::multi_val max_multi_val() const; + inline typed::val max_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff min(const typed::pw_aff &pwaff2) const; + inline typed::multi_val min_multi_val() const; + inline typed::val min_val() const; + inline typed::aff mod(const typed::val &mod) const; + inline typed::aff mod(long mod) const; + inline typed::aff neg() const; + inline typed::set<> params() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_aff> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> product(const typed::pw_multi_aff &pma2) const; + inline typed::aff pullback(const typed::multi_aff<> &ma) const = delete; + inline typed::pw_aff pullback(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::pw_aff pullback(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::aff pullback(const typed::aff<> &ma) const = delete; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + inline typed::multi_aff range_product(const typed::multi_aff<> &multi2) const = delete; + inline typed::multi_pw_aff range_product(const typed::multi_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::pw_multi_aff range_product(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::aff scale(const typed::val &v) const; + inline typed::aff scale(long v) const; + inline typed::multi_aff scale(const typed::multi_val &mv) const; + inline typed::aff scale_down(const typed::val &v) const; + inline typed::aff scale_down(long v) const; + inline typed::multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_aff set_at(int pos, const typed::aff &el) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::aff sub(const typed::aff &aff2) const; + inline typed::multi_aff sub(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff sub(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff sub(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff subtract_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_aff subtract_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_aff subtract_domain(const typed::union_set<> &uset) const = delete; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::multi_union_pw_aff to_multi_union_pw_aff() const; + inline typed::pw_multi_aff to_pw_multi_aff() const; + inline typed::union_pw_aff to_union_pw_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + template + inline typed::aff unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_aff union_add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff union_add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; +}; + +template +struct aff : public isl::aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + aff() = default; + template {}, + bool>::type = true> + aff(const aff &obj) : isl::aff(obj) {} + private: + template {}, bool>::type = true> + aff(const base &obj) : isl::aff(obj) {} + public: + static aff from(const isl::aff &obj) { + return aff(obj); + } + inline explicit aff(const isl::ctx &ctx, const std::string &str); + inline typed::aff add(const typed::aff &aff2) const; + inline typed::multi_aff add(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff add_constant(const typed::val &v) const; + inline typed::aff add_constant(long v) const; + inline typed::multi_aff add_constant(const typed::multi_val &mv) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff as_aff() const; + inline typed::map as_map() const; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const = delete; + inline typed::union_map as_union_map() const; + inline typed::aff at(int pos) const; + inline typed::basic_set bind(const typed::id &id) const; + inline typed::basic_set bind(const std::string &id) const; + inline typed::basic_set bind(const typed::multi_id &tuple) const; + inline typed::pw_aff bind_domain(const typed::multi_id &tuple) const; + inline typed::pw_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::aff ceil() const; + inline typed::pw_aff coalesce() const; + inline typed::pw_aff cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const; + inline typed::multi_val constant_multi_val() const; + inline typed::val constant_val() const; + inline typed::val get_constant_val() const = delete; + inline typed::set domain() const; + inline typed::aff domain_reverse() const = delete; + inline typed::pw_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::aff floor() const; + inline typed::set ge_set(const typed::aff &aff2) const; + inline typed::set ge_set(const typed::pw_aff &pwaff2) const; + inline typed::aff gist(const typed::set &context) const; + inline typed::union_pw_aff gist(const typed::union_set &context) const; + inline typed::aff gist(const typed::basic_set &context) const; + inline typed::aff gist(const typed::point &context) const; + inline typed::aff gist_params(const typed::set<> &context) const; + inline typed::aff gist_params(const typed::basic_set<> &context) const; + inline typed::aff gist_params(const typed::point<> &context) const; + inline typed::set gt_set(const typed::aff &aff2) const; + inline typed::set gt_set(const typed::pw_aff &pwaff2) const; + inline typed::multi_aff identity() const; + inline typed::pw_aff insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_aff intersect_domain(const typed::set &set) const; + inline typed::union_pw_aff intersect_domain(const typed::space &space) const; + inline typed::union_pw_aff intersect_domain(const typed::union_set &uset) const; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_aff intersect_params(const typed::set<> &set) const; + inline typed::set le_set(const typed::aff &aff2) const; + inline typed::set le_set(const typed::pw_aff &pwaff2) const; + inline typed::aff_list list() const; + inline typed::set lt_set(const typed::aff &aff2) const; + inline typed::set lt_set(const typed::pw_aff &pwaff2) const; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff max(const typed::pw_aff &pwaff2) const; + inline typed::multi_val max_multi_val() const; + inline typed::val max_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff min(const typed::pw_aff &pwaff2) const; + inline typed::multi_val min_multi_val() const; + inline typed::val min_val() const; + inline typed::aff mod(const typed::val &mod) const; + inline typed::aff mod(long mod) const; + inline typed::aff neg() const; + inline typed::set<> params() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_aff, pair> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::aff pullback(const typed::multi_aff &ma) const; + inline typed::aff pullback(const typed::multi_aff &ma) const; + template + inline typed::pw_aff pullback(const typed::multi_pw_aff &mpa) const; + inline typed::pw_aff pullback(const typed::multi_pw_aff &mpa) const; + template + inline typed::pw_aff pullback(const typed::pw_multi_aff &pma) const; + inline typed::pw_aff pullback(const typed::pw_multi_aff &pma) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + template + inline typed::aff pullback(const typed::aff &ma) const; + inline typed::aff pullback(const typed::aff &ma) const; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + template + inline typed::multi_aff> range_product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> range_product(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff scale(const typed::val &v) const; + inline typed::aff scale(long v) const; + inline typed::multi_aff scale(const typed::multi_val &mv) const; + inline typed::aff scale_down(const typed::val &v) const; + inline typed::aff scale_down(long v) const; + inline typed::multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_aff set_at(int pos, const typed::aff &el) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::aff sub(const typed::aff &aff2) const; + inline typed::multi_aff sub(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff sub(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff sub(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff subtract_domain(const typed::set &set) const; + inline typed::union_pw_aff subtract_domain(const typed::space &space) const; + inline typed::union_pw_aff subtract_domain(const typed::union_set &uset) const; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::multi_union_pw_aff to_multi_union_pw_aff() const; + inline typed::pw_multi_aff to_pw_multi_aff() const; + inline typed::union_pw_aff to_union_pw_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + inline typed::aff unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_aff union_add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff union_add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; +}; + +template +struct aff, Anonymous> : public isl::aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + aff(const aff, Anonymous> &obj) : isl::aff(obj) {} + private: + template {}, bool>::type = true> + aff(const base &obj) : isl::aff(obj) {} + public: + static aff from(const isl::aff &obj) { + return aff(obj); + } + inline explicit aff(const isl::ctx &ctx, const std::string &str); + inline typed::aff, Anonymous> add(const typed::aff, Anonymous> &aff2) const; + inline typed::multi_aff, Anonymous> add(const typed::multi_aff, Anonymous> &multi2) const; + inline typed::multi_pw_aff, Anonymous> add(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::multi_union_pw_aff, Anonymous> add(const typed::multi_union_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> add(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_multi_aff, Anonymous> add(const typed::pw_multi_aff, Anonymous> &pma2) const; + inline typed::union_pw_aff, Anonymous> add(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> add(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::aff, Anonymous> add_constant(const typed::val &v) const; + inline typed::aff, Anonymous> add_constant(long v) const; + inline typed::multi_aff, Anonymous> add_constant(const typed::multi_val &mv) const; + template + inline typed::union_pw_multi_aff, Arg1> apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff, Anonymous> as_aff() const; + inline typed::map, Anonymous> as_map() const; + inline typed::multi_aff, Anonymous> as_multi_aff() const; + inline typed::multi_union_pw_aff, Anonymous> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Anonymous> as_pw_multi_aff() const; + inline typed::set, Anonymous> as_set() const = delete; + inline typed::union_map, Anonymous> as_union_map() const; + inline typed::aff, Anonymous> at(int pos) const; + inline typed::basic_set> bind(const typed::id &id) const; + inline typed::basic_set> bind(const std::string &id) const; + inline typed::basic_set> bind(const typed::multi_id &tuple) const; + inline typed::pw_aff bind_domain(const typed::multi_id> &tuple) const; + inline typed::pw_aff bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::aff, Anonymous> ceil() const; + inline typed::pw_aff, Anonymous> coalesce() const; + inline typed::pw_aff, Anonymous> cond(const typed::pw_aff, Anonymous> &pwaff_true, const typed::pw_aff, Anonymous> &pwaff_false) const; + inline typed::multi_val constant_multi_val() const; + inline typed::val constant_val() const; + inline typed::val, Anonymous> get_constant_val() const = delete; + inline typed::set> domain() const; + inline typed::aff, Anonymous> domain_reverse() const; + inline typed::pw_aff, Anonymous> drop_unused_params() const; + inline typed::pw_multi_aff, Anonymous> extract_pw_multi_aff(const typed::space, Anonymous> &space) const; + inline typed::aff, Anonymous> floor() const; + inline typed::set> ge_set(const typed::aff, Anonymous> &aff2) const; + inline typed::set> ge_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::aff, Anonymous> gist(const typed::set> &context) const; + inline typed::union_pw_aff, Anonymous> gist(const typed::union_set> &context) const; + inline typed::aff, Anonymous> gist(const typed::basic_set> &context) const; + inline typed::aff, Anonymous> gist(const typed::point> &context) const; + inline typed::aff, Anonymous> gist_params(const typed::set<> &context) const; + inline typed::aff, Anonymous> gist_params(const typed::basic_set<> &context) const; + inline typed::aff, Anonymous> gist_params(const typed::point<> &context) const; + inline typed::set> gt_set(const typed::aff, Anonymous> &aff2) const; + inline typed::set> gt_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::multi_aff, Anonymous> identity() const; + inline typed::pw_aff, Anonymous> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_aff, Anonymous> intersect_domain(const typed::set> &set) const; + inline typed::union_pw_aff, Anonymous> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_aff, Anonymous> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_pw_aff, Anonymous> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::pw_aff, Anonymous> intersect_params(const typed::set<> &set) const; + inline typed::set> le_set(const typed::aff, Anonymous> &aff2) const; + inline typed::set> le_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::aff_list, Anonymous> list() const; + inline typed::set> lt_set(const typed::aff, Anonymous> &aff2) const; + inline typed::set> lt_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::multi_pw_aff, Anonymous> max(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> max(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::multi_val max_multi_val() const; + inline typed::val max_val() const; + inline typed::multi_pw_aff, Anonymous> min(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> min(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::multi_val min_multi_val() const; + inline typed::val min_val() const; + inline typed::aff, Anonymous> mod(const typed::val &mod) const; + inline typed::aff, Anonymous> mod(long mod) const; + inline typed::aff, Anonymous> neg() const; + inline typed::set<> params() const; + template + inline typed::pw_multi_aff, Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::multi_aff, Arg1>, pair> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, Arg1>, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Arg1>, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::aff pullback(const typed::multi_aff> &ma) const; + inline typed::aff pullback(const typed::multi_aff> &ma) const; + template + inline typed::pw_aff pullback(const typed::multi_pw_aff> &mpa) const; + inline typed::pw_aff pullback(const typed::multi_pw_aff> &mpa) const; + template + inline typed::pw_aff pullback(const typed::pw_multi_aff> &pma) const; + inline typed::pw_aff pullback(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::aff pullback(const typed::aff> &ma) const; + inline typed::aff pullback(const typed::aff> &ma) const; + inline typed::pw_multi_aff_list, Anonymous> pw_multi_aff_list() const; + inline typed::pw_multi_aff, Anonymous> range_factor_domain() const = delete; + inline typed::pw_multi_aff, Anonymous> range_factor_range() const = delete; + template + inline typed::multi_aff, pair> range_product(const typed::multi_aff, Arg1> &multi2) const; + template + inline typed::multi_pw_aff, pair> range_product(const typed::multi_pw_aff, Arg1> &multi2) const; + template + inline typed::multi_union_pw_aff, pair> range_product(const typed::multi_union_pw_aff, Arg1> &multi2) const; + template + inline typed::pw_multi_aff, pair> range_product(const typed::pw_multi_aff, Arg1> &pma2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_multi_aff, Arg1> &upma2) const; + inline typed::aff, Anonymous> scale(const typed::val &v) const; + inline typed::aff, Anonymous> scale(long v) const; + inline typed::multi_aff, Anonymous> scale(const typed::multi_val &mv) const; + inline typed::aff, Anonymous> scale_down(const typed::val &v) const; + inline typed::aff, Anonymous> scale_down(long v) const; + inline typed::multi_aff, Anonymous> scale_down(const typed::multi_val &mv) const; + inline typed::multi_aff, Anonymous> set_at(int pos, const typed::aff, Anonymous> &el) const; + inline typed::multi_pw_aff, Anonymous> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, Anonymous> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + template + inline typed::multi_aff, Arg1> set_range_tuple(const typed::id &id) const; + template + inline typed::multi_aff, Arg1> set_range_tuple(const std::string &id) const; + inline typed::space, Anonymous> space() const; + inline typed::aff, Anonymous> sub(const typed::aff, Anonymous> &aff2) const; + inline typed::multi_aff, Anonymous> sub(const typed::multi_aff, Anonymous> &multi2) const; + inline typed::multi_pw_aff, Anonymous> sub(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::multi_union_pw_aff, Anonymous> sub(const typed::multi_union_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> sub(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_multi_aff, Anonymous> sub(const typed::pw_multi_aff, Anonymous> &pma2) const; + inline typed::union_pw_aff, Anonymous> sub(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> sub(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::pw_aff, Anonymous> subtract_domain(const typed::set> &set) const; + inline typed::union_pw_aff, Anonymous> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_aff, Anonymous> subtract_domain(const typed::union_set> &uset) const; + inline typed::multi_pw_aff, Anonymous> to_multi_pw_aff() const; + inline typed::multi_union_pw_aff, Anonymous> to_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Anonymous> to_pw_multi_aff() const; + inline typed::union_pw_aff, Anonymous> to_union_pw_aff() const; + inline typed::union_pw_multi_aff, Anonymous> to_union_pw_multi_aff() const; + inline typed::aff, Anonymous> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, Anonymous> union_add(const typed::multi_pw_aff, Anonymous> &mpa2) const; + inline typed::multi_union_pw_aff, Anonymous> union_add(const typed::multi_union_pw_aff, Anonymous> &mupa2) const; + inline typed::pw_aff, Anonymous> union_add(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_multi_aff, Anonymous> union_add(const typed::pw_multi_aff, Anonymous> &pma2) const; + inline typed::union_pw_aff, Anonymous> union_add(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> union_add(const typed::union_pw_multi_aff, Anonymous> &upma2) const; +}; + +template <> +struct aff_list : public isl::aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + aff_list() = default; + aff_list(const isl::aff_list &obj) : isl::aff_list(obj) {} + static aff_list from(const isl::aff_list &obj) { + return aff_list(obj); + } + inline explicit aff_list(const isl::ctx &ctx, int n); + inline explicit aff_list(const typed::aff &el); + inline explicit aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::aff_list add(const typed::aff &el) const; + inline typed::aff at(int index) const; + inline typed::aff get_at(int index) const = delete; + inline typed::aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::aff)> &follows, const std::function)> &fn) const; + inline typed::aff_list set_at(int index, const typed::aff &el) const; +}; + +template +struct aff_list : public isl::aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + aff_list() = default; + template {}, + bool>::type = true> + aff_list(const aff_list &obj) : isl::aff_list(obj) {} + private: + template {}, bool>::type = true> + aff_list(const base &obj) : isl::aff_list(obj) {} + public: + static aff_list from(const isl::aff_list &obj) { + return aff_list(obj); + } + inline explicit aff_list(const isl::ctx &ctx, int n); + inline explicit aff_list(const typed::aff &el); + inline explicit aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::aff_list add(const typed::aff &el) const; + inline typed::aff at(int index) const; + inline typed::aff get_at(int index) const = delete; + inline typed::aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::aff)> &follows, const std::function)> &fn) const; + inline typed::aff_list set_at(int index, const typed::aff &el) const; +}; + +template +struct basic_map : public isl::basic_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_map() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + basic_map(const basic_map &obj) : isl::basic_map(obj) {} + private: + template {}, bool>::type = true> + basic_map(const base &obj) : isl::basic_map(obj) {} + public: + static basic_map from(const isl::basic_map &obj) { + return basic_map(obj); + } + inline explicit basic_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_map apply_domain(const typed::basic_map &bmap2) const; + template + inline typed::map apply_domain(const typed::map &map2) const; + template + inline typed::union_map apply_domain(const typed::union_map &umap2) const; + template + inline typed::basic_map apply_range(const typed::basic_map &bmap2) const; + template + inline typed::map apply_range(const typed::map &map2) const; + template + inline typed::union_map apply_range(const typed::union_map &umap2) const; + inline typed::map as_map() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_pw_multi_aff as_union_pw_multi_aff() const; + inline typed::set bind_domain(const typed::multi_id &tuple) const; + inline typed::set bind_range(const typed::multi_id &tuple) const; + inline typed::map coalesce() const; + inline typed::map curry() const = delete; + inline typed::basic_set deltas() const = delete; + inline typed::basic_map detect_equalities() const; + inline typed::set domain() const; + inline typed::map domain_factor_domain() const = delete; + inline typed::map domain_factor_range() const = delete; + inline typed::union_map, Domain> domain_map() const; + inline typed::union_pw_multi_aff, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Range> domain_product(const typed::map &map2) const; + template + inline typed::union_map, Range> domain_product(const typed::union_map &umap2) const; + inline typed::map domain_reverse() const = delete; + inline typed::map drop_unused_params() const; + inline typed::map eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function)> &test) const; + inline typed::map extract_map(const typed::space &space) const; + inline typed::basic_map flatten_domain() const = delete; + inline typed::basic_map flatten_range() const = delete; + inline void foreach_basic_map(const std::function)> &fn) const; + inline void foreach_map(const std::function)> &fn) const; + inline typed::basic_map gist(const typed::basic_map &context) const; + inline typed::map gist(const typed::map &context) const; + inline typed::union_map gist(const typed::union_map &context) const; + inline typed::map gist_domain(const typed::set &context) const; + inline typed::union_map gist_domain(const typed::union_set &uset) const; + inline typed::map gist_params(const typed::set<> &context) const; + inline typed::basic_map intersect(const typed::basic_map &bmap2) const; + inline typed::map intersect(const typed::map &map2) const; + inline typed::union_map intersect(const typed::union_map &umap2) const; + inline typed::basic_map intersect_domain(const typed::basic_set &bset) const; + inline typed::map intersect_domain(const typed::set &set) const; + inline typed::union_map intersect_domain(const typed::space &space) const; + inline typed::union_map intersect_domain(const typed::union_set &uset) const; + inline typed::basic_map intersect_domain(const typed::point &bset) const; + inline typed::map intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_map intersect_range(const typed::basic_set &bset) const; + inline typed::map intersect_range(const typed::set &set) const; + inline typed::union_map intersect_range(const typed::space &space) const; + inline typed::union_map intersect_range(const typed::union_set &uset) const; + inline typed::basic_map intersect_range(const typed::point &bset) const; + inline typed::map intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::map lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::map lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::map_list map_list() const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::map preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::map preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map preimage_range(const typed::multi_aff &ma) const; + template + inline typed::map preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map, pair> product(const typed::map &map2) const; + template + inline typed::union_map, pair> product(const typed::union_map &umap2) const; + inline typed::map project_out_all_params() const; + inline typed::map project_out_param(const typed::id &id) const; + inline typed::map project_out_param(const std::string &id) const; + inline typed::map project_out_param(const typed::id_list &list) const; + inline typed::set range() const; + inline typed::map range_factor_domain() const = delete; + inline typed::map range_factor_range() const = delete; + inline typed::fixed_box range_lattice_tile() const; + inline typed::union_map, Range> range_map() const; + template + inline typed::map> range_product(const typed::map &map2) const; + template + inline typed::union_map> range_product(const typed::union_map &umap2) const; + inline typed::map range_reverse() const = delete; + inline typed::fixed_box range_simple_fixed_box_hull() const; + inline typed::basic_map reverse() const; + template + inline typed::map set_domain_tuple(const typed::id &id) const; + template + inline typed::map set_domain_tuple(const std::string &id) const; + template + inline typed::map set_range_tuple(const typed::id &id) const; + template + inline typed::map set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::map subtract(const typed::map &map2) const; + inline typed::union_map subtract(const typed::union_map &umap2) const; + inline typed::union_map subtract_domain(const typed::union_set &dom) const; + inline typed::union_map subtract_range(const typed::union_set &dom) const; + inline typed::union_map to_union_map() const; + inline typed::map uncurry() const = delete; + inline typed::map unite(const typed::basic_map &bmap2) const; + inline typed::map unite(const typed::map &map2) const; + inline typed::union_map unite(const typed::union_map &umap2) const; + inline typed::map upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::set> wrap() const; +}; + +template +struct basic_map, Range2> : public isl::basic_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + basic_map(const basic_map, Arg3> &obj) : isl::basic_map(obj) {} + private: + template {}, bool>::type = true> + basic_map(const base &obj) : isl::basic_map(obj) {} + public: + static basic_map from(const isl::basic_map &obj) { + return basic_map(obj); + } + inline explicit basic_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_map apply_domain(const typed::basic_map, Domain2> &bmap2) const; + template + inline typed::map apply_domain(const typed::map, Domain2> &map2) const; + template + inline typed::union_map apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::basic_map, Arg3> apply_range(const typed::basic_map &bmap2) const; + template + inline typed::map, Arg3> apply_range(const typed::map &map2) const; + template + inline typed::union_map, Arg3> apply_range(const typed::union_map &umap2) const; + inline typed::map, Range2> as_map() const; + inline typed::multi_union_pw_aff, Range2> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Range2> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff, Range2> as_union_pw_multi_aff() const; + inline typed::set bind_domain(const typed::multi_id> &tuple) const; + inline typed::set> bind_range(const typed::multi_id &tuple) const; + inline typed::map, Range2> coalesce() const; + inline typed::map> curry() const; + inline typed::basic_set, Range2> deltas() const = delete; + inline typed::basic_map, Range2> detect_equalities() const; + inline typed::set> domain() const; + inline typed::map domain_factor_domain() const; + inline typed::map domain_factor_range() const; + inline typed::union_map, Range2>, pair> domain_map() const; + inline typed::union_pw_multi_aff, Range2>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain2>, Range2> domain_product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, Range2> domain_product(const typed::union_map &umap2) const; + inline typed::map, Range2> domain_reverse() const; + inline typed::map, Range2> drop_unused_params() const; + inline typed::map, Range2> eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map, Range2> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function, Range2>)> &test) const; + inline typed::map, Range2> extract_map(const typed::space, Range2> &space) const; + inline typed::basic_map flatten_domain() const; + inline typed::basic_map, Range2> flatten_range() const = delete; + inline void foreach_basic_map(const std::function, Range2>)> &fn) const; + inline void foreach_map(const std::function, Range2>)> &fn) const; + inline typed::basic_map, Range2> gist(const typed::basic_map, Range2> &context) const; + inline typed::map, Range2> gist(const typed::map, Range2> &context) const; + inline typed::union_map, Range2> gist(const typed::union_map, Range2> &context) const; + inline typed::map, Range2> gist_domain(const typed::set> &context) const; + inline typed::union_map, Range2> gist_domain(const typed::union_set> &uset) const; + inline typed::map, Range2> gist_params(const typed::set<> &context) const; + inline typed::basic_map, Range2> intersect(const typed::basic_map, Range2> &bmap2) const; + inline typed::map, Range2> intersect(const typed::map, Range2> &map2) const; + inline typed::union_map, Range2> intersect(const typed::union_map, Range2> &umap2) const; + inline typed::basic_map, Range2> intersect_domain(const typed::basic_set> &bset) const; + inline typed::map, Range2> intersect_domain(const typed::set> &set) const; + inline typed::union_map, Range2> intersect_domain(const typed::space> &space) const; + inline typed::union_map, Range2> intersect_domain(const typed::union_set> &uset) const; + inline typed::basic_map, Range2> intersect_domain(const typed::point> &bset) const; + inline typed::map, Range2> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, Range2> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, Range2> intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_map, Range2> intersect_range(const typed::basic_set &bset) const; + inline typed::map, Range2> intersect_range(const typed::set &set) const; + inline typed::union_map, Range2> intersect_range(const typed::space &space) const; + inline typed::union_map, Range2> intersect_range(const typed::union_set &uset) const; + inline typed::basic_map, Range2> intersect_range(const typed::point &bset) const; + inline typed::map, Range2> intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map, Range2> intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map, Range2> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lexmax() const; + inline typed::pw_multi_aff, Range2> lexmax_pw_multi_aff() const; + inline typed::map, Range2> lexmin() const; + inline typed::pw_multi_aff, Range2> lexmin_pw_multi_aff() const; + inline typed::map, Range2> lower_bound(const typed::multi_pw_aff, Range2> &lower) const; + inline typed::map_list, Range2> map_list() const; + inline typed::multi_pw_aff, Range2> max_multi_pw_aff() const; + inline typed::multi_pw_aff, Range2> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::map preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::map preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Arg3> preimage_range(const typed::multi_aff &ma) const; + template + inline typed::map, Arg3> preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map, Arg3> preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map, Domain2>, pair> product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, pair> product(const typed::union_map &umap2) const; + inline typed::map, Range2> project_out_all_params() const; + inline typed::map, Range2> project_out_param(const typed::id &id) const; + inline typed::map, Range2> project_out_param(const std::string &id) const; + inline typed::map, Range2> project_out_param(const typed::id_list &list) const; + inline typed::set range() const; + inline typed::map, Range2> range_factor_domain() const = delete; + inline typed::map, Range2> range_factor_range() const = delete; + inline typed::fixed_box, Range2> range_lattice_tile() const; + inline typed::union_map, Range2>, Range2> range_map() const; + template + inline typed::map, pair> range_product(const typed::map, Arg3> &map2) const; + template + inline typed::union_map, pair> range_product(const typed::union_map, Arg3> &umap2) const; + inline typed::map, Range2> range_reverse() const = delete; + inline typed::fixed_box, Range2> range_simple_fixed_box_hull() const; + inline typed::basic_map> reverse() const; + inline typed::map, Range2> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::map, Range2> set_domain_tuple(const std::string &id) const = delete; + template + inline typed::map, Arg2> set_range_tuple(const typed::id &id) const; + template + inline typed::map, Arg2> set_range_tuple(const std::string &id) const; + inline typed::space, Range2> space() const; + inline typed::map, Range2> subtract(const typed::map, Range2> &map2) const; + inline typed::union_map, Range2> subtract(const typed::union_map, Range2> &umap2) const; + inline typed::union_map, Range2> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, Range2> subtract_range(const typed::union_set &dom) const; + inline typed::union_map, Range2> to_union_map() const; + inline typed::map, Range2> uncurry() const = delete; + inline typed::map, Range2> unite(const typed::basic_map, Range2> &bmap2) const; + inline typed::map, Range2> unite(const typed::map, Range2> &map2) const; + inline typed::union_map, Range2> unite(const typed::union_map, Range2> &umap2) const; + inline typed::map, Range2> upper_bound(const typed::multi_pw_aff, Range2> &upper) const; + inline typed::set, Range2>> wrap() const; +}; + +template +struct basic_map : public isl::basic_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_map() = default; + template {}, + bool>::type = true> + basic_map(const basic_map &obj) : isl::basic_map(obj) {} + private: + template {}, bool>::type = true> + basic_map(const base &obj) : isl::basic_map(obj) {} + public: + static basic_map from(const isl::basic_map &obj) { + return basic_map(obj); + } + inline explicit basic_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_map apply_domain(const typed::basic_map &bmap2) const; + template + inline typed::map apply_domain(const typed::map &map2) const; + template + inline typed::union_map apply_domain(const typed::union_map &umap2) const; + template + inline typed::basic_map apply_range(const typed::basic_map &bmap2) const; + template + inline typed::map apply_range(const typed::map &map2) const; + template + inline typed::union_map apply_range(const typed::union_map &umap2) const; + inline typed::map as_map() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_pw_multi_aff as_union_pw_multi_aff() const; + inline typed::set bind_domain(const typed::multi_id &tuple) const; + inline typed::set bind_range(const typed::multi_id &tuple) const; + inline typed::map coalesce() const; + inline typed::map curry() const = delete; + inline typed::basic_set deltas() const; + inline typed::basic_map detect_equalities() const; + inline typed::set domain() const; + inline typed::map domain_factor_domain() const = delete; + inline typed::map domain_factor_range() const = delete; + inline typed::union_map, Domain> domain_map() const; + inline typed::union_pw_multi_aff, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain> domain_product(const typed::map &map2) const; + template + inline typed::union_map, Domain> domain_product(const typed::union_map &umap2) const; + inline typed::map domain_reverse() const = delete; + inline typed::map drop_unused_params() const; + template + inline typed::map eq_at(const typed::multi_pw_aff &mpa) const; + template + inline typed::union_map eq_at(const typed::multi_union_pw_aff &mupa) const; + inline bool every_map(const std::function)> &test) const; + inline typed::map extract_map(const typed::space &space) const; + inline typed::basic_map flatten_domain() const = delete; + inline typed::basic_map flatten_range() const = delete; + inline void foreach_basic_map(const std::function)> &fn) const; + inline void foreach_map(const std::function)> &fn) const; + inline typed::basic_map gist(const typed::basic_map &context) const; + inline typed::map gist(const typed::map &context) const; + inline typed::union_map gist(const typed::union_map &context) const; + inline typed::map gist_domain(const typed::set &context) const; + inline typed::union_map gist_domain(const typed::union_set &uset) const; + inline typed::map gist_params(const typed::set<> &context) const; + inline typed::basic_map intersect(const typed::basic_map &bmap2) const; + inline typed::map intersect(const typed::map &map2) const; + inline typed::union_map intersect(const typed::union_map &umap2) const; + inline typed::basic_map intersect_domain(const typed::basic_set &bset) const; + inline typed::map intersect_domain(const typed::set &set) const; + inline typed::union_map intersect_domain(const typed::space &space) const; + inline typed::union_map intersect_domain(const typed::union_set &uset) const; + inline typed::basic_map intersect_domain(const typed::point &bset) const; + inline typed::map intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_map intersect_range(const typed::basic_set &bset) const; + inline typed::map intersect_range(const typed::set &set) const; + inline typed::union_map intersect_range(const typed::space &space) const; + inline typed::union_map intersect_range(const typed::union_set &uset) const; + inline typed::basic_map intersect_range(const typed::point &bset) const; + inline typed::map intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + template + inline typed::map lex_ge_at(const typed::multi_pw_aff &mpa) const; + template + inline typed::map lex_gt_at(const typed::multi_pw_aff &mpa) const; + template + inline typed::map lex_le_at(const typed::multi_pw_aff &mpa) const; + template + inline typed::map lex_lt_at(const typed::multi_pw_aff &mpa) const; + inline typed::map lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::map lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::map lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::map_list map_list() const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::map preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::map preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map preimage_range(const typed::multi_aff &ma) const; + template + inline typed::map preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map, pair> product(const typed::map &map2) const; + template + inline typed::union_map, pair> product(const typed::union_map &umap2) const; + inline typed::map project_out_all_params() const; + inline typed::map project_out_param(const typed::id &id) const; + inline typed::map project_out_param(const std::string &id) const; + inline typed::map project_out_param(const typed::id_list &list) const; + inline typed::set range() const; + inline typed::map range_factor_domain() const = delete; + inline typed::map range_factor_range() const = delete; + inline typed::fixed_box range_lattice_tile() const; + inline typed::union_map, Domain> range_map() const; + template + inline typed::map> range_product(const typed::map &map2) const; + template + inline typed::union_map> range_product(const typed::union_map &umap2) const; + inline typed::map range_reverse() const = delete; + inline typed::fixed_box range_simple_fixed_box_hull() const; + inline typed::basic_map reverse() const; + template + inline typed::map set_domain_tuple(const typed::id &id) const; + template + inline typed::map set_domain_tuple(const std::string &id) const; + template + inline typed::map set_range_tuple(const typed::id &id) const; + template + inline typed::map set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::map subtract(const typed::map &map2) const; + inline typed::union_map subtract(const typed::union_map &umap2) const; + inline typed::union_map subtract_domain(const typed::union_set &dom) const; + inline typed::union_map subtract_range(const typed::union_set &dom) const; + inline typed::union_map to_union_map() const; + inline typed::map uncurry() const = delete; + inline typed::map unite(const typed::basic_map &bmap2) const; + inline typed::map unite(const typed::map &map2) const; + inline typed::union_map unite(const typed::union_map &umap2) const; + inline typed::map upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::set> wrap() const; +}; + +template +struct basic_map> : public isl::basic_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + basic_map(const basic_map> &obj) : isl::basic_map(obj) {} + private: + template {}, bool>::type = true> + basic_map(const base &obj) : isl::basic_map(obj) {} + public: + static basic_map from(const isl::basic_map &obj) { + return basic_map(obj); + } + inline explicit basic_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_map> apply_domain(const typed::basic_map &bmap2) const; + template + inline typed::map> apply_domain(const typed::map &map2) const; + template + inline typed::union_map> apply_domain(const typed::union_map &umap2) const; + template + inline typed::basic_map apply_range(const typed::basic_map, Arg3> &bmap2) const; + template + inline typed::map apply_range(const typed::map, Arg3> &map2) const; + template + inline typed::union_map apply_range(const typed::union_map, Arg3> &umap2) const; + inline typed::map> as_map() const; + inline typed::multi_union_pw_aff> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff> as_union_pw_multi_aff() const; + inline typed::set> bind_domain(const typed::multi_id &tuple) const; + inline typed::set bind_range(const typed::multi_id> &tuple) const; + inline typed::map> coalesce() const; + inline typed::map> curry() const = delete; + inline typed::basic_set> deltas() const = delete; + inline typed::basic_map> detect_equalities() const; + inline typed::set domain() const; + inline typed::map> domain_factor_domain() const = delete; + inline typed::map> domain_factor_range() const = delete; + inline typed::union_map>, Domain> domain_map() const; + inline typed::union_pw_multi_aff>, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::map, pair> domain_product(const typed::map> &map2) const; + template + inline typed::union_map, pair> domain_product(const typed::union_map> &umap2) const; + inline typed::map> domain_reverse() const = delete; + inline typed::map> drop_unused_params() const; + inline typed::map> eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function>)> &test) const; + inline typed::map> extract_map(const typed::space> &space) const; + inline typed::basic_map> flatten_domain() const = delete; + inline typed::basic_map flatten_range() const; + inline void foreach_basic_map(const std::function>)> &fn) const; + inline void foreach_map(const std::function>)> &fn) const; + inline typed::basic_map> gist(const typed::basic_map> &context) const; + inline typed::map> gist(const typed::map> &context) const; + inline typed::union_map> gist(const typed::union_map> &context) const; + inline typed::map> gist_domain(const typed::set &context) const; + inline typed::union_map> gist_domain(const typed::union_set &uset) const; + inline typed::map> gist_params(const typed::set<> &context) const; + inline typed::basic_map> intersect(const typed::basic_map> &bmap2) const; + inline typed::map> intersect(const typed::map> &map2) const; + inline typed::union_map> intersect(const typed::union_map> &umap2) const; + inline typed::basic_map> intersect_domain(const typed::basic_set &bset) const; + inline typed::map> intersect_domain(const typed::set &set) const; + inline typed::union_map> intersect_domain(const typed::space &space) const; + inline typed::union_map> intersect_domain(const typed::union_set &uset) const; + inline typed::basic_map> intersect_domain(const typed::point &bset) const; + inline typed::map> intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map> intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map> intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_map> intersect_range(const typed::basic_set> &bset) const; + inline typed::map> intersect_range(const typed::set> &set) const; + inline typed::union_map> intersect_range(const typed::space> &space) const; + inline typed::union_map> intersect_range(const typed::union_set> &uset) const; + inline typed::basic_map> intersect_range(const typed::point> &bset) const; + inline typed::map> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::map> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lexmax() const; + inline typed::pw_multi_aff> lexmax_pw_multi_aff() const; + inline typed::map> lexmin() const; + inline typed::pw_multi_aff> lexmin_pw_multi_aff() const; + inline typed::map> lower_bound(const typed::multi_pw_aff> &lower) const; + inline typed::map_list> map_list() const; + inline typed::multi_pw_aff> max_multi_pw_aff() const; + inline typed::multi_pw_aff> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map> preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::map> preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::map> preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::map preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, pair, Arg3>> product(const typed::map &map2) const; + template + inline typed::union_map, pair, Arg3>> product(const typed::union_map &umap2) const; + inline typed::map> project_out_all_params() const; + inline typed::map> project_out_param(const typed::id &id) const; + inline typed::map> project_out_param(const std::string &id) const; + inline typed::map> project_out_param(const typed::id_list &list) const; + inline typed::set> range() const; + inline typed::map range_factor_domain() const; + inline typed::map range_factor_range() const; + inline typed::fixed_box> range_lattice_tile() const; + inline typed::union_map>, pair> range_map() const; + template + inline typed::map, Arg3>> range_product(const typed::map &map2) const; + template + inline typed::union_map, Arg3>> range_product(const typed::union_map &umap2) const; + inline typed::map> range_reverse() const; + inline typed::fixed_box> range_simple_fixed_box_hull() const; + inline typed::basic_map, Domain> reverse() const; + template + inline typed::map> set_domain_tuple(const typed::id &id) const; + template + inline typed::map> set_domain_tuple(const std::string &id) const; + inline typed::map> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::map> set_range_tuple(const std::string &id) const = delete; + inline typed::space> space() const; + inline typed::map> subtract(const typed::map> &map2) const; + inline typed::union_map> subtract(const typed::union_map> &umap2) const; + inline typed::union_map> subtract_domain(const typed::union_set &dom) const; + inline typed::union_map> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map> to_union_map() const; + inline typed::map, Range2> uncurry() const; + inline typed::map> unite(const typed::basic_map> &bmap2) const; + inline typed::map> unite(const typed::map> &map2) const; + inline typed::union_map> unite(const typed::union_map> &umap2) const; + inline typed::map> upper_bound(const typed::multi_pw_aff> &upper) const; + inline typed::set>> wrap() const; +}; + +template +struct basic_map, pair> : public isl::basic_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_map() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + basic_map(const basic_map, pair> &obj) : isl::basic_map(obj) {} + private: + template {}, bool>::type = true> + basic_map(const base &obj) : isl::basic_map(obj) {} + public: + static basic_map from(const isl::basic_map &obj) { + return basic_map(obj); + } + inline explicit basic_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_map> apply_domain(const typed::basic_map, Domain2> &bmap2) const; + template + inline typed::map> apply_domain(const typed::map, Domain2> &map2) const; + template + inline typed::union_map> apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::basic_map, Range2> apply_range(const typed::basic_map, Range2> &bmap2) const; + template + inline typed::map, Range2> apply_range(const typed::map, Range2> &map2) const; + template + inline typed::union_map, Range2> apply_range(const typed::union_map, Range2> &umap2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff, pair> as_union_pw_multi_aff() const; + inline typed::set> bind_domain(const typed::multi_id> &tuple) const; + inline typed::set> bind_range(const typed::multi_id> &tuple) const; + inline typed::map, pair> coalesce() const; + inline typed::map>> curry() const; + inline typed::basic_set> deltas() const; + inline typed::basic_map, pair> detect_equalities() const; + inline typed::set> domain() const; + inline typed::map> domain_factor_domain() const; + inline typed::map> domain_factor_range() const; + inline typed::union_map, pair>, pair> domain_map() const; + inline typed::union_pw_multi_aff, pair>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain2>, pair> domain_product(const typed::map> &map2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::union_map> &umap2) const; + inline typed::map, pair> domain_reverse() const; + inline typed::map, pair> drop_unused_params() const; + template + inline typed::map, pair> eq_at(const typed::multi_pw_aff, Range> &mpa) const; + template + inline typed::union_map, pair> eq_at(const typed::multi_union_pw_aff, Range> &mupa) const; + inline bool every_map(const std::function, pair>)> &test) const; + inline typed::map, pair> extract_map(const typed::space, pair> &space) const; + inline typed::basic_map> flatten_domain() const; + inline typed::basic_map, Anonymous> flatten_range() const; + inline void foreach_basic_map(const std::function, pair>)> &fn) const; + inline void foreach_map(const std::function, pair>)> &fn) const; + inline typed::basic_map, pair> gist(const typed::basic_map, pair> &context) const; + inline typed::map, pair> gist(const typed::map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::union_map, pair> &context) const; + inline typed::map, pair> gist_domain(const typed::set> &context) const; + inline typed::union_map, pair> gist_domain(const typed::union_set> &uset) const; + inline typed::map, pair> gist_params(const typed::set<> &context) const; + inline typed::basic_map, pair> intersect(const typed::basic_map, pair> &bmap2) const; + inline typed::map, pair> intersect(const typed::map, pair> &map2) const; + inline typed::union_map, pair> intersect(const typed::union_map, pair> &umap2) const; + inline typed::basic_map, pair> intersect_domain(const typed::basic_set> &bset) const; + inline typed::map, pair> intersect_domain(const typed::set> &set) const; + inline typed::union_map, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_map, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::basic_map, pair> intersect_domain(const typed::point> &bset) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_map, pair> intersect_range(const typed::basic_set> &bset) const; + inline typed::map, pair> intersect_range(const typed::set> &set) const; + inline typed::union_map, pair> intersect_range(const typed::space> &space) const; + inline typed::union_map, pair> intersect_range(const typed::union_set> &uset) const; + inline typed::basic_map, pair> intersect_range(const typed::point> &bset) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::union_set &domain) const; + template + inline typed::map, pair> lex_ge_at(const typed::multi_pw_aff, Range> &mpa) const; + template + inline typed::map, pair> lex_gt_at(const typed::multi_pw_aff, Range> &mpa) const; + template + inline typed::map, pair> lex_le_at(const typed::multi_pw_aff, Range> &mpa) const; + template + inline typed::map, pair> lex_lt_at(const typed::multi_pw_aff, Range> &mpa) const; + inline typed::map, pair> lexmax() const; + inline typed::pw_multi_aff, pair> lexmax_pw_multi_aff() const; + inline typed::map, pair> lexmin() const; + inline typed::pw_multi_aff, pair> lexmin_pw_multi_aff() const; + inline typed::map, pair> lower_bound(const typed::multi_pw_aff, pair> &lower) const; + inline typed::map_list, pair> map_list() const; + inline typed::multi_pw_aff, pair> max_multi_pw_aff() const; + inline typed::multi_pw_aff, pair> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map> preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::map> preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::map> preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Range2> preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::map, Range2> preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map, Range2> preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Domain2>, pair, Range2>> product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, pair, Range2>> product(const typed::union_map &umap2) const; + inline typed::map, pair> project_out_all_params() const; + inline typed::map, pair> project_out_param(const typed::id &id) const; + inline typed::map, pair> project_out_param(const std::string &id) const; + inline typed::map, pair> project_out_param(const typed::id_list &list) const; + inline typed::set> range() const; + inline typed::map, T1> range_factor_domain() const; + inline typed::map, T2> range_factor_range() const; + inline typed::fixed_box, pair> range_lattice_tile() const; + inline typed::union_map, pair>, pair> range_map() const; + template + inline typed::map, pair, Range2>> range_product(const typed::map, Range2> &map2) const; + template + inline typed::union_map, pair, Range2>> range_product(const typed::union_map, Range2> &umap2) const; + inline typed::map, pair> range_reverse() const; + inline typed::fixed_box, pair> range_simple_fixed_box_hull() const; + inline typed::basic_map, pair> reverse() const; + inline typed::map, pair> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_domain_tuple(const std::string &id) const = delete; + inline typed::map, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, pair> space() const; + inline typed::map, pair> subtract(const typed::map, pair> &map2) const; + inline typed::union_map, pair> subtract(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map, pair> to_union_map() const; + inline typed::map, T1>, T2> uncurry() const; + inline typed::map, pair> unite(const typed::basic_map, pair> &bmap2) const; + inline typed::map, pair> unite(const typed::map, pair> &map2) const; + inline typed::union_map, pair> unite(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> upper_bound(const typed::multi_pw_aff, pair> &upper) const; + inline typed::set, pair>> wrap() const; +}; + +template +struct basic_map, pair> : public isl::basic_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + basic_map(const basic_map, pair> &obj) : isl::basic_map(obj) {} + private: + template {}, bool>::type = true> + basic_map(const base &obj) : isl::basic_map(obj) {} + public: + static basic_map from(const isl::basic_map &obj) { + return basic_map(obj); + } + inline explicit basic_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_map> apply_domain(const typed::basic_map, Domain2> &bmap2) const; + template + inline typed::map> apply_domain(const typed::map, Domain2> &map2) const; + template + inline typed::union_map> apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::basic_map, Arg2> apply_range(const typed::basic_map, Arg2> &bmap2) const; + template + inline typed::map, Arg2> apply_range(const typed::map, Arg2> &map2) const; + template + inline typed::union_map, Arg2> apply_range(const typed::union_map, Arg2> &umap2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff, pair> as_union_pw_multi_aff() const; + inline typed::set> bind_domain(const typed::multi_id> &tuple) const; + inline typed::set> bind_range(const typed::multi_id> &tuple) const; + inline typed::map, pair> coalesce() const; + inline typed::map>> curry() const; + inline typed::basic_set, pair> deltas() const = delete; + inline typed::basic_map, pair> detect_equalities() const; + inline typed::set> domain() const; + inline typed::map> domain_factor_domain() const; + inline typed::map> domain_factor_range() const; + inline typed::union_map, pair>, pair> domain_map() const; + inline typed::union_pw_multi_aff, pair>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain2>, pair> domain_product(const typed::map> &map2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::union_map> &umap2) const; + inline typed::map, pair> domain_reverse() const; + inline typed::map, pair> drop_unused_params() const; + inline typed::map, pair> eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map, pair> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function, pair>)> &test) const; + inline typed::map, pair> extract_map(const typed::space, pair> &space) const; + inline typed::basic_map> flatten_domain() const; + inline typed::basic_map, Anonymous> flatten_range() const; + inline void foreach_basic_map(const std::function, pair>)> &fn) const; + inline void foreach_map(const std::function, pair>)> &fn) const; + inline typed::basic_map, pair> gist(const typed::basic_map, pair> &context) const; + inline typed::map, pair> gist(const typed::map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::union_map, pair> &context) const; + inline typed::map, pair> gist_domain(const typed::set> &context) const; + inline typed::union_map, pair> gist_domain(const typed::union_set> &uset) const; + inline typed::map, pair> gist_params(const typed::set<> &context) const; + inline typed::basic_map, pair> intersect(const typed::basic_map, pair> &bmap2) const; + inline typed::map, pair> intersect(const typed::map, pair> &map2) const; + inline typed::union_map, pair> intersect(const typed::union_map, pair> &umap2) const; + inline typed::basic_map, pair> intersect_domain(const typed::basic_set> &bset) const; + inline typed::map, pair> intersect_domain(const typed::set> &set) const; + inline typed::union_map, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_map, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::basic_map, pair> intersect_domain(const typed::point> &bset) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_map, pair> intersect_range(const typed::basic_set> &bset) const; + inline typed::map, pair> intersect_range(const typed::set> &set) const; + inline typed::union_map, pair> intersect_range(const typed::space> &space) const; + inline typed::union_map, pair> intersect_range(const typed::union_set> &uset) const; + inline typed::basic_map, pair> intersect_range(const typed::point> &bset) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lexmax() const; + inline typed::pw_multi_aff, pair> lexmax_pw_multi_aff() const; + inline typed::map, pair> lexmin() const; + inline typed::pw_multi_aff, pair> lexmin_pw_multi_aff() const; + inline typed::map, pair> lower_bound(const typed::multi_pw_aff, pair> &lower) const; + inline typed::map_list, pair> map_list() const; + inline typed::multi_pw_aff, pair> max_multi_pw_aff() const; + inline typed::multi_pw_aff, pair> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map> preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::map> preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::map> preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Arg2> preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::map, Arg2> preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map, Arg2> preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Domain2>, pair, Arg2>> product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, pair, Arg2>> product(const typed::union_map &umap2) const; + inline typed::map, pair> project_out_all_params() const; + inline typed::map, pair> project_out_param(const typed::id &id) const; + inline typed::map, pair> project_out_param(const std::string &id) const; + inline typed::map, pair> project_out_param(const typed::id_list &list) const; + inline typed::set> range() const; + inline typed::map, Range> range_factor_domain() const; + inline typed::map, Range2> range_factor_range() const; + inline typed::fixed_box, pair> range_lattice_tile() const; + inline typed::union_map, pair>, pair> range_map() const; + template + inline typed::map, pair, Arg2>> range_product(const typed::map, Arg2> &map2) const; + template + inline typed::union_map, pair, Arg2>> range_product(const typed::union_map, Arg2> &umap2) const; + inline typed::map, pair> range_reverse() const; + inline typed::fixed_box, pair> range_simple_fixed_box_hull() const; + inline typed::basic_map, pair> reverse() const; + inline typed::map, pair> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_domain_tuple(const std::string &id) const = delete; + inline typed::map, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, pair> space() const; + inline typed::map, pair> subtract(const typed::map, pair> &map2) const; + inline typed::union_map, pair> subtract(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map, pair> to_union_map() const; + inline typed::map, Range>, Range2> uncurry() const; + inline typed::map, pair> unite(const typed::basic_map, pair> &bmap2) const; + inline typed::map, pair> unite(const typed::map, pair> &map2) const; + inline typed::union_map, pair> unite(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> upper_bound(const typed::multi_pw_aff, pair> &upper) const; + inline typed::set, pair>> wrap() const; +}; + +template <> +struct basic_set<> : public isl::basic_set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_set() = default; + private: + template {}, bool>::type = true> + basic_set(const base &obj) : isl::basic_set(obj) {} + public: + static basic_set from(const isl::basic_set &obj) { + return basic_set(obj); + } + inline /* implicit */ basic_set(const typed::point<> &pnt); + inline explicit basic_set(const isl::ctx &ctx, const std::string &str); + inline typed::basic_set<> apply(const typed::basic_map<> &bmap) const = delete; + inline typed::set<> apply(const typed::map<> &map) const = delete; + inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete; + inline typed::pw_multi_aff<> as_pw_multi_aff() const = delete; + inline typed::set<> as_set() const = delete; + inline typed::set<> bind(const typed::multi_id<> &tuple) const = delete; + inline typed::set<> coalesce() const; + inline typed::basic_set<> detect_equalities() const; + inline typed::set<> drop_unused_params() const; + inline bool every_set(const std::function)> &test) const; + inline typed::set<> extract_set(const typed::space<> &space) const; + inline void foreach_basic_set(const std::function)> &fn) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::basic_set<> gist(const typed::basic_set<> &context) const; + inline typed::set<> gist(const typed::set<> &context) const; + inline typed::union_set<> gist(const typed::union_set<> &context) const; + inline typed::basic_set<> gist(const typed::point<> &context) const; + inline typed::set<> gist_params(const typed::set<> &context) const = delete; + inline typed::map<> identity() const = delete; + inline typed::pw_aff indicator_function() const; + inline typed::map<> insert_domain(const typed::space<> &domain) const = delete; + inline typed::basic_set<> intersect(const typed::basic_set<> &bset2) const; + inline typed::set<> intersect(const typed::set<> &set2) const; + inline typed::union_set<> intersect(const typed::union_set<> &uset2) const; + inline typed::basic_set<> intersect(const typed::point<> &bset2) const; + inline typed::basic_set<> intersect_params(const typed::basic_set<> &bset2) const = delete; + inline typed::set<> intersect_params(const typed::set<> ¶ms) const = delete; + inline typed::basic_set<> intersect_params(const typed::point<> &bset2) const = delete; + inline typed::fixed_box<> lattice_tile() const = delete; + inline typed::set<> lexmax() const = delete; + inline typed::pw_multi_aff<> lexmax_pw_multi_aff() const = delete; + inline typed::set<> lexmin() const = delete; + inline typed::pw_multi_aff<> lexmin_pw_multi_aff() const = delete; + inline typed::set<> lower_bound(const typed::multi_pw_aff<> &lower) const = delete; + inline typed::set<> lower_bound(const typed::multi_val<> &lower) const = delete; + inline typed::multi_pw_aff<> max_multi_pw_aff() const = delete; + inline typed::val<> max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff<> min_multi_pw_aff() const = delete; + inline typed::val<> min_val(const typed::aff<> &obj) const = delete; + inline typed::pw_aff param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline typed::basic_set<> params() const = delete; + inline typed::multi_val<> plain_multi_val_if_fixed() const = delete; + inline typed::set<> preimage(const typed::multi_aff<> &ma) const = delete; + inline typed::set<> preimage(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::set<> preimage(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::set<> product(const typed::set<> &set2) const = delete; + inline typed::set<> project_out_all_params() const; + inline typed::set<> project_out_param(const typed::id &id) const; + inline typed::set<> project_out_param(const std::string &id) const; + inline typed::set<> project_out_param(const typed::id_list &list) const; + inline typed::pw_aff pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list<> set_list() const; + inline typed::fixed_box<> simple_fixed_box_hull() const = delete; + inline typed::space<> space() const; + inline typed::set<> subtract(const typed::set<> &set2) const; + inline typed::union_set<> subtract(const typed::union_set<> &uset2) const; + inline typed::set<> to_set() const; + inline typed::union_set<> to_union_set() const; + inline typed::map<> translation() const = delete; + template + inline typed::set unbind_params(const typed::multi_id &tuple) const; + inline typed::map<> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::set<> unite(const typed::basic_set<> &bset2) const; + inline typed::set<> unite(const typed::set<> &set2) const; + inline typed::union_set<> unite(const typed::union_set<> &uset2) const; + inline typed::set<> unite(const typed::point<> &bset2) const; + inline typed::map<> unwrap() const = delete; + inline typed::set<> upper_bound(const typed::multi_pw_aff<> &upper) const = delete; + inline typed::set<> upper_bound(const typed::multi_val<> &upper) const = delete; + inline typed::set<> wrapped_reverse() const = delete; +}; + +template +struct basic_set : public isl::basic_set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_set() = default; + template {}, + bool>::type = true> + basic_set(const basic_set &obj) : isl::basic_set(obj) {} + private: + template {}, bool>::type = true> + basic_set(const base &obj) : isl::basic_set(obj) {} + public: + static basic_set from(const isl::basic_set &obj) { + return basic_set(obj); + } + inline /* implicit */ basic_set(const typed::point &pnt); + inline explicit basic_set(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_set apply(const typed::basic_map &bmap) const; + template + inline typed::set apply(const typed::map &map) const; + template + inline typed::union_set apply(const typed::union_map &umap) const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::set<> bind(const typed::multi_id &tuple) const; + inline typed::set coalesce() const; + inline typed::basic_set detect_equalities() const; + inline typed::set drop_unused_params() const; + inline bool every_set(const std::function)> &test) const; + inline typed::set extract_set(const typed::space &space) const; + inline void foreach_basic_set(const std::function)> &fn) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::basic_set gist(const typed::basic_set &context) const; + inline typed::set gist(const typed::set &context) const; + inline typed::union_set gist(const typed::union_set &context) const; + inline typed::basic_set gist(const typed::point &context) const; + inline typed::set gist_params(const typed::set<> &context) const; + inline typed::map identity() const; + inline typed::pw_aff indicator_function() const; + template + inline typed::map insert_domain(const typed::space &domain) const; + inline typed::basic_set intersect(const typed::basic_set &bset2) const; + inline typed::set intersect(const typed::set &set2) const; + inline typed::union_set intersect(const typed::union_set &uset2) const; + inline typed::basic_set intersect(const typed::point &bset2) const; + inline typed::basic_set intersect_params(const typed::basic_set<> &bset2) const; + inline typed::set intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_set intersect_params(const typed::point<> &bset2) const; + inline typed::fixed_box lattice_tile() const; + inline typed::set lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::set lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::set lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::set lower_bound(const typed::multi_val &lower) const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::val max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::val min_val(const typed::aff<> &obj) const = delete; + inline typed::pw_aff param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline typed::basic_set<> params() const; + inline typed::multi_val plain_multi_val_if_fixed() const; + template + inline typed::set preimage(const typed::multi_aff &ma) const; + template + inline typed::set preimage(const typed::multi_pw_aff &mpa) const; + template + inline typed::set preimage(const typed::pw_multi_aff &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff &upma) const; + template + inline typed::set> product(const typed::set &set2) const; + inline typed::set project_out_all_params() const; + inline typed::set project_out_param(const typed::id &id) const; + inline typed::set project_out_param(const std::string &id) const; + inline typed::set project_out_param(const typed::id_list &list) const; + inline typed::pw_aff pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list set_list() const; + inline typed::fixed_box simple_fixed_box_hull() const; + inline typed::space space() const; + inline typed::set subtract(const typed::set &set2) const; + inline typed::union_set subtract(const typed::union_set &uset2) const; + inline typed::set to_set() const; + inline typed::union_set to_union_set() const; + inline typed::map translation() const; + inline typed::set unbind_params(const typed::multi_id<> &tuple) const = delete; + template + inline typed::map unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::set unite(const typed::basic_set &bset2) const; + inline typed::set unite(const typed::set &set2) const; + inline typed::union_set unite(const typed::union_set &uset2) const; + inline typed::set unite(const typed::point &bset2) const; + inline typed::map unwrap() const = delete; + inline typed::set upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::set upper_bound(const typed::multi_val &upper) const; + inline typed::set wrapped_reverse() const = delete; +}; + +template +struct basic_set> : public isl::basic_set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + basic_set() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + basic_set(const basic_set> &obj) : isl::basic_set(obj) {} + private: + template {}, bool>::type = true> + basic_set(const base &obj) : isl::basic_set(obj) {} + public: + static basic_set from(const isl::basic_set &obj) { + return basic_set(obj); + } + inline /* implicit */ basic_set(const typed::point> &pnt); + inline explicit basic_set(const isl::ctx &ctx, const std::string &str); + template + inline typed::basic_set apply(const typed::basic_map, Arg2> &bmap) const; + template + inline typed::set apply(const typed::map, Arg2> &map) const; + template + inline typed::union_set apply(const typed::union_map, Arg2> &umap) const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::set> as_set() const; + inline typed::set<> bind(const typed::multi_id> &tuple) const; + inline typed::set> coalesce() const; + inline typed::basic_set> detect_equalities() const; + inline typed::set> drop_unused_params() const; + inline bool every_set(const std::function>)> &test) const; + inline typed::set> extract_set(const typed::space> &space) const; + inline void foreach_basic_set(const std::function>)> &fn) const; + inline void foreach_point(const std::function>)> &fn) const; + inline void foreach_set(const std::function>)> &fn) const; + inline typed::basic_set> gist(const typed::basic_set> &context) const; + inline typed::set> gist(const typed::set> &context) const; + inline typed::union_set> gist(const typed::union_set> &context) const; + inline typed::basic_set> gist(const typed::point> &context) const; + inline typed::set> gist_params(const typed::set<> &context) const; + inline typed::map, pair> identity() const; + inline typed::pw_aff, Anonymous> indicator_function() const; + template + inline typed::map> insert_domain(const typed::space &domain) const; + inline typed::basic_set> intersect(const typed::basic_set> &bset2) const; + inline typed::set> intersect(const typed::set> &set2) const; + inline typed::union_set> intersect(const typed::union_set> &uset2) const; + inline typed::basic_set> intersect(const typed::point> &bset2) const; + inline typed::basic_set> intersect_params(const typed::basic_set<> &bset2) const; + inline typed::set> intersect_params(const typed::set<> ¶ms) const; + inline typed::basic_set> intersect_params(const typed::point<> &bset2) const; + inline typed::fixed_box> lattice_tile() const; + inline typed::set> lexmax() const; + inline typed::pw_multi_aff> lexmax_pw_multi_aff() const; + inline typed::set> lexmin() const; + inline typed::pw_multi_aff> lexmin_pw_multi_aff() const; + inline typed::set> lower_bound(const typed::multi_pw_aff> &lower) const; + inline typed::set> lower_bound(const typed::multi_val> &lower) const; + inline typed::multi_pw_aff> max_multi_pw_aff() const; + inline typed::val> max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff> min_multi_pw_aff() const; + inline typed::val> min_val(const typed::aff<> &obj) const = delete; + inline typed::pw_aff, Anonymous> param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff, Anonymous> param_pw_aff_on_domain(const std::string &id) const; + inline typed::basic_set<> params() const; + inline typed::multi_val> plain_multi_val_if_fixed() const; + template + inline typed::set preimage(const typed::multi_aff> &ma) const; + template + inline typed::set preimage(const typed::multi_pw_aff> &mpa) const; + template + inline typed::set preimage(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::set, Arg2>> product(const typed::set &set2) const; + inline typed::set> project_out_all_params() const; + inline typed::set> project_out_param(const typed::id &id) const; + inline typed::set> project_out_param(const std::string &id) const; + inline typed::set> project_out_param(const typed::id_list &list) const; + inline typed::pw_aff, Anonymous> pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff, Anonymous> pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff, Arg2> pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list> set_list() const; + inline typed::fixed_box> simple_fixed_box_hull() const; + inline typed::space> space() const; + inline typed::set> subtract(const typed::set> &set2) const; + inline typed::union_set> subtract(const typed::union_set> &uset2) const; + inline typed::set> to_set() const; + inline typed::union_set> to_union_set() const; + inline typed::map, pair> translation() const; + inline typed::set> unbind_params(const typed::multi_id<> &tuple) const = delete; + template + inline typed::map> unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::set> unite(const typed::basic_set> &bset2) const; + inline typed::set> unite(const typed::set> &set2) const; + inline typed::union_set> unite(const typed::union_set> &uset2) const; + inline typed::set> unite(const typed::point> &bset2) const; + inline typed::map unwrap() const; + inline typed::set> upper_bound(const typed::multi_pw_aff> &upper) const; + inline typed::set> upper_bound(const typed::multi_val> &upper) const; + inline typed::set> wrapped_reverse() const; +}; + +template +struct fixed_box : public isl::fixed_box { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + fixed_box() = default; + template {}, + bool>::type = true> + fixed_box(const fixed_box &obj) : isl::fixed_box(obj) {} + private: + template {}, bool>::type = true> + fixed_box(const base &obj) : isl::fixed_box(obj) {} + public: + static fixed_box from(const isl::fixed_box &obj) { + return fixed_box(obj); + } + inline explicit fixed_box(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff offset() const; + inline typed::multi_aff get_offset() const = delete; + inline typed::multi_val size() const; + inline typed::multi_val get_size() const = delete; + inline typed::space space() const; + inline typed::space get_space() const = delete; +}; + +template +struct fixed_box : public isl::fixed_box { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + fixed_box() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + fixed_box(const fixed_box &obj) : isl::fixed_box(obj) {} + private: + template {}, bool>::type = true> + fixed_box(const base &obj) : isl::fixed_box(obj) {} + public: + static fixed_box from(const isl::fixed_box &obj) { + return fixed_box(obj); + } + inline explicit fixed_box(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff offset() const; + inline typed::multi_aff get_offset() const = delete; + inline typed::multi_val size() const; + inline typed::multi_val get_size() const = delete; + inline typed::space space() const; + inline typed::space get_space() const = delete; +}; + +template <> +struct id : public isl::id { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + id() = default; + id(const isl::id &obj) : isl::id(obj) {} + static id from(const isl::id &obj) { + return id(obj); + } + inline explicit id(const isl::ctx &ctx, const std::string &str); + inline std::string get_name() const = delete; +}; + +template <> +struct id_list : public isl::id_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + id_list() = default; + id_list(const isl::id_list &obj) : isl::id_list(obj) {} + static id_list from(const isl::id_list &obj) { + return id_list(obj); + } + inline explicit id_list(const isl::ctx &ctx, int n); + inline explicit id_list(const typed::id &el); + inline explicit id_list(const isl::ctx &ctx, const std::string &str); + inline typed::id_list add(const typed::id &el) const; + inline typed::id_list add(const std::string &el) const; + inline typed::id at(int index) const; + inline typed::id get_at(int index) const = delete; + inline typed::id_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::id)> &follows, const std::function)> &fn) const; + inline typed::id_list set_at(int index, const typed::id &el) const; + inline typed::id_list set_at(int index, const std::string &el) const; +}; + +template +struct map : public isl::map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + map(const map &obj) : isl::map(obj) {} + private: + template {}, bool>::type = true> + map(const base &obj) : isl::map(obj) {} + public: + static map from(const isl::map &obj) { + return map(obj); + } + inline /* implicit */ map(const typed::basic_map &bmap); + inline explicit map(const isl::ctx &ctx, const std::string &str); + template + inline typed::map apply_domain(const typed::map &map2) const; + template + inline typed::union_map apply_domain(const typed::union_map &umap2) const; + template + inline typed::map apply_domain(const typed::basic_map &map2) const; + template + inline typed::map apply_range(const typed::map &map2) const; + template + inline typed::union_map apply_range(const typed::union_map &umap2) const; + template + inline typed::map apply_range(const typed::basic_map &map2) const; + inline typed::map as_map() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_pw_multi_aff as_union_pw_multi_aff() const; + inline typed::set bind_domain(const typed::multi_id &tuple) const; + inline typed::set bind_range(const typed::multi_id &tuple) const; + inline typed::map coalesce() const; + inline typed::map curry() const = delete; + inline typed::set deltas() const = delete; + inline typed::map detect_equalities() const; + inline typed::set domain() const; + inline typed::map domain_factor_domain() const = delete; + inline typed::map domain_factor_range() const = delete; + inline typed::union_map, Domain> domain_map() const; + inline typed::union_pw_multi_aff, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Range> domain_product(const typed::map &map2) const; + template + inline typed::union_map, Range> domain_product(const typed::union_map &umap2) const; + template + inline typed::map, Range> domain_product(const typed::basic_map &map2) const; + inline typed::map domain_reverse() const = delete; + inline typed::id get_domain_tuple_id() const = delete; + inline typed::map drop_unused_params() const; + inline typed::map eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::map eq_at(const typed::aff<> &mpa) const = delete; + inline typed::map eq_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map eq_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map eq_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline bool every_map(const std::function)> &test) const; + inline typed::map extract_map(const typed::space &space) const; + inline typed::map flatten_domain() const = delete; + inline typed::map flatten_range() const = delete; + inline void foreach_basic_map(const std::function)> &fn) const; + inline void foreach_map(const std::function)> &fn) const; + inline typed::map gist(const typed::map &context) const; + inline typed::union_map gist(const typed::union_map &context) const; + inline typed::map gist(const typed::basic_map &context) const; + inline typed::map gist_domain(const typed::set &context) const; + inline typed::union_map gist_domain(const typed::union_set &uset) const; + inline typed::map gist_domain(const typed::basic_set &context) const; + inline typed::map gist_domain(const typed::point &context) const; + inline typed::map gist_params(const typed::set<> &context) const; + inline typed::map gist_params(const typed::basic_set<> &context) const; + inline typed::map gist_params(const typed::point<> &context) const; + inline typed::map intersect(const typed::map &map2) const; + inline typed::union_map intersect(const typed::union_map &umap2) const; + inline typed::map intersect(const typed::basic_map &map2) const; + inline typed::map intersect_domain(const typed::set &set) const; + inline typed::union_map intersect_domain(const typed::space &space) const; + inline typed::union_map intersect_domain(const typed::union_set &uset) const; + inline typed::map intersect_domain(const typed::basic_set &set) const; + inline typed::map intersect_domain(const typed::point &set) const; + inline typed::map intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map intersect_domain_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::map intersect_domain_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::map intersect_params(const typed::set<> ¶ms) const; + inline typed::map intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::map intersect_params(const typed::point<> ¶ms) const; + inline typed::map intersect_range(const typed::set &set) const; + inline typed::union_map intersect_range(const typed::space &space) const; + inline typed::union_map intersect_range(const typed::union_set &uset) const; + inline typed::map intersect_range(const typed::basic_set &set) const; + inline typed::map intersect_range(const typed::point &set) const; + inline typed::map intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map intersect_range_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::map intersect_range_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::map lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_ge_at(const typed::aff<> &mpa) const = delete; + inline typed::map lex_ge_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map lex_ge_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_gt_at(const typed::aff<> &mpa) const = delete; + inline typed::map lex_gt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map lex_gt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_le_at(const typed::aff<> &mpa) const = delete; + inline typed::map lex_le_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map lex_le_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map lex_lt_at(const typed::aff<> &mpa) const = delete; + inline typed::map lex_lt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map lex_lt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::map lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::map lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::map lower_bound(const typed::aff &lower) const; + inline typed::map lower_bound(const typed::multi_aff &lower) const; + inline typed::map lower_bound(const typed::pw_aff &lower) const; + inline typed::map lower_bound(const typed::pw_multi_aff &lower) const; + inline typed::map_list map_list() const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::map preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::map preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map preimage_range(const typed::multi_aff &ma) const; + template + inline typed::map preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map, pair> product(const typed::map &map2) const; + template + inline typed::union_map, pair> product(const typed::union_map &umap2) const; + template + inline typed::map, pair> product(const typed::basic_map &map2) const; + inline typed::map project_out_all_params() const; + inline typed::map project_out_param(const typed::id &id) const; + inline typed::map project_out_param(const std::string &id) const; + inline typed::map project_out_param(const typed::id_list &list) const; + inline typed::set range() const; + inline typed::map range_factor_domain() const = delete; + inline typed::map range_factor_range() const = delete; + inline typed::fixed_box range_lattice_tile() const; + inline typed::fixed_box get_range_lattice_tile() const = delete; + inline typed::union_map, Range> range_map() const; + template + inline typed::map> range_product(const typed::map &map2) const; + template + inline typed::union_map> range_product(const typed::union_map &umap2) const; + template + inline typed::map> range_product(const typed::basic_map &map2) const; + inline typed::map range_reverse() const = delete; + inline typed::fixed_box range_simple_fixed_box_hull() const; + inline typed::fixed_box get_range_simple_fixed_box_hull() const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::map reverse() const; + template + inline typed::map set_domain_tuple(const typed::id &id) const; + template + inline typed::map set_domain_tuple(const std::string &id) const; + template + inline typed::map set_range_tuple(const typed::id &id) const; + template + inline typed::map set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::map subtract(const typed::map &map2) const; + inline typed::union_map subtract(const typed::union_map &umap2) const; + inline typed::map subtract(const typed::basic_map &map2) const; + inline typed::union_map subtract_domain(const typed::union_set &dom) const; + inline typed::union_map subtract_range(const typed::union_set &dom) const; + inline typed::union_map to_union_map() const; + inline typed::map uncurry() const = delete; + inline typed::map unite(const typed::map &map2) const; + inline typed::union_map unite(const typed::union_map &umap2) const; + inline typed::map unite(const typed::basic_map &map2) const; + static inline typed::map universe(const typed::space &space); + inline typed::map upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::map upper_bound(const typed::aff &upper) const; + inline typed::map upper_bound(const typed::multi_aff &upper) const; + inline typed::map upper_bound(const typed::pw_aff &upper) const; + inline typed::map upper_bound(const typed::pw_multi_aff &upper) const; + inline typed::set> wrap() const; +}; + +template +struct map, Range2> : public isl::map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + map(const map, Arg3> &obj) : isl::map(obj) {} + private: + template {}, bool>::type = true> + map(const base &obj) : isl::map(obj) {} + public: + static map from(const isl::map &obj) { + return map(obj); + } + inline /* implicit */ map(const typed::basic_map, Range2> &bmap); + inline explicit map(const isl::ctx &ctx, const std::string &str); + template + inline typed::map apply_domain(const typed::map, Domain2> &map2) const; + template + inline typed::union_map apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::map apply_domain(const typed::basic_map, Domain2> &map2) const; + template + inline typed::map, Arg3> apply_range(const typed::map &map2) const; + template + inline typed::union_map, Arg3> apply_range(const typed::union_map &umap2) const; + template + inline typed::map, Arg3> apply_range(const typed::basic_map &map2) const; + inline typed::map, Range2> as_map() const; + inline typed::multi_union_pw_aff, Range2> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Range2> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff, Range2> as_union_pw_multi_aff() const; + inline typed::set bind_domain(const typed::multi_id> &tuple) const; + inline typed::set> bind_range(const typed::multi_id &tuple) const; + inline typed::map, Range2> coalesce() const; + inline typed::map> curry() const; + inline typed::set, Range2> deltas() const = delete; + inline typed::map, Range2> detect_equalities() const; + inline typed::set> domain() const; + inline typed::map domain_factor_domain() const; + inline typed::map domain_factor_range() const; + inline typed::union_map, Range2>, pair> domain_map() const; + inline typed::union_pw_multi_aff, Range2>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain2>, Range2> domain_product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, Range2> domain_product(const typed::union_map &umap2) const; + template + inline typed::map, Domain2>, Range2> domain_product(const typed::basic_map &map2) const; + inline typed::map, Range2> domain_reverse() const; + inline typed::id, Range2> get_domain_tuple_id() const = delete; + inline typed::map, Range2> drop_unused_params() const; + inline typed::map, Range2> eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map, Range2> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::map, Range2> eq_at(const typed::aff<> &mpa) const = delete; + inline typed::map, Range2> eq_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, Range2> eq_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, Range2> eq_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline bool every_map(const std::function, Range2>)> &test) const; + inline typed::map, Range2> extract_map(const typed::space, Range2> &space) const; + inline typed::map flatten_domain() const; + inline typed::map, Range2> flatten_range() const = delete; + inline void foreach_basic_map(const std::function, Range2>)> &fn) const; + inline void foreach_map(const std::function, Range2>)> &fn) const; + inline typed::map, Range2> gist(const typed::map, Range2> &context) const; + inline typed::union_map, Range2> gist(const typed::union_map, Range2> &context) const; + inline typed::map, Range2> gist(const typed::basic_map, Range2> &context) const; + inline typed::map, Range2> gist_domain(const typed::set> &context) const; + inline typed::union_map, Range2> gist_domain(const typed::union_set> &uset) const; + inline typed::map, Range2> gist_domain(const typed::basic_set> &context) const; + inline typed::map, Range2> gist_domain(const typed::point> &context) const; + inline typed::map, Range2> gist_params(const typed::set<> &context) const; + inline typed::map, Range2> gist_params(const typed::basic_set<> &context) const; + inline typed::map, Range2> gist_params(const typed::point<> &context) const; + inline typed::map, Range2> intersect(const typed::map, Range2> &map2) const; + inline typed::union_map, Range2> intersect(const typed::union_map, Range2> &umap2) const; + inline typed::map, Range2> intersect(const typed::basic_map, Range2> &map2) const; + inline typed::map, Range2> intersect_domain(const typed::set> &set) const; + inline typed::union_map, Range2> intersect_domain(const typed::space> &space) const; + inline typed::union_map, Range2> intersect_domain(const typed::union_set> &uset) const; + inline typed::map, Range2> intersect_domain(const typed::basic_set> &set) const; + inline typed::map, Range2> intersect_domain(const typed::point> &set) const; + inline typed::map, Range2> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, Range2> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, Range2> intersect_domain_wrapped_domain(const typed::basic_set &domain) const; + inline typed::map, Range2> intersect_domain_wrapped_domain(const typed::point &domain) const; + inline typed::map, Range2> intersect_params(const typed::set<> ¶ms) const; + inline typed::map, Range2> intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::map, Range2> intersect_params(const typed::point<> ¶ms) const; + inline typed::map, Range2> intersect_range(const typed::set &set) const; + inline typed::union_map, Range2> intersect_range(const typed::space &space) const; + inline typed::union_map, Range2> intersect_range(const typed::union_set &uset) const; + inline typed::map, Range2> intersect_range(const typed::basic_set &set) const; + inline typed::map, Range2> intersect_range(const typed::point &set) const; + inline typed::map, Range2> intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map, Range2> intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map, Range2> intersect_range_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::map, Range2> intersect_range_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::map, Range2> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_ge_at(const typed::aff<> &mpa) const = delete; + inline typed::map, Range2> lex_ge_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_ge_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_gt_at(const typed::aff<> &mpa) const = delete; + inline typed::map, Range2> lex_gt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_gt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_le_at(const typed::aff<> &mpa) const = delete; + inline typed::map, Range2> lex_le_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_le_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_lt_at(const typed::aff<> &mpa) const = delete; + inline typed::map, Range2> lex_lt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_lt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, Range2> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, Range2> lexmax() const; + inline typed::pw_multi_aff, Range2> lexmax_pw_multi_aff() const; + inline typed::map, Range2> lexmin() const; + inline typed::pw_multi_aff, Range2> lexmin_pw_multi_aff() const; + inline typed::map, Range2> lower_bound(const typed::multi_pw_aff, Range2> &lower) const; + inline typed::map, Range2> lower_bound(const typed::aff, Range2> &lower) const; + inline typed::map, Range2> lower_bound(const typed::multi_aff, Range2> &lower) const; + inline typed::map, Range2> lower_bound(const typed::pw_aff, Range2> &lower) const; + inline typed::map, Range2> lower_bound(const typed::pw_multi_aff, Range2> &lower) const; + inline typed::map_list, Range2> map_list() const; + inline typed::multi_pw_aff, Range2> max_multi_pw_aff() const; + inline typed::multi_pw_aff, Range2> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::map preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::map preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Arg3> preimage_range(const typed::multi_aff &ma) const; + template + inline typed::map, Arg3> preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map, Arg3> preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map, Domain2>, pair> product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, pair> product(const typed::union_map &umap2) const; + template + inline typed::map, Domain2>, pair> product(const typed::basic_map &map2) const; + inline typed::map, Range2> project_out_all_params() const; + inline typed::map, Range2> project_out_param(const typed::id &id) const; + inline typed::map, Range2> project_out_param(const std::string &id) const; + inline typed::map, Range2> project_out_param(const typed::id_list &list) const; + inline typed::set range() const; + inline typed::map, Range2> range_factor_domain() const = delete; + inline typed::map, Range2> range_factor_range() const = delete; + inline typed::fixed_box, Range2> range_lattice_tile() const; + inline typed::fixed_box, Range2> get_range_lattice_tile() const = delete; + inline typed::union_map, Range2>, Range2> range_map() const; + template + inline typed::map, pair> range_product(const typed::map, Arg3> &map2) const; + template + inline typed::union_map, pair> range_product(const typed::union_map, Arg3> &umap2) const; + template + inline typed::map, pair> range_product(const typed::basic_map, Arg3> &map2) const; + inline typed::map, Range2> range_reverse() const = delete; + inline typed::fixed_box, Range2> range_simple_fixed_box_hull() const; + inline typed::fixed_box, Range2> get_range_simple_fixed_box_hull() const = delete; + inline typed::id, Range2> get_range_tuple_id() const = delete; + inline typed::map> reverse() const; + inline typed::map, Range2> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::map, Range2> set_domain_tuple(const std::string &id) const = delete; + template + inline typed::map, Arg2> set_range_tuple(const typed::id &id) const; + template + inline typed::map, Arg2> set_range_tuple(const std::string &id) const; + inline typed::space, Range2> space() const; + inline typed::space, Range2> get_space() const = delete; + inline typed::map, Range2> subtract(const typed::map, Range2> &map2) const; + inline typed::union_map, Range2> subtract(const typed::union_map, Range2> &umap2) const; + inline typed::map, Range2> subtract(const typed::basic_map, Range2> &map2) const; + inline typed::union_map, Range2> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, Range2> subtract_range(const typed::union_set &dom) const; + inline typed::union_map, Range2> to_union_map() const; + inline typed::map, Range2> uncurry() const = delete; + inline typed::map, Range2> unite(const typed::map, Range2> &map2) const; + inline typed::union_map, Range2> unite(const typed::union_map, Range2> &umap2) const; + inline typed::map, Range2> unite(const typed::basic_map, Range2> &map2) const; + static inline typed::map, Range2> universe(const typed::space, Range2> &space); + inline typed::map, Range2> upper_bound(const typed::multi_pw_aff, Range2> &upper) const; + inline typed::map, Range2> upper_bound(const typed::aff, Range2> &upper) const; + inline typed::map, Range2> upper_bound(const typed::multi_aff, Range2> &upper) const; + inline typed::map, Range2> upper_bound(const typed::pw_aff, Range2> &upper) const; + inline typed::map, Range2> upper_bound(const typed::pw_multi_aff, Range2> &upper) const; + inline typed::set, Range2>> wrap() const; +}; + +template +struct map : public isl::map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map() = default; + template {}, + bool>::type = true> + map(const map &obj) : isl::map(obj) {} + private: + template {}, bool>::type = true> + map(const base &obj) : isl::map(obj) {} + public: + static map from(const isl::map &obj) { + return map(obj); + } + inline /* implicit */ map(const typed::basic_map &bmap); + inline explicit map(const isl::ctx &ctx, const std::string &str); + template + inline typed::map apply_domain(const typed::map &map2) const; + template + inline typed::union_map apply_domain(const typed::union_map &umap2) const; + template + inline typed::map apply_domain(const typed::basic_map &map2) const; + template + inline typed::map apply_range(const typed::map &map2) const; + template + inline typed::union_map apply_range(const typed::union_map &umap2) const; + template + inline typed::map apply_range(const typed::basic_map &map2) const; + inline typed::map as_map() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_pw_multi_aff as_union_pw_multi_aff() const; + inline typed::set bind_domain(const typed::multi_id &tuple) const; + inline typed::set bind_range(const typed::multi_id &tuple) const; + inline typed::map coalesce() const; + inline typed::map curry() const = delete; + inline typed::set deltas() const; + inline typed::map detect_equalities() const; + inline typed::set domain() const; + inline typed::map domain_factor_domain() const = delete; + inline typed::map domain_factor_range() const = delete; + inline typed::union_map, Domain> domain_map() const; + inline typed::union_pw_multi_aff, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain> domain_product(const typed::map &map2) const; + template + inline typed::union_map, Domain> domain_product(const typed::union_map &umap2) const; + template + inline typed::map, Domain> domain_product(const typed::basic_map &map2) const; + inline typed::map domain_reverse() const = delete; + inline typed::id get_domain_tuple_id() const = delete; + inline typed::map drop_unused_params() const; + template + inline typed::map eq_at(const typed::multi_pw_aff &mpa) const; + template + inline typed::union_map eq_at(const typed::multi_union_pw_aff &mupa) const; + inline typed::map eq_at(const typed::aff &mpa) const; + template + inline typed::map eq_at(const typed::multi_aff &mpa) const; + inline typed::map eq_at(const typed::pw_aff &mpa) const; + template + inline typed::map eq_at(const typed::pw_multi_aff &mpa) const; + inline bool every_map(const std::function)> &test) const; + inline typed::map extract_map(const typed::space &space) const; + inline typed::map flatten_domain() const = delete; + inline typed::map flatten_range() const = delete; + inline void foreach_basic_map(const std::function)> &fn) const; + inline void foreach_map(const std::function)> &fn) const; + inline typed::map gist(const typed::map &context) const; + inline typed::union_map gist(const typed::union_map &context) const; + inline typed::map gist(const typed::basic_map &context) const; + inline typed::map gist_domain(const typed::set &context) const; + inline typed::union_map gist_domain(const typed::union_set &uset) const; + inline typed::map gist_domain(const typed::basic_set &context) const; + inline typed::map gist_domain(const typed::point &context) const; + inline typed::map gist_params(const typed::set<> &context) const; + inline typed::map gist_params(const typed::basic_set<> &context) const; + inline typed::map gist_params(const typed::point<> &context) const; + inline typed::map intersect(const typed::map &map2) const; + inline typed::union_map intersect(const typed::union_map &umap2) const; + inline typed::map intersect(const typed::basic_map &map2) const; + inline typed::map intersect_domain(const typed::set &set) const; + inline typed::union_map intersect_domain(const typed::space &space) const; + inline typed::union_map intersect_domain(const typed::union_set &uset) const; + inline typed::map intersect_domain(const typed::basic_set &set) const; + inline typed::map intersect_domain(const typed::point &set) const; + inline typed::map intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map intersect_domain_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::map intersect_domain_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::map intersect_params(const typed::set<> ¶ms) const; + inline typed::map intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::map intersect_params(const typed::point<> ¶ms) const; + inline typed::map intersect_range(const typed::set &set) const; + inline typed::union_map intersect_range(const typed::space &space) const; + inline typed::union_map intersect_range(const typed::union_set &uset) const; + inline typed::map intersect_range(const typed::basic_set &set) const; + inline typed::map intersect_range(const typed::point &set) const; + inline typed::map intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map intersect_range_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::map intersect_range_wrapped_domain(const typed::point<> &domain) const = delete; + template + inline typed::map lex_ge_at(const typed::multi_pw_aff &mpa) const; + inline typed::map lex_ge_at(const typed::aff &mpa) const; + template + inline typed::map lex_ge_at(const typed::multi_aff &mpa) const; + inline typed::map lex_ge_at(const typed::pw_aff &mpa) const; + template + inline typed::map lex_ge_at(const typed::pw_multi_aff &mpa) const; + template + inline typed::map lex_gt_at(const typed::multi_pw_aff &mpa) const; + inline typed::map lex_gt_at(const typed::aff &mpa) const; + template + inline typed::map lex_gt_at(const typed::multi_aff &mpa) const; + inline typed::map lex_gt_at(const typed::pw_aff &mpa) const; + template + inline typed::map lex_gt_at(const typed::pw_multi_aff &mpa) const; + template + inline typed::map lex_le_at(const typed::multi_pw_aff &mpa) const; + inline typed::map lex_le_at(const typed::aff &mpa) const; + template + inline typed::map lex_le_at(const typed::multi_aff &mpa) const; + inline typed::map lex_le_at(const typed::pw_aff &mpa) const; + template + inline typed::map lex_le_at(const typed::pw_multi_aff &mpa) const; + template + inline typed::map lex_lt_at(const typed::multi_pw_aff &mpa) const; + inline typed::map lex_lt_at(const typed::aff &mpa) const; + template + inline typed::map lex_lt_at(const typed::multi_aff &mpa) const; + inline typed::map lex_lt_at(const typed::pw_aff &mpa) const; + template + inline typed::map lex_lt_at(const typed::pw_multi_aff &mpa) const; + inline typed::map lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::map lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::map lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::map lower_bound(const typed::aff &lower) const; + inline typed::map lower_bound(const typed::multi_aff &lower) const; + inline typed::map lower_bound(const typed::pw_aff &lower) const; + inline typed::map lower_bound(const typed::pw_multi_aff &lower) const; + inline typed::map_list map_list() const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::map preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::map preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map preimage_range(const typed::multi_aff &ma) const; + template + inline typed::map preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map, pair> product(const typed::map &map2) const; + template + inline typed::union_map, pair> product(const typed::union_map &umap2) const; + template + inline typed::map, pair> product(const typed::basic_map &map2) const; + inline typed::map project_out_all_params() const; + inline typed::map project_out_param(const typed::id &id) const; + inline typed::map project_out_param(const std::string &id) const; + inline typed::map project_out_param(const typed::id_list &list) const; + inline typed::set range() const; + inline typed::map range_factor_domain() const = delete; + inline typed::map range_factor_range() const = delete; + inline typed::fixed_box range_lattice_tile() const; + inline typed::fixed_box get_range_lattice_tile() const = delete; + inline typed::union_map, Domain> range_map() const; + template + inline typed::map> range_product(const typed::map &map2) const; + template + inline typed::union_map> range_product(const typed::union_map &umap2) const; + template + inline typed::map> range_product(const typed::basic_map &map2) const; + inline typed::map range_reverse() const = delete; + inline typed::fixed_box range_simple_fixed_box_hull() const; + inline typed::fixed_box get_range_simple_fixed_box_hull() const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::map reverse() const; + template + inline typed::map set_domain_tuple(const typed::id &id) const; + template + inline typed::map set_domain_tuple(const std::string &id) const; + template + inline typed::map set_range_tuple(const typed::id &id) const; + template + inline typed::map set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::map subtract(const typed::map &map2) const; + inline typed::union_map subtract(const typed::union_map &umap2) const; + inline typed::map subtract(const typed::basic_map &map2) const; + inline typed::union_map subtract_domain(const typed::union_set &dom) const; + inline typed::union_map subtract_range(const typed::union_set &dom) const; + inline typed::union_map to_union_map() const; + inline typed::map uncurry() const = delete; + inline typed::map unite(const typed::map &map2) const; + inline typed::union_map unite(const typed::union_map &umap2) const; + inline typed::map unite(const typed::basic_map &map2) const; + static inline typed::map universe(const typed::space &space); + inline typed::map upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::map upper_bound(const typed::aff &upper) const; + inline typed::map upper_bound(const typed::multi_aff &upper) const; + inline typed::map upper_bound(const typed::pw_aff &upper) const; + inline typed::map upper_bound(const typed::pw_multi_aff &upper) const; + inline typed::set> wrap() const; +}; + +template +struct map> : public isl::map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + map(const map> &obj) : isl::map(obj) {} + private: + template {}, bool>::type = true> + map(const base &obj) : isl::map(obj) {} + public: + static map from(const isl::map &obj) { + return map(obj); + } + inline /* implicit */ map(const typed::basic_map> &bmap); + inline explicit map(const isl::ctx &ctx, const std::string &str); + template + inline typed::map> apply_domain(const typed::map &map2) const; + template + inline typed::union_map> apply_domain(const typed::union_map &umap2) const; + template + inline typed::map> apply_domain(const typed::basic_map &map2) const; + template + inline typed::map apply_range(const typed::map, Arg3> &map2) const; + template + inline typed::union_map apply_range(const typed::union_map, Arg3> &umap2) const; + template + inline typed::map apply_range(const typed::basic_map, Arg3> &map2) const; + inline typed::map> as_map() const; + inline typed::multi_union_pw_aff> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff> as_union_pw_multi_aff() const; + inline typed::set> bind_domain(const typed::multi_id &tuple) const; + inline typed::set bind_range(const typed::multi_id> &tuple) const; + inline typed::map> coalesce() const; + inline typed::map> curry() const = delete; + inline typed::set> deltas() const = delete; + inline typed::map> detect_equalities() const; + inline typed::set domain() const; + inline typed::map> domain_factor_domain() const = delete; + inline typed::map> domain_factor_range() const = delete; + inline typed::union_map>, Domain> domain_map() const; + inline typed::union_pw_multi_aff>, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::map, pair> domain_product(const typed::map> &map2) const; + template + inline typed::union_map, pair> domain_product(const typed::union_map> &umap2) const; + template + inline typed::map, pair> domain_product(const typed::basic_map> &map2) const; + inline typed::map> domain_reverse() const = delete; + inline typed::id> get_domain_tuple_id() const = delete; + inline typed::map> drop_unused_params() const; + inline typed::map> eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::map> eq_at(const typed::aff<> &mpa) const = delete; + inline typed::map> eq_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map> eq_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map> eq_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline bool every_map(const std::function>)> &test) const; + inline typed::map> extract_map(const typed::space> &space) const; + inline typed::map> flatten_domain() const = delete; + inline typed::map flatten_range() const; + inline void foreach_basic_map(const std::function>)> &fn) const; + inline void foreach_map(const std::function>)> &fn) const; + inline typed::map> gist(const typed::map> &context) const; + inline typed::union_map> gist(const typed::union_map> &context) const; + inline typed::map> gist(const typed::basic_map> &context) const; + inline typed::map> gist_domain(const typed::set &context) const; + inline typed::union_map> gist_domain(const typed::union_set &uset) const; + inline typed::map> gist_domain(const typed::basic_set &context) const; + inline typed::map> gist_domain(const typed::point &context) const; + inline typed::map> gist_params(const typed::set<> &context) const; + inline typed::map> gist_params(const typed::basic_set<> &context) const; + inline typed::map> gist_params(const typed::point<> &context) const; + inline typed::map> intersect(const typed::map> &map2) const; + inline typed::union_map> intersect(const typed::union_map> &umap2) const; + inline typed::map> intersect(const typed::basic_map> &map2) const; + inline typed::map> intersect_domain(const typed::set &set) const; + inline typed::union_map> intersect_domain(const typed::space &space) const; + inline typed::union_map> intersect_domain(const typed::union_set &uset) const; + inline typed::map> intersect_domain(const typed::basic_set &set) const; + inline typed::map> intersect_domain(const typed::point &set) const; + inline typed::map> intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map> intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::map> intersect_domain_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::map> intersect_domain_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::map> intersect_params(const typed::set<> ¶ms) const; + inline typed::map> intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::map> intersect_params(const typed::point<> ¶ms) const; + inline typed::map> intersect_range(const typed::set> &set) const; + inline typed::union_map> intersect_range(const typed::space> &space) const; + inline typed::union_map> intersect_range(const typed::union_set> &uset) const; + inline typed::map> intersect_range(const typed::basic_set> &set) const; + inline typed::map> intersect_range(const typed::point> &set) const; + inline typed::map> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::map> intersect_range_wrapped_domain(const typed::basic_set &domain) const; + inline typed::map> intersect_range_wrapped_domain(const typed::point &domain) const; + inline typed::map> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_ge_at(const typed::aff<> &mpa) const = delete; + inline typed::map> lex_ge_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map> lex_ge_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_gt_at(const typed::aff<> &mpa) const = delete; + inline typed::map> lex_gt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map> lex_gt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_le_at(const typed::aff<> &mpa) const = delete; + inline typed::map> lex_le_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map> lex_le_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map> lex_lt_at(const typed::aff<> &mpa) const = delete; + inline typed::map> lex_lt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map> lex_lt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map> lexmax() const; + inline typed::pw_multi_aff> lexmax_pw_multi_aff() const; + inline typed::map> lexmin() const; + inline typed::pw_multi_aff> lexmin_pw_multi_aff() const; + inline typed::map> lower_bound(const typed::multi_pw_aff> &lower) const; + inline typed::map> lower_bound(const typed::aff> &lower) const; + inline typed::map> lower_bound(const typed::multi_aff> &lower) const; + inline typed::map> lower_bound(const typed::pw_aff> &lower) const; + inline typed::map> lower_bound(const typed::pw_multi_aff> &lower) const; + inline typed::map_list> map_list() const; + inline typed::multi_pw_aff> max_multi_pw_aff() const; + inline typed::multi_pw_aff> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map> preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::map> preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::map> preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::map preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::map preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, pair, Arg3>> product(const typed::map &map2) const; + template + inline typed::union_map, pair, Arg3>> product(const typed::union_map &umap2) const; + template + inline typed::map, pair, Arg3>> product(const typed::basic_map &map2) const; + inline typed::map> project_out_all_params() const; + inline typed::map> project_out_param(const typed::id &id) const; + inline typed::map> project_out_param(const std::string &id) const; + inline typed::map> project_out_param(const typed::id_list &list) const; + inline typed::set> range() const; + inline typed::map range_factor_domain() const; + inline typed::map range_factor_range() const; + inline typed::fixed_box> range_lattice_tile() const; + inline typed::fixed_box> get_range_lattice_tile() const = delete; + inline typed::union_map>, pair> range_map() const; + template + inline typed::map, Arg3>> range_product(const typed::map &map2) const; + template + inline typed::union_map, Arg3>> range_product(const typed::union_map &umap2) const; + template + inline typed::map, Arg3>> range_product(const typed::basic_map &map2) const; + inline typed::map> range_reverse() const; + inline typed::fixed_box> range_simple_fixed_box_hull() const; + inline typed::fixed_box> get_range_simple_fixed_box_hull() const = delete; + inline typed::id> get_range_tuple_id() const = delete; + inline typed::map, Domain> reverse() const; + template + inline typed::map> set_domain_tuple(const typed::id &id) const; + template + inline typed::map> set_domain_tuple(const std::string &id) const; + inline typed::map> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::map> set_range_tuple(const std::string &id) const = delete; + inline typed::space> space() const; + inline typed::space> get_space() const = delete; + inline typed::map> subtract(const typed::map> &map2) const; + inline typed::union_map> subtract(const typed::union_map> &umap2) const; + inline typed::map> subtract(const typed::basic_map> &map2) const; + inline typed::union_map> subtract_domain(const typed::union_set &dom) const; + inline typed::union_map> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map> to_union_map() const; + inline typed::map, Range2> uncurry() const; + inline typed::map> unite(const typed::map> &map2) const; + inline typed::union_map> unite(const typed::union_map> &umap2) const; + inline typed::map> unite(const typed::basic_map> &map2) const; + static inline typed::map> universe(const typed::space> &space); + inline typed::map> upper_bound(const typed::multi_pw_aff> &upper) const; + inline typed::map> upper_bound(const typed::aff> &upper) const; + inline typed::map> upper_bound(const typed::multi_aff> &upper) const; + inline typed::map> upper_bound(const typed::pw_aff> &upper) const; + inline typed::map> upper_bound(const typed::pw_multi_aff> &upper) const; + inline typed::set>> wrap() const; +}; + +template +struct map, pair> : public isl::map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + map(const map, pair> &obj) : isl::map(obj) {} + private: + template {}, bool>::type = true> + map(const base &obj) : isl::map(obj) {} + public: + static map from(const isl::map &obj) { + return map(obj); + } + inline /* implicit */ map(const typed::basic_map, pair> &bmap); + inline explicit map(const isl::ctx &ctx, const std::string &str); + template + inline typed::map> apply_domain(const typed::map, Domain2> &map2) const; + template + inline typed::union_map> apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::map> apply_domain(const typed::basic_map, Domain2> &map2) const; + template + inline typed::map, Range2> apply_range(const typed::map, Range2> &map2) const; + template + inline typed::union_map, Range2> apply_range(const typed::union_map, Range2> &umap2) const; + template + inline typed::map, Range2> apply_range(const typed::basic_map, Range2> &map2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff, pair> as_union_pw_multi_aff() const; + inline typed::set> bind_domain(const typed::multi_id> &tuple) const; + inline typed::set> bind_range(const typed::multi_id> &tuple) const; + inline typed::map, pair> coalesce() const; + inline typed::map>> curry() const; + inline typed::set> deltas() const; + inline typed::map, pair> detect_equalities() const; + inline typed::set> domain() const; + inline typed::map> domain_factor_domain() const; + inline typed::map> domain_factor_range() const; + inline typed::union_map, pair>, pair> domain_map() const; + inline typed::union_pw_multi_aff, pair>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain2>, pair> domain_product(const typed::map> &map2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::union_map> &umap2) const; + template + inline typed::map, Domain2>, pair> domain_product(const typed::basic_map> &map2) const; + inline typed::map, pair> domain_reverse() const; + inline typed::id, pair> get_domain_tuple_id() const = delete; + inline typed::map, pair> drop_unused_params() const; + template + inline typed::map, pair> eq_at(const typed::multi_pw_aff, Range> &mpa) const; + template + inline typed::union_map, pair> eq_at(const typed::multi_union_pw_aff, Range> &mupa) const; + inline typed::map, pair> eq_at(const typed::aff, Anonymous> &mpa) const; + template + inline typed::map, pair> eq_at(const typed::multi_aff, Range> &mpa) const; + inline typed::map, pair> eq_at(const typed::pw_aff, Anonymous> &mpa) const; + template + inline typed::map, pair> eq_at(const typed::pw_multi_aff, Range> &mpa) const; + inline bool every_map(const std::function, pair>)> &test) const; + inline typed::map, pair> extract_map(const typed::space, pair> &space) const; + inline typed::map> flatten_domain() const; + inline typed::map, Anonymous> flatten_range() const; + inline void foreach_basic_map(const std::function, pair>)> &fn) const; + inline void foreach_map(const std::function, pair>)> &fn) const; + inline typed::map, pair> gist(const typed::map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::union_map, pair> &context) const; + inline typed::map, pair> gist(const typed::basic_map, pair> &context) const; + inline typed::map, pair> gist_domain(const typed::set> &context) const; + inline typed::union_map, pair> gist_domain(const typed::union_set> &uset) const; + inline typed::map, pair> gist_domain(const typed::basic_set> &context) const; + inline typed::map, pair> gist_domain(const typed::point> &context) const; + inline typed::map, pair> gist_params(const typed::set<> &context) const; + inline typed::map, pair> gist_params(const typed::basic_set<> &context) const; + inline typed::map, pair> gist_params(const typed::point<> &context) const; + inline typed::map, pair> intersect(const typed::map, pair> &map2) const; + inline typed::union_map, pair> intersect(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> intersect(const typed::basic_map, pair> &map2) const; + inline typed::map, pair> intersect_domain(const typed::set> &set) const; + inline typed::union_map, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_map, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::map, pair> intersect_domain(const typed::basic_set> &set) const; + inline typed::map, pair> intersect_domain(const typed::point> &set) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::basic_set &domain) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::point &domain) const; + inline typed::map, pair> intersect_params(const typed::set<> ¶ms) const; + inline typed::map, pair> intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::map, pair> intersect_params(const typed::point<> ¶ms) const; + inline typed::map, pair> intersect_range(const typed::set> &set) const; + inline typed::union_map, pair> intersect_range(const typed::space> &space) const; + inline typed::union_map, pair> intersect_range(const typed::union_set> &uset) const; + inline typed::map, pair> intersect_range(const typed::basic_set> &set) const; + inline typed::map, pair> intersect_range(const typed::point> &set) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::basic_set &domain) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::point &domain) const; + template + inline typed::map, pair> lex_ge_at(const typed::multi_pw_aff, Range> &mpa) const; + inline typed::map, pair> lex_ge_at(const typed::aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_ge_at(const typed::multi_aff, Range> &mpa) const; + inline typed::map, pair> lex_ge_at(const typed::pw_aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_ge_at(const typed::pw_multi_aff, Range> &mpa) const; + template + inline typed::map, pair> lex_gt_at(const typed::multi_pw_aff, Range> &mpa) const; + inline typed::map, pair> lex_gt_at(const typed::aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_gt_at(const typed::multi_aff, Range> &mpa) const; + inline typed::map, pair> lex_gt_at(const typed::pw_aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_gt_at(const typed::pw_multi_aff, Range> &mpa) const; + template + inline typed::map, pair> lex_le_at(const typed::multi_pw_aff, Range> &mpa) const; + inline typed::map, pair> lex_le_at(const typed::aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_le_at(const typed::multi_aff, Range> &mpa) const; + inline typed::map, pair> lex_le_at(const typed::pw_aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_le_at(const typed::pw_multi_aff, Range> &mpa) const; + template + inline typed::map, pair> lex_lt_at(const typed::multi_pw_aff, Range> &mpa) const; + inline typed::map, pair> lex_lt_at(const typed::aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_lt_at(const typed::multi_aff, Range> &mpa) const; + inline typed::map, pair> lex_lt_at(const typed::pw_aff, Anonymous> &mpa) const; + template + inline typed::map, pair> lex_lt_at(const typed::pw_multi_aff, Range> &mpa) const; + inline typed::map, pair> lexmax() const; + inline typed::pw_multi_aff, pair> lexmax_pw_multi_aff() const; + inline typed::map, pair> lexmin() const; + inline typed::pw_multi_aff, pair> lexmin_pw_multi_aff() const; + inline typed::map, pair> lower_bound(const typed::multi_pw_aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::multi_aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::pw_aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::pw_multi_aff, pair> &lower) const; + inline typed::map_list, pair> map_list() const; + inline typed::multi_pw_aff, pair> max_multi_pw_aff() const; + inline typed::multi_pw_aff, pair> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map> preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::map> preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::map> preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Range2> preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::map, Range2> preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map, Range2> preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Domain2>, pair, Range2>> product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, pair, Range2>> product(const typed::union_map &umap2) const; + template + inline typed::map, Domain2>, pair, Range2>> product(const typed::basic_map &map2) const; + inline typed::map, pair> project_out_all_params() const; + inline typed::map, pair> project_out_param(const typed::id &id) const; + inline typed::map, pair> project_out_param(const std::string &id) const; + inline typed::map, pair> project_out_param(const typed::id_list &list) const; + inline typed::set> range() const; + inline typed::map, T1> range_factor_domain() const; + inline typed::map, T2> range_factor_range() const; + inline typed::fixed_box, pair> range_lattice_tile() const; + inline typed::fixed_box, pair> get_range_lattice_tile() const = delete; + inline typed::union_map, pair>, pair> range_map() const; + template + inline typed::map, pair, Range2>> range_product(const typed::map, Range2> &map2) const; + template + inline typed::union_map, pair, Range2>> range_product(const typed::union_map, Range2> &umap2) const; + template + inline typed::map, pair, Range2>> range_product(const typed::basic_map, Range2> &map2) const; + inline typed::map, pair> range_reverse() const; + inline typed::fixed_box, pair> range_simple_fixed_box_hull() const; + inline typed::fixed_box, pair> get_range_simple_fixed_box_hull() const = delete; + inline typed::id, pair> get_range_tuple_id() const = delete; + inline typed::map, pair> reverse() const; + inline typed::map, pair> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_domain_tuple(const std::string &id) const = delete; + inline typed::map, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, pair> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::map, pair> subtract(const typed::map, pair> &map2) const; + inline typed::union_map, pair> subtract(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> subtract(const typed::basic_map, pair> &map2) const; + inline typed::union_map, pair> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map, pair> to_union_map() const; + inline typed::map, T1>, T2> uncurry() const; + inline typed::map, pair> unite(const typed::map, pair> &map2) const; + inline typed::union_map, pair> unite(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> unite(const typed::basic_map, pair> &map2) const; + static inline typed::map, pair> universe(const typed::space, pair> &space); + inline typed::map, pair> upper_bound(const typed::multi_pw_aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::multi_aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::pw_aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::pw_multi_aff, pair> &upper) const; + inline typed::set, pair>> wrap() const; +}; + +template +struct map, pair> : public isl::map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + map(const map, pair> &obj) : isl::map(obj) {} + private: + template {}, bool>::type = true> + map(const base &obj) : isl::map(obj) {} + public: + static map from(const isl::map &obj) { + return map(obj); + } + inline /* implicit */ map(const typed::basic_map, pair> &bmap); + inline explicit map(const isl::ctx &ctx, const std::string &str); + template + inline typed::map> apply_domain(const typed::map, Domain2> &map2) const; + template + inline typed::union_map> apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::map> apply_domain(const typed::basic_map, Domain2> &map2) const; + template + inline typed::map, Arg2> apply_range(const typed::map, Arg2> &map2) const; + template + inline typed::union_map, Arg2> apply_range(const typed::union_map, Arg2> &umap2) const; + template + inline typed::map, Arg2> apply_range(const typed::basic_map, Arg2> &map2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::union_pw_multi_aff, pair> as_union_pw_multi_aff() const; + inline typed::set> bind_domain(const typed::multi_id> &tuple) const; + inline typed::set> bind_range(const typed::multi_id> &tuple) const; + inline typed::map, pair> coalesce() const; + inline typed::map>> curry() const; + inline typed::set, pair> deltas() const = delete; + inline typed::map, pair> detect_equalities() const; + inline typed::set> domain() const; + inline typed::map> domain_factor_domain() const; + inline typed::map> domain_factor_range() const; + inline typed::union_map, pair>, pair> domain_map() const; + inline typed::union_pw_multi_aff, pair>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::map, Domain2>, pair> domain_product(const typed::map> &map2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::union_map> &umap2) const; + template + inline typed::map, Domain2>, pair> domain_product(const typed::basic_map> &map2) const; + inline typed::map, pair> domain_reverse() const; + inline typed::id, pair> get_domain_tuple_id() const = delete; + inline typed::map, pair> drop_unused_params() const; + inline typed::map, pair> eq_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::union_map, pair> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::map, pair> eq_at(const typed::aff<> &mpa) const = delete; + inline typed::map, pair> eq_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, pair> eq_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, pair> eq_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline bool every_map(const std::function, pair>)> &test) const; + inline typed::map, pair> extract_map(const typed::space, pair> &space) const; + inline typed::map> flatten_domain() const; + inline typed::map, Anonymous> flatten_range() const; + inline void foreach_basic_map(const std::function, pair>)> &fn) const; + inline void foreach_map(const std::function, pair>)> &fn) const; + inline typed::map, pair> gist(const typed::map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::union_map, pair> &context) const; + inline typed::map, pair> gist(const typed::basic_map, pair> &context) const; + inline typed::map, pair> gist_domain(const typed::set> &context) const; + inline typed::union_map, pair> gist_domain(const typed::union_set> &uset) const; + inline typed::map, pair> gist_domain(const typed::basic_set> &context) const; + inline typed::map, pair> gist_domain(const typed::point> &context) const; + inline typed::map, pair> gist_params(const typed::set<> &context) const; + inline typed::map, pair> gist_params(const typed::basic_set<> &context) const; + inline typed::map, pair> gist_params(const typed::point<> &context) const; + inline typed::map, pair> intersect(const typed::map, pair> &map2) const; + inline typed::union_map, pair> intersect(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> intersect(const typed::basic_map, pair> &map2) const; + inline typed::map, pair> intersect_domain(const typed::set> &set) const; + inline typed::union_map, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_map, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::map, pair> intersect_domain(const typed::basic_set> &set) const; + inline typed::map, pair> intersect_domain(const typed::point> &set) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::basic_set &domain) const; + inline typed::map, pair> intersect_domain_wrapped_domain(const typed::point &domain) const; + inline typed::map, pair> intersect_params(const typed::set<> ¶ms) const; + inline typed::map, pair> intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::map, pair> intersect_params(const typed::point<> ¶ms) const; + inline typed::map, pair> intersect_range(const typed::set> &set) const; + inline typed::union_map, pair> intersect_range(const typed::space> &space) const; + inline typed::union_map, pair> intersect_range(const typed::union_set> &uset) const; + inline typed::map, pair> intersect_range(const typed::basic_set> &set) const; + inline typed::map, pair> intersect_range(const typed::point> &set) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::basic_set &domain) const; + inline typed::map, pair> intersect_range_wrapped_domain(const typed::point &domain) const; + inline typed::map, pair> lex_ge_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_ge_at(const typed::aff<> &mpa) const = delete; + inline typed::map, pair> lex_ge_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_ge_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_ge_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_gt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_gt_at(const typed::aff<> &mpa) const = delete; + inline typed::map, pair> lex_gt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_gt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_gt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_le_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_le_at(const typed::aff<> &mpa) const = delete; + inline typed::map, pair> lex_le_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_le_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_le_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_lt_at(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_lt_at(const typed::aff<> &mpa) const = delete; + inline typed::map, pair> lex_lt_at(const typed::multi_aff<> &mpa) const = delete; + inline typed::map, pair> lex_lt_at(const typed::pw_aff<> &mpa) const = delete; + inline typed::map, pair> lex_lt_at(const typed::pw_multi_aff<> &mpa) const = delete; + inline typed::map, pair> lexmax() const; + inline typed::pw_multi_aff, pair> lexmax_pw_multi_aff() const; + inline typed::map, pair> lexmin() const; + inline typed::pw_multi_aff, pair> lexmin_pw_multi_aff() const; + inline typed::map, pair> lower_bound(const typed::multi_pw_aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::multi_aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::pw_aff, pair> &lower) const; + inline typed::map, pair> lower_bound(const typed::pw_multi_aff, pair> &lower) const; + inline typed::map_list, pair> map_list() const; + inline typed::multi_pw_aff, pair> max_multi_pw_aff() const; + inline typed::multi_pw_aff, pair> min_multi_pw_aff() const; + inline typed::set<> params() const; + template + inline typed::map> preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::map> preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::map> preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Arg2> preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::map, Arg2> preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map, Arg2> preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::map, Domain2>, pair, Arg2>> product(const typed::map &map2) const; + template + inline typed::union_map, Domain2>, pair, Arg2>> product(const typed::union_map &umap2) const; + template + inline typed::map, Domain2>, pair, Arg2>> product(const typed::basic_map &map2) const; + inline typed::map, pair> project_out_all_params() const; + inline typed::map, pair> project_out_param(const typed::id &id) const; + inline typed::map, pair> project_out_param(const std::string &id) const; + inline typed::map, pair> project_out_param(const typed::id_list &list) const; + inline typed::set> range() const; + inline typed::map, Range> range_factor_domain() const; + inline typed::map, Range2> range_factor_range() const; + inline typed::fixed_box, pair> range_lattice_tile() const; + inline typed::fixed_box, pair> get_range_lattice_tile() const = delete; + inline typed::union_map, pair>, pair> range_map() const; + template + inline typed::map, pair, Arg2>> range_product(const typed::map, Arg2> &map2) const; + template + inline typed::union_map, pair, Arg2>> range_product(const typed::union_map, Arg2> &umap2) const; + template + inline typed::map, pair, Arg2>> range_product(const typed::basic_map, Arg2> &map2) const; + inline typed::map, pair> range_reverse() const; + inline typed::fixed_box, pair> range_simple_fixed_box_hull() const; + inline typed::fixed_box, pair> get_range_simple_fixed_box_hull() const = delete; + inline typed::id, pair> get_range_tuple_id() const = delete; + inline typed::map, pair> reverse() const; + inline typed::map, pair> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_domain_tuple(const std::string &id) const = delete; + inline typed::map, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::map, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, pair> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::map, pair> subtract(const typed::map, pair> &map2) const; + inline typed::union_map, pair> subtract(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> subtract(const typed::basic_map, pair> &map2) const; + inline typed::union_map, pair> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map, pair> to_union_map() const; + inline typed::map, Range>, Range2> uncurry() const; + inline typed::map, pair> unite(const typed::map, pair> &map2) const; + inline typed::union_map, pair> unite(const typed::union_map, pair> &umap2) const; + inline typed::map, pair> unite(const typed::basic_map, pair> &map2) const; + static inline typed::map, pair> universe(const typed::space, pair> &space); + inline typed::map, pair> upper_bound(const typed::multi_pw_aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::multi_aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::pw_aff, pair> &upper) const; + inline typed::map, pair> upper_bound(const typed::pw_multi_aff, pair> &upper) const; + inline typed::set, pair>> wrap() const; +}; + +template +struct map_list : public isl::map_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + map_list() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + map_list(const map_list &obj) : isl::map_list(obj) {} + private: + template {}, bool>::type = true> + map_list(const base &obj) : isl::map_list(obj) {} + public: + static map_list from(const isl::map_list &obj) { + return map_list(obj); + } + inline explicit map_list(const isl::ctx &ctx, int n); + inline explicit map_list(const typed::map &el); + inline explicit map_list(const isl::ctx &ctx, const std::string &str); + inline typed::map_list add(const typed::map &el) const; + inline typed::map_list add(const typed::basic_map &el) const; + inline typed::map at(int index) const; + inline typed::map get_at(int index) const = delete; + inline typed::map_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::map)> &follows, const std::function)> &fn) const; + inline typed::map_list set_at(int index, const typed::map &el) const; +}; + +template +struct multi_aff : public isl::multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_aff() = default; + template {}, + bool>::type = true> + multi_aff(const multi_aff &obj) : isl::multi_aff(obj) {} + private: + template {}, bool>::type = true> + multi_aff(const base &obj) : isl::multi_aff(obj) {} + public: + static multi_aff from(const isl::multi_aff &obj) { + return multi_aff(obj); + } + inline /* implicit */ multi_aff(const typed::aff &aff); + inline explicit multi_aff(const typed::space &space, const typed::aff_list &list); + inline explicit multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff add(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_aff add(const typed::aff &multi2) const; + inline typed::multi_aff add_constant(const typed::multi_val &mv) const; + inline typed::multi_aff add_constant(const typed::val &v) const; + inline typed::multi_aff add_constant(long v) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::map as_map() const = delete; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::union_map as_union_map() const = delete; + inline typed::aff at(int pos) const; + inline typed::aff get_at(int pos) const = delete; + inline typed::basic_set<> bind(const typed::multi_id &tuple) const; + inline typed::multi_aff bind_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::multi_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff coalesce() const; + inline typed::multi_val constant_multi_val() const; + inline typed::multi_val get_constant_multi_val() const = delete; + inline typed::set<> domain() const; + inline typed::multi_aff domain_reverse() const = delete; + inline typed::pw_multi_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::multi_aff floor() const; + inline typed::multi_aff gist(const typed::set<> &context) const; + inline typed::union_pw_multi_aff gist(const typed::union_set<> &context) const; + inline typed::multi_aff gist(const typed::basic_set<> &context) const; + inline typed::multi_aff gist(const typed::point<> &context) const; + inline typed::multi_aff gist_params(const typed::set<> &context) const; + inline typed::multi_aff gist_params(const typed::basic_set<> &context) const; + inline typed::multi_aff gist_params(const typed::point<> &context) const; + inline typed::multi_aff identity() const; + template + inline typed::multi_aff insert_domain(const typed::space &domain) const; + inline typed::pw_multi_aff intersect_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_multi_aff intersect_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_multi_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff intersect_params(const typed::set<> &set) const; + inline typed::aff_list list() const; + inline typed::aff_list get_list() const = delete; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_aff neg() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_aff> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> product(const typed::pw_multi_aff &pma2) const; + inline typed::multi_aff> product(const typed::aff &multi2) const; + inline typed::multi_aff pullback(const typed::multi_aff<> &ma2) const = delete; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff<> &mpa2) const = delete; + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::multi_aff pullback(const typed::aff<> &ma2) const = delete; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + inline typed::multi_aff range_product(const typed::multi_aff<> &multi2) const = delete; + inline typed::multi_pw_aff range_product(const typed::multi_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::pw_multi_aff range_product(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::multi_aff range_product(const typed::aff<> &multi2) const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_aff scale(const typed::multi_val &mv) const; + inline typed::multi_aff scale(const typed::val &v) const; + inline typed::multi_aff scale(long v) const; + inline typed::multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_aff scale_down(const typed::val &v) const; + inline typed::multi_aff scale_down(long v) const; + inline typed::multi_aff set_at(int pos, const typed::aff &el) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_aff sub(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_aff sub(const typed::aff &multi2) const; + inline typed::pw_multi_aff subtract_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_multi_aff subtract_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_multi_aff subtract_domain(const typed::union_set<> &uset) const = delete; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::multi_union_pw_aff to_multi_union_pw_aff() const; + inline typed::pw_multi_aff to_pw_multi_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + template + inline typed::multi_aff unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; +}; + +template +struct multi_aff : public isl::multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + multi_aff(const multi_aff &obj) : isl::multi_aff(obj) {} + private: + template {}, bool>::type = true> + multi_aff(const base &obj) : isl::multi_aff(obj) {} + public: + static multi_aff from(const isl::multi_aff &obj) { + return multi_aff(obj); + } + inline /* implicit */ multi_aff(const typed::aff &aff); + inline explicit multi_aff(const typed::space &space, const typed::aff_list &list); + inline explicit multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff add(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_aff add(const typed::aff &multi2) const; + inline typed::multi_aff add_constant(const typed::multi_val &mv) const; + inline typed::multi_aff add_constant(const typed::val &v) const; + inline typed::multi_aff add_constant(long v) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::map as_map() const; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const = delete; + inline typed::union_map as_union_map() const; + inline typed::aff at(int pos) const; + inline typed::aff get_at(int pos) const = delete; + inline typed::basic_set bind(const typed::multi_id &tuple) const; + inline typed::multi_aff bind_domain(const typed::multi_id &tuple) const; + inline typed::multi_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff coalesce() const; + inline typed::multi_val constant_multi_val() const; + inline typed::multi_val get_constant_multi_val() const = delete; + inline typed::set domain() const; + inline typed::multi_aff domain_reverse() const = delete; + inline typed::pw_multi_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::multi_aff floor() const; + inline typed::multi_aff gist(const typed::set &context) const; + inline typed::union_pw_multi_aff gist(const typed::union_set &context) const; + inline typed::multi_aff gist(const typed::basic_set &context) const; + inline typed::multi_aff gist(const typed::point &context) const; + inline typed::multi_aff gist_params(const typed::set<> &context) const; + inline typed::multi_aff gist_params(const typed::basic_set<> &context) const; + inline typed::multi_aff gist_params(const typed::point<> &context) const; + inline typed::multi_aff identity() const; + inline typed::multi_aff insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff intersect_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff intersect_params(const typed::set<> &set) const; + inline typed::aff_list list() const; + inline typed::aff_list get_list() const = delete; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_aff neg() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_aff, pair> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::multi_aff, pair> product(const typed::aff &multi2) const; + template + inline typed::multi_aff pullback(const typed::multi_aff &ma2) const; + inline typed::multi_aff pullback(const typed::multi_aff &ma2) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff &mpa2) const; + template + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff &pma2) const; + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::multi_aff pullback(const typed::aff &ma2) const; + inline typed::multi_aff pullback(const typed::aff &ma2) const; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + template + inline typed::multi_aff> range_product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> range_product(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_aff> range_product(const typed::aff &multi2) const; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_aff scale(const typed::multi_val &mv) const; + inline typed::multi_aff scale(const typed::val &v) const; + inline typed::multi_aff scale(long v) const; + inline typed::multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_aff scale_down(const typed::val &v) const; + inline typed::multi_aff scale_down(long v) const; + inline typed::multi_aff set_at(int pos, const typed::aff &el) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_aff sub(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_aff sub(const typed::aff &multi2) const; + inline typed::pw_multi_aff subtract_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::union_set &uset) const; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::multi_union_pw_aff to_multi_union_pw_aff() const; + inline typed::pw_multi_aff to_pw_multi_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + inline typed::multi_aff unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; +}; + +template +struct multi_aff, Range> : public isl::multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + multi_aff(const multi_aff, Arg3> &obj) : isl::multi_aff(obj) {} + private: + template {}, bool>::type = true> + multi_aff(const base &obj) : isl::multi_aff(obj) {} + public: + static multi_aff from(const isl::multi_aff &obj) { + return multi_aff(obj); + } + inline /* implicit */ multi_aff(const typed::aff, Range> &aff); + inline explicit multi_aff(const typed::space, Range> &space, const typed::aff_list, Anonymous> &list); + inline explicit multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff, Range> add(const typed::multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> add(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_union_pw_aff, Range> add(const typed::multi_union_pw_aff, Range> &multi2) const; + inline typed::pw_multi_aff, Range> add(const typed::pw_multi_aff, Range> &pma2) const; + inline typed::union_pw_multi_aff, Range> add(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::multi_aff, Range> add(const typed::aff, Range> &multi2) const; + inline typed::multi_aff, Range> add_constant(const typed::multi_val &mv) const; + inline typed::multi_aff, Range> add_constant(const typed::val &v) const; + inline typed::multi_aff, Range> add_constant(long v) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::map, Range> as_map() const; + inline typed::multi_aff, Range> as_multi_aff() const; + inline typed::multi_union_pw_aff, Range> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Range> as_pw_multi_aff() const; + inline typed::set, Range> as_set() const = delete; + inline typed::union_map, Range> as_union_map() const; + inline typed::aff, Anonymous> at(int pos) const; + inline typed::aff, Range> get_at(int pos) const = delete; + inline typed::basic_set> bind(const typed::multi_id &tuple) const; + inline typed::multi_aff bind_domain(const typed::multi_id> &tuple) const; + inline typed::multi_aff bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff, Range> coalesce() const; + inline typed::multi_val constant_multi_val() const; + inline typed::multi_val, Range> get_constant_multi_val() const = delete; + inline typed::set> domain() const; + inline typed::multi_aff, Range> domain_reverse() const; + inline typed::pw_multi_aff, Range> drop_unused_params() const; + inline typed::pw_multi_aff, Range> extract_pw_multi_aff(const typed::space, Range> &space) const; + inline typed::multi_aff, Range> floor() const; + inline typed::multi_aff, Range> gist(const typed::set> &context) const; + inline typed::union_pw_multi_aff, Range> gist(const typed::union_set> &context) const; + inline typed::multi_aff, Range> gist(const typed::basic_set> &context) const; + inline typed::multi_aff, Range> gist(const typed::point> &context) const; + inline typed::multi_aff, Range> gist_params(const typed::set<> &context) const; + inline typed::multi_aff, Range> gist_params(const typed::basic_set<> &context) const; + inline typed::multi_aff, Range> gist_params(const typed::point<> &context) const; + inline typed::multi_aff, Range> identity() const; + inline typed::multi_aff, Range> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff, Range> intersect_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, Range> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, Range> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_pw_multi_aff, Range> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff, Range> intersect_params(const typed::set<> &set) const; + inline typed::aff_list, Anonymous> list() const; + inline typed::aff_list, Range> get_list() const = delete; + inline typed::multi_pw_aff, Range> max(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff, Range> min(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_aff, Range> neg() const; + template + inline typed::pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::multi_aff, Arg2>, pair> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Arg2>, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::multi_aff, Arg2>, pair> product(const typed::aff &multi2) const; + template + inline typed::multi_aff pullback(const typed::multi_aff> &ma2) const; + inline typed::multi_aff pullback(const typed::multi_aff> &ma2) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff> &mpa2) const; + template + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff> &pma2) const; + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff> &pma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff> &upma2) const; + template + inline typed::multi_aff pullback(const typed::aff> &ma2) const; + inline typed::multi_aff pullback(const typed::aff> &ma2) const; + inline typed::pw_multi_aff_list, Range> pw_multi_aff_list() const; + inline typed::pw_multi_aff, Range> range_factor_domain() const = delete; + inline typed::pw_multi_aff, Range> range_factor_range() const = delete; + template + inline typed::multi_aff, pair> range_product(const typed::multi_aff, Arg2> &multi2) const; + template + inline typed::multi_pw_aff, pair> range_product(const typed::multi_pw_aff, Arg2> &multi2) const; + template + inline typed::multi_union_pw_aff, pair> range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const; + template + inline typed::pw_multi_aff, pair> range_product(const typed::pw_multi_aff, Arg2> &pma2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const; + inline typed::multi_aff, pair> range_product(const typed::aff, Anonymous> &multi2) const; + inline typed::id, Range> get_range_tuple_id() const = delete; + inline typed::multi_aff, Range> scale(const typed::multi_val &mv) const; + inline typed::multi_aff, Range> scale(const typed::val &v) const; + inline typed::multi_aff, Range> scale(long v) const; + inline typed::multi_aff, Range> scale_down(const typed::multi_val &mv) const; + inline typed::multi_aff, Range> scale_down(const typed::val &v) const; + inline typed::multi_aff, Range> scale_down(long v) const; + inline typed::multi_aff, Range> set_at(int pos, const typed::aff, Anonymous> &el) const; + inline typed::multi_pw_aff, Range> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, Range> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + template + inline typed::multi_aff, Arg1> set_range_tuple(const typed::id &id) const; + template + inline typed::multi_aff, Arg1> set_range_tuple(const std::string &id) const; + inline typed::space, Range> space() const; + inline typed::space, Range> get_space() const = delete; + inline typed::multi_aff, Range> sub(const typed::multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> sub(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_union_pw_aff, Range> sub(const typed::multi_union_pw_aff, Range> &multi2) const; + inline typed::pw_multi_aff, Range> sub(const typed::pw_multi_aff, Range> &pma2) const; + inline typed::union_pw_multi_aff, Range> sub(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::multi_aff, Range> sub(const typed::aff, Range> &multi2) const; + inline typed::pw_multi_aff, Range> subtract_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, Range> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, Range> subtract_domain(const typed::union_set> &uset) const; + inline typed::multi_pw_aff, Range> to_multi_pw_aff() const; + inline typed::multi_union_pw_aff, Range> to_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Range> to_pw_multi_aff() const; + inline typed::union_pw_multi_aff, Range> to_union_pw_multi_aff() const; + inline typed::multi_aff, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, Range> union_add(const typed::multi_pw_aff, Range> &mpa2) const; + inline typed::multi_union_pw_aff, Range> union_add(const typed::multi_union_pw_aff, Range> &mupa2) const; + inline typed::pw_multi_aff, Range> union_add(const typed::pw_multi_aff, Range> &pma2) const; + inline typed::union_pw_multi_aff, Range> union_add(const typed::union_pw_multi_aff, Range> &upma2) const; +}; + +template +struct multi_aff> : public isl::multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + multi_aff(const multi_aff> &obj) : isl::multi_aff(obj) {} + private: + template {}, bool>::type = true> + multi_aff(const base &obj) : isl::multi_aff(obj) {} + public: + static multi_aff from(const isl::multi_aff &obj) { + return multi_aff(obj); + } + inline /* implicit */ multi_aff(const typed::aff> &aff); + inline explicit multi_aff(const typed::space> &space, const typed::aff_list &list); + inline explicit multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff> add(const typed::multi_aff> &multi2) const; + inline typed::multi_pw_aff> add(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_union_pw_aff> add(const typed::multi_union_pw_aff> &multi2) const; + inline typed::pw_multi_aff> add(const typed::pw_multi_aff> &pma2) const; + inline typed::union_pw_multi_aff> add(const typed::union_pw_multi_aff> &upma2) const; + inline typed::multi_aff> add(const typed::aff> &multi2) const; + inline typed::multi_aff> add_constant(const typed::multi_val> &mv) const; + inline typed::multi_aff> add_constant(const typed::val> &v) const; + inline typed::multi_aff> add_constant(long v) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff, Arg3> &upma2) const; + inline typed::map> as_map() const; + inline typed::multi_aff> as_multi_aff() const; + inline typed::multi_union_pw_aff> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::set> as_set() const = delete; + inline typed::union_map> as_union_map() const; + inline typed::aff at(int pos) const; + inline typed::aff> get_at(int pos) const = delete; + inline typed::basic_set bind(const typed::multi_id> &tuple) const; + inline typed::multi_aff> bind_domain(const typed::multi_id &tuple) const; + inline typed::multi_aff> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff> coalesce() const; + inline typed::multi_val> constant_multi_val() const; + inline typed::multi_val> get_constant_multi_val() const = delete; + inline typed::set domain() const; + inline typed::multi_aff> domain_reverse() const = delete; + inline typed::pw_multi_aff> drop_unused_params() const; + inline typed::pw_multi_aff> extract_pw_multi_aff(const typed::space> &space) const; + inline typed::multi_aff> floor() const; + inline typed::multi_aff> gist(const typed::set &context) const; + inline typed::union_pw_multi_aff> gist(const typed::union_set &context) const; + inline typed::multi_aff> gist(const typed::basic_set &context) const; + inline typed::multi_aff> gist(const typed::point &context) const; + inline typed::multi_aff> gist_params(const typed::set<> &context) const; + inline typed::multi_aff> gist_params(const typed::basic_set<> &context) const; + inline typed::multi_aff> gist_params(const typed::point<> &context) const; + inline typed::multi_aff> identity() const; + inline typed::multi_aff> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff> intersect_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff> intersect_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff> intersect_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff> intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff> intersect_params(const typed::set<> &set) const; + inline typed::aff_list list() const; + inline typed::aff_list> get_list() const = delete; + inline typed::multi_pw_aff> max(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_val> max_multi_val() const; + inline typed::multi_pw_aff> min(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_val> min_multi_val() const; + inline typed::multi_aff> neg() const; + inline typed::pw_multi_aff> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_aff, pair, Arg3>> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, pair, Arg3>> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, pair, Arg3>> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::multi_aff, pair, Anonymous>> product(const typed::aff &multi2) const; + template + inline typed::multi_aff> pullback(const typed::multi_aff &ma2) const; + inline typed::multi_aff> pullback(const typed::multi_aff &ma2) const; + template + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff &mpa2) const; + template + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff &pma2) const; + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::multi_aff> pullback(const typed::aff &ma2) const; + inline typed::multi_aff> pullback(const typed::aff &ma2) const; + inline typed::pw_multi_aff_list> pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const; + inline typed::pw_multi_aff range_factor_range() const; + template + inline typed::multi_aff, Arg3>> range_product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, Arg3>> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff, Arg3>> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Arg3>> range_product(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, Arg3>> range_product(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_aff, Anonymous>> range_product(const typed::aff &multi2) const; + inline typed::id> get_range_tuple_id() const = delete; + inline typed::multi_aff> scale(const typed::multi_val> &mv) const; + inline typed::multi_aff> scale(const typed::val> &v) const; + inline typed::multi_aff> scale(long v) const; + inline typed::multi_aff> scale_down(const typed::multi_val> &mv) const; + inline typed::multi_aff> scale_down(const typed::val> &v) const; + inline typed::multi_aff> scale_down(long v) const; + inline typed::multi_aff> set_at(int pos, const typed::aff &el) const; + inline typed::multi_pw_aff> set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff> set_at(int pos, const typed::union_pw_aff &el) const; + inline typed::multi_aff> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::multi_aff> set_range_tuple(const std::string &id) const = delete; + inline typed::space> space() const; + inline typed::space> get_space() const = delete; + inline typed::multi_aff> sub(const typed::multi_aff> &multi2) const; + inline typed::multi_pw_aff> sub(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_union_pw_aff> sub(const typed::multi_union_pw_aff> &multi2) const; + inline typed::pw_multi_aff> sub(const typed::pw_multi_aff> &pma2) const; + inline typed::union_pw_multi_aff> sub(const typed::union_pw_multi_aff> &upma2) const; + inline typed::multi_aff> sub(const typed::aff> &multi2) const; + inline typed::pw_multi_aff> subtract_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff> subtract_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff> subtract_domain(const typed::union_set &uset) const; + inline typed::multi_pw_aff> to_multi_pw_aff() const; + inline typed::multi_union_pw_aff> to_multi_union_pw_aff() const; + inline typed::pw_multi_aff> to_pw_multi_aff() const; + inline typed::union_pw_multi_aff> to_union_pw_multi_aff() const; + inline typed::multi_aff> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff> union_add(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_union_pw_aff> union_add(const typed::multi_union_pw_aff> &mupa2) const; + inline typed::pw_multi_aff> union_add(const typed::pw_multi_aff> &pma2) const; + inline typed::union_pw_multi_aff> union_add(const typed::union_pw_multi_aff> &upma2) const; +}; + +template +struct multi_aff, pair> : public isl::multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + multi_aff(const multi_aff, pair> &obj) : isl::multi_aff(obj) {} + private: + template {}, bool>::type = true> + multi_aff(const base &obj) : isl::multi_aff(obj) {} + public: + static multi_aff from(const isl::multi_aff &obj) { + return multi_aff(obj); + } + inline /* implicit */ multi_aff(const typed::aff, pair> &aff); + inline explicit multi_aff(const typed::space, pair> &space, const typed::aff_list, Anonymous> &list); + inline explicit multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_aff, pair> add(const typed::multi_aff, pair> &multi2) const; + inline typed::multi_pw_aff, pair> add(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_union_pw_aff, pair> add(const typed::multi_union_pw_aff, pair> &multi2) const; + inline typed::pw_multi_aff, pair> add(const typed::pw_multi_aff, pair> &pma2) const; + inline typed::union_pw_multi_aff, pair> add(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::multi_aff, pair> add(const typed::aff, pair> &multi2) const; + inline typed::multi_aff, pair> add_constant(const typed::multi_val> &mv) const; + inline typed::multi_aff, pair> add_constant(const typed::val> &v) const; + inline typed::multi_aff, pair> add_constant(long v) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::union_pw_multi_aff, Arg2> &upma2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_aff, pair> as_multi_aff() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::set, pair> as_set() const = delete; + inline typed::union_map, pair> as_union_map() const; + inline typed::aff, Anonymous> at(int pos) const; + inline typed::aff, pair> get_at(int pos) const = delete; + inline typed::basic_set> bind(const typed::multi_id> &tuple) const; + inline typed::multi_aff> bind_domain(const typed::multi_id> &tuple) const; + inline typed::multi_aff> bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff, pair> coalesce() const; + inline typed::multi_val> constant_multi_val() const; + inline typed::multi_val, pair> get_constant_multi_val() const = delete; + inline typed::set> domain() const; + inline typed::multi_aff, pair> domain_reverse() const; + inline typed::pw_multi_aff, pair> drop_unused_params() const; + inline typed::pw_multi_aff, pair> extract_pw_multi_aff(const typed::space, pair> &space) const; + inline typed::multi_aff, pair> floor() const; + inline typed::multi_aff, pair> gist(const typed::set> &context) const; + inline typed::union_pw_multi_aff, pair> gist(const typed::union_set> &context) const; + inline typed::multi_aff, pair> gist(const typed::basic_set> &context) const; + inline typed::multi_aff, pair> gist(const typed::point> &context) const; + inline typed::multi_aff, pair> gist_params(const typed::set<> &context) const; + inline typed::multi_aff, pair> gist_params(const typed::basic_set<> &context) const; + inline typed::multi_aff, pair> gist_params(const typed::point<> &context) const; + inline typed::multi_aff, pair> identity() const; + inline typed::multi_aff, pair> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff, pair> intersect_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_pw_multi_aff, pair> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff, pair> intersect_params(const typed::set<> &set) const; + inline typed::aff_list, Anonymous> list() const; + inline typed::aff_list, pair> get_list() const = delete; + inline typed::multi_pw_aff, pair> max(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_val> max_multi_val() const; + inline typed::multi_pw_aff, pair> min(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_val> min_multi_val() const; + inline typed::multi_aff, pair> neg() const; + template + inline typed::pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::multi_aff, Domain2>, pair, Arg2>> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, Domain2>, pair, Arg2>> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Domain2>, pair, Arg2>> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::multi_aff, Domain2>, pair, Anonymous>> product(const typed::aff &multi2) const; + template + inline typed::multi_aff> pullback(const typed::multi_aff> &ma2) const; + inline typed::multi_aff> pullback(const typed::multi_aff> &ma2) const; + template + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff> &mpa2) const; + template + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff> &pma2) const; + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff> &pma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff> &upma2) const; + template + inline typed::multi_aff> pullback(const typed::aff> &ma2) const; + inline typed::multi_aff> pullback(const typed::aff> &ma2) const; + inline typed::pw_multi_aff_list, pair> pw_multi_aff_list() const; + inline typed::pw_multi_aff, Range> range_factor_domain() const; + inline typed::pw_multi_aff, Range2> range_factor_range() const; + template + inline typed::multi_aff, pair, Arg2>> range_product(const typed::multi_aff, Arg2> &multi2) const; + template + inline typed::multi_pw_aff, pair, Arg2>> range_product(const typed::multi_pw_aff, Arg2> &multi2) const; + template + inline typed::multi_union_pw_aff, pair, Arg2>> range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const; + template + inline typed::pw_multi_aff, pair, Arg2>> range_product(const typed::pw_multi_aff, Arg2> &pma2) const; + template + inline typed::union_pw_multi_aff, pair, Arg2>> range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const; + inline typed::multi_aff, pair, Anonymous>> range_product(const typed::aff, Anonymous> &multi2) const; + inline typed::id, pair> get_range_tuple_id() const = delete; + inline typed::multi_aff, pair> scale(const typed::multi_val> &mv) const; + inline typed::multi_aff, pair> scale(const typed::val> &v) const; + inline typed::multi_aff, pair> scale(long v) const; + inline typed::multi_aff, pair> scale_down(const typed::multi_val> &mv) const; + inline typed::multi_aff, pair> scale_down(const typed::val> &v) const; + inline typed::multi_aff, pair> scale_down(long v) const; + inline typed::multi_aff, pair> set_at(int pos, const typed::aff, Anonymous> &el) const; + inline typed::multi_pw_aff, pair> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, pair> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + inline typed::multi_aff, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::multi_aff, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, pair> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::multi_aff, pair> sub(const typed::multi_aff, pair> &multi2) const; + inline typed::multi_pw_aff, pair> sub(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_union_pw_aff, pair> sub(const typed::multi_union_pw_aff, pair> &multi2) const; + inline typed::pw_multi_aff, pair> sub(const typed::pw_multi_aff, pair> &pma2) const; + inline typed::union_pw_multi_aff, pair> sub(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::multi_aff, pair> sub(const typed::aff, pair> &multi2) const; + inline typed::pw_multi_aff, pair> subtract_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, pair> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, pair> subtract_domain(const typed::union_set> &uset) const; + inline typed::multi_pw_aff, pair> to_multi_pw_aff() const; + inline typed::multi_union_pw_aff, pair> to_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> to_pw_multi_aff() const; + inline typed::union_pw_multi_aff, pair> to_union_pw_multi_aff() const; + inline typed::multi_aff, pair> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, pair> union_add(const typed::multi_pw_aff, pair> &mpa2) const; + inline typed::multi_union_pw_aff, pair> union_add(const typed::multi_union_pw_aff, pair> &mupa2) const; + inline typed::pw_multi_aff, pair> union_add(const typed::pw_multi_aff, pair> &pma2) const; + inline typed::union_pw_multi_aff, pair> union_add(const typed::union_pw_multi_aff, pair> &upma2) const; +}; + +template +struct multi_id : public isl::multi_id { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_id() = default; + template {}, + bool>::type = true> + multi_id(const multi_id &obj) : isl::multi_id(obj) {} + private: + template {}, bool>::type = true> + multi_id(const base &obj) : isl::multi_id(obj) {} + public: + static multi_id from(const isl::multi_id &obj) { + return multi_id(obj); + } + inline explicit multi_id(const typed::space &space, const typed::id_list &list); + inline explicit multi_id(const isl::ctx &ctx, const std::string &str); + inline typed::id at(int pos) const; + inline typed::id get_at(int pos) const = delete; + inline typed::id_list list() const; + inline typed::id_list get_list() const = delete; + inline typed::multi_id range_product(const typed::multi_id<> &multi2) const = delete; + inline typed::multi_id set_at(int pos, const typed::id &el) const; + inline typed::multi_id set_at(int pos, const std::string &el) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; +}; + +template +struct multi_pw_aff : public isl::multi_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_pw_aff() = default; + template {}, + bool>::type = true> + multi_pw_aff(const multi_pw_aff &obj) : isl::multi_pw_aff(obj) {} + private: + template {}, bool>::type = true> + multi_pw_aff(const base &obj) : isl::multi_pw_aff(obj) {} + public: + static multi_pw_aff from(const isl::multi_pw_aff &obj) { + return multi_pw_aff(obj); + } + inline /* implicit */ multi_pw_aff(const typed::aff &aff); + inline /* implicit */ multi_pw_aff(const typed::multi_aff &ma); + inline /* implicit */ multi_pw_aff(const typed::pw_aff &pa); + inline explicit multi_pw_aff(const typed::space &space, const typed::pw_aff_list &list); + inline /* implicit */ multi_pw_aff(const typed::pw_multi_aff &pma); + inline explicit multi_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::aff &multi2) const; + inline typed::multi_pw_aff add(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::pw_multi_aff &multi2) const; + inline typed::multi_pw_aff add_constant(const typed::multi_val &mv) const; + inline typed::multi_pw_aff add_constant(const typed::val &v) const; + inline typed::multi_pw_aff add_constant(long v) const; + inline typed::map as_map() const = delete; + inline typed::multi_aff as_multi_aff() const; + inline typed::set as_set() const; + inline typed::pw_aff at(int pos) const; + inline typed::pw_aff get_at(int pos) const = delete; + inline typed::set<> bind(const typed::multi_id &tuple) const; + inline typed::multi_pw_aff bind_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::multi_pw_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::multi_pw_aff coalesce() const; + inline typed::set<> domain() const; + inline typed::multi_pw_aff domain_reverse() const = delete; + inline typed::multi_pw_aff gist(const typed::set<> &set) const; + inline typed::multi_union_pw_aff gist(const typed::union_set<> &context) const; + inline typed::multi_pw_aff gist(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff gist(const typed::point<> &set) const; + inline typed::multi_pw_aff gist_params(const typed::set<> &set) const; + inline typed::multi_pw_aff gist_params(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff identity() const; + template + inline typed::multi_pw_aff insert_domain(const typed::space &domain) const; + inline typed::multi_pw_aff intersect_domain(const typed::set<> &domain) const = delete; + inline typed::multi_union_pw_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::multi_pw_aff intersect_domain(const typed::basic_set<> &domain) const = delete; + inline typed::multi_pw_aff intersect_domain(const typed::point<> &domain) const = delete; + inline typed::multi_pw_aff intersect_params(const typed::set<> &set) const; + inline typed::multi_pw_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list list() const; + inline typed::pw_aff_list get_list() const = delete; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::multi_pw_aff max(const typed::aff &multi2) const; + inline typed::multi_pw_aff max(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff max(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff max(const typed::pw_multi_aff &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::multi_pw_aff min(const typed::aff &multi2) const; + inline typed::multi_pw_aff min(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff min(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff min(const typed::pw_multi_aff &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_pw_aff neg() const; + template + inline typed::multi_pw_aff> product(const typed::multi_pw_aff &multi2) const; + inline typed::multi_pw_aff> product(const typed::aff &multi2) const; + template + inline typed::multi_pw_aff> product(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff> product(const typed::pw_aff &multi2) const; + template + inline typed::multi_pw_aff> product(const typed::pw_multi_aff &multi2) const; + inline typed::multi_pw_aff pullback(const typed::multi_aff<> &ma) const = delete; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff<> &mpa2) const = delete; + inline typed::multi_pw_aff pullback(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::multi_pw_aff range_product(const typed::multi_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::multi_pw_aff range_product(const typed::aff<> &multi2) const = delete; + inline typed::multi_pw_aff range_product(const typed::multi_aff<> &multi2) const = delete; + inline typed::multi_pw_aff range_product(const typed::pw_aff<> &multi2) const = delete; + inline typed::multi_pw_aff range_product(const typed::pw_multi_aff<> &multi2) const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_pw_aff scale(const typed::multi_val &mv) const; + inline typed::multi_pw_aff scale(const typed::val &v) const; + inline typed::multi_pw_aff scale(long v) const; + inline typed::multi_pw_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_pw_aff scale_down(const typed::val &v) const; + inline typed::multi_pw_aff scale_down(long v) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_pw_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_pw_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::pw_multi_aff &multi2) const; + template + inline typed::multi_pw_aff unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::multi_pw_aff union_add(const typed::aff &mpa2) const; + inline typed::multi_pw_aff union_add(const typed::multi_aff &mpa2) const; + inline typed::multi_pw_aff union_add(const typed::pw_aff &mpa2) const; + inline typed::multi_pw_aff union_add(const typed::pw_multi_aff &mpa2) const; +}; + +template +struct multi_pw_aff : public isl::multi_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_pw_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + multi_pw_aff(const multi_pw_aff &obj) : isl::multi_pw_aff(obj) {} + private: + template {}, bool>::type = true> + multi_pw_aff(const base &obj) : isl::multi_pw_aff(obj) {} + public: + static multi_pw_aff from(const isl::multi_pw_aff &obj) { + return multi_pw_aff(obj); + } + inline /* implicit */ multi_pw_aff(const typed::aff &aff); + inline /* implicit */ multi_pw_aff(const typed::multi_aff &ma); + inline /* implicit */ multi_pw_aff(const typed::pw_aff &pa); + inline explicit multi_pw_aff(const typed::space &space, const typed::pw_aff_list &list); + inline /* implicit */ multi_pw_aff(const typed::pw_multi_aff &pma); + inline explicit multi_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::aff &multi2) const; + inline typed::multi_pw_aff add(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff add(const typed::pw_multi_aff &multi2) const; + inline typed::multi_pw_aff add_constant(const typed::multi_val &mv) const; + inline typed::multi_pw_aff add_constant(const typed::val &v) const; + inline typed::multi_pw_aff add_constant(long v) const; + inline typed::map as_map() const; + inline typed::multi_aff as_multi_aff() const; + inline typed::set as_set() const = delete; + inline typed::pw_aff at(int pos) const; + inline typed::pw_aff get_at(int pos) const = delete; + inline typed::set bind(const typed::multi_id &tuple) const; + inline typed::multi_pw_aff bind_domain(const typed::multi_id &tuple) const; + inline typed::multi_pw_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::multi_pw_aff coalesce() const; + inline typed::set domain() const; + inline typed::multi_pw_aff domain_reverse() const = delete; + inline typed::multi_pw_aff gist(const typed::set &set) const; + inline typed::multi_union_pw_aff gist(const typed::union_set &context) const; + inline typed::multi_pw_aff gist(const typed::basic_set &set) const; + inline typed::multi_pw_aff gist(const typed::point &set) const; + inline typed::multi_pw_aff gist_params(const typed::set<> &set) const; + inline typed::multi_pw_aff gist_params(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff identity() const; + inline typed::multi_pw_aff insert_domain(const typed::space<> &domain) const = delete; + inline typed::multi_pw_aff intersect_domain(const typed::set &domain) const; + inline typed::multi_union_pw_aff intersect_domain(const typed::union_set &uset) const; + inline typed::multi_pw_aff intersect_domain(const typed::basic_set &domain) const; + inline typed::multi_pw_aff intersect_domain(const typed::point &domain) const; + inline typed::multi_pw_aff intersect_params(const typed::set<> &set) const; + inline typed::multi_pw_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list list() const; + inline typed::pw_aff_list get_list() const = delete; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::multi_pw_aff max(const typed::aff &multi2) const; + inline typed::multi_pw_aff max(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff max(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff max(const typed::pw_multi_aff &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::multi_pw_aff min(const typed::aff &multi2) const; + inline typed::multi_pw_aff min(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff min(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff min(const typed::pw_multi_aff &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_pw_aff neg() const; + template + inline typed::multi_pw_aff, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_pw_aff, pair> product(const typed::aff &multi2) const; + template + inline typed::multi_pw_aff, pair> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, pair> product(const typed::pw_aff &multi2) const; + template + inline typed::multi_pw_aff, pair> product(const typed::pw_multi_aff &multi2) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_aff &ma) const; + inline typed::multi_pw_aff pullback(const typed::multi_aff &ma) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff &mpa2) const; + template + inline typed::multi_pw_aff pullback(const typed::pw_multi_aff &pma) const; + inline typed::multi_pw_aff pullback(const typed::pw_multi_aff &pma) const; + template + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + template + inline typed::multi_pw_aff> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_pw_aff> range_product(const typed::aff &multi2) const; + template + inline typed::multi_pw_aff> range_product(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff> range_product(const typed::pw_aff &multi2) const; + template + inline typed::multi_pw_aff> range_product(const typed::pw_multi_aff &multi2) const; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_pw_aff scale(const typed::multi_val &mv) const; + inline typed::multi_pw_aff scale(const typed::val &v) const; + inline typed::multi_pw_aff scale(long v) const; + inline typed::multi_pw_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_pw_aff scale_down(const typed::val &v) const; + inline typed::multi_pw_aff scale_down(long v) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_pw_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_pw_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::multi_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::pw_aff &multi2) const; + inline typed::multi_pw_aff sub(const typed::pw_multi_aff &multi2) const; + inline typed::multi_pw_aff unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::multi_pw_aff union_add(const typed::aff &mpa2) const; + inline typed::multi_pw_aff union_add(const typed::multi_aff &mpa2) const; + inline typed::multi_pw_aff union_add(const typed::pw_aff &mpa2) const; + inline typed::multi_pw_aff union_add(const typed::pw_multi_aff &mpa2) const; +}; + +template +struct multi_pw_aff, Range> : public isl::multi_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_pw_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + multi_pw_aff(const multi_pw_aff, Arg3> &obj) : isl::multi_pw_aff(obj) {} + private: + template {}, bool>::type = true> + multi_pw_aff(const base &obj) : isl::multi_pw_aff(obj) {} + public: + static multi_pw_aff from(const isl::multi_pw_aff &obj) { + return multi_pw_aff(obj); + } + inline /* implicit */ multi_pw_aff(const typed::aff, Range> &aff); + inline /* implicit */ multi_pw_aff(const typed::multi_aff, Range> &ma); + inline /* implicit */ multi_pw_aff(const typed::pw_aff, Range> &pa); + inline explicit multi_pw_aff(const typed::space, Range> &space, const typed::pw_aff_list, Anonymous> &list); + inline /* implicit */ multi_pw_aff(const typed::pw_multi_aff, Range> &pma); + inline explicit multi_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff, Range> add(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_union_pw_aff, Range> add(const typed::multi_union_pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> add(const typed::aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> add(const typed::multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> add(const typed::pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> add(const typed::pw_multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> add_constant(const typed::multi_val &mv) const; + inline typed::multi_pw_aff, Range> add_constant(const typed::val &v) const; + inline typed::multi_pw_aff, Range> add_constant(long v) const; + inline typed::map, Range> as_map() const; + inline typed::multi_aff, Range> as_multi_aff() const; + inline typed::set, Range> as_set() const = delete; + inline typed::pw_aff, Anonymous> at(int pos) const; + inline typed::pw_aff, Range> get_at(int pos) const = delete; + inline typed::set> bind(const typed::multi_id &tuple) const; + inline typed::multi_pw_aff bind_domain(const typed::multi_id> &tuple) const; + inline typed::multi_pw_aff bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::multi_pw_aff, Range> coalesce() const; + inline typed::set> domain() const; + inline typed::multi_pw_aff, Range> domain_reverse() const; + inline typed::multi_pw_aff, Range> gist(const typed::set> &set) const; + inline typed::multi_union_pw_aff, Range> gist(const typed::union_set> &context) const; + inline typed::multi_pw_aff, Range> gist(const typed::basic_set> &set) const; + inline typed::multi_pw_aff, Range> gist(const typed::point> &set) const; + inline typed::multi_pw_aff, Range> gist_params(const typed::set<> &set) const; + inline typed::multi_pw_aff, Range> gist_params(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff, Range> gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff, Range> identity() const; + inline typed::multi_pw_aff, Range> insert_domain(const typed::space<> &domain) const = delete; + inline typed::multi_pw_aff, Range> intersect_domain(const typed::set> &domain) const; + inline typed::multi_union_pw_aff, Range> intersect_domain(const typed::union_set> &uset) const; + inline typed::multi_pw_aff, Range> intersect_domain(const typed::basic_set> &domain) const; + inline typed::multi_pw_aff, Range> intersect_domain(const typed::point> &domain) const; + inline typed::multi_pw_aff, Range> intersect_params(const typed::set<> &set) const; + inline typed::multi_pw_aff, Range> intersect_params(const typed::basic_set<> &set) const; + inline typed::multi_pw_aff, Range> intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list, Anonymous> list() const; + inline typed::pw_aff_list, Range> get_list() const = delete; + inline typed::multi_pw_aff, Range> max(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> max(const typed::aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> max(const typed::multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> max(const typed::pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> max(const typed::pw_multi_aff, Range> &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff, Range> min(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> min(const typed::aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> min(const typed::multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> min(const typed::pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> min(const typed::pw_multi_aff, Range> &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_pw_aff, Range> neg() const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::aff &multi2) const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::multi_aff &multi2) const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::pw_aff &multi2) const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::pw_multi_aff &multi2) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_aff> &ma) const; + inline typed::multi_pw_aff pullback(const typed::multi_aff> &ma) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff> &mpa2) const; + template + inline typed::multi_pw_aff pullback(const typed::pw_multi_aff> &pma) const; + inline typed::multi_pw_aff pullback(const typed::pw_multi_aff> &pma) const; + template + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::multi_pw_aff, pair> range_product(const typed::multi_pw_aff, Arg2> &multi2) const; + template + inline typed::multi_union_pw_aff, pair> range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const; + inline typed::multi_pw_aff, pair> range_product(const typed::aff, Anonymous> &multi2) const; + template + inline typed::multi_pw_aff, pair> range_product(const typed::multi_aff, Arg2> &multi2) const; + inline typed::multi_pw_aff, pair> range_product(const typed::pw_aff, Anonymous> &multi2) const; + template + inline typed::multi_pw_aff, pair> range_product(const typed::pw_multi_aff, Arg2> &multi2) const; + inline typed::id, Range> get_range_tuple_id() const = delete; + inline typed::multi_pw_aff, Range> scale(const typed::multi_val &mv) const; + inline typed::multi_pw_aff, Range> scale(const typed::val &v) const; + inline typed::multi_pw_aff, Range> scale(long v) const; + inline typed::multi_pw_aff, Range> scale_down(const typed::multi_val &mv) const; + inline typed::multi_pw_aff, Range> scale_down(const typed::val &v) const; + inline typed::multi_pw_aff, Range> scale_down(long v) const; + inline typed::multi_pw_aff, Range> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, Range> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + template + inline typed::multi_pw_aff, Arg1> set_range_tuple(const typed::id &id) const; + template + inline typed::multi_pw_aff, Arg1> set_range_tuple(const std::string &id) const; + inline typed::space, Range> space() const; + inline typed::space, Range> get_space() const = delete; + inline typed::multi_pw_aff, Range> sub(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_union_pw_aff, Range> sub(const typed::multi_union_pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> sub(const typed::aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> sub(const typed::multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> sub(const typed::pw_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> sub(const typed::pw_multi_aff, Range> &multi2) const; + inline typed::multi_pw_aff, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, Range> union_add(const typed::multi_pw_aff, Range> &mpa2) const; + inline typed::multi_union_pw_aff, Range> union_add(const typed::multi_union_pw_aff, Range> &mupa2) const; + inline typed::multi_pw_aff, Range> union_add(const typed::aff, Range> &mpa2) const; + inline typed::multi_pw_aff, Range> union_add(const typed::multi_aff, Range> &mpa2) const; + inline typed::multi_pw_aff, Range> union_add(const typed::pw_aff, Range> &mpa2) const; + inline typed::multi_pw_aff, Range> union_add(const typed::pw_multi_aff, Range> &mpa2) const; +}; + +template +struct multi_union_pw_aff : public isl::multi_union_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_union_pw_aff() = default; + template {}, + bool>::type = true> + multi_union_pw_aff(const multi_union_pw_aff &obj) : isl::multi_union_pw_aff(obj) {} + private: + template {}, bool>::type = true> + multi_union_pw_aff(const base &obj) : isl::multi_union_pw_aff(obj) {} + public: + static multi_union_pw_aff from(const isl::multi_union_pw_aff &obj) { + return multi_union_pw_aff(obj); + } + inline /* implicit */ multi_union_pw_aff(const typed::multi_pw_aff &mpa); + inline /* implicit */ multi_union_pw_aff(const typed::union_pw_aff &upa); + inline explicit multi_union_pw_aff(const typed::space &space, const typed::union_pw_aff_list &list); + inline explicit multi_union_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::union_pw_aff &multi2) const; + inline typed::union_pw_aff at(int pos) const; + inline typed::union_pw_aff get_at(int pos) const = delete; + inline typed::union_set<> bind(const typed::multi_id &tuple) const; + inline typed::multi_union_pw_aff coalesce() const; + inline typed::union_set<> domain() const; + inline typed::multi_union_pw_aff gist(const typed::union_set<> &context) const; + inline typed::multi_union_pw_aff gist(const typed::basic_set<> &context) const; + inline typed::multi_union_pw_aff gist(const typed::point<> &context) const; + inline typed::multi_union_pw_aff gist(const typed::set<> &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::set<> &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::basic_set<> &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::point<> &context) const; + inline typed::multi_union_pw_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::multi_union_pw_aff intersect_domain(const typed::basic_set<> &uset) const = delete; + inline typed::multi_union_pw_aff intersect_domain(const typed::point<> &uset) const = delete; + inline typed::multi_union_pw_aff intersect_domain(const typed::set<> &uset) const = delete; + inline typed::multi_union_pw_aff intersect_params(const typed::set<> ¶ms) const; + inline typed::multi_union_pw_aff intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::multi_union_pw_aff intersect_params(const typed::point<> ¶ms) const; + inline typed::union_pw_aff_list list() const; + inline typed::union_pw_aff_list get_list() const = delete; + inline typed::multi_union_pw_aff neg() const; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::multi_union_pw_aff pullback(const typed::multi_aff<> &upma) const = delete; + inline typed::multi_union_pw_aff pullback(const typed::pw_multi_aff<> &upma) const = delete; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_aff<> &upma) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::union_pw_aff<> &multi2) const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_union_pw_aff scale(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale(const typed::val &v) const; + inline typed::multi_union_pw_aff scale(long v) const; + inline typed::multi_union_pw_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale_down(const typed::val &v) const; + inline typed::multi_union_pw_aff scale_down(long v) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::union_pw_aff &multi2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_pw_aff &mupa2) const; + inline typed::multi_union_pw_aff union_add(const typed::union_pw_aff &mupa2) const; +}; + +template +struct multi_union_pw_aff : public isl::multi_union_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_union_pw_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + multi_union_pw_aff(const multi_union_pw_aff &obj) : isl::multi_union_pw_aff(obj) {} + private: + template {}, bool>::type = true> + multi_union_pw_aff(const base &obj) : isl::multi_union_pw_aff(obj) {} + public: + static multi_union_pw_aff from(const isl::multi_union_pw_aff &obj) { + return multi_union_pw_aff(obj); + } + inline /* implicit */ multi_union_pw_aff(const typed::multi_pw_aff &mpa); + inline /* implicit */ multi_union_pw_aff(const typed::union_pw_aff &upa); + inline explicit multi_union_pw_aff(const typed::space &space, const typed::union_pw_aff_list &list); + inline explicit multi_union_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::union_pw_aff &multi2) const; + inline typed::union_pw_aff at(int pos) const; + inline typed::union_pw_aff get_at(int pos) const = delete; + inline typed::union_set bind(const typed::multi_id &tuple) const; + inline typed::multi_union_pw_aff coalesce() const; + inline typed::union_set domain() const; + inline typed::multi_union_pw_aff gist(const typed::union_set &context) const; + inline typed::multi_union_pw_aff gist(const typed::basic_set &context) const; + inline typed::multi_union_pw_aff gist(const typed::point &context) const; + inline typed::multi_union_pw_aff gist(const typed::set &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::set<> &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::basic_set<> &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::point<> &context) const; + inline typed::multi_union_pw_aff intersect_domain(const typed::union_set &uset) const; + inline typed::multi_union_pw_aff intersect_domain(const typed::basic_set &uset) const; + inline typed::multi_union_pw_aff intersect_domain(const typed::point &uset) const; + inline typed::multi_union_pw_aff intersect_domain(const typed::set &uset) const; + inline typed::multi_union_pw_aff intersect_params(const typed::set<> ¶ms) const; + inline typed::multi_union_pw_aff intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::multi_union_pw_aff intersect_params(const typed::point<> ¶ms) const; + inline typed::union_pw_aff_list list() const; + inline typed::union_pw_aff_list get_list() const = delete; + inline typed::multi_union_pw_aff neg() const; + template + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + template + inline typed::multi_union_pw_aff pullback(const typed::multi_aff &upma) const; + inline typed::multi_union_pw_aff pullback(const typed::multi_aff &upma) const; + template + inline typed::multi_union_pw_aff pullback(const typed::pw_multi_aff &upma) const; + inline typed::multi_union_pw_aff pullback(const typed::pw_multi_aff &upma) const; + template + inline typed::multi_union_pw_aff pullback(const typed::union_pw_aff &upma) const; + inline typed::multi_union_pw_aff pullback(const typed::union_pw_aff &upma) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff> range_product(const typed::union_pw_aff &multi2) const; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_union_pw_aff scale(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale(const typed::val &v) const; + inline typed::multi_union_pw_aff scale(long v) const; + inline typed::multi_union_pw_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale_down(const typed::val &v) const; + inline typed::multi_union_pw_aff scale_down(long v) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::union_pw_aff &multi2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_pw_aff &mupa2) const; + inline typed::multi_union_pw_aff union_add(const typed::union_pw_aff &mupa2) const; +}; + +template +struct multi_val : public isl::multi_val { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + multi_val() = default; + template {}, + bool>::type = true> + multi_val(const multi_val &obj) : isl::multi_val(obj) {} + private: + template {}, bool>::type = true> + multi_val(const base &obj) : isl::multi_val(obj) {} + public: + static multi_val from(const isl::multi_val &obj) { + return multi_val(obj); + } + inline explicit multi_val(const typed::space &space, const typed::val_list &list); + inline explicit multi_val(const isl::ctx &ctx, const std::string &str); + inline typed::multi_val add(const typed::multi_val &multi2) const; + inline typed::multi_val add(const typed::val &v) const; + inline typed::multi_val add(long v) const; + inline typed::val at(int pos) const; + inline typed::val get_at(int pos) const = delete; + inline typed::val_list list() const; + inline typed::val_list get_list() const = delete; + inline typed::multi_val max(const typed::multi_val &multi2) const; + inline typed::multi_val min(const typed::multi_val &multi2) const; + inline typed::multi_val neg() const; + template + inline typed::multi_val> product(const typed::multi_val &multi2) const; + inline typed::multi_val range_product(const typed::multi_val<> &multi2) const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::multi_val scale(const typed::multi_val &mv) const; + inline typed::multi_val scale(const typed::val &v) const; + inline typed::multi_val scale(long v) const; + inline typed::multi_val scale_down(const typed::multi_val &mv) const; + inline typed::multi_val scale_down(const typed::val &v) const; + inline typed::multi_val scale_down(long v) const; + inline typed::multi_val set_at(int pos, const typed::val &el) const; + inline typed::multi_val set_at(int pos, long el) const; + template + inline typed::multi_val set_range_tuple(const typed::id &id) const; + template + inline typed::multi_val set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_val sub(const typed::multi_val &multi2) const; +}; + +template <> +struct point<> : public isl::point { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + point() = default; + private: + template {}, bool>::type = true> + point(const base &obj) : isl::point(obj) {} + public: + static point from(const isl::point &obj) { + return point(obj); + } + inline typed::basic_set<> apply(const typed::basic_map<> &bmap) const = delete; + inline typed::set<> apply(const typed::map<> &map) const = delete; + inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete; + inline typed::pw_multi_aff<> as_pw_multi_aff() const = delete; + inline typed::set<> as_set() const = delete; + inline typed::set<> bind(const typed::multi_id<> &tuple) const = delete; + inline typed::set<> coalesce() const; + inline typed::basic_set<> detect_equalities() const; + inline typed::set<> drop_unused_params() const; + inline bool every_set(const std::function)> &test) const; + inline typed::set<> extract_set(const typed::space<> &space) const; + inline void foreach_basic_set(const std::function)> &fn) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::basic_set<> gist(const typed::basic_set<> &context) const; + inline typed::set<> gist(const typed::set<> &context) const; + inline typed::union_set<> gist(const typed::union_set<> &context) const; + inline typed::set<> gist_params(const typed::set<> &context) const = delete; + inline typed::map<> identity() const = delete; + inline typed::pw_aff indicator_function() const; + inline typed::map<> insert_domain(const typed::space<> &domain) const = delete; + inline typed::basic_set<> intersect(const typed::basic_set<> &bset2) const; + inline typed::set<> intersect(const typed::set<> &set2) const; + inline typed::union_set<> intersect(const typed::union_set<> &uset2) const; + inline typed::basic_set<> intersect_params(const typed::basic_set<> &bset2) const = delete; + inline typed::set<> intersect_params(const typed::set<> ¶ms) const = delete; + inline typed::fixed_box<> lattice_tile() const = delete; + inline typed::set<> lexmax() const = delete; + inline typed::pw_multi_aff<> lexmax_pw_multi_aff() const = delete; + inline typed::set<> lexmin() const = delete; + inline typed::pw_multi_aff<> lexmin_pw_multi_aff() const = delete; + inline typed::set<> lower_bound(const typed::multi_pw_aff<> &lower) const = delete; + inline typed::set<> lower_bound(const typed::multi_val<> &lower) const = delete; + inline typed::multi_pw_aff<> max_multi_pw_aff() const = delete; + inline typed::val<> max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff<> min_multi_pw_aff() const = delete; + inline typed::val<> min_val(const typed::aff<> &obj) const = delete; + inline typed::multi_val<> multi_val() const = delete; + inline typed::multi_val<> get_multi_val() const = delete; + inline typed::pw_aff param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline typed::basic_set<> params() const = delete; + inline typed::multi_val<> plain_multi_val_if_fixed() const = delete; + inline typed::set<> preimage(const typed::multi_aff<> &ma) const = delete; + inline typed::set<> preimage(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::set<> preimage(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::set<> product(const typed::set<> &set2) const = delete; + inline typed::set<> project_out_all_params() const; + inline typed::set<> project_out_param(const typed::id &id) const; + inline typed::set<> project_out_param(const std::string &id) const; + inline typed::set<> project_out_param(const typed::id_list &list) const; + inline typed::pw_aff pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list<> set_list() const; + inline typed::fixed_box<> simple_fixed_box_hull() const = delete; + inline typed::space<> space() const; + inline typed::set<> subtract(const typed::set<> &set2) const; + inline typed::union_set<> subtract(const typed::union_set<> &uset2) const; + inline typed::set<> to_set() const; + inline typed::union_set<> to_union_set() const; + inline typed::map<> translation() const = delete; + template + inline typed::set unbind_params(const typed::multi_id &tuple) const; + inline typed::map<> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::set<> unite(const typed::basic_set<> &bset2) const; + inline typed::set<> unite(const typed::set<> &set2) const; + inline typed::union_set<> unite(const typed::union_set<> &uset2) const; + inline typed::map<> unwrap() const = delete; + inline typed::set<> upper_bound(const typed::multi_pw_aff<> &upper) const = delete; + inline typed::set<> upper_bound(const typed::multi_val<> &upper) const = delete; + inline typed::set<> wrapped_reverse() const = delete; +}; + +template +struct point : public isl::point { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + point() = default; + template {}, + bool>::type = true> + point(const point &obj) : isl::point(obj) {} + private: + template {}, bool>::type = true> + point(const base &obj) : isl::point(obj) {} + public: + static point from(const isl::point &obj) { + return point(obj); + } + template + inline typed::basic_set apply(const typed::basic_map &bmap) const; + template + inline typed::set apply(const typed::map &map) const; + template + inline typed::union_set apply(const typed::union_map &umap) const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::set<> bind(const typed::multi_id &tuple) const; + inline typed::set coalesce() const; + inline typed::basic_set detect_equalities() const; + inline typed::set drop_unused_params() const; + inline bool every_set(const std::function)> &test) const; + inline typed::set extract_set(const typed::space &space) const; + inline void foreach_basic_set(const std::function)> &fn) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::basic_set gist(const typed::basic_set &context) const; + inline typed::set gist(const typed::set &context) const; + inline typed::union_set gist(const typed::union_set &context) const; + inline typed::set gist_params(const typed::set<> &context) const; + inline typed::map identity() const; + inline typed::pw_aff indicator_function() const; + template + inline typed::map insert_domain(const typed::space &domain) const; + inline typed::basic_set intersect(const typed::basic_set &bset2) const; + inline typed::set intersect(const typed::set &set2) const; + inline typed::union_set intersect(const typed::union_set &uset2) const; + inline typed::basic_set intersect_params(const typed::basic_set<> &bset2) const; + inline typed::set intersect_params(const typed::set<> ¶ms) const; + inline typed::fixed_box lattice_tile() const; + inline typed::set lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::set lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::set lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::set lower_bound(const typed::multi_val &lower) const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::val max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::val min_val(const typed::aff<> &obj) const = delete; + inline typed::multi_val multi_val() const; + inline typed::multi_val get_multi_val() const = delete; + inline typed::pw_aff param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline typed::basic_set<> params() const; + inline typed::multi_val plain_multi_val_if_fixed() const; + template + inline typed::set preimage(const typed::multi_aff &ma) const; + template + inline typed::set preimage(const typed::multi_pw_aff &mpa) const; + template + inline typed::set preimage(const typed::pw_multi_aff &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff &upma) const; + template + inline typed::set> product(const typed::set &set2) const; + inline typed::set project_out_all_params() const; + inline typed::set project_out_param(const typed::id &id) const; + inline typed::set project_out_param(const std::string &id) const; + inline typed::set project_out_param(const typed::id_list &list) const; + inline typed::pw_aff pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list set_list() const; + inline typed::fixed_box simple_fixed_box_hull() const; + inline typed::space space() const; + inline typed::set subtract(const typed::set &set2) const; + inline typed::union_set subtract(const typed::union_set &uset2) const; + inline typed::set to_set() const; + inline typed::union_set to_union_set() const; + inline typed::map translation() const; + inline typed::set unbind_params(const typed::multi_id<> &tuple) const = delete; + template + inline typed::map unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::set unite(const typed::basic_set &bset2) const; + inline typed::set unite(const typed::set &set2) const; + inline typed::union_set unite(const typed::union_set &uset2) const; + inline typed::map unwrap() const = delete; + inline typed::set upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::set upper_bound(const typed::multi_val &upper) const; + inline typed::set wrapped_reverse() const = delete; +}; + +template +struct point> : public isl::point { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + point() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + point(const point> &obj) : isl::point(obj) {} + private: + template {}, bool>::type = true> + point(const base &obj) : isl::point(obj) {} + public: + static point from(const isl::point &obj) { + return point(obj); + } + template + inline typed::basic_set apply(const typed::basic_map, Arg2> &bmap) const; + template + inline typed::set apply(const typed::map, Arg2> &map) const; + template + inline typed::union_set apply(const typed::union_map, Arg2> &umap) const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::set> as_set() const; + inline typed::set<> bind(const typed::multi_id> &tuple) const; + inline typed::set> coalesce() const; + inline typed::basic_set> detect_equalities() const; + inline typed::set> drop_unused_params() const; + inline bool every_set(const std::function>)> &test) const; + inline typed::set> extract_set(const typed::space> &space) const; + inline void foreach_basic_set(const std::function>)> &fn) const; + inline void foreach_point(const std::function>)> &fn) const; + inline void foreach_set(const std::function>)> &fn) const; + inline typed::basic_set> gist(const typed::basic_set> &context) const; + inline typed::set> gist(const typed::set> &context) const; + inline typed::union_set> gist(const typed::union_set> &context) const; + inline typed::set> gist_params(const typed::set<> &context) const; + inline typed::map, pair> identity() const; + inline typed::pw_aff, Anonymous> indicator_function() const; + template + inline typed::map> insert_domain(const typed::space &domain) const; + inline typed::basic_set> intersect(const typed::basic_set> &bset2) const; + inline typed::set> intersect(const typed::set> &set2) const; + inline typed::union_set> intersect(const typed::union_set> &uset2) const; + inline typed::basic_set> intersect_params(const typed::basic_set<> &bset2) const; + inline typed::set> intersect_params(const typed::set<> ¶ms) const; + inline typed::fixed_box> lattice_tile() const; + inline typed::set> lexmax() const; + inline typed::pw_multi_aff> lexmax_pw_multi_aff() const; + inline typed::set> lexmin() const; + inline typed::pw_multi_aff> lexmin_pw_multi_aff() const; + inline typed::set> lower_bound(const typed::multi_pw_aff> &lower) const; + inline typed::set> lower_bound(const typed::multi_val> &lower) const; + inline typed::multi_pw_aff> max_multi_pw_aff() const; + inline typed::val> max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff> min_multi_pw_aff() const; + inline typed::val> min_val(const typed::aff<> &obj) const = delete; + inline typed::multi_val> multi_val() const; + inline typed::multi_val> get_multi_val() const = delete; + inline typed::pw_aff, Anonymous> param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff, Anonymous> param_pw_aff_on_domain(const std::string &id) const; + inline typed::basic_set<> params() const; + inline typed::multi_val> plain_multi_val_if_fixed() const; + template + inline typed::set preimage(const typed::multi_aff> &ma) const; + template + inline typed::set preimage(const typed::multi_pw_aff> &mpa) const; + template + inline typed::set preimage(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::set, Arg2>> product(const typed::set &set2) const; + inline typed::set> project_out_all_params() const; + inline typed::set> project_out_param(const typed::id &id) const; + inline typed::set> project_out_param(const std::string &id) const; + inline typed::set> project_out_param(const typed::id_list &list) const; + inline typed::pw_aff, Anonymous> pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff, Anonymous> pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff, Arg2> pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list> set_list() const; + inline typed::fixed_box> simple_fixed_box_hull() const; + inline typed::space> space() const; + inline typed::set> subtract(const typed::set> &set2) const; + inline typed::union_set> subtract(const typed::union_set> &uset2) const; + inline typed::set> to_set() const; + inline typed::union_set> to_union_set() const; + inline typed::map, pair> translation() const; + inline typed::set> unbind_params(const typed::multi_id<> &tuple) const = delete; + template + inline typed::map> unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::set> unite(const typed::basic_set> &bset2) const; + inline typed::set> unite(const typed::set> &set2) const; + inline typed::union_set> unite(const typed::union_set> &uset2) const; + inline typed::map unwrap() const; + inline typed::set> upper_bound(const typed::multi_pw_aff> &upper) const; + inline typed::set> upper_bound(const typed::multi_val> &upper) const; + inline typed::set> wrapped_reverse() const; +}; + +template <> +struct pw_aff : public isl::pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_aff() = default; + pw_aff(const isl::pw_aff &obj) : isl::pw_aff(obj) {} + static pw_aff from(const isl::pw_aff &obj) { + return pw_aff(obj); + } + inline /* implicit */ pw_aff(const typed::aff &aff); + inline explicit pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff add(const typed::aff &pwaff2) const; + inline typed::pw_aff add_constant(const typed::val &v) const; + inline typed::pw_aff add_constant(long v) const; + inline typed::pw_multi_aff add_constant(const typed::multi_val &mv) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff as_aff() const; + inline typed::map as_map() const = delete; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::union_map as_union_map() const = delete; + inline typed::pw_aff at(int pos) const; + inline typed::set<> bind(const typed::multi_id &tuple) const; + inline typed::set<> bind(const typed::id &id) const; + inline typed::set<> bind(const std::string &id) const; + inline typed::pw_aff bind_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_aff ceil() const; + inline typed::pw_aff coalesce() const; + inline typed::pw_aff cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const; + inline typed::set<> domain() const; + inline typed::pw_aff domain_reverse() const = delete; + inline typed::pw_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::pw_aff floor() const; + inline typed::set ge_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::set ge_set(const typed::aff<> &pwaff2) const = delete; + inline typed::pw_aff gist(const typed::set<> &context) const; + inline typed::union_pw_aff gist(const typed::union_set<> &context) const; + inline typed::pw_aff gist(const typed::basic_set<> &context) const; + inline typed::pw_aff gist(const typed::point<> &context) const; + inline typed::pw_aff gist_params(const typed::set<> &context) const; + inline typed::pw_aff gist_params(const typed::basic_set<> &context) const; + inline typed::pw_aff gist_params(const typed::point<> &context) const; + inline typed::set gt_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::set gt_set(const typed::aff<> &pwaff2) const = delete; + inline typed::multi_pw_aff identity() const; + template + inline typed::pw_aff insert_domain(const typed::space &domain) const; + inline typed::pw_aff intersect_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_aff intersect_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_aff intersect_domain(const typed::basic_set<> &set) const = delete; + inline typed::pw_aff intersect_domain(const typed::point<> &set) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_aff intersect_params(const typed::set<> &set) const; + inline typed::pw_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_aff intersect_params(const typed::point<> &set) const; + inline typed::set le_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::set le_set(const typed::aff<> &pwaff2) const = delete; + inline typed::pw_aff_list list() const; + inline typed::set lt_set(const typed::pw_aff<> &pwaff2) const = delete; + inline typed::set lt_set(const typed::aff<> &pwaff2) const = delete; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff max(const typed::pw_aff &pwaff2) const; + inline typed::pw_aff max(const typed::aff &pwaff2) const; + inline typed::multi_val max_multi_val() const; + inline typed::val max_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff min(const typed::pw_aff &pwaff2) const; + inline typed::pw_aff min(const typed::aff &pwaff2) const; + inline typed::multi_val min_multi_val() const; + inline typed::val min_val() const; + inline typed::pw_aff mod(const typed::val &mod) const; + inline typed::pw_aff mod(long mod) const; + inline typed::pw_aff neg() const; + inline typed::set<> params() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_pw_aff> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> product(const typed::pw_multi_aff &pma2) const; + inline typed::pw_aff pullback(const typed::multi_aff<> &ma) const = delete; + inline typed::pw_aff pullback(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::pw_aff pullback(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + inline typed::multi_pw_aff range_product(const typed::multi_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::pw_multi_aff range_product(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::pw_aff scale(const typed::val &v) const; + inline typed::pw_aff scale(long v) const; + inline typed::pw_multi_aff scale(const typed::multi_val &mv) const; + inline typed::pw_aff scale_down(const typed::val &f) const; + inline typed::pw_aff scale_down(long f) const; + inline typed::pw_multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::pw_multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::pw_multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff sub(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff sub(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff sub(const typed::aff &pwaff2) const; + inline typed::pw_aff subtract_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_aff subtract_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_aff subtract_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_aff subtract_domain(const typed::basic_set<> &set) const = delete; + inline typed::pw_aff subtract_domain(const typed::point<> &set) const = delete; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::union_pw_aff to_union_pw_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + template + inline typed::multi_pw_aff unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_aff union_add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff union_add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff union_add(const typed::aff &pwaff2) const; +}; + +template +struct pw_aff : public isl::pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_aff() = default; + template {}, + bool>::type = true> + pw_aff(const pw_aff &obj) : isl::pw_aff(obj) {} + private: + template {}, bool>::type = true> + pw_aff(const base &obj) : isl::pw_aff(obj) {} + public: + static pw_aff from(const isl::pw_aff &obj) { + return pw_aff(obj); + } + inline /* implicit */ pw_aff(const typed::aff &aff); + inline explicit pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff add(const typed::aff &pwaff2) const; + inline typed::pw_aff add_constant(const typed::val &v) const; + inline typed::pw_aff add_constant(long v) const; + inline typed::pw_multi_aff add_constant(const typed::multi_val &mv) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff as_aff() const; + inline typed::map as_map() const; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const = delete; + inline typed::union_map as_union_map() const; + inline typed::pw_aff at(int pos) const; + inline typed::set bind(const typed::multi_id &tuple) const; + inline typed::set bind(const typed::id &id) const; + inline typed::set bind(const std::string &id) const; + inline typed::pw_aff bind_domain(const typed::multi_id &tuple) const; + inline typed::pw_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_aff ceil() const; + inline typed::pw_aff coalesce() const; + inline typed::pw_aff cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const; + inline typed::set domain() const; + inline typed::pw_aff domain_reverse() const = delete; + inline typed::pw_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::pw_aff floor() const; + inline typed::set ge_set(const typed::pw_aff &pwaff2) const; + inline typed::set ge_set(const typed::aff &pwaff2) const; + inline typed::pw_aff gist(const typed::set &context) const; + inline typed::union_pw_aff gist(const typed::union_set &context) const; + inline typed::pw_aff gist(const typed::basic_set &context) const; + inline typed::pw_aff gist(const typed::point &context) const; + inline typed::pw_aff gist_params(const typed::set<> &context) const; + inline typed::pw_aff gist_params(const typed::basic_set<> &context) const; + inline typed::pw_aff gist_params(const typed::point<> &context) const; + inline typed::set gt_set(const typed::pw_aff &pwaff2) const; + inline typed::set gt_set(const typed::aff &pwaff2) const; + inline typed::multi_pw_aff identity() const; + inline typed::pw_aff insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_aff intersect_domain(const typed::set &set) const; + inline typed::union_pw_aff intersect_domain(const typed::space &space) const; + inline typed::union_pw_aff intersect_domain(const typed::union_set &uset) const; + inline typed::pw_aff intersect_domain(const typed::basic_set &set) const; + inline typed::pw_aff intersect_domain(const typed::point &set) const; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_aff intersect_params(const typed::set<> &set) const; + inline typed::pw_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_aff intersect_params(const typed::point<> &set) const; + inline typed::set le_set(const typed::pw_aff &pwaff2) const; + inline typed::set le_set(const typed::aff &pwaff2) const; + inline typed::pw_aff_list list() const; + inline typed::set lt_set(const typed::pw_aff &pwaff2) const; + inline typed::set lt_set(const typed::aff &pwaff2) const; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff max(const typed::pw_aff &pwaff2) const; + inline typed::pw_aff max(const typed::aff &pwaff2) const; + inline typed::multi_val max_multi_val() const; + inline typed::val max_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::pw_aff min(const typed::pw_aff &pwaff2) const; + inline typed::pw_aff min(const typed::aff &pwaff2) const; + inline typed::multi_val min_multi_val() const; + inline typed::val min_val() const; + inline typed::pw_aff mod(const typed::val &mod) const; + inline typed::pw_aff mod(long mod) const; + inline typed::pw_aff neg() const; + inline typed::set<> params() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::multi_pw_aff, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_aff pullback(const typed::multi_aff &ma) const; + inline typed::pw_aff pullback(const typed::multi_aff &ma) const; + template + inline typed::pw_aff pullback(const typed::multi_pw_aff &mpa) const; + inline typed::pw_aff pullback(const typed::multi_pw_aff &mpa) const; + template + inline typed::pw_aff pullback(const typed::pw_multi_aff &pma) const; + inline typed::pw_aff pullback(const typed::pw_multi_aff &pma) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + template + inline typed::multi_pw_aff> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> range_product(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff scale(const typed::val &v) const; + inline typed::pw_aff scale(long v) const; + inline typed::pw_multi_aff scale(const typed::multi_val &mv) const; + inline typed::pw_aff scale_down(const typed::val &f) const; + inline typed::pw_aff scale_down(long f) const; + inline typed::pw_multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::pw_multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::pw_multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_aff sub(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff sub(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff sub(const typed::aff &pwaff2) const; + inline typed::pw_aff subtract_domain(const typed::set &set) const; + inline typed::union_pw_aff subtract_domain(const typed::space &space) const; + inline typed::union_pw_aff subtract_domain(const typed::union_set &uset) const; + inline typed::pw_aff subtract_domain(const typed::basic_set &set) const; + inline typed::pw_aff subtract_domain(const typed::point &set) const; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::union_pw_aff to_union_pw_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + inline typed::multi_pw_aff unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_aff union_add(const typed::pw_aff &pwaff2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_aff union_add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_aff union_add(const typed::aff &pwaff2) const; +}; + +template +struct pw_aff, Anonymous> : public isl::pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + pw_aff(const pw_aff, Anonymous> &obj) : isl::pw_aff(obj) {} + private: + template {}, bool>::type = true> + pw_aff(const base &obj) : isl::pw_aff(obj) {} + public: + static pw_aff from(const isl::pw_aff &obj) { + return pw_aff(obj); + } + inline /* implicit */ pw_aff(const typed::aff, Anonymous> &aff); + inline explicit pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff, Anonymous> add(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::multi_union_pw_aff, Anonymous> add(const typed::multi_union_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> add(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_multi_aff, Anonymous> add(const typed::pw_multi_aff, Anonymous> &pma2) const; + inline typed::union_pw_aff, Anonymous> add(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> add(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::pw_aff, Anonymous> add(const typed::aff, Anonymous> &pwaff2) const; + inline typed::pw_aff, Anonymous> add_constant(const typed::val &v) const; + inline typed::pw_aff, Anonymous> add_constant(long v) const; + inline typed::pw_multi_aff, Anonymous> add_constant(const typed::multi_val &mv) const; + template + inline typed::union_pw_multi_aff, Arg1> apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::aff, Anonymous> as_aff() const; + inline typed::map, Anonymous> as_map() const; + inline typed::multi_aff, Anonymous> as_multi_aff() const; + inline typed::multi_union_pw_aff, Anonymous> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Anonymous> as_pw_multi_aff() const; + inline typed::set, Anonymous> as_set() const = delete; + inline typed::union_map, Anonymous> as_union_map() const; + inline typed::pw_aff, Anonymous> at(int pos) const; + inline typed::set> bind(const typed::multi_id &tuple) const; + inline typed::set> bind(const typed::id &id) const; + inline typed::set> bind(const std::string &id) const; + inline typed::pw_aff bind_domain(const typed::multi_id> &tuple) const; + inline typed::pw_aff bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::pw_aff, Anonymous> ceil() const; + inline typed::pw_aff, Anonymous> coalesce() const; + inline typed::pw_aff, Anonymous> cond(const typed::pw_aff, Anonymous> &pwaff_true, const typed::pw_aff, Anonymous> &pwaff_false) const; + inline typed::set> domain() const; + inline typed::pw_aff, Anonymous> domain_reverse() const; + inline typed::pw_aff, Anonymous> drop_unused_params() const; + inline typed::pw_multi_aff, Anonymous> extract_pw_multi_aff(const typed::space, Anonymous> &space) const; + inline typed::pw_aff, Anonymous> floor() const; + inline typed::set> ge_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::set> ge_set(const typed::aff, Anonymous> &pwaff2) const; + inline typed::pw_aff, Anonymous> gist(const typed::set> &context) const; + inline typed::union_pw_aff, Anonymous> gist(const typed::union_set> &context) const; + inline typed::pw_aff, Anonymous> gist(const typed::basic_set> &context) const; + inline typed::pw_aff, Anonymous> gist(const typed::point> &context) const; + inline typed::pw_aff, Anonymous> gist_params(const typed::set<> &context) const; + inline typed::pw_aff, Anonymous> gist_params(const typed::basic_set<> &context) const; + inline typed::pw_aff, Anonymous> gist_params(const typed::point<> &context) const; + inline typed::set> gt_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::set> gt_set(const typed::aff, Anonymous> &pwaff2) const; + inline typed::multi_pw_aff, Anonymous> identity() const; + inline typed::pw_aff, Anonymous> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_aff, Anonymous> intersect_domain(const typed::set> &set) const; + inline typed::union_pw_aff, Anonymous> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_aff, Anonymous> intersect_domain(const typed::union_set> &uset) const; + inline typed::pw_aff, Anonymous> intersect_domain(const typed::basic_set> &set) const; + inline typed::pw_aff, Anonymous> intersect_domain(const typed::point> &set) const; + inline typed::union_pw_aff, Anonymous> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::pw_aff, Anonymous> intersect_params(const typed::set<> &set) const; + inline typed::pw_aff, Anonymous> intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_aff, Anonymous> intersect_params(const typed::point<> &set) const; + inline typed::set> le_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::set> le_set(const typed::aff, Anonymous> &pwaff2) const; + inline typed::pw_aff_list, Anonymous> list() const; + inline typed::set> lt_set(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::set> lt_set(const typed::aff, Anonymous> &pwaff2) const; + inline typed::multi_pw_aff, Anonymous> max(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> max(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_aff, Anonymous> max(const typed::aff, Anonymous> &pwaff2) const; + inline typed::multi_val max_multi_val() const; + inline typed::val max_val() const; + inline typed::multi_pw_aff, Anonymous> min(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> min(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_aff, Anonymous> min(const typed::aff, Anonymous> &pwaff2) const; + inline typed::multi_val min_multi_val() const; + inline typed::val min_val() const; + inline typed::pw_aff, Anonymous> mod(const typed::val &mod) const; + inline typed::pw_aff, Anonymous> mod(long mod) const; + inline typed::pw_aff, Anonymous> neg() const; + inline typed::set<> params() const; + template + inline typed::pw_multi_aff, Anonymous> preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::multi_pw_aff, Arg1>, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Arg1>, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_aff pullback(const typed::multi_aff> &ma) const; + inline typed::pw_aff pullback(const typed::multi_aff> &ma) const; + template + inline typed::pw_aff pullback(const typed::multi_pw_aff> &mpa) const; + inline typed::pw_aff pullback(const typed::multi_pw_aff> &mpa) const; + template + inline typed::pw_aff pullback(const typed::pw_multi_aff> &pma) const; + inline typed::pw_aff pullback(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + inline typed::pw_multi_aff_list, Anonymous> pw_multi_aff_list() const; + inline typed::pw_multi_aff, Anonymous> range_factor_domain() const = delete; + inline typed::pw_multi_aff, Anonymous> range_factor_range() const = delete; + template + inline typed::multi_pw_aff, pair> range_product(const typed::multi_pw_aff, Arg1> &multi2) const; + template + inline typed::multi_union_pw_aff, pair> range_product(const typed::multi_union_pw_aff, Arg1> &multi2) const; + template + inline typed::pw_multi_aff, pair> range_product(const typed::pw_multi_aff, Arg1> &pma2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_multi_aff, Arg1> &upma2) const; + inline typed::pw_aff, Anonymous> scale(const typed::val &v) const; + inline typed::pw_aff, Anonymous> scale(long v) const; + inline typed::pw_multi_aff, Anonymous> scale(const typed::multi_val &mv) const; + inline typed::pw_aff, Anonymous> scale_down(const typed::val &f) const; + inline typed::pw_aff, Anonymous> scale_down(long f) const; + inline typed::pw_multi_aff, Anonymous> scale_down(const typed::multi_val &mv) const; + inline typed::multi_pw_aff, Anonymous> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, Anonymous> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + template + inline typed::pw_multi_aff, Arg1> set_range_tuple(const typed::id &id) const; + template + inline typed::pw_multi_aff, Arg1> set_range_tuple(const std::string &id) const; + inline typed::space, Anonymous> space() const; + inline typed::space, Anonymous> get_space() const = delete; + inline typed::multi_pw_aff, Anonymous> sub(const typed::multi_pw_aff, Anonymous> &multi2) const; + inline typed::multi_union_pw_aff, Anonymous> sub(const typed::multi_union_pw_aff, Anonymous> &multi2) const; + inline typed::pw_aff, Anonymous> sub(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_multi_aff, Anonymous> sub(const typed::pw_multi_aff, Anonymous> &pma2) const; + inline typed::union_pw_aff, Anonymous> sub(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> sub(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::pw_aff, Anonymous> sub(const typed::aff, Anonymous> &pwaff2) const; + inline typed::pw_aff, Anonymous> subtract_domain(const typed::set> &set) const; + inline typed::union_pw_aff, Anonymous> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_aff, Anonymous> subtract_domain(const typed::union_set> &uset) const; + inline typed::pw_aff, Anonymous> subtract_domain(const typed::basic_set> &set) const; + inline typed::pw_aff, Anonymous> subtract_domain(const typed::point> &set) const; + inline typed::multi_pw_aff, Anonymous> to_multi_pw_aff() const; + inline typed::union_pw_aff, Anonymous> to_union_pw_aff() const; + inline typed::union_pw_multi_aff, Anonymous> to_union_pw_multi_aff() const; + inline typed::multi_pw_aff, Anonymous> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, Anonymous> union_add(const typed::multi_pw_aff, Anonymous> &mpa2) const; + inline typed::multi_union_pw_aff, Anonymous> union_add(const typed::multi_union_pw_aff, Anonymous> &mupa2) const; + inline typed::pw_aff, Anonymous> union_add(const typed::pw_aff, Anonymous> &pwaff2) const; + inline typed::pw_multi_aff, Anonymous> union_add(const typed::pw_multi_aff, Anonymous> &pma2) const; + inline typed::union_pw_aff, Anonymous> union_add(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> union_add(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::pw_aff, Anonymous> union_add(const typed::aff, Anonymous> &pwaff2) const; +}; + +template <> +struct pw_aff_list : public isl::pw_aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_aff_list() = default; + pw_aff_list(const isl::pw_aff_list &obj) : isl::pw_aff_list(obj) {} + static pw_aff_list from(const isl::pw_aff_list &obj) { + return pw_aff_list(obj); + } + inline explicit pw_aff_list(const isl::ctx &ctx, int n); + inline explicit pw_aff_list(const typed::pw_aff &el); + inline explicit pw_aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::pw_aff_list add(const typed::pw_aff &el) const; + inline typed::pw_aff_list add(const typed::aff &el) const; + inline typed::pw_aff at(int index) const; + inline typed::pw_aff get_at(int index) const = delete; + inline typed::pw_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::pw_aff)> &follows, const std::function)> &fn) const; + inline typed::pw_aff_list set_at(int index, const typed::pw_aff &el) const; +}; + +template +struct pw_aff_list : public isl::pw_aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_aff_list() = default; + template {}, + bool>::type = true> + pw_aff_list(const pw_aff_list &obj) : isl::pw_aff_list(obj) {} + private: + template {}, bool>::type = true> + pw_aff_list(const base &obj) : isl::pw_aff_list(obj) {} + public: + static pw_aff_list from(const isl::pw_aff_list &obj) { + return pw_aff_list(obj); + } + inline explicit pw_aff_list(const isl::ctx &ctx, int n); + inline explicit pw_aff_list(const typed::pw_aff &el); + inline explicit pw_aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::pw_aff_list add(const typed::pw_aff &el) const; + inline typed::pw_aff_list add(const typed::aff &el) const; + inline typed::pw_aff at(int index) const; + inline typed::pw_aff get_at(int index) const = delete; + inline typed::pw_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::pw_aff)> &follows, const std::function)> &fn) const; + inline typed::pw_aff_list set_at(int index, const typed::pw_aff &el) const; +}; + +template +struct pw_multi_aff : public isl::pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff() = default; + template {}, + bool>::type = true> + pw_multi_aff(const pw_multi_aff &obj) : isl::pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {} + public: + static pw_multi_aff from(const isl::pw_multi_aff &obj) { + return pw_multi_aff(obj); + } + inline /* implicit */ pw_multi_aff(const typed::multi_aff &ma); + inline /* implicit */ pw_multi_aff(const typed::pw_aff &pa); + inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff add(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff add(const typed::pw_aff &pma2) const; + inline typed::pw_multi_aff add_constant(const typed::multi_val &mv) const; + inline typed::pw_multi_aff add_constant(const typed::val &v) const; + inline typed::pw_multi_aff add_constant(long v) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::map as_map() const = delete; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::union_map as_union_map() const = delete; + inline typed::pw_aff at(int pos) const; + inline typed::pw_aff get_at(int pos) const = delete; + inline typed::set<> bind(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff bind_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff coalesce() const; + inline typed::set<> domain() const; + inline typed::pw_multi_aff domain_reverse() const = delete; + inline typed::pw_multi_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::pw_multi_aff gist(const typed::set<> &set) const; + inline typed::union_pw_multi_aff gist(const typed::union_set<> &context) const; + inline typed::pw_multi_aff gist(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff gist(const typed::point<> &set) const; + inline typed::pw_multi_aff gist_params(const typed::set<> &set) const; + inline typed::pw_multi_aff gist_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff identity() const; + template + inline typed::pw_multi_aff insert_domain(const typed::space &domain) const; + inline typed::pw_multi_aff intersect_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_multi_aff intersect_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_multi_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff intersect_domain(const typed::basic_set<> &set) const = delete; + inline typed::pw_multi_aff intersect_domain(const typed::point<> &set) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff intersect_params(const typed::set<> &set) const; + inline typed::pw_multi_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list list() const; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_pw_aff neg() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::multi_aff<> &pma2) const = delete; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_aff<> &pma2) const = delete; + template + inline typed::multi_pw_aff> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_multi_aff> product(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff> product(const typed::pw_aff &pma2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff<> &mpa2) const = delete; + inline typed::pw_multi_aff pullback(const typed::multi_aff<> &ma) const = delete; + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + inline typed::multi_pw_aff range_product(const typed::multi_pw_aff<> &multi2) const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::pw_multi_aff range_product(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::pw_multi_aff range_product(const typed::multi_aff<> &pma2) const = delete; + inline typed::pw_multi_aff range_product(const typed::pw_aff<> &pma2) const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::pw_multi_aff scale(const typed::multi_val &mv) const; + inline typed::pw_multi_aff scale(const typed::val &v) const; + inline typed::pw_multi_aff scale(long v) const; + inline typed::pw_multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::pw_multi_aff scale_down(const typed::val &v) const; + inline typed::pw_multi_aff scale_down(long v) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::pw_multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::pw_multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff sub(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff sub(const typed::pw_aff &pma2) const; + inline typed::pw_multi_aff subtract_domain(const typed::set<> &set) const = delete; + inline typed::union_pw_multi_aff subtract_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_multi_aff subtract_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff subtract_domain(const typed::basic_set<> &set) const = delete; + inline typed::pw_multi_aff subtract_domain(const typed::point<> &set) const = delete; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + template + inline typed::multi_pw_aff unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff union_add(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff union_add(const typed::pw_aff &pma2) const; +}; + +template +struct pw_multi_aff : public isl::pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + pw_multi_aff(const pw_multi_aff &obj) : isl::pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {} + public: + static pw_multi_aff from(const isl::pw_multi_aff &obj) { + return pw_multi_aff(obj); + } + inline /* implicit */ pw_multi_aff(const typed::multi_aff &ma); + inline /* implicit */ pw_multi_aff(const typed::pw_aff &pa); + inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff add(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff add(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff add(const typed::pw_aff &pma2) const; + inline typed::pw_multi_aff add_constant(const typed::multi_val &mv) const; + inline typed::pw_multi_aff add_constant(const typed::val &v) const; + inline typed::pw_multi_aff add_constant(long v) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::map as_map() const; + inline typed::multi_aff as_multi_aff() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const = delete; + inline typed::union_map as_union_map() const; + inline typed::pw_aff at(int pos) const; + inline typed::pw_aff get_at(int pos) const = delete; + inline typed::set bind(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff bind_domain(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff coalesce() const; + inline typed::set domain() const; + inline typed::pw_multi_aff domain_reverse() const = delete; + inline typed::pw_multi_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::pw_multi_aff gist(const typed::set &set) const; + inline typed::union_pw_multi_aff gist(const typed::union_set &context) const; + inline typed::pw_multi_aff gist(const typed::basic_set &set) const; + inline typed::pw_multi_aff gist(const typed::point &set) const; + inline typed::pw_multi_aff gist_params(const typed::set<> &set) const; + inline typed::pw_multi_aff gist_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff identity() const; + inline typed::pw_multi_aff insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff intersect_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff intersect_domain(const typed::basic_set &set) const; + inline typed::pw_multi_aff intersect_domain(const typed::point &set) const; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff intersect_params(const typed::set<> &set) const; + inline typed::pw_multi_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list list() const; + inline typed::multi_pw_aff max(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff min(const typed::multi_pw_aff &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_pw_aff neg() const; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::multi_aff<> &pma2) const = delete; + inline typed::pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_aff<> &pma2) const = delete; + template + inline typed::multi_pw_aff, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_multi_aff, pair> product(const typed::multi_aff &pma2) const; + template + inline typed::pw_multi_aff, pair> product(const typed::pw_aff &pma2) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff &mpa2) const; + template + inline typed::pw_multi_aff pullback(const typed::multi_aff &ma) const; + inline typed::pw_multi_aff pullback(const typed::multi_aff &ma) const; + template + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff &pma2) const; + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const = delete; + inline typed::pw_multi_aff range_factor_range() const = delete; + template + inline typed::multi_pw_aff> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::pw_multi_aff> range_product(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::pw_multi_aff> range_product(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff> range_product(const typed::pw_aff &pma2) const; + inline typed::id get_range_tuple_id() const = delete; + inline typed::pw_multi_aff scale(const typed::multi_val &mv) const; + inline typed::pw_multi_aff scale(const typed::val &v) const; + inline typed::pw_multi_aff scale(long v) const; + inline typed::pw_multi_aff scale_down(const typed::multi_val &mv) const; + inline typed::pw_multi_aff scale_down(const typed::val &v) const; + inline typed::pw_multi_aff scale_down(long v) const; + inline typed::multi_pw_aff set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::pw_multi_aff set_range_tuple(const typed::id &id) const; + template + inline typed::pw_multi_aff set_range_tuple(const std::string &id) const; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::multi_pw_aff sub(const typed::multi_pw_aff &multi2) const; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::pw_multi_aff sub(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff sub(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff sub(const typed::pw_aff &pma2) const; + inline typed::pw_multi_aff subtract_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff subtract_domain(const typed::basic_set &set) const; + inline typed::pw_multi_aff subtract_domain(const typed::point &set) const; + inline typed::multi_pw_aff to_multi_pw_aff() const; + inline typed::union_pw_multi_aff to_union_pw_multi_aff() const; + inline typed::multi_pw_aff unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff union_add(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::pw_multi_aff union_add(const typed::pw_multi_aff &pma2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff union_add(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff union_add(const typed::pw_aff &pma2) const; +}; + +template +struct pw_multi_aff, Range> : public isl::pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + pw_multi_aff(const pw_multi_aff, Arg3> &obj) : isl::pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {} + public: + static pw_multi_aff from(const isl::pw_multi_aff &obj) { + return pw_multi_aff(obj); + } + inline /* implicit */ pw_multi_aff(const typed::multi_aff, Range> &ma); + inline /* implicit */ pw_multi_aff(const typed::pw_aff, Range> &pa); + inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff, Range> add(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_union_pw_aff, Range> add(const typed::multi_union_pw_aff, Range> &multi2) const; + inline typed::pw_multi_aff, Range> add(const typed::pw_multi_aff, Range> &pma2) const; + inline typed::union_pw_multi_aff, Range> add(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::pw_multi_aff, Range> add(const typed::multi_aff, Range> &pma2) const; + inline typed::pw_multi_aff, Range> add(const typed::pw_aff, Range> &pma2) const; + inline typed::pw_multi_aff, Range> add_constant(const typed::multi_val &mv) const; + inline typed::pw_multi_aff, Range> add_constant(const typed::val &v) const; + inline typed::pw_multi_aff, Range> add_constant(long v) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::map, Range> as_map() const; + inline typed::multi_aff, Range> as_multi_aff() const; + inline typed::multi_union_pw_aff, Range> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Range> as_pw_multi_aff() const; + inline typed::set, Range> as_set() const = delete; + inline typed::union_map, Range> as_union_map() const; + inline typed::pw_aff, Anonymous> at(int pos) const; + inline typed::pw_aff, Range> get_at(int pos) const = delete; + inline typed::set> bind(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff bind_domain(const typed::multi_id> &tuple) const; + inline typed::pw_multi_aff bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff, Range> coalesce() const; + inline typed::set> domain() const; + inline typed::pw_multi_aff, Range> domain_reverse() const; + inline typed::pw_multi_aff, Range> drop_unused_params() const; + inline typed::pw_multi_aff, Range> extract_pw_multi_aff(const typed::space, Range> &space) const; + inline typed::pw_multi_aff, Range> gist(const typed::set> &set) const; + inline typed::union_pw_multi_aff, Range> gist(const typed::union_set> &context) const; + inline typed::pw_multi_aff, Range> gist(const typed::basic_set> &set) const; + inline typed::pw_multi_aff, Range> gist(const typed::point> &set) const; + inline typed::pw_multi_aff, Range> gist_params(const typed::set<> &set) const; + inline typed::pw_multi_aff, Range> gist_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff, Range> gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff, Range> identity() const; + inline typed::pw_multi_aff, Range> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff, Range> intersect_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, Range> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, Range> intersect_domain(const typed::union_set> &uset) const; + inline typed::pw_multi_aff, Range> intersect_domain(const typed::basic_set> &set) const; + inline typed::pw_multi_aff, Range> intersect_domain(const typed::point> &set) const; + inline typed::union_pw_multi_aff, Range> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff, Range> intersect_params(const typed::set<> &set) const; + inline typed::pw_multi_aff, Range> intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff, Range> intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list, Anonymous> list() const; + inline typed::multi_pw_aff, Range> max(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_val max_multi_val() const; + inline typed::multi_pw_aff, Range> min(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_val min_multi_val() const; + inline typed::multi_pw_aff, Range> neg() const; + template + inline typed::pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::multi_aff &pma2) const; + template + inline typed::pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::pw_aff &pma2) const; + template + inline typed::multi_pw_aff, Arg2>, pair> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Arg2>, pair> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_multi_aff, Arg2>, pair> product(const typed::multi_aff &pma2) const; + template + inline typed::pw_multi_aff, Arg2>, pair> product(const typed::pw_aff &pma2) const; + template + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_pw_aff pullback(const typed::multi_pw_aff> &mpa2) const; + template + inline typed::pw_multi_aff pullback(const typed::multi_aff> &ma) const; + inline typed::pw_multi_aff pullback(const typed::multi_aff> &ma) const; + template + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff> &pma2) const; + inline typed::pw_multi_aff pullback(const typed::pw_multi_aff> &pma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::pw_multi_aff_list, Range> pw_multi_aff_list() const; + inline typed::pw_multi_aff, Range> range_factor_domain() const = delete; + inline typed::pw_multi_aff, Range> range_factor_range() const = delete; + template + inline typed::multi_pw_aff, pair> range_product(const typed::multi_pw_aff, Arg2> &multi2) const; + template + inline typed::multi_union_pw_aff, pair> range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const; + template + inline typed::pw_multi_aff, pair> range_product(const typed::pw_multi_aff, Arg2> &pma2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const; + template + inline typed::pw_multi_aff, pair> range_product(const typed::multi_aff, Arg2> &pma2) const; + inline typed::pw_multi_aff, pair> range_product(const typed::pw_aff, Anonymous> &pma2) const; + inline typed::id, Range> get_range_tuple_id() const = delete; + inline typed::pw_multi_aff, Range> scale(const typed::multi_val &mv) const; + inline typed::pw_multi_aff, Range> scale(const typed::val &v) const; + inline typed::pw_multi_aff, Range> scale(long v) const; + inline typed::pw_multi_aff, Range> scale_down(const typed::multi_val &mv) const; + inline typed::pw_multi_aff, Range> scale_down(const typed::val &v) const; + inline typed::pw_multi_aff, Range> scale_down(long v) const; + inline typed::multi_pw_aff, Range> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, Range> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + template + inline typed::pw_multi_aff, Arg1> set_range_tuple(const typed::id &id) const; + template + inline typed::pw_multi_aff, Arg1> set_range_tuple(const std::string &id) const; + inline typed::space, Range> space() const; + inline typed::space, Range> get_space() const = delete; + inline typed::multi_pw_aff, Range> sub(const typed::multi_pw_aff, Range> &multi2) const; + inline typed::multi_union_pw_aff, Range> sub(const typed::multi_union_pw_aff, Range> &multi2) const; + inline typed::pw_multi_aff, Range> sub(const typed::pw_multi_aff, Range> &pma2) const; + inline typed::union_pw_multi_aff, Range> sub(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::pw_multi_aff, Range> sub(const typed::multi_aff, Range> &pma2) const; + inline typed::pw_multi_aff, Range> sub(const typed::pw_aff, Range> &pma2) const; + inline typed::pw_multi_aff, Range> subtract_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, Range> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, Range> subtract_domain(const typed::union_set> &uset) const; + inline typed::pw_multi_aff, Range> subtract_domain(const typed::basic_set> &set) const; + inline typed::pw_multi_aff, Range> subtract_domain(const typed::point> &set) const; + inline typed::multi_pw_aff, Range> to_multi_pw_aff() const; + inline typed::union_pw_multi_aff, Range> to_union_pw_multi_aff() const; + inline typed::multi_pw_aff, Range> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, Range> union_add(const typed::multi_pw_aff, Range> &mpa2) const; + inline typed::multi_union_pw_aff, Range> union_add(const typed::multi_union_pw_aff, Range> &mupa2) const; + inline typed::pw_multi_aff, Range> union_add(const typed::pw_multi_aff, Range> &pma2) const; + inline typed::union_pw_multi_aff, Range> union_add(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::pw_multi_aff, Range> union_add(const typed::multi_aff, Range> &pma2) const; + inline typed::pw_multi_aff, Range> union_add(const typed::pw_aff, Range> &pma2) const; +}; + +template +struct pw_multi_aff> : public isl::pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + pw_multi_aff(const pw_multi_aff> &obj) : isl::pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {} + public: + static pw_multi_aff from(const isl::pw_multi_aff &obj) { + return pw_multi_aff(obj); + } + inline /* implicit */ pw_multi_aff(const typed::multi_aff> &ma); + inline /* implicit */ pw_multi_aff(const typed::pw_aff> &pa); + inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff> add(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_union_pw_aff> add(const typed::multi_union_pw_aff> &multi2) const; + inline typed::pw_multi_aff> add(const typed::pw_multi_aff> &pma2) const; + inline typed::union_pw_multi_aff> add(const typed::union_pw_multi_aff> &upma2) const; + inline typed::pw_multi_aff> add(const typed::multi_aff> &pma2) const; + inline typed::pw_multi_aff> add(const typed::pw_aff> &pma2) const; + inline typed::pw_multi_aff> add_constant(const typed::multi_val> &mv) const; + inline typed::pw_multi_aff> add_constant(const typed::val> &v) const; + inline typed::pw_multi_aff> add_constant(long v) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff, Arg3> &upma2) const; + inline typed::map> as_map() const; + inline typed::multi_aff> as_multi_aff() const; + inline typed::multi_union_pw_aff> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::set> as_set() const = delete; + inline typed::union_map> as_union_map() const; + inline typed::pw_aff at(int pos) const; + inline typed::pw_aff> get_at(int pos) const = delete; + inline typed::set bind(const typed::multi_id> &tuple) const; + inline typed::pw_multi_aff> bind_domain(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff> bind_domain_wrapped_domain(const typed::multi_id<> &tuple) const = delete; + inline typed::pw_multi_aff> coalesce() const; + inline typed::set domain() const; + inline typed::pw_multi_aff> domain_reverse() const = delete; + inline typed::pw_multi_aff> drop_unused_params() const; + inline typed::pw_multi_aff> extract_pw_multi_aff(const typed::space> &space) const; + inline typed::pw_multi_aff> gist(const typed::set &set) const; + inline typed::union_pw_multi_aff> gist(const typed::union_set &context) const; + inline typed::pw_multi_aff> gist(const typed::basic_set &set) const; + inline typed::pw_multi_aff> gist(const typed::point &set) const; + inline typed::pw_multi_aff> gist_params(const typed::set<> &set) const; + inline typed::pw_multi_aff> gist_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff> gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff> identity() const; + inline typed::pw_multi_aff> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff> intersect_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff> intersect_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff> intersect_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff> intersect_domain(const typed::basic_set &set) const; + inline typed::pw_multi_aff> intersect_domain(const typed::point &set) const; + inline typed::union_pw_multi_aff> intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::pw_multi_aff> intersect_params(const typed::set<> &set) const; + inline typed::pw_multi_aff> intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff> intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list list() const; + inline typed::multi_pw_aff> max(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_val> max_multi_val() const; + inline typed::multi_pw_aff> min(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_val> min_multi_val() const; + inline typed::multi_pw_aff> neg() const; + inline typed::pw_multi_aff> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &pma2) const = delete; + inline typed::union_pw_multi_aff> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::pw_multi_aff> preimage_domain_wrapped_domain(const typed::multi_aff<> &pma2) const = delete; + inline typed::pw_multi_aff> preimage_domain_wrapped_domain(const typed::pw_aff<> &pma2) const = delete; + template + inline typed::multi_pw_aff, pair, Arg3>> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, pair, Arg3>> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_multi_aff, pair, Arg3>> product(const typed::multi_aff &pma2) const; + template + inline typed::pw_multi_aff, pair, Anonymous>> product(const typed::pw_aff &pma2) const; + template + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff &mpa2) const; + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff &mpa2) const; + template + inline typed::pw_multi_aff> pullback(const typed::multi_aff &ma) const; + inline typed::pw_multi_aff> pullback(const typed::multi_aff &ma) const; + template + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff &pma2) const; + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::pw_multi_aff_list> pw_multi_aff_list() const; + inline typed::pw_multi_aff range_factor_domain() const; + inline typed::pw_multi_aff range_factor_range() const; + template + inline typed::multi_pw_aff, Arg3>> range_product(const typed::multi_pw_aff &multi2) const; + template + inline typed::multi_union_pw_aff, Arg3>> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Arg3>> range_product(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, Arg3>> range_product(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::pw_multi_aff, Arg3>> range_product(const typed::multi_aff &pma2) const; + inline typed::pw_multi_aff, Anonymous>> range_product(const typed::pw_aff &pma2) const; + inline typed::id> get_range_tuple_id() const = delete; + inline typed::pw_multi_aff> scale(const typed::multi_val> &mv) const; + inline typed::pw_multi_aff> scale(const typed::val> &v) const; + inline typed::pw_multi_aff> scale(long v) const; + inline typed::pw_multi_aff> scale_down(const typed::multi_val> &mv) const; + inline typed::pw_multi_aff> scale_down(const typed::val> &v) const; + inline typed::pw_multi_aff> scale_down(long v) const; + inline typed::multi_pw_aff> set_at(int pos, const typed::pw_aff &el) const; + inline typed::multi_union_pw_aff> set_at(int pos, const typed::union_pw_aff &el) const; + inline typed::pw_multi_aff> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::pw_multi_aff> set_range_tuple(const std::string &id) const = delete; + inline typed::space> space() const; + inline typed::space> get_space() const = delete; + inline typed::multi_pw_aff> sub(const typed::multi_pw_aff> &multi2) const; + inline typed::multi_union_pw_aff> sub(const typed::multi_union_pw_aff> &multi2) const; + inline typed::pw_multi_aff> sub(const typed::pw_multi_aff> &pma2) const; + inline typed::union_pw_multi_aff> sub(const typed::union_pw_multi_aff> &upma2) const; + inline typed::pw_multi_aff> sub(const typed::multi_aff> &pma2) const; + inline typed::pw_multi_aff> sub(const typed::pw_aff> &pma2) const; + inline typed::pw_multi_aff> subtract_domain(const typed::set &set) const; + inline typed::union_pw_multi_aff> subtract_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff> subtract_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff> subtract_domain(const typed::basic_set &set) const; + inline typed::pw_multi_aff> subtract_domain(const typed::point &set) const; + inline typed::multi_pw_aff> to_multi_pw_aff() const; + inline typed::union_pw_multi_aff> to_union_pw_multi_aff() const; + inline typed::multi_pw_aff> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff> union_add(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_union_pw_aff> union_add(const typed::multi_union_pw_aff> &mupa2) const; + inline typed::pw_multi_aff> union_add(const typed::pw_multi_aff> &pma2) const; + inline typed::union_pw_multi_aff> union_add(const typed::union_pw_multi_aff> &upma2) const; + inline typed::pw_multi_aff> union_add(const typed::multi_aff> &pma2) const; + inline typed::pw_multi_aff> union_add(const typed::pw_aff> &pma2) const; +}; + +template +struct pw_multi_aff, pair> : public isl::pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + pw_multi_aff(const pw_multi_aff, pair> &obj) : isl::pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff(const base &obj) : isl::pw_multi_aff(obj) {} + public: + static pw_multi_aff from(const isl::pw_multi_aff &obj) { + return pw_multi_aff(obj); + } + inline /* implicit */ pw_multi_aff(const typed::multi_aff, pair> &ma); + inline /* implicit */ pw_multi_aff(const typed::pw_aff, pair> &pa); + inline explicit pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_pw_aff, pair> add(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_union_pw_aff, pair> add(const typed::multi_union_pw_aff, pair> &multi2) const; + inline typed::pw_multi_aff, pair> add(const typed::pw_multi_aff, pair> &pma2) const; + inline typed::union_pw_multi_aff, pair> add(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::pw_multi_aff, pair> add(const typed::multi_aff, pair> &pma2) const; + inline typed::pw_multi_aff, pair> add(const typed::pw_aff, pair> &pma2) const; + inline typed::pw_multi_aff, pair> add_constant(const typed::multi_val> &mv) const; + inline typed::pw_multi_aff, pair> add_constant(const typed::val> &v) const; + inline typed::pw_multi_aff, pair> add_constant(long v) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::union_pw_multi_aff, Arg2> &upma2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_aff, pair> as_multi_aff() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::set, pair> as_set() const = delete; + inline typed::union_map, pair> as_union_map() const; + inline typed::pw_aff, Anonymous> at(int pos) const; + inline typed::pw_aff, pair> get_at(int pos) const = delete; + inline typed::set> bind(const typed::multi_id> &tuple) const; + inline typed::pw_multi_aff> bind_domain(const typed::multi_id> &tuple) const; + inline typed::pw_multi_aff> bind_domain_wrapped_domain(const typed::multi_id &tuple) const; + inline typed::pw_multi_aff, pair> coalesce() const; + inline typed::set> domain() const; + inline typed::pw_multi_aff, pair> domain_reverse() const; + inline typed::pw_multi_aff, pair> drop_unused_params() const; + inline typed::pw_multi_aff, pair> extract_pw_multi_aff(const typed::space, pair> &space) const; + inline typed::pw_multi_aff, pair> gist(const typed::set> &set) const; + inline typed::union_pw_multi_aff, pair> gist(const typed::union_set> &context) const; + inline typed::pw_multi_aff, pair> gist(const typed::basic_set> &set) const; + inline typed::pw_multi_aff, pair> gist(const typed::point> &set) const; + inline typed::pw_multi_aff, pair> gist_params(const typed::set<> &set) const; + inline typed::pw_multi_aff, pair> gist_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff, pair> gist_params(const typed::point<> &set) const; + inline typed::multi_pw_aff, pair> identity() const; + inline typed::pw_multi_aff, pair> insert_domain(const typed::space<> &domain) const = delete; + inline typed::pw_multi_aff, pair> intersect_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::pw_multi_aff, pair> intersect_domain(const typed::basic_set> &set) const; + inline typed::pw_multi_aff, pair> intersect_domain(const typed::point> &set) const; + inline typed::union_pw_multi_aff, pair> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::pw_multi_aff, pair> intersect_params(const typed::set<> &set) const; + inline typed::pw_multi_aff, pair> intersect_params(const typed::basic_set<> &set) const; + inline typed::pw_multi_aff, pair> intersect_params(const typed::point<> &set) const; + inline typed::pw_aff_list, Anonymous> list() const; + inline typed::multi_pw_aff, pair> max(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_val> max_multi_val() const; + inline typed::multi_pw_aff, pair> min(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_val> min_multi_val() const; + inline typed::multi_pw_aff, pair> neg() const; + template + inline typed::pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const; + template + inline typed::union_pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::multi_aff &pma2) const; + template + inline typed::pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::pw_aff &pma2) const; + template + inline typed::multi_pw_aff, Domain2>, pair, Arg2>> product(const typed::multi_pw_aff &multi2) const; + template + inline typed::pw_multi_aff, Domain2>, pair, Arg2>> product(const typed::pw_multi_aff &pma2) const; + template + inline typed::pw_multi_aff, Domain2>, pair, Arg2>> product(const typed::multi_aff &pma2) const; + template + inline typed::pw_multi_aff, Domain2>, pair, Anonymous>> product(const typed::pw_aff &pma2) const; + template + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff> &mpa2) const; + inline typed::multi_pw_aff> pullback(const typed::multi_pw_aff> &mpa2) const; + template + inline typed::pw_multi_aff> pullback(const typed::multi_aff> &ma) const; + inline typed::pw_multi_aff> pullback(const typed::multi_aff> &ma) const; + template + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff> &pma2) const; + inline typed::pw_multi_aff> pullback(const typed::pw_multi_aff> &pma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::pw_multi_aff_list, pair> pw_multi_aff_list() const; + inline typed::pw_multi_aff, Range> range_factor_domain() const; + inline typed::pw_multi_aff, Range2> range_factor_range() const; + template + inline typed::multi_pw_aff, pair, Arg2>> range_product(const typed::multi_pw_aff, Arg2> &multi2) const; + template + inline typed::multi_union_pw_aff, pair, Arg2>> range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const; + template + inline typed::pw_multi_aff, pair, Arg2>> range_product(const typed::pw_multi_aff, Arg2> &pma2) const; + template + inline typed::union_pw_multi_aff, pair, Arg2>> range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const; + template + inline typed::pw_multi_aff, pair, Arg2>> range_product(const typed::multi_aff, Arg2> &pma2) const; + inline typed::pw_multi_aff, pair, Anonymous>> range_product(const typed::pw_aff, Anonymous> &pma2) const; + inline typed::id, pair> get_range_tuple_id() const = delete; + inline typed::pw_multi_aff, pair> scale(const typed::multi_val> &mv) const; + inline typed::pw_multi_aff, pair> scale(const typed::val> &v) const; + inline typed::pw_multi_aff, pair> scale(long v) const; + inline typed::pw_multi_aff, pair> scale_down(const typed::multi_val> &mv) const; + inline typed::pw_multi_aff, pair> scale_down(const typed::val> &v) const; + inline typed::pw_multi_aff, pair> scale_down(long v) const; + inline typed::multi_pw_aff, pair> set_at(int pos, const typed::pw_aff, Anonymous> &el) const; + inline typed::multi_union_pw_aff, pair> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + inline typed::pw_multi_aff, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::pw_multi_aff, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, pair> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::multi_pw_aff, pair> sub(const typed::multi_pw_aff, pair> &multi2) const; + inline typed::multi_union_pw_aff, pair> sub(const typed::multi_union_pw_aff, pair> &multi2) const; + inline typed::pw_multi_aff, pair> sub(const typed::pw_multi_aff, pair> &pma2) const; + inline typed::union_pw_multi_aff, pair> sub(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::pw_multi_aff, pair> sub(const typed::multi_aff, pair> &pma2) const; + inline typed::pw_multi_aff, pair> sub(const typed::pw_aff, pair> &pma2) const; + inline typed::pw_multi_aff, pair> subtract_domain(const typed::set> &set) const; + inline typed::union_pw_multi_aff, pair> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, pair> subtract_domain(const typed::union_set> &uset) const; + inline typed::pw_multi_aff, pair> subtract_domain(const typed::basic_set> &set) const; + inline typed::pw_multi_aff, pair> subtract_domain(const typed::point> &set) const; + inline typed::multi_pw_aff, pair> to_multi_pw_aff() const; + inline typed::union_pw_multi_aff, pair> to_union_pw_multi_aff() const; + inline typed::multi_pw_aff, pair> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::multi_pw_aff, pair> union_add(const typed::multi_pw_aff, pair> &mpa2) const; + inline typed::multi_union_pw_aff, pair> union_add(const typed::multi_union_pw_aff, pair> &mupa2) const; + inline typed::pw_multi_aff, pair> union_add(const typed::pw_multi_aff, pair> &pma2) const; + inline typed::union_pw_multi_aff, pair> union_add(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::pw_multi_aff, pair> union_add(const typed::multi_aff, pair> &pma2) const; + inline typed::pw_multi_aff, pair> union_add(const typed::pw_aff, pair> &pma2) const; +}; + +template +struct pw_multi_aff_list : public isl::pw_multi_aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff_list() = default; + template {}, + bool>::type = true> + pw_multi_aff_list(const pw_multi_aff_list &obj) : isl::pw_multi_aff_list(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff_list(const base &obj) : isl::pw_multi_aff_list(obj) {} + public: + static pw_multi_aff_list from(const isl::pw_multi_aff_list &obj) { + return pw_multi_aff_list(obj); + } + inline explicit pw_multi_aff_list(const isl::ctx &ctx, int n); + inline explicit pw_multi_aff_list(const typed::pw_multi_aff &el); + inline explicit pw_multi_aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::pw_multi_aff_list add(const typed::pw_multi_aff &el) const; + inline typed::pw_multi_aff_list add(const typed::multi_aff &el) const; + inline typed::pw_multi_aff_list add(const typed::pw_aff &el) const; + inline typed::pw_multi_aff at(int index) const; + inline typed::pw_multi_aff get_at(int index) const = delete; + inline typed::pw_multi_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::pw_multi_aff)> &follows, const std::function)> &fn) const; + inline typed::pw_multi_aff_list set_at(int index, const typed::pw_multi_aff &el) const; +}; + +template +struct pw_multi_aff_list : public isl::pw_multi_aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + pw_multi_aff_list() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + pw_multi_aff_list(const pw_multi_aff_list &obj) : isl::pw_multi_aff_list(obj) {} + private: + template {}, bool>::type = true> + pw_multi_aff_list(const base &obj) : isl::pw_multi_aff_list(obj) {} + public: + static pw_multi_aff_list from(const isl::pw_multi_aff_list &obj) { + return pw_multi_aff_list(obj); + } + inline explicit pw_multi_aff_list(const isl::ctx &ctx, int n); + inline explicit pw_multi_aff_list(const typed::pw_multi_aff &el); + inline explicit pw_multi_aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::pw_multi_aff_list add(const typed::pw_multi_aff &el) const; + inline typed::pw_multi_aff_list add(const typed::multi_aff &el) const; + inline typed::pw_multi_aff_list add(const typed::pw_aff &el) const; + inline typed::pw_multi_aff at(int index) const; + inline typed::pw_multi_aff get_at(int index) const = delete; + inline typed::pw_multi_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::pw_multi_aff)> &follows, const std::function)> &fn) const; + inline typed::pw_multi_aff_list set_at(int index, const typed::pw_multi_aff &el) const; +}; + +template <> +struct set<> : public isl::set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + set() = default; + private: + template {}, bool>::type = true> + set(const base &obj) : isl::set(obj) {} + public: + static set from(const isl::set &obj) { + return set(obj); + } + inline /* implicit */ set(const typed::basic_set<> &bset); + inline /* implicit */ set(const typed::point<> &pnt); + inline explicit set(const isl::ctx &ctx, const std::string &str); + inline typed::set<> apply(const typed::map<> &map) const = delete; + inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete; + inline typed::set<> apply(const typed::basic_map<> &map) const = delete; + inline typed::pw_multi_aff<> as_pw_multi_aff() const = delete; + inline typed::set<> as_set() const = delete; + inline typed::set<> bind(const typed::multi_id<> &tuple) const = delete; + inline typed::set<> coalesce() const; + inline typed::set<> detect_equalities() const; + inline typed::set<> drop_unused_params() const; + inline bool every_set(const std::function)> &test) const; + inline typed::set<> extract_set(const typed::space<> &space) const; + inline void foreach_basic_set(const std::function)> &fn) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::set<> gist(const typed::set<> &context) const; + inline typed::union_set<> gist(const typed::union_set<> &context) const; + inline typed::set<> gist(const typed::basic_set<> &context) const; + inline typed::set<> gist(const typed::point<> &context) const; + inline typed::set<> gist_params(const typed::set<> &context) const = delete; + inline typed::set<> gist_params(const typed::basic_set<> &context) const = delete; + inline typed::set<> gist_params(const typed::point<> &context) const = delete; + inline typed::map<> identity() const = delete; + inline typed::pw_aff indicator_function() const; + inline typed::map<> insert_domain(const typed::space<> &domain) const = delete; + inline typed::set<> intersect(const typed::set<> &set2) const; + inline typed::union_set<> intersect(const typed::union_set<> &uset2) const; + inline typed::set<> intersect(const typed::basic_set<> &set2) const; + inline typed::set<> intersect(const typed::point<> &set2) const; + inline typed::set<> intersect_params(const typed::set<> ¶ms) const = delete; + inline typed::set<> intersect_params(const typed::basic_set<> ¶ms) const = delete; + inline typed::set<> intersect_params(const typed::point<> ¶ms) const = delete; + inline typed::fixed_box<> lattice_tile() const = delete; + inline typed::fixed_box<> get_lattice_tile() const = delete; + inline typed::set<> lexmax() const = delete; + inline typed::pw_multi_aff<> lexmax_pw_multi_aff() const = delete; + inline typed::set<> lexmin() const = delete; + inline typed::pw_multi_aff<> lexmin_pw_multi_aff() const = delete; + inline typed::set<> lower_bound(const typed::multi_pw_aff<> &lower) const = delete; + inline typed::set<> lower_bound(const typed::multi_val<> &lower) const = delete; + inline typed::multi_pw_aff<> max_multi_pw_aff() const = delete; + inline typed::val<> max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff<> min_multi_pw_aff() const = delete; + inline typed::val<> min_val(const typed::aff<> &obj) const = delete; + inline typed::pw_aff param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline typed::set<> params() const = delete; + inline typed::multi_val<> plain_multi_val_if_fixed() const = delete; + inline typed::multi_val<> get_plain_multi_val_if_fixed() const = delete; + inline typed::set<> preimage(const typed::multi_aff<> &ma) const = delete; + inline typed::set<> preimage(const typed::multi_pw_aff<> &mpa) const = delete; + inline typed::set<> preimage(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::set<> product(const typed::set<> &set2) const = delete; + inline typed::set<> product(const typed::basic_set<> &set2) const = delete; + inline typed::set<> product(const typed::point<> &set2) const = delete; + inline typed::set<> project_out_all_params() const; + inline typed::set<> project_out_param(const typed::id &id) const; + inline typed::set<> project_out_param(const std::string &id) const; + inline typed::set<> project_out_param(const typed::id_list &list) const; + inline typed::pw_aff pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list<> set_list() const; + inline typed::fixed_box<> simple_fixed_box_hull() const = delete; + inline typed::fixed_box<> get_simple_fixed_box_hull() const = delete; + inline typed::space<> space() const; + inline typed::space<> get_space() const = delete; + inline typed::val<> get_stride(int pos) const = delete; + inline typed::set<> subtract(const typed::set<> &set2) const; + inline typed::union_set<> subtract(const typed::union_set<> &uset2) const; + inline typed::set<> subtract(const typed::basic_set<> &set2) const; + inline typed::set<> subtract(const typed::point<> &set2) const; + inline typed::union_set<> to_union_set() const; + inline typed::map<> translation() const = delete; + template + inline typed::set unbind_params(const typed::multi_id &tuple) const; + inline typed::map<> unbind_params_insert_domain(const typed::multi_id<> &domain) const = delete; + inline typed::set<> unite(const typed::set<> &set2) const; + inline typed::union_set<> unite(const typed::union_set<> &uset2) const; + inline typed::set<> unite(const typed::basic_set<> &set2) const; + inline typed::set<> unite(const typed::point<> &set2) const; + static inline typed::set<> universe(const typed::space<> &space); + inline typed::map<> unwrap() const = delete; + inline typed::set<> upper_bound(const typed::multi_pw_aff<> &upper) const = delete; + inline typed::set<> upper_bound(const typed::multi_val<> &upper) const = delete; + inline typed::set<> wrapped_reverse() const = delete; +}; + +template +struct set : public isl::set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + set() = default; + template {}, + bool>::type = true> + set(const set &obj) : isl::set(obj) {} + private: + template {}, bool>::type = true> + set(const base &obj) : isl::set(obj) {} + public: + static set from(const isl::set &obj) { + return set(obj); + } + inline /* implicit */ set(const typed::basic_set &bset); + inline /* implicit */ set(const typed::point &pnt); + inline explicit set(const isl::ctx &ctx, const std::string &str); + template + inline typed::set apply(const typed::map &map) const; + template + inline typed::union_set apply(const typed::union_map &umap) const; + template + inline typed::set apply(const typed::basic_map &map) const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::set as_set() const; + inline typed::set<> bind(const typed::multi_id &tuple) const; + inline typed::set coalesce() const; + inline typed::set detect_equalities() const; + inline typed::set drop_unused_params() const; + inline bool every_set(const std::function)> &test) const; + inline typed::set extract_set(const typed::space &space) const; + inline void foreach_basic_set(const std::function)> &fn) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::set gist(const typed::set &context) const; + inline typed::union_set gist(const typed::union_set &context) const; + inline typed::set gist(const typed::basic_set &context) const; + inline typed::set gist(const typed::point &context) const; + inline typed::set gist_params(const typed::set<> &context) const; + inline typed::set gist_params(const typed::basic_set<> &context) const; + inline typed::set gist_params(const typed::point<> &context) const; + inline typed::map identity() const; + inline typed::pw_aff indicator_function() const; + template + inline typed::map insert_domain(const typed::space &domain) const; + inline typed::set intersect(const typed::set &set2) const; + inline typed::union_set intersect(const typed::union_set &uset2) const; + inline typed::set intersect(const typed::basic_set &set2) const; + inline typed::set intersect(const typed::point &set2) const; + inline typed::set intersect_params(const typed::set<> ¶ms) const; + inline typed::set intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::set intersect_params(const typed::point<> ¶ms) const; + inline typed::fixed_box lattice_tile() const; + inline typed::fixed_box get_lattice_tile() const = delete; + inline typed::set lexmax() const; + inline typed::pw_multi_aff lexmax_pw_multi_aff() const; + inline typed::set lexmin() const; + inline typed::pw_multi_aff lexmin_pw_multi_aff() const; + inline typed::set lower_bound(const typed::multi_pw_aff &lower) const; + inline typed::set lower_bound(const typed::multi_val &lower) const; + inline typed::multi_pw_aff max_multi_pw_aff() const; + inline typed::val max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff min_multi_pw_aff() const; + inline typed::val min_val(const typed::aff<> &obj) const = delete; + inline typed::pw_aff param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff param_pw_aff_on_domain(const std::string &id) const; + inline typed::set<> params() const; + inline typed::multi_val plain_multi_val_if_fixed() const; + inline typed::multi_val get_plain_multi_val_if_fixed() const = delete; + template + inline typed::set preimage(const typed::multi_aff &ma) const; + template + inline typed::set preimage(const typed::multi_pw_aff &mpa) const; + template + inline typed::set preimage(const typed::pw_multi_aff &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff &upma) const; + template + inline typed::set> product(const typed::set &set2) const; + template + inline typed::set> product(const typed::basic_set &set2) const; + template + inline typed::set> product(const typed::point &set2) const; + inline typed::set project_out_all_params() const; + inline typed::set project_out_param(const typed::id &id) const; + inline typed::set project_out_param(const std::string &id) const; + inline typed::set project_out_param(const typed::id_list &list) const; + inline typed::pw_aff pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list set_list() const; + inline typed::fixed_box simple_fixed_box_hull() const; + inline typed::fixed_box get_simple_fixed_box_hull() const = delete; + inline typed::space space() const; + inline typed::space get_space() const = delete; + inline typed::val get_stride(int pos) const = delete; + inline typed::set subtract(const typed::set &set2) const; + inline typed::union_set subtract(const typed::union_set &uset2) const; + inline typed::set subtract(const typed::basic_set &set2) const; + inline typed::set subtract(const typed::point &set2) const; + inline typed::union_set to_union_set() const; + inline typed::map translation() const; + inline typed::set unbind_params(const typed::multi_id<> &tuple) const = delete; + template + inline typed::map unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::set unite(const typed::set &set2) const; + inline typed::union_set unite(const typed::union_set &uset2) const; + inline typed::set unite(const typed::basic_set &set2) const; + inline typed::set unite(const typed::point &set2) const; + static inline typed::set universe(const typed::space &space); + inline typed::map unwrap() const = delete; + inline typed::set upper_bound(const typed::multi_pw_aff &upper) const; + inline typed::set upper_bound(const typed::multi_val &upper) const; + inline typed::set wrapped_reverse() const = delete; +}; + +template +struct set> : public isl::set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + set() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + set(const set> &obj) : isl::set(obj) {} + private: + template {}, bool>::type = true> + set(const base &obj) : isl::set(obj) {} + public: + static set from(const isl::set &obj) { + return set(obj); + } + inline /* implicit */ set(const typed::basic_set> &bset); + inline /* implicit */ set(const typed::point> &pnt); + inline explicit set(const isl::ctx &ctx, const std::string &str); + template + inline typed::set apply(const typed::map, Arg2> &map) const; + template + inline typed::union_set apply(const typed::union_map, Arg2> &umap) const; + template + inline typed::set apply(const typed::basic_map, Arg2> &map) const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::set> as_set() const; + inline typed::set<> bind(const typed::multi_id> &tuple) const; + inline typed::set> coalesce() const; + inline typed::set> detect_equalities() const; + inline typed::set> drop_unused_params() const; + inline bool every_set(const std::function>)> &test) const; + inline typed::set> extract_set(const typed::space> &space) const; + inline void foreach_basic_set(const std::function>)> &fn) const; + inline void foreach_point(const std::function>)> &fn) const; + inline void foreach_set(const std::function>)> &fn) const; + inline typed::set> gist(const typed::set> &context) const; + inline typed::union_set> gist(const typed::union_set> &context) const; + inline typed::set> gist(const typed::basic_set> &context) const; + inline typed::set> gist(const typed::point> &context) const; + inline typed::set> gist_params(const typed::set<> &context) const; + inline typed::set> gist_params(const typed::basic_set<> &context) const; + inline typed::set> gist_params(const typed::point<> &context) const; + inline typed::map, pair> identity() const; + inline typed::pw_aff, Anonymous> indicator_function() const; + template + inline typed::map> insert_domain(const typed::space &domain) const; + inline typed::set> intersect(const typed::set> &set2) const; + inline typed::union_set> intersect(const typed::union_set> &uset2) const; + inline typed::set> intersect(const typed::basic_set> &set2) const; + inline typed::set> intersect(const typed::point> &set2) const; + inline typed::set> intersect_params(const typed::set<> ¶ms) const; + inline typed::set> intersect_params(const typed::basic_set<> ¶ms) const; + inline typed::set> intersect_params(const typed::point<> ¶ms) const; + inline typed::fixed_box> lattice_tile() const; + inline typed::fixed_box> get_lattice_tile() const = delete; + inline typed::set> lexmax() const; + inline typed::pw_multi_aff> lexmax_pw_multi_aff() const; + inline typed::set> lexmin() const; + inline typed::pw_multi_aff> lexmin_pw_multi_aff() const; + inline typed::set> lower_bound(const typed::multi_pw_aff> &lower) const; + inline typed::set> lower_bound(const typed::multi_val> &lower) const; + inline typed::multi_pw_aff> max_multi_pw_aff() const; + inline typed::val> max_val(const typed::aff<> &obj) const = delete; + inline typed::multi_pw_aff> min_multi_pw_aff() const; + inline typed::val> min_val(const typed::aff<> &obj) const = delete; + inline typed::pw_aff, Anonymous> param_pw_aff_on_domain(const typed::id &id) const; + inline typed::pw_aff, Anonymous> param_pw_aff_on_domain(const std::string &id) const; + inline typed::set<> params() const; + inline typed::multi_val> plain_multi_val_if_fixed() const; + inline typed::multi_val> get_plain_multi_val_if_fixed() const = delete; + template + inline typed::set preimage(const typed::multi_aff> &ma) const; + template + inline typed::set preimage(const typed::multi_pw_aff> &mpa) const; + template + inline typed::set preimage(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::set, Arg2>> product(const typed::set &set2) const; + template + inline typed::set, Arg2>> product(const typed::basic_set &set2) const; + template + inline typed::set, Arg2>> product(const typed::point &set2) const; + inline typed::set> project_out_all_params() const; + inline typed::set> project_out_param(const typed::id &id) const; + inline typed::set> project_out_param(const std::string &id) const; + inline typed::set> project_out_param(const typed::id_list &list) const; + inline typed::pw_aff, Anonymous> pw_aff_on_domain(const typed::val &v) const; + inline typed::pw_aff, Anonymous> pw_aff_on_domain(long v) const; + template + inline typed::pw_multi_aff, Arg2> pw_multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::set_list> set_list() const; + inline typed::fixed_box> simple_fixed_box_hull() const; + inline typed::fixed_box> get_simple_fixed_box_hull() const = delete; + inline typed::space> space() const; + inline typed::space> get_space() const = delete; + inline typed::val> get_stride(int pos) const = delete; + inline typed::set> subtract(const typed::set> &set2) const; + inline typed::union_set> subtract(const typed::union_set> &uset2) const; + inline typed::set> subtract(const typed::basic_set> &set2) const; + inline typed::set> subtract(const typed::point> &set2) const; + inline typed::union_set> to_union_set() const; + inline typed::map, pair> translation() const; + inline typed::set> unbind_params(const typed::multi_id<> &tuple) const = delete; + template + inline typed::map> unbind_params_insert_domain(const typed::multi_id &domain) const; + inline typed::set> unite(const typed::set> &set2) const; + inline typed::union_set> unite(const typed::union_set> &uset2) const; + inline typed::set> unite(const typed::basic_set> &set2) const; + inline typed::set> unite(const typed::point> &set2) const; + static inline typed::set> universe(const typed::space> &space); + inline typed::map unwrap() const; + inline typed::set> upper_bound(const typed::multi_pw_aff> &upper) const; + inline typed::set> upper_bound(const typed::multi_val> &upper) const; + inline typed::set> wrapped_reverse() const; +}; + +template <> +struct set_list<> : public isl::set_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + set_list() = default; + private: + template {}, bool>::type = true> + set_list(const base &obj) : isl::set_list(obj) {} + public: + static set_list from(const isl::set_list &obj) { + return set_list(obj); + } + inline explicit set_list(const isl::ctx &ctx, int n); + inline explicit set_list(const typed::set<> &el); + inline explicit set_list(const isl::ctx &ctx, const std::string &str); + inline typed::set_list<> add(const typed::set<> &el) const; + inline typed::set_list<> add(const typed::basic_set<> &el) const; + inline typed::set_list<> add(const typed::point<> &el) const; + inline typed::set<> at(int index) const = delete; + inline typed::set<> get_at(int index) const = delete; + inline typed::set_list<> drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::set<>)> &follows, const std::function)> &fn) const; + inline typed::set_list<> set_at(int index, const typed::set<> &el) const = delete; +}; + +template +struct set_list : public isl::set_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + set_list() = default; + template {}, + bool>::type = true> + set_list(const set_list &obj) : isl::set_list(obj) {} + private: + template {}, bool>::type = true> + set_list(const base &obj) : isl::set_list(obj) {} + public: + static set_list from(const isl::set_list &obj) { + return set_list(obj); + } + inline explicit set_list(const isl::ctx &ctx, int n); + inline explicit set_list(const typed::set &el); + inline explicit set_list(const isl::ctx &ctx, const std::string &str); + inline typed::set_list add(const typed::set &el) const; + inline typed::set_list add(const typed::basic_set &el) const; + inline typed::set_list add(const typed::point &el) const; + inline typed::set at(int index) const; + inline typed::set get_at(int index) const = delete; + inline typed::set_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::set)> &follows, const std::function)> &fn) const; + inline typed::set_list set_at(int index, const typed::set &el) const; +}; + +template <> +struct space<> : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + template + inline typed::space add_named_tuple(const typed::id &tuple_id, unsigned int dim) const; + template + inline typed::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const; + inline typed::space<> add_param(const typed::id &id) const; + inline typed::space<> add_param(const std::string &id) const; + template + inline typed::space add_unnamed_tuple(unsigned int dim) const; + inline typed::space<> curry() const = delete; + inline typed::space<> domain() const = delete; + inline typed::multi_aff<> domain_map_multi_aff() const = delete; + inline typed::pw_multi_aff<> domain_map_pw_multi_aff() const = delete; + inline typed::space<> domain_reverse() const = delete; + inline typed::id<> get_domain_tuple_id() const = delete; + inline typed::space<> drop_all_params() const; + inline typed::space<> flatten_domain() const = delete; + inline typed::space<> flatten_range() const = delete; + inline typed::multi_aff<> identity_multi_aff_on_domain() const = delete; + inline typed::multi_pw_aff<> identity_multi_pw_aff_on_domain() const = delete; + inline typed::pw_multi_aff<> identity_pw_multi_aff_on_domain() const = delete; + inline typed::space<> map_from_set() const = delete; + inline typed::multi_aff<> multi_aff(const typed::aff_list<> &list) const = delete; + template + inline typed::multi_aff multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::multi_id<> multi_id(const typed::id_list<> &list) const = delete; + inline typed::multi_pw_aff<> multi_pw_aff(const typed::pw_aff_list<> &list) const = delete; + inline typed::multi_union_pw_aff<> multi_union_pw_aff(const typed::union_pw_aff_list<> &list) const = delete; + inline typed::multi_val<> multi_val(const typed::val_list<> &list) const = delete; + inline typed::aff param_aff_on_domain(const typed::id &id) const; + inline typed::aff param_aff_on_domain(const std::string &id) const; + inline typed::space<> params() const = delete; + inline typed::space<> product(const typed::space<> &right) const = delete; + inline typed::space<> range() const = delete; + inline typed::multi_aff<> range_map_multi_aff() const = delete; + inline typed::pw_multi_aff<> range_map_pw_multi_aff() const = delete; + inline typed::space<> range_reverse() const = delete; + inline typed::id<> get_range_tuple_id() const = delete; + inline typed::space<> reverse() const = delete; + inline typed::space<> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::space<> set_domain_tuple(const std::string &id) const = delete; + inline typed::space<> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::space<> set_range_tuple(const std::string &id) const = delete; + inline typed::space<> uncurry() const = delete; + static inline typed::space<> unit(const isl::ctx &ctx); + inline typed::map<> universe_map() const = delete; + inline typed::set<> universe_set() const; + inline typed::space<> unwrap() const = delete; + inline typed::space<> wrap() const = delete; + inline typed::space<> wrapped_reverse() const = delete; + inline typed::aff<> zero_aff_on_domain() const = delete; + inline typed::multi_aff<> zero_multi_aff() const = delete; + inline typed::multi_pw_aff<> zero_multi_pw_aff() const = delete; + inline typed::multi_union_pw_aff<> zero_multi_union_pw_aff() const = delete; + inline typed::multi_val<> zero_multi_val() const = delete; +}; + +template +struct space : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + template {}, + bool>::type = true> + space(const space &obj) : isl::space(obj) {} + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + template + inline typed::space add_named_tuple(const typed::id &tuple_id, unsigned int dim) const; + template + inline typed::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const; + inline typed::space add_param(const typed::id &id) const; + inline typed::space add_param(const std::string &id) const; + template + inline typed::space add_unnamed_tuple(unsigned int dim) const; + inline typed::space curry() const = delete; + inline typed::space<> domain() const; + inline typed::multi_aff domain_map_multi_aff() const = delete; + inline typed::pw_multi_aff domain_map_pw_multi_aff() const = delete; + inline typed::space domain_reverse() const = delete; + inline typed::id get_domain_tuple_id() const = delete; + inline typed::space drop_all_params() const; + inline typed::space flatten_domain() const = delete; + inline typed::space flatten_range() const = delete; + inline typed::multi_aff identity_multi_aff_on_domain() const; + inline typed::multi_pw_aff identity_multi_pw_aff_on_domain() const; + inline typed::pw_multi_aff identity_pw_multi_aff_on_domain() const; + inline typed::space map_from_set() const; + inline typed::multi_aff multi_aff(const typed::aff_list &list) const; + template + inline typed::multi_aff multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::multi_id multi_id(const typed::id_list &list) const; + inline typed::multi_pw_aff multi_pw_aff(const typed::pw_aff_list &list) const; + inline typed::multi_union_pw_aff multi_union_pw_aff(const typed::union_pw_aff_list &list) const; + template + inline typed::multi_union_pw_aff multi_union_pw_aff(const typed::union_pw_aff_list &list) const; + inline typed::multi_val multi_val(const typed::val_list &list) const; + inline typed::aff param_aff_on_domain(const typed::id &id) const; + inline typed::aff param_aff_on_domain(const std::string &id) const; + inline typed::space<> params() const; + template + inline typed::space> product(const typed::space &right) const; + inline typed::space range() const = delete; + inline typed::multi_aff range_map_multi_aff() const = delete; + inline typed::pw_multi_aff range_map_pw_multi_aff() const = delete; + inline typed::space range_reverse() const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::space reverse() const = delete; + inline typed::space set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::space set_domain_tuple(const std::string &id) const = delete; + template + inline typed::space set_range_tuple(const typed::id &id) const; + template + inline typed::space set_range_tuple(const std::string &id) const; + inline typed::space uncurry() const = delete; + static inline typed::space unit(const isl::ctx &ctx) = delete; + inline typed::map universe_map() const = delete; + inline typed::set universe_set() const; + inline typed::space unwrap() const = delete; + inline typed::space wrap() const = delete; + inline typed::space wrapped_reverse() const = delete; + inline typed::aff zero_aff_on_domain() const; + inline typed::multi_aff zero_multi_aff() const; + inline typed::multi_pw_aff zero_multi_pw_aff() const; + inline typed::multi_union_pw_aff zero_multi_union_pw_aff() const; + inline typed::multi_val zero_multi_val() const; +}; + +template +struct space : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + space(const space &obj) : isl::space(obj) {} + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + inline typed::space add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete; + inline typed::space add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete; + inline typed::space add_param(const typed::id &id) const; + inline typed::space add_param(const std::string &id) const; + inline typed::space add_unnamed_tuple(unsigned int dim) const = delete; + inline typed::space curry() const = delete; + inline typed::space domain() const; + inline typed::multi_aff, Domain> domain_map_multi_aff() const; + inline typed::pw_multi_aff, Domain> domain_map_pw_multi_aff() const; + inline typed::space domain_reverse() const = delete; + inline typed::id get_domain_tuple_id() const = delete; + inline typed::space drop_all_params() const; + inline typed::space flatten_domain() const = delete; + inline typed::space flatten_range() const = delete; + inline typed::multi_aff identity_multi_aff_on_domain() const = delete; + inline typed::multi_pw_aff identity_multi_pw_aff_on_domain() const = delete; + inline typed::pw_multi_aff identity_pw_multi_aff_on_domain() const = delete; + inline typed::space map_from_set() const = delete; + inline typed::multi_aff multi_aff(const typed::aff_list &list) const; + inline typed::multi_aff multi_aff_on_domain(const typed::multi_val<> &mv) const = delete; + inline typed::multi_id multi_id(const typed::id_list<> &list) const = delete; + inline typed::multi_pw_aff multi_pw_aff(const typed::pw_aff_list &list) const; + inline typed::multi_union_pw_aff multi_union_pw_aff(const typed::union_pw_aff_list<> &list) const = delete; + inline typed::multi_val multi_val(const typed::val_list<> &list) const = delete; + inline typed::aff param_aff_on_domain(const typed::id<> &id) const = delete; + inline typed::aff param_aff_on_domain(const std::string &id) const = delete; + inline typed::space<> params() const; + template + inline typed::space, pair> product(const typed::space &right) const; + inline typed::space range() const; + inline typed::multi_aff, Range> range_map_multi_aff() const; + inline typed::pw_multi_aff, Range> range_map_pw_multi_aff() const; + inline typed::space range_reverse() const = delete; + inline typed::id get_range_tuple_id() const = delete; + inline typed::space reverse() const; + template + inline typed::space set_domain_tuple(const typed::id &id) const; + template + inline typed::space set_domain_tuple(const std::string &id) const; + template + inline typed::space set_range_tuple(const typed::id &id) const; + template + inline typed::space set_range_tuple(const std::string &id) const; + inline typed::space uncurry() const = delete; + static inline typed::space unit(const isl::ctx &ctx) = delete; + inline typed::map universe_map() const; + inline typed::set universe_set() const = delete; + inline typed::space unwrap() const = delete; + inline typed::space> wrap() const; + inline typed::space wrapped_reverse() const = delete; + inline typed::aff zero_aff_on_domain() const = delete; + inline typed::multi_aff zero_multi_aff() const; + inline typed::multi_pw_aff zero_multi_pw_aff() const; + inline typed::multi_union_pw_aff zero_multi_union_pw_aff() const; + inline typed::multi_val zero_multi_val() const = delete; +}; + +template +struct space> : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + space(const space> &obj) : isl::space(obj) {} + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + template + inline typed::space, Arg2> add_named_tuple(const typed::id &tuple_id, unsigned int dim) const; + template + inline typed::space, Arg2> add_named_tuple(const std::string &tuple_id, unsigned int dim) const; + inline typed::space> add_param(const typed::id &id) const; + inline typed::space> add_param(const std::string &id) const; + template + inline typed::space, Arg2> add_unnamed_tuple(unsigned int dim) const; + inline typed::space> curry() const = delete; + inline typed::space<> domain() const; + inline typed::multi_aff> domain_map_multi_aff() const = delete; + inline typed::pw_multi_aff> domain_map_pw_multi_aff() const = delete; + inline typed::space> domain_reverse() const = delete; + inline typed::id> get_domain_tuple_id() const = delete; + inline typed::space> drop_all_params() const; + inline typed::space> flatten_domain() const = delete; + inline typed::space> flatten_range() const = delete; + inline typed::multi_aff, pair> identity_multi_aff_on_domain() const; + inline typed::multi_pw_aff, pair> identity_multi_pw_aff_on_domain() const; + inline typed::pw_multi_aff, pair> identity_pw_multi_aff_on_domain() const; + inline typed::space, pair> map_from_set() const; + inline typed::multi_aff> multi_aff(const typed::aff_list &list) const; + template + inline typed::multi_aff, Arg2> multi_aff_on_domain(const typed::multi_val &mv) const; + inline typed::multi_id> multi_id(const typed::id_list &list) const; + inline typed::multi_pw_aff> multi_pw_aff(const typed::pw_aff_list &list) const; + inline typed::multi_union_pw_aff> multi_union_pw_aff(const typed::union_pw_aff_list &list) const; + template + inline typed::multi_union_pw_aff> multi_union_pw_aff(const typed::union_pw_aff_list &list) const; + inline typed::multi_val> multi_val(const typed::val_list &list) const; + inline typed::aff, Anonymous> param_aff_on_domain(const typed::id &id) const; + inline typed::aff, Anonymous> param_aff_on_domain(const std::string &id) const; + inline typed::space<> params() const; + template + inline typed::space, Arg2>> product(const typed::space &right) const; + inline typed::space> range() const = delete; + inline typed::multi_aff> range_map_multi_aff() const = delete; + inline typed::pw_multi_aff> range_map_pw_multi_aff() const = delete; + inline typed::space> range_reverse() const = delete; + inline typed::id> get_range_tuple_id() const = delete; + inline typed::space> reverse() const = delete; + inline typed::space> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::space> set_domain_tuple(const std::string &id) const = delete; + inline typed::space> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::space> set_range_tuple(const std::string &id) const = delete; + inline typed::space> uncurry() const = delete; + static inline typed::space> unit(const isl::ctx &ctx) = delete; + inline typed::map> universe_map() const = delete; + inline typed::set> universe_set() const; + inline typed::space unwrap() const; + inline typed::space> wrap() const = delete; + inline typed::space> wrapped_reverse() const; + inline typed::aff, Anonymous> zero_aff_on_domain() const; + inline typed::multi_aff> zero_multi_aff() const; + inline typed::multi_pw_aff> zero_multi_pw_aff() const; + inline typed::multi_union_pw_aff> zero_multi_union_pw_aff() const; + inline typed::multi_val> zero_multi_val() const; +}; + +template +struct space, Range2> : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + space(const space, Arg3> &obj) : isl::space(obj) {} + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + inline typed::space, Range2> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete; + inline typed::space, Range2> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete; + inline typed::space, Range2> add_param(const typed::id &id) const; + inline typed::space, Range2> add_param(const std::string &id) const; + inline typed::space, Range2> add_unnamed_tuple(unsigned int dim) const = delete; + inline typed::space> curry() const; + inline typed::space> domain() const; + inline typed::multi_aff, Range2>, pair> domain_map_multi_aff() const; + inline typed::pw_multi_aff, Range2>, pair> domain_map_pw_multi_aff() const; + inline typed::space, Range2> domain_reverse() const; + inline typed::id, Range2> get_domain_tuple_id() const = delete; + inline typed::space, Range2> drop_all_params() const; + inline typed::space flatten_domain() const; + inline typed::space, Range2> flatten_range() const = delete; + inline typed::multi_aff, Range2> identity_multi_aff_on_domain() const = delete; + inline typed::multi_pw_aff, Range2> identity_multi_pw_aff_on_domain() const = delete; + inline typed::pw_multi_aff, Range2> identity_pw_multi_aff_on_domain() const = delete; + inline typed::space, Range2> map_from_set() const = delete; + inline typed::multi_aff, Range2> multi_aff(const typed::aff_list, Anonymous> &list) const; + inline typed::multi_aff, Range2> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete; + inline typed::multi_id, Range2> multi_id(const typed::id_list<> &list) const = delete; + inline typed::multi_pw_aff, Range2> multi_pw_aff(const typed::pw_aff_list, Anonymous> &list) const; + inline typed::multi_union_pw_aff, Range2> multi_union_pw_aff(const typed::union_pw_aff_list<> &list) const = delete; + inline typed::multi_val, Range2> multi_val(const typed::val_list<> &list) const = delete; + inline typed::aff, Range2> param_aff_on_domain(const typed::id<> &id) const = delete; + inline typed::aff, Range2> param_aff_on_domain(const std::string &id) const = delete; + inline typed::space<> params() const; + template + inline typed::space, Domain2>, pair> product(const typed::space &right) const; + inline typed::space range() const; + inline typed::multi_aff, Range2>, Range2> range_map_multi_aff() const; + inline typed::pw_multi_aff, Range2>, Range2> range_map_pw_multi_aff() const; + inline typed::space, Range2> range_reverse() const = delete; + inline typed::id, Range2> get_range_tuple_id() const = delete; + inline typed::space> reverse() const; + inline typed::space, Range2> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::space, Range2> set_domain_tuple(const std::string &id) const = delete; + template + inline typed::space, Arg2> set_range_tuple(const typed::id &id) const; + template + inline typed::space, Arg2> set_range_tuple(const std::string &id) const; + inline typed::space, Range2> uncurry() const = delete; + static inline typed::space, Range2> unit(const isl::ctx &ctx) = delete; + inline typed::map, Range2> universe_map() const; + inline typed::set, Range2> universe_set() const = delete; + inline typed::space, Range2> unwrap() const = delete; + inline typed::space, Range2>> wrap() const; + inline typed::space, Range2> wrapped_reverse() const = delete; + inline typed::aff, Range2> zero_aff_on_domain() const = delete; + inline typed::multi_aff, Range2> zero_multi_aff() const; + inline typed::multi_pw_aff, Range2> zero_multi_pw_aff() const; + inline typed::multi_union_pw_aff, Range2> zero_multi_union_pw_aff() const; + inline typed::multi_val, Range2> zero_multi_val() const = delete; +}; + +template +struct space> : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + space(const space> &obj) : isl::space(obj) {} + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + inline typed::space> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete; + inline typed::space> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete; + inline typed::space> add_param(const typed::id &id) const; + inline typed::space> add_param(const std::string &id) const; + inline typed::space> add_unnamed_tuple(unsigned int dim) const = delete; + inline typed::space> curry() const = delete; + inline typed::space domain() const; + inline typed::multi_aff>, Domain> domain_map_multi_aff() const; + inline typed::pw_multi_aff>, Domain> domain_map_pw_multi_aff() const; + inline typed::space> domain_reverse() const = delete; + inline typed::id> get_domain_tuple_id() const = delete; + inline typed::space> drop_all_params() const; + inline typed::space> flatten_domain() const = delete; + inline typed::space flatten_range() const; + inline typed::multi_aff> identity_multi_aff_on_domain() const = delete; + inline typed::multi_pw_aff> identity_multi_pw_aff_on_domain() const = delete; + inline typed::pw_multi_aff> identity_pw_multi_aff_on_domain() const = delete; + inline typed::space> map_from_set() const = delete; + inline typed::multi_aff> multi_aff(const typed::aff_list &list) const; + inline typed::multi_aff> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete; + inline typed::multi_id> multi_id(const typed::id_list<> &list) const = delete; + inline typed::multi_pw_aff> multi_pw_aff(const typed::pw_aff_list &list) const; + inline typed::multi_union_pw_aff> multi_union_pw_aff(const typed::union_pw_aff_list<> &list) const = delete; + inline typed::multi_val> multi_val(const typed::val_list<> &list) const = delete; + inline typed::aff> param_aff_on_domain(const typed::id<> &id) const = delete; + inline typed::aff> param_aff_on_domain(const std::string &id) const = delete; + inline typed::space<> params() const; + template + inline typed::space, pair, Arg3>> product(const typed::space &right) const; + inline typed::space> range() const; + inline typed::multi_aff>, pair> range_map_multi_aff() const; + inline typed::pw_multi_aff>, pair> range_map_pw_multi_aff() const; + inline typed::space> range_reverse() const; + inline typed::id> get_range_tuple_id() const = delete; + inline typed::space, Domain> reverse() const; + template + inline typed::space> set_domain_tuple(const typed::id &id) const; + template + inline typed::space> set_domain_tuple(const std::string &id) const; + inline typed::space> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::space> set_range_tuple(const std::string &id) const = delete; + inline typed::space, Range2> uncurry() const; + static inline typed::space> unit(const isl::ctx &ctx) = delete; + inline typed::map> universe_map() const; + inline typed::set> universe_set() const = delete; + inline typed::space> unwrap() const = delete; + inline typed::space>> wrap() const; + inline typed::space> wrapped_reverse() const = delete; + inline typed::aff> zero_aff_on_domain() const = delete; + inline typed::multi_aff> zero_multi_aff() const; + inline typed::multi_pw_aff> zero_multi_pw_aff() const; + inline typed::multi_union_pw_aff> zero_multi_union_pw_aff() const; + inline typed::multi_val> zero_multi_val() const = delete; +}; + +template +struct space, pair> : public isl::space { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + space() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + space(const space, pair> &obj) : isl::space(obj) {} + private: + template {}, bool>::type = true> + space(const base &obj) : isl::space(obj) {} + public: + static space from(const isl::space &obj) { + return space(obj); + } + inline explicit space(const isl::ctx &ctx, const std::string &str); + inline typed::space, pair> add_named_tuple(const typed::id<> &tuple_id, unsigned int dim) const = delete; + inline typed::space, pair> add_named_tuple(const std::string &tuple_id, unsigned int dim) const = delete; + inline typed::space, pair> add_param(const typed::id &id) const; + inline typed::space, pair> add_param(const std::string &id) const; + inline typed::space, pair> add_unnamed_tuple(unsigned int dim) const = delete; + inline typed::space>> curry() const; + inline typed::space> domain() const; + inline typed::multi_aff, pair>, pair> domain_map_multi_aff() const; + inline typed::pw_multi_aff, pair>, pair> domain_map_pw_multi_aff() const; + inline typed::space, pair> domain_reverse() const; + inline typed::id, pair> get_domain_tuple_id() const = delete; + inline typed::space, pair> drop_all_params() const; + inline typed::space> flatten_domain() const; + inline typed::space, Anonymous> flatten_range() const; + inline typed::multi_aff, pair> identity_multi_aff_on_domain() const = delete; + inline typed::multi_pw_aff, pair> identity_multi_pw_aff_on_domain() const = delete; + inline typed::pw_multi_aff, pair> identity_pw_multi_aff_on_domain() const = delete; + inline typed::space, pair> map_from_set() const = delete; + inline typed::multi_aff, pair> multi_aff(const typed::aff_list, Anonymous> &list) const; + inline typed::multi_aff, pair> multi_aff_on_domain(const typed::multi_val<> &mv) const = delete; + inline typed::multi_id, pair> multi_id(const typed::id_list<> &list) const = delete; + inline typed::multi_pw_aff, pair> multi_pw_aff(const typed::pw_aff_list, Anonymous> &list) const; + inline typed::multi_union_pw_aff, pair> multi_union_pw_aff(const typed::union_pw_aff_list<> &list) const = delete; + inline typed::multi_val, pair> multi_val(const typed::val_list<> &list) const = delete; + inline typed::aff, pair> param_aff_on_domain(const typed::id<> &id) const = delete; + inline typed::aff, pair> param_aff_on_domain(const std::string &id) const = delete; + inline typed::space<> params() const; + template + inline typed::space, Domain2>, pair, Arg2>> product(const typed::space &right) const; + inline typed::space> range() const; + inline typed::multi_aff, pair>, pair> range_map_multi_aff() const; + inline typed::pw_multi_aff, pair>, pair> range_map_pw_multi_aff() const; + inline typed::space, pair> range_reverse() const; + inline typed::id, pair> get_range_tuple_id() const = delete; + inline typed::space, pair> reverse() const; + inline typed::space, pair> set_domain_tuple(const typed::id<> &id) const = delete; + inline typed::space, pair> set_domain_tuple(const std::string &id) const = delete; + inline typed::space, pair> set_range_tuple(const typed::id<> &id) const = delete; + inline typed::space, pair> set_range_tuple(const std::string &id) const = delete; + inline typed::space, Range>, Range2> uncurry() const; + static inline typed::space, pair> unit(const isl::ctx &ctx) = delete; + inline typed::map, pair> universe_map() const; + inline typed::set, pair> universe_set() const = delete; + inline typed::space, pair> unwrap() const = delete; + inline typed::space, pair>> wrap() const; + inline typed::space, pair> wrapped_reverse() const = delete; + inline typed::aff, pair> zero_aff_on_domain() const = delete; + inline typed::multi_aff, pair> zero_multi_aff() const; + inline typed::multi_pw_aff, pair> zero_multi_pw_aff() const; + inline typed::multi_union_pw_aff, pair> zero_multi_union_pw_aff() const; + inline typed::multi_val, pair> zero_multi_val() const = delete; +}; + +template +struct union_map : public isl::union_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_map() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + union_map(const union_map &obj) : isl::union_map(obj) {} + private: + template {}, bool>::type = true> + union_map(const base &obj) : isl::union_map(obj) {} + public: + static union_map from(const isl::union_map &obj) { + return union_map(obj); + } + inline /* implicit */ union_map(const typed::basic_map &bmap); + inline /* implicit */ union_map(const typed::map &map); + inline explicit union_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_map apply_domain(const typed::union_map &umap2) const; + template + inline typed::union_map apply_domain(const typed::basic_map &umap2) const; + template + inline typed::union_map apply_domain(const typed::map &umap2) const; + template + inline typed::union_map apply_range(const typed::union_map &umap2) const; + template + inline typed::union_map apply_range(const typed::basic_map &umap2) const; + template + inline typed::union_map apply_range(const typed::map &umap2) const; + inline typed::map as_map() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::union_pw_multi_aff as_union_pw_multi_aff() const; + inline typed::union_set bind_range(const typed::multi_id &tuple) const; + inline typed::union_map coalesce() const; + inline typed::union_map curry() const = delete; + inline typed::union_set deltas() const = delete; + inline typed::union_map detect_equalities() const; + inline typed::union_set domain() const; + inline typed::union_map domain_factor_domain() const = delete; + inline typed::union_map domain_factor_range() const = delete; + inline typed::union_map, Domain> domain_map() const; + inline typed::union_pw_multi_aff, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::union_map, Range> domain_product(const typed::union_map &umap2) const; + template + inline typed::union_map, Range> domain_product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Range> domain_product(const typed::map &umap2) const; + inline typed::union_map domain_reverse() const = delete; + inline typed::union_map drop_unused_params() const; + static inline typed::union_map empty(const isl::ctx &ctx); + inline typed::union_map eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::union_map eq_at(const typed::multi_pw_aff<> &mupa) const = delete; + inline typed::union_map eq_at(const typed::union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function)> &test) const; + inline typed::map extract_map(const typed::space &space) const; + inline void foreach_map(const std::function)> &fn) const; + inline typed::union_map gist(const typed::union_map &context) const; + inline typed::union_map gist(const typed::basic_map &context) const; + inline typed::union_map gist(const typed::map &context) const; + inline typed::union_map gist_domain(const typed::union_set &uset) const; + inline typed::union_map gist_domain(const typed::basic_set &uset) const; + inline typed::union_map gist_domain(const typed::point &uset) const; + inline typed::union_map gist_domain(const typed::set &uset) const; + inline typed::union_map gist_params(const typed::set<> &set) const; + inline typed::union_map gist_params(const typed::basic_set<> &set) const; + inline typed::union_map gist_params(const typed::point<> &set) const; + inline typed::union_map intersect(const typed::union_map &umap2) const; + inline typed::union_map intersect(const typed::basic_map &umap2) const; + inline typed::union_map intersect(const typed::map &umap2) const; + inline typed::union_map intersect_domain(const typed::space &space) const; + inline typed::union_map intersect_domain(const typed::union_set &uset) const; + inline typed::union_map intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_params(const typed::set<> &set) const; + inline typed::union_map intersect_params(const typed::basic_set<> &set) const; + inline typed::union_map intersect_params(const typed::point<> &set) const; + inline typed::union_map intersect_range(const typed::space &space) const; + inline typed::union_map intersect_range(const typed::union_set &uset) const; + inline typed::union_map intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map lexmax() const; + inline typed::union_map lexmin() const; + inline typed::map_list map_list() const; + inline typed::map_list get_map_list() const = delete; + inline typed::set<> params() const; + template + inline typed::union_map preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::union_map preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::union_map preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_map preimage_range(const typed::multi_aff &ma) const; + template + inline typed::union_map preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_map, pair> product(const typed::union_map &umap2) const; + template + inline typed::union_map, pair> product(const typed::basic_map &umap2) const; + template + inline typed::union_map, pair> product(const typed::map &umap2) const; + inline typed::union_map project_out_all_params() const; + inline typed::union_map project_out_param(const typed::id &id) const; + inline typed::union_map project_out_param(const std::string &id) const; + inline typed::union_map project_out_param(const typed::id_list &list) const; + inline typed::union_set range() const; + inline typed::union_map range_factor_domain() const = delete; + inline typed::union_map range_factor_range() const = delete; + inline typed::union_map, Range> range_map() const; + template + inline typed::union_map> range_product(const typed::union_map &umap2) const; + template + inline typed::union_map> range_product(const typed::basic_map &umap2) const; + template + inline typed::union_map> range_product(const typed::map &umap2) const; + inline typed::union_map range_reverse() const = delete; + inline typed::union_map reverse() const; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::union_map subtract(const typed::union_map &umap2) const; + inline typed::union_map subtract(const typed::basic_map &umap2) const; + inline typed::union_map subtract(const typed::map &umap2) const; + inline typed::union_map subtract_domain(const typed::union_set &dom) const; + inline typed::union_map subtract_domain(const typed::basic_set &dom) const; + inline typed::union_map subtract_domain(const typed::point &dom) const; + inline typed::union_map subtract_domain(const typed::set &dom) const; + inline typed::union_map subtract_range(const typed::union_set &dom) const; + inline typed::union_map subtract_range(const typed::basic_set &dom) const; + inline typed::union_map subtract_range(const typed::point &dom) const; + inline typed::union_map subtract_range(const typed::set &dom) const; + inline typed::union_map uncurry() const = delete; + inline typed::union_map unite(const typed::union_map &umap2) const; + inline typed::union_map unite(const typed::basic_map &umap2) const; + inline typed::union_map unite(const typed::map &umap2) const; + inline typed::union_map universe() const; + inline typed::union_set> wrap() const; +}; + +template +struct union_map, Range2> : public isl::union_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + union_map(const union_map, Arg3> &obj) : isl::union_map(obj) {} + private: + template {}, bool>::type = true> + union_map(const base &obj) : isl::union_map(obj) {} + public: + static union_map from(const isl::union_map &obj) { + return union_map(obj); + } + inline /* implicit */ union_map(const typed::basic_map, Range2> &bmap); + inline /* implicit */ union_map(const typed::map, Range2> &map); + inline explicit union_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_map apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::union_map apply_domain(const typed::basic_map, Domain2> &umap2) const; + template + inline typed::union_map apply_domain(const typed::map, Domain2> &umap2) const; + template + inline typed::union_map, Arg3> apply_range(const typed::union_map &umap2) const; + template + inline typed::union_map, Arg3> apply_range(const typed::basic_map &umap2) const; + template + inline typed::union_map, Arg3> apply_range(const typed::map &umap2) const; + inline typed::map, Range2> as_map() const; + inline typed::multi_union_pw_aff, Range2> as_multi_union_pw_aff() const; + inline typed::union_pw_multi_aff, Range2> as_union_pw_multi_aff() const; + inline typed::union_set> bind_range(const typed::multi_id &tuple) const; + inline typed::union_map, Range2> coalesce() const; + inline typed::union_map> curry() const; + inline typed::union_set, Range2> deltas() const = delete; + inline typed::union_map, Range2> detect_equalities() const; + inline typed::union_set> domain() const; + inline typed::union_map domain_factor_domain() const; + inline typed::union_map domain_factor_range() const; + inline typed::union_map, Range2>, pair> domain_map() const; + inline typed::union_pw_multi_aff, Range2>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::union_map, Domain2>, Range2> domain_product(const typed::union_map &umap2) const; + template + inline typed::union_map, Domain2>, Range2> domain_product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Domain2>, Range2> domain_product(const typed::map &umap2) const; + inline typed::union_map, Range2> domain_reverse() const; + inline typed::union_map, Range2> drop_unused_params() const; + static inline typed::union_map, Range2> empty(const isl::ctx &ctx); + inline typed::union_map, Range2> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::union_map, Range2> eq_at(const typed::multi_pw_aff<> &mupa) const = delete; + inline typed::union_map, Range2> eq_at(const typed::union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function, Range2>)> &test) const; + inline typed::map, Range2> extract_map(const typed::space, Range2> &space) const; + inline void foreach_map(const std::function, Range2>)> &fn) const; + inline typed::union_map, Range2> gist(const typed::union_map, Range2> &context) const; + inline typed::union_map, Range2> gist(const typed::basic_map, Range2> &context) const; + inline typed::union_map, Range2> gist(const typed::map, Range2> &context) const; + inline typed::union_map, Range2> gist_domain(const typed::union_set> &uset) const; + inline typed::union_map, Range2> gist_domain(const typed::basic_set> &uset) const; + inline typed::union_map, Range2> gist_domain(const typed::point> &uset) const; + inline typed::union_map, Range2> gist_domain(const typed::set> &uset) const; + inline typed::union_map, Range2> gist_params(const typed::set<> &set) const; + inline typed::union_map, Range2> gist_params(const typed::basic_set<> &set) const; + inline typed::union_map, Range2> gist_params(const typed::point<> &set) const; + inline typed::union_map, Range2> intersect(const typed::union_map, Range2> &umap2) const; + inline typed::union_map, Range2> intersect(const typed::basic_map, Range2> &umap2) const; + inline typed::union_map, Range2> intersect(const typed::map, Range2> &umap2) const; + inline typed::union_map, Range2> intersect_domain(const typed::space> &space) const; + inline typed::union_map, Range2> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_map, Range2> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::union_map, Range2> intersect_domain_wrapped_domain(const typed::basic_set &domain) const; + inline typed::union_map, Range2> intersect_domain_wrapped_domain(const typed::point &domain) const; + inline typed::union_map, Range2> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, Range2> intersect_params(const typed::set<> &set) const; + inline typed::union_map, Range2> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_map, Range2> intersect_params(const typed::point<> &set) const; + inline typed::union_map, Range2> intersect_range(const typed::space &space) const; + inline typed::union_map, Range2> intersect_range(const typed::union_set &uset) const; + inline typed::union_map, Range2> intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::union_map, Range2> intersect_range_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::union_map, Range2> intersect_range_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::union_map, Range2> intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map, Range2> lexmax() const; + inline typed::union_map, Range2> lexmin() const; + inline typed::map_list, Range2> map_list() const; + inline typed::map_list, Range2> get_map_list() const = delete; + inline typed::set<> params() const; + template + inline typed::union_map preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::union_map preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::union_map preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_map, Arg3> preimage_range(const typed::multi_aff &ma) const; + template + inline typed::union_map, Arg3> preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map, Arg3> preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_map, Domain2>, pair> product(const typed::union_map &umap2) const; + template + inline typed::union_map, Domain2>, pair> product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Domain2>, pair> product(const typed::map &umap2) const; + inline typed::union_map, Range2> project_out_all_params() const; + inline typed::union_map, Range2> project_out_param(const typed::id &id) const; + inline typed::union_map, Range2> project_out_param(const std::string &id) const; + inline typed::union_map, Range2> project_out_param(const typed::id_list &list) const; + inline typed::union_set range() const; + inline typed::union_map, Range2> range_factor_domain() const = delete; + inline typed::union_map, Range2> range_factor_range() const = delete; + inline typed::union_map, Range2>, Range2> range_map() const; + template + inline typed::union_map, pair> range_product(const typed::union_map, Arg3> &umap2) const; + template + inline typed::union_map, pair> range_product(const typed::basic_map, Arg3> &umap2) const; + template + inline typed::union_map, pair> range_product(const typed::map, Arg3> &umap2) const; + inline typed::union_map, Range2> range_reverse() const = delete; + inline typed::union_map> reverse() const; + inline typed::space<> space() const; + inline typed::space, Range2> get_space() const = delete; + inline typed::union_map, Range2> subtract(const typed::union_map, Range2> &umap2) const; + inline typed::union_map, Range2> subtract(const typed::basic_map, Range2> &umap2) const; + inline typed::union_map, Range2> subtract(const typed::map, Range2> &umap2) const; + inline typed::union_map, Range2> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, Range2> subtract_domain(const typed::basic_set> &dom) const; + inline typed::union_map, Range2> subtract_domain(const typed::point> &dom) const; + inline typed::union_map, Range2> subtract_domain(const typed::set> &dom) const; + inline typed::union_map, Range2> subtract_range(const typed::union_set &dom) const; + inline typed::union_map, Range2> subtract_range(const typed::basic_set &dom) const; + inline typed::union_map, Range2> subtract_range(const typed::point &dom) const; + inline typed::union_map, Range2> subtract_range(const typed::set &dom) const; + inline typed::union_map, Range2> uncurry() const = delete; + inline typed::union_map, Range2> unite(const typed::union_map, Range2> &umap2) const; + inline typed::union_map, Range2> unite(const typed::basic_map, Range2> &umap2) const; + inline typed::union_map, Range2> unite(const typed::map, Range2> &umap2) const; + inline typed::union_map, Range2> universe() const; + inline typed::union_set, Range2>> wrap() const; +}; + +template +struct union_map : public isl::union_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_map() = default; + template {}, + bool>::type = true> + union_map(const union_map &obj) : isl::union_map(obj) {} + private: + template {}, bool>::type = true> + union_map(const base &obj) : isl::union_map(obj) {} + public: + static union_map from(const isl::union_map &obj) { + return union_map(obj); + } + inline /* implicit */ union_map(const typed::basic_map &bmap); + inline /* implicit */ union_map(const typed::map &map); + inline explicit union_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_map apply_domain(const typed::union_map &umap2) const; + template + inline typed::union_map apply_domain(const typed::basic_map &umap2) const; + template + inline typed::union_map apply_domain(const typed::map &umap2) const; + template + inline typed::union_map apply_range(const typed::union_map &umap2) const; + template + inline typed::union_map apply_range(const typed::basic_map &umap2) const; + template + inline typed::union_map apply_range(const typed::map &umap2) const; + inline typed::map as_map() const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::union_pw_multi_aff as_union_pw_multi_aff() const; + inline typed::union_set bind_range(const typed::multi_id &tuple) const; + inline typed::union_map coalesce() const; + inline typed::union_map curry() const = delete; + inline typed::union_set deltas() const; + inline typed::union_map detect_equalities() const; + inline typed::union_set domain() const; + inline typed::union_map domain_factor_domain() const = delete; + inline typed::union_map domain_factor_range() const = delete; + inline typed::union_map, Domain> domain_map() const; + inline typed::union_pw_multi_aff, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::union_map, Domain> domain_product(const typed::union_map &umap2) const; + template + inline typed::union_map, Domain> domain_product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Domain> domain_product(const typed::map &umap2) const; + inline typed::union_map domain_reverse() const = delete; + inline typed::union_map drop_unused_params() const; + static inline typed::union_map empty(const isl::ctx &ctx); + template + inline typed::union_map eq_at(const typed::multi_union_pw_aff &mupa) const; + template + inline typed::union_map eq_at(const typed::multi_pw_aff &mupa) const; + inline typed::union_map eq_at(const typed::union_pw_aff &mupa) const; + inline bool every_map(const std::function)> &test) const; + inline typed::map extract_map(const typed::space &space) const; + inline void foreach_map(const std::function)> &fn) const; + inline typed::union_map gist(const typed::union_map &context) const; + inline typed::union_map gist(const typed::basic_map &context) const; + inline typed::union_map gist(const typed::map &context) const; + inline typed::union_map gist_domain(const typed::union_set &uset) const; + inline typed::union_map gist_domain(const typed::basic_set &uset) const; + inline typed::union_map gist_domain(const typed::point &uset) const; + inline typed::union_map gist_domain(const typed::set &uset) const; + inline typed::union_map gist_params(const typed::set<> &set) const; + inline typed::union_map gist_params(const typed::basic_set<> &set) const; + inline typed::union_map gist_params(const typed::point<> &set) const; + inline typed::union_map intersect(const typed::union_map &umap2) const; + inline typed::union_map intersect(const typed::basic_map &umap2) const; + inline typed::union_map intersect(const typed::map &umap2) const; + inline typed::union_map intersect_domain(const typed::space &space) const; + inline typed::union_map intersect_domain(const typed::union_set &uset) const; + inline typed::union_map intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::union_map intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map intersect_params(const typed::set<> &set) const; + inline typed::union_map intersect_params(const typed::basic_set<> &set) const; + inline typed::union_map intersect_params(const typed::point<> &set) const; + inline typed::union_map intersect_range(const typed::space &space) const; + inline typed::union_map intersect_range(const typed::union_set &uset) const; + inline typed::union_map intersect_range_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::union_map intersect_range_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map lexmax() const; + inline typed::union_map lexmin() const; + inline typed::map_list map_list() const; + inline typed::map_list get_map_list() const = delete; + inline typed::set<> params() const; + template + inline typed::union_map preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::union_map preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::union_map preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_map preimage_range(const typed::multi_aff &ma) const; + template + inline typed::union_map preimage_range(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_map, pair> product(const typed::union_map &umap2) const; + template + inline typed::union_map, pair> product(const typed::basic_map &umap2) const; + template + inline typed::union_map, pair> product(const typed::map &umap2) const; + inline typed::union_map project_out_all_params() const; + inline typed::union_map project_out_param(const typed::id &id) const; + inline typed::union_map project_out_param(const std::string &id) const; + inline typed::union_map project_out_param(const typed::id_list &list) const; + inline typed::union_set range() const; + inline typed::union_map range_factor_domain() const = delete; + inline typed::union_map range_factor_range() const = delete; + inline typed::union_map, Domain> range_map() const; + template + inline typed::union_map> range_product(const typed::union_map &umap2) const; + template + inline typed::union_map> range_product(const typed::basic_map &umap2) const; + template + inline typed::union_map> range_product(const typed::map &umap2) const; + inline typed::union_map range_reverse() const = delete; + inline typed::union_map reverse() const; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::union_map subtract(const typed::union_map &umap2) const; + inline typed::union_map subtract(const typed::basic_map &umap2) const; + inline typed::union_map subtract(const typed::map &umap2) const; + inline typed::union_map subtract_domain(const typed::union_set &dom) const; + inline typed::union_map subtract_domain(const typed::basic_set &dom) const; + inline typed::union_map subtract_domain(const typed::point &dom) const; + inline typed::union_map subtract_domain(const typed::set &dom) const; + inline typed::union_map subtract_range(const typed::union_set &dom) const; + inline typed::union_map subtract_range(const typed::basic_set &dom) const; + inline typed::union_map subtract_range(const typed::point &dom) const; + inline typed::union_map subtract_range(const typed::set &dom) const; + inline typed::union_map uncurry() const = delete; + inline typed::union_map unite(const typed::union_map &umap2) const; + inline typed::union_map unite(const typed::basic_map &umap2) const; + inline typed::union_map unite(const typed::map &umap2) const; + inline typed::union_map universe() const; + inline typed::union_set> wrap() const; +}; + +template +struct union_map> : public isl::union_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + union_map(const union_map> &obj) : isl::union_map(obj) {} + private: + template {}, bool>::type = true> + union_map(const base &obj) : isl::union_map(obj) {} + public: + static union_map from(const isl::union_map &obj) { + return union_map(obj); + } + inline /* implicit */ union_map(const typed::basic_map> &bmap); + inline /* implicit */ union_map(const typed::map> &map); + inline explicit union_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_map> apply_domain(const typed::union_map &umap2) const; + template + inline typed::union_map> apply_domain(const typed::basic_map &umap2) const; + template + inline typed::union_map> apply_domain(const typed::map &umap2) const; + template + inline typed::union_map apply_range(const typed::union_map, Arg3> &umap2) const; + template + inline typed::union_map apply_range(const typed::basic_map, Arg3> &umap2) const; + template + inline typed::union_map apply_range(const typed::map, Arg3> &umap2) const; + inline typed::map> as_map() const; + inline typed::multi_union_pw_aff> as_multi_union_pw_aff() const; + inline typed::union_pw_multi_aff> as_union_pw_multi_aff() const; + inline typed::union_set bind_range(const typed::multi_id> &tuple) const; + inline typed::union_map> coalesce() const; + inline typed::union_map> curry() const = delete; + inline typed::union_set> deltas() const = delete; + inline typed::union_map> detect_equalities() const; + inline typed::union_set domain() const; + inline typed::union_map> domain_factor_domain() const = delete; + inline typed::union_map> domain_factor_range() const = delete; + inline typed::union_map>, Domain> domain_map() const; + inline typed::union_pw_multi_aff>, Domain> domain_map_union_pw_multi_aff() const; + template + inline typed::union_map, pair> domain_product(const typed::union_map> &umap2) const; + template + inline typed::union_map, pair> domain_product(const typed::basic_map> &umap2) const; + template + inline typed::union_map, pair> domain_product(const typed::map> &umap2) const; + inline typed::union_map> domain_reverse() const = delete; + inline typed::union_map> drop_unused_params() const; + static inline typed::union_map> empty(const isl::ctx &ctx); + inline typed::union_map> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::union_map> eq_at(const typed::multi_pw_aff<> &mupa) const = delete; + inline typed::union_map> eq_at(const typed::union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function>)> &test) const; + inline typed::map> extract_map(const typed::space> &space) const; + inline void foreach_map(const std::function>)> &fn) const; + inline typed::union_map> gist(const typed::union_map> &context) const; + inline typed::union_map> gist(const typed::basic_map> &context) const; + inline typed::union_map> gist(const typed::map> &context) const; + inline typed::union_map> gist_domain(const typed::union_set &uset) const; + inline typed::union_map> gist_domain(const typed::basic_set &uset) const; + inline typed::union_map> gist_domain(const typed::point &uset) const; + inline typed::union_map> gist_domain(const typed::set &uset) const; + inline typed::union_map> gist_params(const typed::set<> &set) const; + inline typed::union_map> gist_params(const typed::basic_set<> &set) const; + inline typed::union_map> gist_params(const typed::point<> &set) const; + inline typed::union_map> intersect(const typed::union_map> &umap2) const; + inline typed::union_map> intersect(const typed::basic_map> &umap2) const; + inline typed::union_map> intersect(const typed::map> &umap2) const; + inline typed::union_map> intersect_domain(const typed::space &space) const; + inline typed::union_map> intersect_domain(const typed::union_set &uset) const; + inline typed::union_map> intersect_domain_wrapped_domain(const typed::union_set<> &domain) const = delete; + inline typed::union_map> intersect_domain_wrapped_domain(const typed::basic_set<> &domain) const = delete; + inline typed::union_map> intersect_domain_wrapped_domain(const typed::point<> &domain) const = delete; + inline typed::union_map> intersect_domain_wrapped_domain(const typed::set<> &domain) const = delete; + inline typed::union_map> intersect_params(const typed::set<> &set) const; + inline typed::union_map> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_map> intersect_params(const typed::point<> &set) const; + inline typed::union_map> intersect_range(const typed::space> &space) const; + inline typed::union_map> intersect_range(const typed::union_set> &uset) const; + inline typed::union_map> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::union_map> intersect_range_wrapped_domain(const typed::basic_set &domain) const; + inline typed::union_map> intersect_range_wrapped_domain(const typed::point &domain) const; + inline typed::union_map> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map> lexmax() const; + inline typed::union_map> lexmin() const; + inline typed::map_list> map_list() const; + inline typed::map_list> get_map_list() const = delete; + inline typed::set<> params() const; + template + inline typed::union_map> preimage_domain(const typed::multi_aff &ma) const; + template + inline typed::union_map> preimage_domain(const typed::multi_pw_aff &mpa) const; + template + inline typed::union_map> preimage_domain(const typed::pw_multi_aff &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_map preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::union_map preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_map, pair, Arg3>> product(const typed::union_map &umap2) const; + template + inline typed::union_map, pair, Arg3>> product(const typed::basic_map &umap2) const; + template + inline typed::union_map, pair, Arg3>> product(const typed::map &umap2) const; + inline typed::union_map> project_out_all_params() const; + inline typed::union_map> project_out_param(const typed::id &id) const; + inline typed::union_map> project_out_param(const std::string &id) const; + inline typed::union_map> project_out_param(const typed::id_list &list) const; + inline typed::union_set> range() const; + inline typed::union_map range_factor_domain() const; + inline typed::union_map range_factor_range() const; + inline typed::union_map>, pair> range_map() const; + template + inline typed::union_map, Arg3>> range_product(const typed::union_map &umap2) const; + template + inline typed::union_map, Arg3>> range_product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Arg3>> range_product(const typed::map &umap2) const; + inline typed::union_map> range_reverse() const; + inline typed::union_map, Domain> reverse() const; + inline typed::space<> space() const; + inline typed::space> get_space() const = delete; + inline typed::union_map> subtract(const typed::union_map> &umap2) const; + inline typed::union_map> subtract(const typed::basic_map> &umap2) const; + inline typed::union_map> subtract(const typed::map> &umap2) const; + inline typed::union_map> subtract_domain(const typed::union_set &dom) const; + inline typed::union_map> subtract_domain(const typed::basic_set &dom) const; + inline typed::union_map> subtract_domain(const typed::point &dom) const; + inline typed::union_map> subtract_domain(const typed::set &dom) const; + inline typed::union_map> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map> subtract_range(const typed::basic_set> &dom) const; + inline typed::union_map> subtract_range(const typed::point> &dom) const; + inline typed::union_map> subtract_range(const typed::set> &dom) const; + inline typed::union_map, Range2> uncurry() const; + inline typed::union_map> unite(const typed::union_map> &umap2) const; + inline typed::union_map> unite(const typed::basic_map> &umap2) const; + inline typed::union_map> unite(const typed::map> &umap2) const; + inline typed::union_map> universe() const; + inline typed::union_set>> wrap() const; +}; + +template +struct union_map, pair> : public isl::union_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_map() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + union_map(const union_map, pair> &obj) : isl::union_map(obj) {} + private: + template {}, bool>::type = true> + union_map(const base &obj) : isl::union_map(obj) {} + public: + static union_map from(const isl::union_map &obj) { + return union_map(obj); + } + inline /* implicit */ union_map(const typed::basic_map, pair> &bmap); + inline /* implicit */ union_map(const typed::map, pair> &map); + inline explicit union_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_map> apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::union_map> apply_domain(const typed::basic_map, Domain2> &umap2) const; + template + inline typed::union_map> apply_domain(const typed::map, Domain2> &umap2) const; + template + inline typed::union_map, Range2> apply_range(const typed::union_map, Range2> &umap2) const; + template + inline typed::union_map, Range2> apply_range(const typed::basic_map, Range2> &umap2) const; + template + inline typed::union_map, Range2> apply_range(const typed::map, Range2> &umap2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::union_pw_multi_aff, pair> as_union_pw_multi_aff() const; + inline typed::union_set> bind_range(const typed::multi_id> &tuple) const; + inline typed::union_map, pair> coalesce() const; + inline typed::union_map>> curry() const; + inline typed::union_set> deltas() const; + inline typed::union_map, pair> detect_equalities() const; + inline typed::union_set> domain() const; + inline typed::union_map> domain_factor_domain() const; + inline typed::union_map> domain_factor_range() const; + inline typed::union_map, pair>, pair> domain_map() const; + inline typed::union_pw_multi_aff, pair>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::union_map> &umap2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::basic_map> &umap2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::map> &umap2) const; + inline typed::union_map, pair> domain_reverse() const; + inline typed::union_map, pair> drop_unused_params() const; + static inline typed::union_map, pair> empty(const isl::ctx &ctx); + template + inline typed::union_map, pair> eq_at(const typed::multi_union_pw_aff, Range> &mupa) const; + template + inline typed::union_map, pair> eq_at(const typed::multi_pw_aff, Range> &mupa) const; + inline typed::union_map, pair> eq_at(const typed::union_pw_aff, Anonymous> &mupa) const; + inline bool every_map(const std::function, pair>)> &test) const; + inline typed::map, pair> extract_map(const typed::space, pair> &space) const; + inline void foreach_map(const std::function, pair>)> &fn) const; + inline typed::union_map, pair> gist(const typed::union_map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::basic_map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::map, pair> &context) const; + inline typed::union_map, pair> gist_domain(const typed::union_set> &uset) const; + inline typed::union_map, pair> gist_domain(const typed::basic_set> &uset) const; + inline typed::union_map, pair> gist_domain(const typed::point> &uset) const; + inline typed::union_map, pair> gist_domain(const typed::set> &uset) const; + inline typed::union_map, pair> gist_params(const typed::set<> &set) const; + inline typed::union_map, pair> gist_params(const typed::basic_set<> &set) const; + inline typed::union_map, pair> gist_params(const typed::point<> &set) const; + inline typed::union_map, pair> intersect(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> intersect(const typed::basic_map, pair> &umap2) const; + inline typed::union_map, pair> intersect(const typed::map, pair> &umap2) const; + inline typed::union_map, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_map, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::basic_set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::point &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_params(const typed::set<> &set) const; + inline typed::union_map, pair> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_map, pair> intersect_params(const typed::point<> &set) const; + inline typed::union_map, pair> intersect_range(const typed::space> &space) const; + inline typed::union_map, pair> intersect_range(const typed::union_set> &uset) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::basic_set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::point &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> lexmax() const; + inline typed::union_map, pair> lexmin() const; + inline typed::map_list, pair> map_list() const; + inline typed::map_list, pair> get_map_list() const = delete; + inline typed::set<> params() const; + template + inline typed::union_map> preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::union_map> preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::union_map> preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_map, Range2> preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::union_map, Range2> preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map, Range2> preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_map, Domain2>, pair, Range2>> product(const typed::union_map &umap2) const; + template + inline typed::union_map, Domain2>, pair, Range2>> product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Domain2>, pair, Range2>> product(const typed::map &umap2) const; + inline typed::union_map, pair> project_out_all_params() const; + inline typed::union_map, pair> project_out_param(const typed::id &id) const; + inline typed::union_map, pair> project_out_param(const std::string &id) const; + inline typed::union_map, pair> project_out_param(const typed::id_list &list) const; + inline typed::union_set> range() const; + inline typed::union_map, T1> range_factor_domain() const; + inline typed::union_map, T2> range_factor_range() const; + inline typed::union_map, pair>, pair> range_map() const; + template + inline typed::union_map, pair, Range2>> range_product(const typed::union_map, Range2> &umap2) const; + template + inline typed::union_map, pair, Range2>> range_product(const typed::basic_map, Range2> &umap2) const; + template + inline typed::union_map, pair, Range2>> range_product(const typed::map, Range2> &umap2) const; + inline typed::union_map, pair> range_reverse() const; + inline typed::union_map, pair> reverse() const; + inline typed::space<> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::union_map, pair> subtract(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> subtract(const typed::basic_map, pair> &umap2) const; + inline typed::union_map, pair> subtract(const typed::map, pair> &umap2) const; + inline typed::union_map, pair> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_domain(const typed::basic_set> &dom) const; + inline typed::union_map, pair> subtract_domain(const typed::point> &dom) const; + inline typed::union_map, pair> subtract_domain(const typed::set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::basic_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::point> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::set> &dom) const; + inline typed::union_map, T1>, T2> uncurry() const; + inline typed::union_map, pair> unite(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> unite(const typed::basic_map, pair> &umap2) const; + inline typed::union_map, pair> unite(const typed::map, pair> &umap2) const; + inline typed::union_map, pair> universe() const; + inline typed::union_set, pair>> wrap() const; +}; + +template +struct union_map, pair> : public isl::union_map { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_map() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + union_map(const union_map, pair> &obj) : isl::union_map(obj) {} + private: + template {}, bool>::type = true> + union_map(const base &obj) : isl::union_map(obj) {} + public: + static union_map from(const isl::union_map &obj) { + return union_map(obj); + } + inline /* implicit */ union_map(const typed::basic_map, pair> &bmap); + inline /* implicit */ union_map(const typed::map, pair> &map); + inline explicit union_map(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_map> apply_domain(const typed::union_map, Domain2> &umap2) const; + template + inline typed::union_map> apply_domain(const typed::basic_map, Domain2> &umap2) const; + template + inline typed::union_map> apply_domain(const typed::map, Domain2> &umap2) const; + template + inline typed::union_map, Arg2> apply_range(const typed::union_map, Arg2> &umap2) const; + template + inline typed::union_map, Arg2> apply_range(const typed::basic_map, Arg2> &umap2) const; + template + inline typed::union_map, Arg2> apply_range(const typed::map, Arg2> &umap2) const; + inline typed::map, pair> as_map() const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::union_pw_multi_aff, pair> as_union_pw_multi_aff() const; + inline typed::union_set> bind_range(const typed::multi_id> &tuple) const; + inline typed::union_map, pair> coalesce() const; + inline typed::union_map>> curry() const; + inline typed::union_set, pair> deltas() const = delete; + inline typed::union_map, pair> detect_equalities() const; + inline typed::union_set> domain() const; + inline typed::union_map> domain_factor_domain() const; + inline typed::union_map> domain_factor_range() const; + inline typed::union_map, pair>, pair> domain_map() const; + inline typed::union_pw_multi_aff, pair>, pair> domain_map_union_pw_multi_aff() const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::union_map> &umap2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::basic_map> &umap2) const; + template + inline typed::union_map, Domain2>, pair> domain_product(const typed::map> &umap2) const; + inline typed::union_map, pair> domain_reverse() const; + inline typed::union_map, pair> drop_unused_params() const; + static inline typed::union_map, pair> empty(const isl::ctx &ctx); + inline typed::union_map, pair> eq_at(const typed::multi_union_pw_aff<> &mupa) const = delete; + inline typed::union_map, pair> eq_at(const typed::multi_pw_aff<> &mupa) const = delete; + inline typed::union_map, pair> eq_at(const typed::union_pw_aff<> &mupa) const = delete; + inline bool every_map(const std::function, pair>)> &test) const; + inline typed::map, pair> extract_map(const typed::space, pair> &space) const; + inline void foreach_map(const std::function, pair>)> &fn) const; + inline typed::union_map, pair> gist(const typed::union_map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::basic_map, pair> &context) const; + inline typed::union_map, pair> gist(const typed::map, pair> &context) const; + inline typed::union_map, pair> gist_domain(const typed::union_set> &uset) const; + inline typed::union_map, pair> gist_domain(const typed::basic_set> &uset) const; + inline typed::union_map, pair> gist_domain(const typed::point> &uset) const; + inline typed::union_map, pair> gist_domain(const typed::set> &uset) const; + inline typed::union_map, pair> gist_params(const typed::set<> &set) const; + inline typed::union_map, pair> gist_params(const typed::basic_set<> &set) const; + inline typed::union_map, pair> gist_params(const typed::point<> &set) const; + inline typed::union_map, pair> intersect(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> intersect(const typed::basic_map, pair> &umap2) const; + inline typed::union_map, pair> intersect(const typed::map, pair> &umap2) const; + inline typed::union_map, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_map, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::union_set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::basic_set &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::point &domain) const; + inline typed::union_map, pair> intersect_domain_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> intersect_params(const typed::set<> &set) const; + inline typed::union_map, pair> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_map, pair> intersect_params(const typed::point<> &set) const; + inline typed::union_map, pair> intersect_range(const typed::space> &space) const; + inline typed::union_map, pair> intersect_range(const typed::union_set> &uset) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::union_set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::basic_set &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::point &domain) const; + inline typed::union_map, pair> intersect_range_wrapped_domain(const typed::set &domain) const; + inline typed::union_map, pair> lexmax() const; + inline typed::union_map, pair> lexmin() const; + inline typed::map_list, pair> map_list() const; + inline typed::map_list, pair> get_map_list() const = delete; + inline typed::set<> params() const; + template + inline typed::union_map> preimage_domain(const typed::multi_aff> &ma) const; + template + inline typed::union_map> preimage_domain(const typed::multi_pw_aff> &mpa) const; + template + inline typed::union_map> preimage_domain(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map> preimage_domain(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_map, Arg2> preimage_range(const typed::multi_aff> &ma) const; + template + inline typed::union_map, Arg2> preimage_range(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_map, Arg2> preimage_range(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_map, Domain2>, pair, Arg2>> product(const typed::union_map &umap2) const; + template + inline typed::union_map, Domain2>, pair, Arg2>> product(const typed::basic_map &umap2) const; + template + inline typed::union_map, Domain2>, pair, Arg2>> product(const typed::map &umap2) const; + inline typed::union_map, pair> project_out_all_params() const; + inline typed::union_map, pair> project_out_param(const typed::id &id) const; + inline typed::union_map, pair> project_out_param(const std::string &id) const; + inline typed::union_map, pair> project_out_param(const typed::id_list &list) const; + inline typed::union_set> range() const; + inline typed::union_map, Range> range_factor_domain() const; + inline typed::union_map, Range2> range_factor_range() const; + inline typed::union_map, pair>, pair> range_map() const; + template + inline typed::union_map, pair, Arg2>> range_product(const typed::union_map, Arg2> &umap2) const; + template + inline typed::union_map, pair, Arg2>> range_product(const typed::basic_map, Arg2> &umap2) const; + template + inline typed::union_map, pair, Arg2>> range_product(const typed::map, Arg2> &umap2) const; + inline typed::union_map, pair> range_reverse() const; + inline typed::union_map, pair> reverse() const; + inline typed::space<> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::union_map, pair> subtract(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> subtract(const typed::basic_map, pair> &umap2) const; + inline typed::union_map, pair> subtract(const typed::map, pair> &umap2) const; + inline typed::union_map, pair> subtract_domain(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_domain(const typed::basic_set> &dom) const; + inline typed::union_map, pair> subtract_domain(const typed::point> &dom) const; + inline typed::union_map, pair> subtract_domain(const typed::set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::union_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::basic_set> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::point> &dom) const; + inline typed::union_map, pair> subtract_range(const typed::set> &dom) const; + inline typed::union_map, Range>, Range2> uncurry() const; + inline typed::union_map, pair> unite(const typed::union_map, pair> &umap2) const; + inline typed::union_map, pair> unite(const typed::basic_map, pair> &umap2) const; + inline typed::union_map, pair> unite(const typed::map, pair> &umap2) const; + inline typed::union_map, pair> universe() const; + inline typed::union_set, pair>> wrap() const; +}; + +template <> +struct union_pw_aff : public isl::union_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_aff() = default; + union_pw_aff(const isl::union_pw_aff &obj) : isl::union_pw_aff(obj) {} + static union_pw_aff from(const isl::union_pw_aff &obj) { + return union_pw_aff(obj); + } + inline /* implicit */ union_pw_aff(const typed::aff &aff); + inline /* implicit */ union_pw_aff(const typed::pw_aff &pa); + inline explicit union_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::union_pw_aff add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_aff add(const typed::aff &upa2) const; + inline typed::union_pw_aff add(const typed::pw_aff &upa2) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_map as_union_map() const = delete; + inline typed::union_pw_aff at(int pos) const; + inline typed::union_set<> bind(const typed::multi_id &tuple) const; + inline typed::union_set<> bind(const typed::id &id) const; + inline typed::union_set<> bind(const std::string &id) const; + inline typed::union_pw_aff coalesce() const; + inline typed::union_set<> domain() const; + inline typed::union_pw_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::union_pw_aff gist(const typed::union_set<> &context) const; + inline typed::union_pw_aff gist(const typed::basic_set<> &context) const; + inline typed::union_pw_aff gist(const typed::point<> &context) const; + inline typed::union_pw_aff gist(const typed::set<> &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::set<> &context) const; + inline typed::union_pw_aff intersect_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::basic_set<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::point<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::set<> &uset) const = delete; + inline typed::union_pw_aff intersect_params(const typed::set<> &set) const; + inline typed::union_pw_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_aff intersect_params(const typed::point<> &set) const; + inline typed::union_pw_aff_list list() const; + inline typed::multi_union_pw_aff neg() const; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::union_pw_aff pullback(const typed::multi_aff<> &upma) const = delete; + inline typed::union_pw_aff pullback(const typed::pw_multi_aff<> &upma) const = delete; + inline typed::union_pw_aff pullback(const typed::union_pw_aff<> &upma) const = delete; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::union_pw_multi_aff range_factor_domain() const = delete; + inline typed::union_pw_multi_aff range_factor_range() const = delete; + inline typed::multi_union_pw_aff range_product(const typed::multi_union_pw_aff<> &multi2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::multi_union_pw_aff scale(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale(const typed::val &v) const; + inline typed::multi_union_pw_aff scale(long v) const; + inline typed::multi_union_pw_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale_down(const typed::val &v) const; + inline typed::multi_union_pw_aff scale_down(long v) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::union_pw_aff sub(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_aff sub(const typed::aff &upa2) const; + inline typed::union_pw_aff sub(const typed::pw_aff &upa2) const; + inline typed::union_pw_aff subtract_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_aff subtract_domain(const typed::union_set<> &uset) const = delete; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::union_pw_aff union_add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_aff union_add(const typed::aff &upa2) const; + inline typed::union_pw_aff union_add(const typed::pw_aff &upa2) const; +}; + +template +struct union_pw_aff : public isl::union_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_aff() = default; + template {}, + bool>::type = true> + union_pw_aff(const union_pw_aff &obj) : isl::union_pw_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_aff(const base &obj) : isl::union_pw_aff(obj) {} + public: + static union_pw_aff from(const isl::union_pw_aff &obj) { + return union_pw_aff(obj); + } + inline /* implicit */ union_pw_aff(const typed::aff &aff); + inline /* implicit */ union_pw_aff(const typed::pw_aff &pa); + inline explicit union_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_union_pw_aff add(const typed::multi_union_pw_aff &multi2) const; + inline typed::union_pw_aff add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_aff add(const typed::aff &upa2) const; + inline typed::union_pw_aff add(const typed::pw_aff &upa2) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_map as_union_map() const; + inline typed::union_pw_aff at(int pos) const; + inline typed::union_set bind(const typed::multi_id &tuple) const; + inline typed::union_set bind(const typed::id &id) const; + inline typed::union_set bind(const std::string &id) const; + inline typed::union_pw_aff coalesce() const; + inline typed::union_set domain() const; + inline typed::union_pw_aff drop_unused_params() const; + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::union_pw_aff gist(const typed::union_set &context) const; + inline typed::union_pw_aff gist(const typed::basic_set &context) const; + inline typed::union_pw_aff gist(const typed::point &context) const; + inline typed::union_pw_aff gist(const typed::set &context) const; + inline typed::multi_union_pw_aff gist_params(const typed::set<> &context) const; + inline typed::union_pw_aff intersect_domain(const typed::space &space) const; + inline typed::union_pw_aff intersect_domain(const typed::union_set &uset) const; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::basic_set<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::point<> &uset) const = delete; + inline typed::union_pw_aff intersect_domain_wrapped_domain(const typed::set<> &uset) const = delete; + inline typed::union_pw_aff intersect_params(const typed::set<> &set) const; + inline typed::union_pw_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_aff intersect_params(const typed::point<> &set) const; + inline typed::union_pw_aff_list list() const; + inline typed::multi_union_pw_aff neg() const; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + template + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff &upma) const; + template + inline typed::union_pw_aff pullback(const typed::multi_aff &upma) const; + inline typed::union_pw_aff pullback(const typed::multi_aff &upma) const; + template + inline typed::union_pw_aff pullback(const typed::pw_multi_aff &upma) const; + inline typed::union_pw_aff pullback(const typed::pw_multi_aff &upma) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_aff &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_aff &upma) const; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::union_pw_multi_aff range_factor_domain() const = delete; + inline typed::union_pw_multi_aff range_factor_range() const = delete; + template + inline typed::multi_union_pw_aff> range_product(const typed::multi_union_pw_aff &multi2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_union_pw_aff scale(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale(const typed::val &v) const; + inline typed::multi_union_pw_aff scale(long v) const; + inline typed::multi_union_pw_aff scale_down(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff scale_down(const typed::val &v) const; + inline typed::multi_union_pw_aff scale_down(long v) const; + inline typed::multi_union_pw_aff set_at(int pos, const typed::union_pw_aff &el) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const typed::id &id) const; + template + inline typed::multi_union_pw_aff set_range_tuple(const std::string &id) const; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::multi_union_pw_aff sub(const typed::multi_union_pw_aff &multi2) const; + inline typed::union_pw_aff sub(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_aff sub(const typed::aff &upa2) const; + inline typed::union_pw_aff sub(const typed::pw_aff &upa2) const; + inline typed::union_pw_aff subtract_domain(const typed::space &space) const; + inline typed::union_pw_aff subtract_domain(const typed::union_set &uset) const; + inline typed::multi_union_pw_aff union_add(const typed::multi_union_pw_aff &mupa2) const; + inline typed::union_pw_aff union_add(const typed::union_pw_aff &upa2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_aff union_add(const typed::aff &upa2) const; + inline typed::union_pw_aff union_add(const typed::pw_aff &upa2) const; +}; + +template +struct union_pw_aff, Anonymous> : public isl::union_pw_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + union_pw_aff(const union_pw_aff, Anonymous> &obj) : isl::union_pw_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_aff(const base &obj) : isl::union_pw_aff(obj) {} + public: + static union_pw_aff from(const isl::union_pw_aff &obj) { + return union_pw_aff(obj); + } + inline /* implicit */ union_pw_aff(const typed::aff, Anonymous> &aff); + inline /* implicit */ union_pw_aff(const typed::pw_aff, Anonymous> &pa); + inline explicit union_pw_aff(const isl::ctx &ctx, const std::string &str); + inline typed::multi_union_pw_aff, Anonymous> add(const typed::multi_union_pw_aff, Anonymous> &multi2) const; + inline typed::union_pw_aff, Anonymous> add(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> add(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::union_pw_aff, Anonymous> add(const typed::aff, Anonymous> &upa2) const; + inline typed::union_pw_aff, Anonymous> add(const typed::pw_aff, Anonymous> &upa2) const; + template + inline typed::union_pw_multi_aff, Range2> apply(const typed::union_pw_multi_aff &upma2) const; + inline typed::multi_union_pw_aff, Anonymous> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Anonymous> as_pw_multi_aff() const; + inline typed::union_map, Anonymous> as_union_map() const; + inline typed::union_pw_aff, Anonymous> at(int pos) const; + inline typed::union_set> bind(const typed::multi_id &tuple) const; + inline typed::union_set> bind(const typed::id &id) const; + inline typed::union_set> bind(const std::string &id) const; + inline typed::union_pw_aff, Anonymous> coalesce() const; + inline typed::union_set> domain() const; + inline typed::union_pw_aff, Anonymous> drop_unused_params() const; + inline typed::pw_multi_aff, Anonymous> extract_pw_multi_aff(const typed::space, Anonymous> &space) const; + inline typed::union_pw_aff, Anonymous> gist(const typed::union_set> &context) const; + inline typed::union_pw_aff, Anonymous> gist(const typed::basic_set> &context) const; + inline typed::union_pw_aff, Anonymous> gist(const typed::point> &context) const; + inline typed::union_pw_aff, Anonymous> gist(const typed::set> &context) const; + inline typed::multi_union_pw_aff, Anonymous> gist_params(const typed::set<> &context) const; + inline typed::union_pw_aff, Anonymous> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_aff, Anonymous> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_pw_aff, Anonymous> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::union_pw_aff, Anonymous> intersect_domain_wrapped_domain(const typed::basic_set &uset) const; + inline typed::union_pw_aff, Anonymous> intersect_domain_wrapped_domain(const typed::point &uset) const; + inline typed::union_pw_aff, Anonymous> intersect_domain_wrapped_domain(const typed::set &uset) const; + inline typed::union_pw_aff, Anonymous> intersect_params(const typed::set<> &set) const; + inline typed::union_pw_aff, Anonymous> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_aff, Anonymous> intersect_params(const typed::point<> &set) const; + inline typed::union_pw_aff_list, Anonymous> list() const; + inline typed::multi_union_pw_aff, Anonymous> neg() const; + template + inline typed::union_pw_multi_aff, Anonymous> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_multi_aff> &upma) const; + template + inline typed::union_pw_aff pullback(const typed::multi_aff> &upma) const; + inline typed::union_pw_aff pullback(const typed::multi_aff> &upma) const; + template + inline typed::union_pw_aff pullback(const typed::pw_multi_aff> &upma) const; + inline typed::union_pw_aff pullback(const typed::pw_multi_aff> &upma) const; + template + inline typed::union_pw_aff pullback(const typed::union_pw_aff> &upma) const; + inline typed::union_pw_aff pullback(const typed::union_pw_aff> &upma) const; + inline typed::pw_multi_aff_list, Anonymous> pw_multi_aff_list() const; + inline typed::union_pw_multi_aff, Anonymous> range_factor_domain() const = delete; + inline typed::union_pw_multi_aff, Anonymous> range_factor_range() const = delete; + template + inline typed::multi_union_pw_aff, pair> range_product(const typed::multi_union_pw_aff, Range2> &multi2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_multi_aff, Range2> &upma2) const; + inline typed::multi_union_pw_aff, Anonymous> scale(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff, Anonymous> scale(const typed::val &v) const; + inline typed::multi_union_pw_aff, Anonymous> scale(long v) const; + inline typed::multi_union_pw_aff, Anonymous> scale_down(const typed::multi_val &mv) const; + inline typed::multi_union_pw_aff, Anonymous> scale_down(const typed::val &v) const; + inline typed::multi_union_pw_aff, Anonymous> scale_down(long v) const; + inline typed::multi_union_pw_aff, Anonymous> set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const; + template + inline typed::multi_union_pw_aff, Range2> set_range_tuple(const typed::id &id) const; + template + inline typed::multi_union_pw_aff, Range2> set_range_tuple(const std::string &id) const; + inline typed::space<> space() const; + inline typed::space, Anonymous> get_space() const = delete; + inline typed::multi_union_pw_aff, Anonymous> sub(const typed::multi_union_pw_aff, Anonymous> &multi2) const; + inline typed::union_pw_aff, Anonymous> sub(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> sub(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::union_pw_aff, Anonymous> sub(const typed::aff, Anonymous> &upa2) const; + inline typed::union_pw_aff, Anonymous> sub(const typed::pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_aff, Anonymous> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_aff, Anonymous> subtract_domain(const typed::union_set> &uset) const; + inline typed::multi_union_pw_aff, Anonymous> union_add(const typed::multi_union_pw_aff, Anonymous> &mupa2) const; + inline typed::union_pw_aff, Anonymous> union_add(const typed::union_pw_aff, Anonymous> &upa2) const; + inline typed::union_pw_multi_aff, Anonymous> union_add(const typed::union_pw_multi_aff, Anonymous> &upma2) const; + inline typed::union_pw_aff, Anonymous> union_add(const typed::aff, Anonymous> &upa2) const; + inline typed::union_pw_aff, Anonymous> union_add(const typed::pw_aff, Anonymous> &upa2) const; +}; + +template <> +struct union_pw_aff_list : public isl::union_pw_aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_aff_list() = default; + union_pw_aff_list(const isl::union_pw_aff_list &obj) : isl::union_pw_aff_list(obj) {} + static union_pw_aff_list from(const isl::union_pw_aff_list &obj) { + return union_pw_aff_list(obj); + } + inline explicit union_pw_aff_list(const isl::ctx &ctx, int n); + inline explicit union_pw_aff_list(const typed::union_pw_aff &el); + inline explicit union_pw_aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_aff_list add(const typed::union_pw_aff &el) const; + inline typed::union_pw_aff_list add(const typed::aff &el) const; + inline typed::union_pw_aff_list add(const typed::pw_aff &el) const; + inline typed::union_pw_aff at(int index) const; + inline typed::union_pw_aff get_at(int index) const = delete; + inline typed::union_pw_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::union_pw_aff)> &follows, const std::function)> &fn) const; + inline typed::union_pw_aff_list set_at(int index, const typed::union_pw_aff &el) const; +}; + +template +struct union_pw_aff_list : public isl::union_pw_aff_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_aff_list() = default; + template {}, + bool>::type = true> + union_pw_aff_list(const union_pw_aff_list &obj) : isl::union_pw_aff_list(obj) {} + private: + template {}, bool>::type = true> + union_pw_aff_list(const base &obj) : isl::union_pw_aff_list(obj) {} + public: + static union_pw_aff_list from(const isl::union_pw_aff_list &obj) { + return union_pw_aff_list(obj); + } + inline explicit union_pw_aff_list(const isl::ctx &ctx, int n); + inline explicit union_pw_aff_list(const typed::union_pw_aff &el); + inline explicit union_pw_aff_list(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_aff_list add(const typed::union_pw_aff &el) const; + inline typed::union_pw_aff_list add(const typed::aff &el) const; + inline typed::union_pw_aff_list add(const typed::pw_aff &el) const; + inline typed::union_pw_aff at(int index) const; + inline typed::union_pw_aff get_at(int index) const = delete; + inline typed::union_pw_aff_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::union_pw_aff)> &follows, const std::function)> &fn) const; + inline typed::union_pw_aff_list set_at(int index, const typed::union_pw_aff &el) const; +}; + +template +struct union_pw_multi_aff : public isl::union_pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_multi_aff() = default; + template {}, + bool>::type = true> + union_pw_multi_aff(const union_pw_multi_aff &obj) : isl::union_pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {} + public: + static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) { + return union_pw_multi_aff(obj); + } + inline /* implicit */ union_pw_multi_aff(const typed::multi_aff &ma); + inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff &pma); + inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff &upa); + inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff add(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff add(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_aff &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff apply(const typed::union_pw_aff &upma2) const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_map as_union_map() const = delete; + inline typed::union_pw_multi_aff coalesce() const; + inline typed::union_set<> domain() const; + inline typed::union_pw_multi_aff drop_unused_params() const; + static inline typed::union_pw_multi_aff empty(const isl::ctx &ctx); + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::union_pw_multi_aff gist(const typed::union_set<> &context) const; + inline typed::union_pw_multi_aff gist(const typed::basic_set<> &context) const; + inline typed::union_pw_multi_aff gist(const typed::point<> &context) const; + inline typed::union_pw_multi_aff gist(const typed::set<> &context) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_multi_aff intersect_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::basic_set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::point<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_params(const typed::set<> &set) const; + inline typed::union_pw_multi_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_multi_aff intersect_params(const typed::point<> &set) const; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff pullback(const typed::multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff pullback(const typed::pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_aff<> &upma2) const = delete; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff_list get_pw_multi_aff_list() const = delete; + inline typed::union_pw_multi_aff range_factor_domain() const = delete; + inline typed::union_pw_multi_aff range_factor_range() const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff range_product(const typed::union_pw_aff<> &upma2) const = delete; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff sub(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff sub(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_aff &upma2) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::space<> &space) const = delete; + inline typed::union_pw_multi_aff subtract_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff union_add(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff union_add(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_aff &upma2) const; +}; + +template +struct union_pw_multi_aff : public isl::union_pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_multi_aff() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + union_pw_multi_aff(const union_pw_multi_aff &obj) : isl::union_pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {} + public: + static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) { + return union_pw_multi_aff(obj); + } + inline /* implicit */ union_pw_multi_aff(const typed::multi_aff &ma); + inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff &pma); + inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff &upa); + inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_multi_aff add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff add(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff add(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff add(const typed::union_pw_aff &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff apply(const typed::union_pw_aff &upma2) const; + inline typed::multi_union_pw_aff as_multi_union_pw_aff() const; + inline typed::pw_multi_aff as_pw_multi_aff() const; + inline typed::union_map as_union_map() const; + inline typed::union_pw_multi_aff coalesce() const; + inline typed::union_set domain() const; + inline typed::union_pw_multi_aff drop_unused_params() const; + static inline typed::union_pw_multi_aff empty(const isl::ctx &ctx); + inline typed::pw_multi_aff extract_pw_multi_aff(const typed::space &space) const; + inline typed::union_pw_multi_aff gist(const typed::union_set &context) const; + inline typed::union_pw_multi_aff gist(const typed::basic_set &context) const; + inline typed::union_pw_multi_aff gist(const typed::point &context) const; + inline typed::union_pw_multi_aff gist(const typed::set &context) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff intersect_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::basic_set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::point<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_domain_wrapped_domain(const typed::set<> &uset) const = delete; + inline typed::union_pw_multi_aff intersect_params(const typed::set<> &set) const; + inline typed::union_pw_multi_aff intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_multi_aff intersect_params(const typed::point<> &set) const; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff preimage_domain_wrapped_domain(const typed::union_pw_aff<> &upma2) const = delete; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_aff &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_aff &upma2) const; + inline typed::pw_multi_aff_list pw_multi_aff_list() const; + inline typed::pw_multi_aff_list get_pw_multi_aff_list() const = delete; + inline typed::union_pw_multi_aff range_factor_domain() const = delete; + inline typed::union_pw_multi_aff range_factor_range() const = delete; + template + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff> range_product(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff> range_product(const typed::union_pw_aff &upma2) const; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::union_pw_multi_aff sub(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff sub(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff sub(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff sub(const typed::union_pw_aff &upma2) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff subtract_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff union_add(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff union_add(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff union_add(const typed::union_pw_aff &upma2) const; +}; + +template +struct union_pw_multi_aff, Range> : public isl::union_pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + union_pw_multi_aff(const union_pw_multi_aff, Arg3> &obj) : isl::union_pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {} + public: + static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) { + return union_pw_multi_aff(obj); + } + inline /* implicit */ union_pw_multi_aff(const typed::multi_aff, Range> &ma); + inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff, Range> &pma); + inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff, Range> &upa); + inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_multi_aff, Range> add(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> add(const typed::multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> add(const typed::pw_multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> add(const typed::union_pw_aff, Range> &upma2) const; + template + inline typed::union_pw_multi_aff, Range2> apply(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Range2> apply(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Range2> apply(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff, Anonymous> apply(const typed::union_pw_aff &upma2) const; + inline typed::multi_union_pw_aff, Range> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, Range> as_pw_multi_aff() const; + inline typed::union_map, Range> as_union_map() const; + inline typed::union_pw_multi_aff, Range> coalesce() const; + inline typed::union_set> domain() const; + inline typed::union_pw_multi_aff, Range> drop_unused_params() const; + static inline typed::union_pw_multi_aff, Range> empty(const isl::ctx &ctx); + inline typed::pw_multi_aff, Range> extract_pw_multi_aff(const typed::space, Range> &space) const; + inline typed::union_pw_multi_aff, Range> gist(const typed::union_set> &context) const; + inline typed::union_pw_multi_aff, Range> gist(const typed::basic_set> &context) const; + inline typed::union_pw_multi_aff, Range> gist(const typed::point> &context) const; + inline typed::union_pw_multi_aff, Range> gist(const typed::set> &context) const; + inline typed::union_pw_multi_aff, Range> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, Range> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_pw_multi_aff, Range> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff, Range> intersect_domain_wrapped_domain(const typed::basic_set &uset) const; + inline typed::union_pw_multi_aff, Range> intersect_domain_wrapped_domain(const typed::point &uset) const; + inline typed::union_pw_multi_aff, Range> intersect_domain_wrapped_domain(const typed::set &uset) const; + inline typed::union_pw_multi_aff, Range> intersect_params(const typed::set<> &set) const; + inline typed::union_pw_multi_aff, Range> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_multi_aff, Range> intersect_params(const typed::point<> &set) const; + template + inline typed::union_pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Range> preimage_domain_wrapped_domain(const typed::union_pw_aff &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_multi_aff> &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::multi_aff> &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::multi_aff> &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::pw_multi_aff> &upma2) const; + template + inline typed::union_pw_multi_aff pullback(const typed::union_pw_aff> &upma2) const; + inline typed::union_pw_multi_aff pullback(const typed::union_pw_aff> &upma2) const; + inline typed::pw_multi_aff_list, Range> pw_multi_aff_list() const; + inline typed::pw_multi_aff_list, Range> get_pw_multi_aff_list() const = delete; + inline typed::union_pw_multi_aff, Range> range_factor_domain() const = delete; + inline typed::union_pw_multi_aff, Range> range_factor_range() const = delete; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_multi_aff, Range2> &upma2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::multi_aff, Range2> &upma2) const; + template + inline typed::union_pw_multi_aff, pair> range_product(const typed::pw_multi_aff, Range2> &upma2) const; + inline typed::union_pw_multi_aff, pair> range_product(const typed::union_pw_aff, Anonymous> &upma2) const; + inline typed::space<> space() const; + inline typed::space, Range> get_space() const = delete; + inline typed::union_pw_multi_aff, Range> sub(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> sub(const typed::multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> sub(const typed::pw_multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> sub(const typed::union_pw_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, Range> subtract_domain(const typed::union_set> &uset) const; + inline typed::union_pw_multi_aff, Range> union_add(const typed::union_pw_multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> union_add(const typed::multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> union_add(const typed::pw_multi_aff, Range> &upma2) const; + inline typed::union_pw_multi_aff, Range> union_add(const typed::union_pw_aff, Range> &upma2) const; +}; + +template +struct union_pw_multi_aff> : public isl::union_pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + union_pw_multi_aff(const union_pw_multi_aff> &obj) : isl::union_pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {} + public: + static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) { + return union_pw_multi_aff(obj); + } + inline /* implicit */ union_pw_multi_aff(const typed::multi_aff> &ma); + inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff> &pma); + inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff> &upa); + inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_multi_aff> add(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> add(const typed::multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> add(const typed::pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> add(const typed::union_pw_aff> &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::union_pw_multi_aff, Arg3> &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::multi_aff, Arg3> &upma2) const; + template + inline typed::union_pw_multi_aff apply(const typed::pw_multi_aff, Arg3> &upma2) const; + inline typed::union_pw_multi_aff apply(const typed::union_pw_aff, Anonymous> &upma2) const; + inline typed::multi_union_pw_aff> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff> as_pw_multi_aff() const; + inline typed::union_map> as_union_map() const; + inline typed::union_pw_multi_aff> coalesce() const; + inline typed::union_set domain() const; + inline typed::union_pw_multi_aff> drop_unused_params() const; + static inline typed::union_pw_multi_aff> empty(const isl::ctx &ctx); + inline typed::pw_multi_aff> extract_pw_multi_aff(const typed::space> &space) const; + inline typed::union_pw_multi_aff> gist(const typed::union_set &context) const; + inline typed::union_pw_multi_aff> gist(const typed::basic_set &context) const; + inline typed::union_pw_multi_aff> gist(const typed::point &context) const; + inline typed::union_pw_multi_aff> gist(const typed::set &context) const; + inline typed::union_pw_multi_aff> intersect_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff> intersect_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff> intersect_domain_wrapped_domain(const typed::union_set<> &uset) const = delete; + inline typed::union_pw_multi_aff> intersect_domain_wrapped_domain(const typed::basic_set<> &uset) const = delete; + inline typed::union_pw_multi_aff> intersect_domain_wrapped_domain(const typed::point<> &uset) const = delete; + inline typed::union_pw_multi_aff> intersect_domain_wrapped_domain(const typed::set<> &uset) const = delete; + inline typed::union_pw_multi_aff> intersect_params(const typed::set<> &set) const; + inline typed::union_pw_multi_aff> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_multi_aff> intersect_params(const typed::point<> &set) const; + inline typed::union_pw_multi_aff> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff> preimage_domain_wrapped_domain(const typed::multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff> preimage_domain_wrapped_domain(const typed::pw_multi_aff<> &upma2) const = delete; + inline typed::union_pw_multi_aff> preimage_domain_wrapped_domain(const typed::union_pw_aff<> &upma2) const = delete; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::multi_aff &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_aff &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_aff &upma2) const; + inline typed::pw_multi_aff_list> pw_multi_aff_list() const; + inline typed::pw_multi_aff_list> get_pw_multi_aff_list() const = delete; + inline typed::union_pw_multi_aff range_factor_domain() const; + inline typed::union_pw_multi_aff range_factor_range() const; + template + inline typed::union_pw_multi_aff, Arg3>> range_product(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Arg3>> range_product(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, Arg3>> range_product(const typed::pw_multi_aff &upma2) const; + inline typed::union_pw_multi_aff, Anonymous>> range_product(const typed::union_pw_aff &upma2) const; + inline typed::space<> space() const; + inline typed::space> get_space() const = delete; + inline typed::union_pw_multi_aff> sub(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> sub(const typed::multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> sub(const typed::pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> sub(const typed::union_pw_aff> &upma2) const; + inline typed::union_pw_multi_aff> subtract_domain(const typed::space &space) const; + inline typed::union_pw_multi_aff> subtract_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff> union_add(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> union_add(const typed::multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> union_add(const typed::pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> union_add(const typed::union_pw_aff> &upma2) const; +}; + +template +struct union_pw_multi_aff, pair> : public isl::union_pw_multi_aff { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_pw_multi_aff() = default; + template {} && + std::is_base_of{} && + std::is_base_of{} && + std::is_base_of{}, + bool>::type = true> + union_pw_multi_aff(const union_pw_multi_aff, pair> &obj) : isl::union_pw_multi_aff(obj) {} + private: + template {}, bool>::type = true> + union_pw_multi_aff(const base &obj) : isl::union_pw_multi_aff(obj) {} + public: + static union_pw_multi_aff from(const isl::union_pw_multi_aff &obj) { + return union_pw_multi_aff(obj); + } + inline /* implicit */ union_pw_multi_aff(const typed::multi_aff, pair> &ma); + inline /* implicit */ union_pw_multi_aff(const typed::pw_multi_aff, pair> &pma); + inline /* implicit */ union_pw_multi_aff(const typed::union_pw_aff, pair> &upa); + inline explicit union_pw_multi_aff(const isl::ctx &ctx, const std::string &str); + inline typed::union_pw_multi_aff, pair> add(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> add(const typed::multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> add(const typed::pw_multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> add(const typed::union_pw_aff, pair> &upma2) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::union_pw_multi_aff, Arg2> &upma2) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::multi_aff, Arg2> &upma2) const; + template + inline typed::union_pw_multi_aff, Arg2> apply(const typed::pw_multi_aff, Arg2> &upma2) const; + inline typed::union_pw_multi_aff, Anonymous> apply(const typed::union_pw_aff, Anonymous> &upma2) const; + inline typed::multi_union_pw_aff, pair> as_multi_union_pw_aff() const; + inline typed::pw_multi_aff, pair> as_pw_multi_aff() const; + inline typed::union_map, pair> as_union_map() const; + inline typed::union_pw_multi_aff, pair> coalesce() const; + inline typed::union_set> domain() const; + inline typed::union_pw_multi_aff, pair> drop_unused_params() const; + static inline typed::union_pw_multi_aff, pair> empty(const isl::ctx &ctx); + inline typed::pw_multi_aff, pair> extract_pw_multi_aff(const typed::space, pair> &space) const; + inline typed::union_pw_multi_aff, pair> gist(const typed::union_set> &context) const; + inline typed::union_pw_multi_aff, pair> gist(const typed::basic_set> &context) const; + inline typed::union_pw_multi_aff, pair> gist(const typed::point> &context) const; + inline typed::union_pw_multi_aff, pair> gist(const typed::set> &context) const; + inline typed::union_pw_multi_aff, pair> intersect_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, pair> intersect_domain(const typed::union_set> &uset) const; + inline typed::union_pw_multi_aff, pair> intersect_domain_wrapped_domain(const typed::union_set &uset) const; + inline typed::union_pw_multi_aff, pair> intersect_domain_wrapped_domain(const typed::basic_set &uset) const; + inline typed::union_pw_multi_aff, pair> intersect_domain_wrapped_domain(const typed::point &uset) const; + inline typed::union_pw_multi_aff, pair> intersect_domain_wrapped_domain(const typed::set &uset) const; + inline typed::union_pw_multi_aff, pair> intersect_params(const typed::set<> &set) const; + inline typed::union_pw_multi_aff, pair> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_pw_multi_aff, pair> intersect_params(const typed::point<> &set) const; + template + inline typed::union_pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::pw_multi_aff &upma2) const; + template + inline typed::union_pw_multi_aff, pair> preimage_domain_wrapped_domain(const typed::union_pw_aff &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_multi_aff> &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::multi_aff> &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::pw_multi_aff> &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::pw_multi_aff> &upma2) const; + template + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_aff> &upma2) const; + inline typed::union_pw_multi_aff> pullback(const typed::union_pw_aff> &upma2) const; + inline typed::pw_multi_aff_list, pair> pw_multi_aff_list() const; + inline typed::pw_multi_aff_list, pair> get_pw_multi_aff_list() const = delete; + inline typed::union_pw_multi_aff, Range> range_factor_domain() const; + inline typed::union_pw_multi_aff, Range2> range_factor_range() const; + template + inline typed::union_pw_multi_aff, pair, Arg2>> range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const; + template + inline typed::union_pw_multi_aff, pair, Arg2>> range_product(const typed::multi_aff, Arg2> &upma2) const; + template + inline typed::union_pw_multi_aff, pair, Arg2>> range_product(const typed::pw_multi_aff, Arg2> &upma2) const; + inline typed::union_pw_multi_aff, pair, Anonymous>> range_product(const typed::union_pw_aff, Anonymous> &upma2) const; + inline typed::space<> space() const; + inline typed::space, pair> get_space() const = delete; + inline typed::union_pw_multi_aff, pair> sub(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> sub(const typed::multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> sub(const typed::pw_multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> sub(const typed::union_pw_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> subtract_domain(const typed::space> &space) const; + inline typed::union_pw_multi_aff, pair> subtract_domain(const typed::union_set> &uset) const; + inline typed::union_pw_multi_aff, pair> union_add(const typed::union_pw_multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> union_add(const typed::multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> union_add(const typed::pw_multi_aff, pair> &upma2) const; + inline typed::union_pw_multi_aff, pair> union_add(const typed::union_pw_aff, pair> &upma2) const; +}; + +template <> +struct union_set<> : public isl::union_set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_set() = default; + private: + template {}, bool>::type = true> + union_set(const base &obj) : isl::union_set(obj) {} + public: + static union_set from(const isl::union_set &obj) { + return union_set(obj); + } + inline /* implicit */ union_set(const typed::basic_set<> &bset); + inline /* implicit */ union_set(const typed::point<> &pnt); + inline /* implicit */ union_set(const typed::set<> &set); + inline explicit union_set(const isl::ctx &ctx, const std::string &str); + inline typed::union_set<> apply(const typed::union_map<> &umap) const = delete; + inline typed::union_set<> apply(const typed::basic_map<> &umap) const = delete; + inline typed::union_set<> apply(const typed::map<> &umap) const = delete; + inline typed::set<> as_set() const = delete; + inline typed::union_set<> coalesce() const; + inline typed::union_set<> detect_equalities() const; + inline typed::union_set<> drop_unused_params() const; + static inline typed::union_set<> empty(const isl::ctx &ctx); + inline bool every_set(const std::function)> &test) const; + inline typed::set<> extract_set(const typed::space<> &space) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::union_set<> gist(const typed::union_set<> &context) const; + inline typed::union_set<> gist(const typed::basic_set<> &context) const; + inline typed::union_set<> gist(const typed::point<> &context) const; + inline typed::union_set<> gist(const typed::set<> &context) const; + inline typed::union_set<> gist_params(const typed::set<> &set) const = delete; + inline typed::union_set<> gist_params(const typed::basic_set<> &set) const = delete; + inline typed::union_set<> gist_params(const typed::point<> &set) const = delete; + inline typed::union_map<> identity() const = delete; + inline typed::union_set<> intersect(const typed::union_set<> &uset2) const; + inline typed::union_set<> intersect(const typed::basic_set<> &uset2) const; + inline typed::union_set<> intersect(const typed::point<> &uset2) const; + inline typed::union_set<> intersect(const typed::set<> &uset2) const; + inline typed::union_set<> intersect_params(const typed::set<> &set) const = delete; + inline typed::union_set<> intersect_params(const typed::basic_set<> &set) const = delete; + inline typed::union_set<> intersect_params(const typed::point<> &set) const = delete; + inline typed::union_set<> lexmax() const = delete; + inline typed::union_set<> lexmin() const = delete; + inline typed::set<> params() const = delete; + inline typed::union_set<> preimage(const typed::multi_aff<> &ma) const = delete; + inline typed::union_set<> preimage(const typed::pw_multi_aff<> &pma) const = delete; + inline typed::union_set<> preimage(const typed::union_pw_multi_aff<> &upma) const = delete; + inline typed::union_set<> project_out_all_params() const; + inline typed::set_list<> set_list() const; + inline typed::set_list<> get_set_list() const = delete; + inline typed::space<> space() const; + inline typed::space<> get_space() const = delete; + inline typed::union_set<> subtract(const typed::union_set<> &uset2) const; + inline typed::union_set<> subtract(const typed::basic_set<> &uset2) const; + inline typed::union_set<> subtract(const typed::point<> &uset2) const; + inline typed::union_set<> subtract(const typed::set<> &uset2) const; + inline typed::union_set<> unite(const typed::union_set<> &uset2) const; + inline typed::union_set<> unite(const typed::basic_set<> &uset2) const; + inline typed::union_set<> unite(const typed::point<> &uset2) const; + inline typed::union_set<> unite(const typed::set<> &uset2) const; + inline typed::union_set<> universe() const; + inline typed::union_map<> unwrap() const = delete; +}; + +template +struct union_set : public isl::union_set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_set() = default; + template {}, + bool>::type = true> + union_set(const union_set &obj) : isl::union_set(obj) {} + private: + template {}, bool>::type = true> + union_set(const base &obj) : isl::union_set(obj) {} + public: + static union_set from(const isl::union_set &obj) { + return union_set(obj); + } + inline /* implicit */ union_set(const typed::basic_set &bset); + inline /* implicit */ union_set(const typed::point &pnt); + inline /* implicit */ union_set(const typed::set &set); + inline explicit union_set(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_set apply(const typed::union_map &umap) const; + template + inline typed::union_set apply(const typed::basic_map &umap) const; + template + inline typed::union_set apply(const typed::map &umap) const; + inline typed::set as_set() const; + inline typed::union_set coalesce() const; + inline typed::union_set detect_equalities() const; + inline typed::union_set drop_unused_params() const; + static inline typed::union_set empty(const isl::ctx &ctx); + inline bool every_set(const std::function)> &test) const; + inline typed::set extract_set(const typed::space &space) const; + inline void foreach_point(const std::function)> &fn) const; + inline void foreach_set(const std::function)> &fn) const; + inline typed::union_set gist(const typed::union_set &context) const; + inline typed::union_set gist(const typed::basic_set &context) const; + inline typed::union_set gist(const typed::point &context) const; + inline typed::union_set gist(const typed::set &context) const; + inline typed::union_set gist_params(const typed::set<> &set) const; + inline typed::union_set gist_params(const typed::basic_set<> &set) const; + inline typed::union_set gist_params(const typed::point<> &set) const; + inline typed::union_map identity() const; + inline typed::union_set intersect(const typed::union_set &uset2) const; + inline typed::union_set intersect(const typed::basic_set &uset2) const; + inline typed::union_set intersect(const typed::point &uset2) const; + inline typed::union_set intersect(const typed::set &uset2) const; + inline typed::union_set intersect_params(const typed::set<> &set) const; + inline typed::union_set intersect_params(const typed::basic_set<> &set) const; + inline typed::union_set intersect_params(const typed::point<> &set) const; + inline typed::union_set lexmax() const; + inline typed::union_set lexmin() const; + inline typed::set<> params() const; + template + inline typed::union_set preimage(const typed::multi_aff &ma) const; + template + inline typed::union_set preimage(const typed::pw_multi_aff &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff &upma) const; + inline typed::union_set project_out_all_params() const; + inline typed::set_list set_list() const; + inline typed::set_list get_set_list() const = delete; + inline typed::space<> space() const; + inline typed::space get_space() const = delete; + inline typed::union_set subtract(const typed::union_set &uset2) const; + inline typed::union_set subtract(const typed::basic_set &uset2) const; + inline typed::union_set subtract(const typed::point &uset2) const; + inline typed::union_set subtract(const typed::set &uset2) const; + inline typed::union_set unite(const typed::union_set &uset2) const; + inline typed::union_set unite(const typed::basic_set &uset2) const; + inline typed::union_set unite(const typed::point &uset2) const; + inline typed::union_set unite(const typed::set &uset2) const; + inline typed::union_set universe() const; + inline typed::union_map unwrap() const = delete; +}; + +template +struct union_set> : public isl::union_set { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_set() = default; + template {} && + std::is_base_of{}, + bool>::type = true> + union_set(const union_set> &obj) : isl::union_set(obj) {} + private: + template {}, bool>::type = true> + union_set(const base &obj) : isl::union_set(obj) {} + public: + static union_set from(const isl::union_set &obj) { + return union_set(obj); + } + inline /* implicit */ union_set(const typed::basic_set> &bset); + inline /* implicit */ union_set(const typed::point> &pnt); + inline /* implicit */ union_set(const typed::set> &set); + inline explicit union_set(const isl::ctx &ctx, const std::string &str); + template + inline typed::union_set apply(const typed::union_map, Arg2> &umap) const; + template + inline typed::union_set apply(const typed::basic_map, Arg2> &umap) const; + template + inline typed::union_set apply(const typed::map, Arg2> &umap) const; + inline typed::set> as_set() const; + inline typed::union_set> coalesce() const; + inline typed::union_set> detect_equalities() const; + inline typed::union_set> drop_unused_params() const; + static inline typed::union_set> empty(const isl::ctx &ctx); + inline bool every_set(const std::function>)> &test) const; + inline typed::set> extract_set(const typed::space> &space) const; + inline void foreach_point(const std::function>)> &fn) const; + inline void foreach_set(const std::function>)> &fn) const; + inline typed::union_set> gist(const typed::union_set> &context) const; + inline typed::union_set> gist(const typed::basic_set> &context) const; + inline typed::union_set> gist(const typed::point> &context) const; + inline typed::union_set> gist(const typed::set> &context) const; + inline typed::union_set> gist_params(const typed::set<> &set) const; + inline typed::union_set> gist_params(const typed::basic_set<> &set) const; + inline typed::union_set> gist_params(const typed::point<> &set) const; + inline typed::union_map, pair> identity() const; + inline typed::union_set> intersect(const typed::union_set> &uset2) const; + inline typed::union_set> intersect(const typed::basic_set> &uset2) const; + inline typed::union_set> intersect(const typed::point> &uset2) const; + inline typed::union_set> intersect(const typed::set> &uset2) const; + inline typed::union_set> intersect_params(const typed::set<> &set) const; + inline typed::union_set> intersect_params(const typed::basic_set<> &set) const; + inline typed::union_set> intersect_params(const typed::point<> &set) const; + inline typed::union_set> lexmax() const; + inline typed::union_set> lexmin() const; + inline typed::set<> params() const; + template + inline typed::union_set preimage(const typed::multi_aff> &ma) const; + template + inline typed::union_set preimage(const typed::pw_multi_aff> &pma) const; + template + inline typed::union_set preimage(const typed::union_pw_multi_aff> &upma) const; + inline typed::union_set> project_out_all_params() const; + inline typed::set_list> set_list() const; + inline typed::set_list> get_set_list() const = delete; + inline typed::space<> space() const; + inline typed::space> get_space() const = delete; + inline typed::union_set> subtract(const typed::union_set> &uset2) const; + inline typed::union_set> subtract(const typed::basic_set> &uset2) const; + inline typed::union_set> subtract(const typed::point> &uset2) const; + inline typed::union_set> subtract(const typed::set> &uset2) const; + inline typed::union_set> unite(const typed::union_set> &uset2) const; + inline typed::union_set> unite(const typed::basic_set> &uset2) const; + inline typed::union_set> unite(const typed::point> &uset2) const; + inline typed::union_set> unite(const typed::set> &uset2) const; + inline typed::union_set> universe() const; + inline typed::union_map unwrap() const; +}; + +template <> +struct union_set_list<> : public isl::union_set_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_set_list() = default; + private: + template {}, bool>::type = true> + union_set_list(const base &obj) : isl::union_set_list(obj) {} + public: + static union_set_list from(const isl::union_set_list &obj) { + return union_set_list(obj); + } + inline explicit union_set_list(const isl::ctx &ctx, int n); + inline explicit union_set_list(const typed::union_set<> &el); + inline explicit union_set_list(const isl::ctx &ctx, const std::string &str); + inline typed::union_set_list<> add(const typed::union_set<> &el) const; + inline typed::union_set_list<> add(const typed::basic_set<> &el) const; + inline typed::union_set_list<> add(const typed::point<> &el) const; + inline typed::union_set_list<> add(const typed::set<> &el) const; + inline typed::union_set<> at(int index) const = delete; + inline typed::union_set<> get_at(int index) const = delete; + inline typed::union_set_list<> drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::union_set<>)> &follows, const std::function)> &fn) const; + inline typed::union_set_list<> set_at(int index, const typed::union_set<> &el) const = delete; +}; + +template +struct union_set_list : public isl::union_set_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + union_set_list() = default; + template {}, + bool>::type = true> + union_set_list(const union_set_list &obj) : isl::union_set_list(obj) {} + private: + template {}, bool>::type = true> + union_set_list(const base &obj) : isl::union_set_list(obj) {} + public: + static union_set_list from(const isl::union_set_list &obj) { + return union_set_list(obj); + } + inline explicit union_set_list(const isl::ctx &ctx, int n); + inline explicit union_set_list(const typed::union_set &el); + inline explicit union_set_list(const isl::ctx &ctx, const std::string &str); + inline typed::union_set_list add(const typed::union_set &el) const; + inline typed::union_set_list add(const typed::basic_set &el) const; + inline typed::union_set_list add(const typed::point &el) const; + inline typed::union_set_list add(const typed::set &el) const; + inline typed::union_set at(int index) const; + inline typed::union_set get_at(int index) const = delete; + inline typed::union_set_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::union_set)> &follows, const std::function)> &fn) const; + inline typed::union_set_list set_at(int index, const typed::union_set &el) const; +}; + +template <> +struct val : public isl::val { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + val() = default; + val(const isl::val &obj) : isl::val(obj) {} + static val from(const isl::val &obj) { + return val(obj); + } + inline explicit val(const isl::ctx &ctx, long i); + inline explicit val(const isl::ctx &ctx, const std::string &str); + inline typed::val add(const typed::val &v2) const; + inline typed::val add(long v2) const; + inline typed::val ceil() const; + inline long get_den_si() const = delete; + inline typed::val floor() const; + inline typed::val max(const typed::val &v2) const; + inline typed::val max(long v2) const; + inline typed::val min(const typed::val &v2) const; + inline typed::val min(long v2) const; + inline typed::val mod(const typed::val &v2) const; + inline typed::val mod(long v2) const; + inline typed::val neg() const; + inline long get_num_si() const = delete; + inline typed::val sub(const typed::val &v2) const; + inline typed::val sub(long v2) const; +}; + +template <> +struct val_list : public isl::val_list { + template + friend struct aff; + template + friend struct aff_list; + template + friend struct basic_map; + template + friend struct basic_set; + template + friend struct fixed_box; + template + friend struct id; + template + friend struct id_list; + template + friend struct map; + template + friend struct map_list; + template + friend struct multi_aff; + template + friend struct multi_id; + template + friend struct multi_pw_aff; + template + friend struct multi_union_pw_aff; + template + friend struct multi_val; + template + friend struct point; + template + friend struct pw_aff; + template + friend struct pw_aff_list; + template + friend struct pw_multi_aff; + template + friend struct pw_multi_aff_list; + template + friend struct set; + template + friend struct set_list; + template + friend struct space; + template + friend struct union_map; + template + friend struct union_pw_aff; + template + friend struct union_pw_aff_list; + template + friend struct union_pw_multi_aff; + template + friend struct union_set; + template + friend struct union_set_list; + template + friend struct val; + template + friend struct val_list; + + val_list() = default; + val_list(const isl::val_list &obj) : isl::val_list(obj) {} + static val_list from(const isl::val_list &obj) { + return val_list(obj); + } + inline explicit val_list(const isl::ctx &ctx, int n); + inline explicit val_list(const typed::val &el); + inline explicit val_list(const isl::ctx &ctx, const std::string &str); + inline typed::val_list add(const typed::val &el) const; + inline typed::val_list add(long el) const; + inline typed::val at(int index) const; + inline typed::val get_at(int index) const = delete; + inline typed::val_list drop(unsigned int first, unsigned int n) const; + inline void foreach(const std::function)> &fn) const; + inline void foreach_scc(const std::function, typed::val)> &follows, const std::function)> &fn) const; + inline typed::val_list set_at(int index, const typed::val &el) const; + inline typed::val_list set_at(int index, long el) const; +}; + +typed::aff::aff(const isl::ctx &ctx, const std::string &str) + : isl::aff(ctx, str) +{ +} + +typed::aff typed::aff::add(const typed::aff &aff2) const +{ + auto res = isl::aff::add(aff2); + return typed::aff(res); +} + +typed::multi_aff typed::aff::add(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_aff(res); +} + +typed::multi_pw_aff typed::aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +typed::pw_aff typed::aff::add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::add(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::add(pma2); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::aff::add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::aff::add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::aff typed::aff::add_constant(const typed::val &v) const +{ + auto res = isl::aff::add_constant(v); + return typed::aff(res); +} + +typed::aff typed::aff::add_constant(long v) const +{ + auto res = isl::aff::add_constant(v); + return typed::aff(res); +} + +typed::multi_aff typed::aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::aff::add_constant(mv); + return typed::multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::aff typed::aff::as_aff() const +{ + auto res = isl::aff::as_aff(); + return typed::aff(res); +} + +typed::multi_aff typed::aff::as_multi_aff() const +{ + auto res = isl::aff::as_multi_aff(); + return typed::multi_aff(res); +} + +typed::multi_union_pw_aff typed::aff::as_multi_union_pw_aff() const +{ + auto res = isl::aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +typed::pw_multi_aff typed::aff::as_pw_multi_aff() const +{ + auto res = isl::aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +typed::set typed::aff::as_set() const +{ + auto res = isl::aff::as_set(); + return typed::set(res); +} + +typed::aff typed::aff::at(int pos) const +{ + auto res = isl::aff::at(pos); + return typed::aff(res); +} + +typed::basic_set<> typed::aff::bind(const typed::id &id) const +{ + auto res = isl::aff::bind(id); + return typed::basic_set<>(res); +} + +typed::basic_set<> typed::aff::bind(const std::string &id) const +{ + auto res = isl::aff::bind(id); + return typed::basic_set<>(res); +} + +typed::basic_set<> typed::aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::aff::bind(tuple); + return typed::basic_set<>(res); +} + +typed::aff typed::aff::ceil() const +{ + auto res = isl::aff::ceil(); + return typed::aff(res); +} + +typed::pw_aff typed::aff::coalesce() const +{ + auto res = isl::aff::coalesce(); + return typed::pw_aff(res); +} + +typed::pw_aff typed::aff::cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const +{ + auto res = isl::aff::cond(pwaff_true, pwaff_false); + return typed::pw_aff(res); +} + +typed::multi_val typed::aff::constant_multi_val() const +{ + auto res = isl::aff::constant_multi_val(); + return typed::multi_val(res); +} + +typed::val typed::aff::constant_val() const +{ + auto res = isl::aff::constant_val(); + return typed::val(res); +} + +typed::set<> typed::aff::domain() const +{ + auto res = isl::aff::domain(); + return typed::set<>(res); +} + +typed::pw_aff typed::aff::drop_unused_params() const +{ + auto res = isl::aff::drop_unused_params(); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +typed::aff typed::aff::floor() const +{ + auto res = isl::aff::floor(); + return typed::aff(res); +} + +typed::aff typed::aff::gist(const typed::set<> &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff(res); +} + +typed::union_pw_aff typed::aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::aff::gist(context); + return typed::union_pw_aff(res); +} + +typed::aff typed::aff::gist(const typed::basic_set<> &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff(res); +} + +typed::aff typed::aff::gist(const typed::point<> &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff(res); +} + +typed::aff typed::aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff(res); +} + +typed::aff typed::aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff(res); +} + +typed::aff typed::aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff(res); +} + +typed::multi_aff typed::aff::identity() const +{ + auto res = isl::aff::identity(); + return typed::multi_aff(res); +} + +template +typed::pw_aff typed::aff::insert_domain(const typed::space &domain) const +{ + auto res = isl::aff::insert_domain(domain); + return typed::pw_aff(res); +} + +typed::pw_aff typed::aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::aff::intersect_params(set); + return typed::pw_aff(res); +} + +typed::aff_list typed::aff::list() const +{ + auto res = isl::aff::list(); + return typed::aff_list(res); +} + +typed::multi_pw_aff typed::aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::max(multi2); + return typed::multi_pw_aff(res); +} + +typed::pw_aff typed::aff::max(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::max(pwaff2); + return typed::pw_aff(res); +} + +typed::multi_val typed::aff::max_multi_val() const +{ + auto res = isl::aff::max_multi_val(); + return typed::multi_val(res); +} + +typed::val typed::aff::max_val() const +{ + auto res = isl::aff::max_val(); + return typed::val(res); +} + +typed::multi_pw_aff typed::aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::min(multi2); + return typed::multi_pw_aff(res); +} + +typed::pw_aff typed::aff::min(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::min(pwaff2); + return typed::pw_aff(res); +} + +typed::multi_val typed::aff::min_multi_val() const +{ + auto res = isl::aff::min_multi_val(); + return typed::multi_val(res); +} + +typed::val typed::aff::min_val() const +{ + auto res = isl::aff::min_val(); + return typed::val(res); +} + +typed::aff typed::aff::mod(const typed::val &mod) const +{ + auto res = isl::aff::mod(mod); + return typed::aff(res); +} + +typed::aff typed::aff::mod(long mod) const +{ + auto res = isl::aff::mod(mod); + return typed::aff(res); +} + +typed::aff typed::aff::neg() const +{ + auto res = isl::aff::neg(); + return typed::aff(res); +} + +typed::set<> typed::aff::params() const +{ + auto res = isl::aff::params(); + return typed::set<>(res); +} + +template +typed::multi_aff> typed::aff::product(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::product(multi2); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::product(pma2); + return typed::pw_multi_aff>(res); +} + +typed::pw_multi_aff_list typed::aff::pw_multi_aff_list() const +{ + auto res = isl::aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +typed::aff typed::aff::scale(const typed::val &v) const +{ + auto res = isl::aff::scale(v); + return typed::aff(res); +} + +typed::aff typed::aff::scale(long v) const +{ + auto res = isl::aff::scale(v); + return typed::aff(res); +} + +typed::multi_aff typed::aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::aff::scale(mv); + return typed::multi_aff(res); +} + +typed::aff typed::aff::scale_down(const typed::val &v) const +{ + auto res = isl::aff::scale_down(v); + return typed::aff(res); +} + +typed::aff typed::aff::scale_down(long v) const +{ + auto res = isl::aff::scale_down(v); + return typed::aff(res); +} + +typed::multi_aff typed::aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::aff::scale_down(mv); + return typed::multi_aff(res); +} + +typed::multi_aff typed::aff::set_at(int pos, const typed::aff &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_aff(res); +} + +typed::multi_pw_aff typed::aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_aff typed::aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +typed::space typed::aff::space() const +{ + auto res = isl::aff::space(); + return typed::space(res); +} + +typed::aff typed::aff::sub(const typed::aff &aff2) const +{ + auto res = isl::aff::sub(aff2); + return typed::aff(res); +} + +typed::multi_aff typed::aff::sub(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_aff(res); +} + +typed::multi_pw_aff typed::aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +typed::pw_aff typed::aff::sub(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::sub(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::aff::sub(const typed::union_pw_aff &upa2) const +{ + auto res = isl::aff::sub(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::multi_pw_aff typed::aff::to_multi_pw_aff() const +{ + auto res = isl::aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::aff::to_multi_union_pw_aff() const +{ + auto res = isl::aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +typed::pw_multi_aff typed::aff::to_pw_multi_aff() const +{ + auto res = isl::aff::to_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::aff::to_union_pw_aff() const +{ + auto res = isl::aff::to_union_pw_aff(); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::aff::to_union_pw_multi_aff() const +{ + auto res = isl::aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::aff typed::aff::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::aff::unbind_params_insert_domain(domain); + return typed::aff(res); +} + +typed::multi_pw_aff typed::aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +typed::pw_aff typed::aff::union_add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::union_add(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::aff::union_add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::aff::aff(const isl::ctx &ctx, const std::string &str) + : isl::aff(ctx, str) +{ +} + +template +typed::aff typed::aff::add(const typed::aff &aff2) const +{ + auto res = isl::aff::add(aff2); + return typed::aff(res); +} + +template +typed::multi_aff typed::aff::add(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_aff typed::aff::add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::aff::add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::aff::add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::aff typed::aff::add_constant(const typed::val &v) const +{ + auto res = isl::aff::add_constant(v); + return typed::aff(res); +} + +template +typed::aff typed::aff::add_constant(long v) const +{ + auto res = isl::aff::add_constant(v); + return typed::aff(res); +} + +template +typed::multi_aff typed::aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::aff::add_constant(mv); + return typed::multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::aff typed::aff::as_aff() const +{ + auto res = isl::aff::as_aff(); + return typed::aff(res); +} + +template +typed::map typed::aff::as_map() const +{ + auto res = isl::aff::as_map(); + return typed::map(res); +} + +template +typed::multi_aff typed::aff::as_multi_aff() const +{ + auto res = isl::aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::aff::as_multi_union_pw_aff() const +{ + auto res = isl::aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::aff::as_pw_multi_aff() const +{ + auto res = isl::aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_map typed::aff::as_union_map() const +{ + auto res = isl::aff::as_union_map(); + return typed::union_map(res); +} + +template +typed::aff typed::aff::at(int pos) const +{ + auto res = isl::aff::at(pos); + return typed::aff(res); +} + +template +typed::basic_set typed::aff::bind(const typed::id &id) const +{ + auto res = isl::aff::bind(id); + return typed::basic_set(res); +} + +template +typed::basic_set typed::aff::bind(const std::string &id) const +{ + auto res = isl::aff::bind(id); + return typed::basic_set(res); +} + +template +typed::basic_set typed::aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::aff::bind(tuple); + return typed::basic_set(res); +} + +template +typed::pw_aff typed::aff::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::aff::bind_domain(tuple); + return typed::pw_aff(res); +} + +template +typed::aff typed::aff::ceil() const +{ + auto res = isl::aff::ceil(); + return typed::aff(res); +} + +template +typed::pw_aff typed::aff::coalesce() const +{ + auto res = isl::aff::coalesce(); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::aff::cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const +{ + auto res = isl::aff::cond(pwaff_true, pwaff_false); + return typed::pw_aff(res); +} + +template +typed::multi_val typed::aff::constant_multi_val() const +{ + auto res = isl::aff::constant_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::aff::constant_val() const +{ + auto res = isl::aff::constant_val(); + return typed::val(res); +} + +template +typed::set typed::aff::domain() const +{ + auto res = isl::aff::domain(); + return typed::set(res); +} + +template +typed::pw_aff typed::aff::drop_unused_params() const +{ + auto res = isl::aff::drop_unused_params(); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::aff typed::aff::floor() const +{ + auto res = isl::aff::floor(); + return typed::aff(res); +} + +template +typed::set typed::aff::ge_set(const typed::aff &aff2) const +{ + auto res = isl::aff::ge_set(aff2); + return typed::set(res); +} + +template +typed::set typed::aff::ge_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::ge_set(pwaff2); + return typed::set(res); +} + +template +typed::aff typed::aff::gist(const typed::set &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff(res); +} + +template +typed::union_pw_aff typed::aff::gist(const typed::union_set &context) const +{ + auto res = isl::aff::gist(context); + return typed::union_pw_aff(res); +} + +template +typed::aff typed::aff::gist(const typed::basic_set &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff(res); +} + +template +typed::aff typed::aff::gist(const typed::point &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff(res); +} + +template +typed::aff typed::aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff(res); +} + +template +typed::aff typed::aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff(res); +} + +template +typed::aff typed::aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff(res); +} + +template +typed::set typed::aff::gt_set(const typed::aff &aff2) const +{ + auto res = isl::aff::gt_set(aff2); + return typed::set(res); +} + +template +typed::set typed::aff::gt_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::gt_set(pwaff2); + return typed::set(res); +} + +template +typed::multi_aff typed::aff::identity() const +{ + auto res = isl::aff::identity(); + return typed::multi_aff(res); +} + +template +typed::pw_aff typed::aff::intersect_domain(const typed::set &set) const +{ + auto res = isl::aff::intersect_domain(set); + return typed::pw_aff(res); +} + +template +typed::union_pw_aff typed::aff::intersect_domain(const typed::space &space) const +{ + auto res = isl::aff::intersect_domain(space); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::aff::intersect_domain(uset); + return typed::union_pw_aff(res); +} + +template +typed::pw_aff typed::aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::aff::intersect_params(set); + return typed::pw_aff(res); +} + +template +typed::set typed::aff::le_set(const typed::aff &aff2) const +{ + auto res = isl::aff::le_set(aff2); + return typed::set(res); +} + +template +typed::set typed::aff::le_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::le_set(pwaff2); + return typed::set(res); +} + +template +typed::aff_list typed::aff::list() const +{ + auto res = isl::aff::list(); + return typed::aff_list(res); +} + +template +typed::set typed::aff::lt_set(const typed::aff &aff2) const +{ + auto res = isl::aff::lt_set(aff2); + return typed::set(res); +} + +template +typed::set typed::aff::lt_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::lt_set(pwaff2); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::aff::max(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::max(pwaff2); + return typed::pw_aff(res); +} + +template +typed::multi_val typed::aff::max_multi_val() const +{ + auto res = isl::aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::aff::max_val() const +{ + auto res = isl::aff::max_val(); + return typed::val(res); +} + +template +typed::multi_pw_aff typed::aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::aff::min(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::min(pwaff2); + return typed::pw_aff(res); +} + +template +typed::multi_val typed::aff::min_multi_val() const +{ + auto res = isl::aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::aff::min_val() const +{ + auto res = isl::aff::min_val(); + return typed::val(res); +} + +template +typed::aff typed::aff::mod(const typed::val &mod) const +{ + auto res = isl::aff::mod(mod); + return typed::aff(res); +} + +template +typed::aff typed::aff::mod(long mod) const +{ + auto res = isl::aff::mod(mod); + return typed::aff(res); +} + +template +typed::aff typed::aff::neg() const +{ + auto res = isl::aff::neg(); + return typed::aff(res); +} + +template +typed::set<> typed::aff::params() const +{ + auto res = isl::aff::params(); + return typed::set<>(res); +} + +template +template +typed::multi_aff, pair> typed::aff::product(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::product(multi2); + return typed::multi_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::aff typed::aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +typed::aff typed::aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +template +typed::pw_aff typed::aff::pullback(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::aff::pullback(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +template +typed::pw_aff typed::aff::pullback(const typed::pw_multi_aff &pma) const +{ + auto res = isl::aff::pullback(pma); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::aff::pullback(const typed::pw_multi_aff &pma) const +{ + auto res = isl::aff::pullback(pma); + return typed::pw_aff(res); +} + +template +template +typed::union_pw_aff typed::aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::aff typed::aff::pullback(const typed::aff &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +typed::aff typed::aff::pullback(const typed::aff &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +typed::pw_multi_aff_list typed::aff::pw_multi_aff_list() const +{ + auto res = isl::aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +template +typed::multi_aff> typed::aff::range_product(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::range_product(multi2); + return typed::multi_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::aff::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::aff::range_product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::range_product(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::aff::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::aff typed::aff::scale(const typed::val &v) const +{ + auto res = isl::aff::scale(v); + return typed::aff(res); +} + +template +typed::aff typed::aff::scale(long v) const +{ + auto res = isl::aff::scale(v); + return typed::aff(res); +} + +template +typed::multi_aff typed::aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::aff::scale(mv); + return typed::multi_aff(res); +} + +template +typed::aff typed::aff::scale_down(const typed::val &v) const +{ + auto res = isl::aff::scale_down(v); + return typed::aff(res); +} + +template +typed::aff typed::aff::scale_down(long v) const +{ + auto res = isl::aff::scale_down(v); + return typed::aff(res); +} + +template +typed::multi_aff typed::aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::aff::scale_down(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::aff::set_at(int pos, const typed::aff &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_aff typed::aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff typed::aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +typed::space typed::aff::space() const +{ + auto res = isl::aff::space(); + return typed::space(res); +} + +template +typed::aff typed::aff::sub(const typed::aff &aff2) const +{ + auto res = isl::aff::sub(aff2); + return typed::aff(res); +} + +template +typed::multi_aff typed::aff::sub(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_aff typed::aff::sub(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::sub(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::aff::sub(const typed::union_pw_aff &upa2) const +{ + auto res = isl::aff::sub(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_aff typed::aff::subtract_domain(const typed::set &set) const +{ + auto res = isl::aff::subtract_domain(set); + return typed::pw_aff(res); +} + +template +typed::union_pw_aff typed::aff::subtract_domain(const typed::space &space) const +{ + auto res = isl::aff::subtract_domain(space); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::aff::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::aff::subtract_domain(uset); + return typed::union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::aff::to_multi_pw_aff() const +{ + auto res = isl::aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::aff::to_multi_union_pw_aff() const +{ + auto res = isl::aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::aff::to_pw_multi_aff() const +{ + auto res = isl::aff::to_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::aff::to_union_pw_aff() const +{ + auto res = isl::aff::to_union_pw_aff(); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::aff::to_union_pw_multi_aff() const +{ + auto res = isl::aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_aff typed::aff::union_add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::aff::union_add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::aff::union_add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::aff, Anonymous>::aff(const isl::ctx &ctx, const std::string &str) + : isl::aff(ctx, str) +{ +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::add(const typed::aff, Anonymous> &aff2) const +{ + auto res = isl::aff::add(aff2); + return typed::aff, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::add(const typed::multi_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::add(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::aff, Anonymous>::add(const typed::multi_union_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::add(multi2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::add(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::add(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::add(const typed::pw_multi_aff, Anonymous> &pma2) const +{ + auto res = isl::aff::add(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::add(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::aff::add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::aff, Anonymous>::add(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::aff::add(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::add_constant(const typed::val &v) const +{ + auto res = isl::aff::add_constant(v); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::add_constant(long v) const +{ + auto res = isl::aff::add_constant(v); + return typed::aff, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::aff::add_constant(mv); + return typed::multi_aff, Anonymous>(res); +} + +template +template +typed::union_pw_multi_aff, Arg1> typed::aff, Anonymous>::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::apply(upma2); + return typed::union_pw_multi_aff, Arg1>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::as_aff() const +{ + auto res = isl::aff::as_aff(); + return typed::aff, Anonymous>(res); +} + +template +typed::map, Anonymous> typed::aff, Anonymous>::as_map() const +{ + auto res = isl::aff::as_map(); + return typed::map, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::as_multi_aff() const +{ + auto res = isl::aff::as_multi_aff(); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::aff, Anonymous>::as_multi_union_pw_aff() const +{ + auto res = isl::aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::as_pw_multi_aff() const +{ + auto res = isl::aff::as_pw_multi_aff(); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_map, Anonymous> typed::aff, Anonymous>::as_union_map() const +{ + auto res = isl::aff::as_union_map(); + return typed::union_map, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::at(int pos) const +{ + auto res = isl::aff::at(pos); + return typed::aff, Anonymous>(res); +} + +template +typed::basic_set> typed::aff, Anonymous>::bind(const typed::id &id) const +{ + auto res = isl::aff::bind(id); + return typed::basic_set>(res); +} + +template +typed::basic_set> typed::aff, Anonymous>::bind(const std::string &id) const +{ + auto res = isl::aff::bind(id); + return typed::basic_set>(res); +} + +template +typed::basic_set> typed::aff, Anonymous>::bind(const typed::multi_id &tuple) const +{ + auto res = isl::aff::bind(tuple); + return typed::basic_set>(res); +} + +template +typed::pw_aff typed::aff, Anonymous>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::aff::bind_domain(tuple); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::aff, Anonymous>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::aff::bind_domain_wrapped_domain(tuple); + return typed::pw_aff(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::ceil() const +{ + auto res = isl::aff::ceil(); + return typed::aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::coalesce() const +{ + auto res = isl::aff::coalesce(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::cond(const typed::pw_aff, Anonymous> &pwaff_true, const typed::pw_aff, Anonymous> &pwaff_false) const +{ + auto res = isl::aff::cond(pwaff_true, pwaff_false); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::multi_val typed::aff, Anonymous>::constant_multi_val() const +{ + auto res = isl::aff::constant_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::aff, Anonymous>::constant_val() const +{ + auto res = isl::aff::constant_val(); + return typed::val(res); +} + +template +typed::set> typed::aff, Anonymous>::domain() const +{ + auto res = isl::aff::domain(); + return typed::set>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::domain_reverse() const +{ + auto res = isl::aff::domain_reverse(); + return typed::aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::drop_unused_params() const +{ + auto res = isl::aff::drop_unused_params(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::extract_pw_multi_aff(const typed::space, Anonymous> &space) const +{ + auto res = isl::aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::floor() const +{ + auto res = isl::aff::floor(); + return typed::aff, Anonymous>(res); +} + +template +typed::set> typed::aff, Anonymous>::ge_set(const typed::aff, Anonymous> &aff2) const +{ + auto res = isl::aff::ge_set(aff2); + return typed::set>(res); +} + +template +typed::set> typed::aff, Anonymous>::ge_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::ge_set(pwaff2); + return typed::set>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::gist(const typed::set> &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::gist(const typed::union_set> &context) const +{ + auto res = isl::aff::gist(context); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::gist(const typed::basic_set> &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::gist(const typed::point> &context) const +{ + auto res = isl::aff::gist(context); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::gist_params(const typed::set<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::gist_params(const typed::point<> &context) const +{ + auto res = isl::aff::gist_params(context); + return typed::aff, Anonymous>(res); +} + +template +typed::set> typed::aff, Anonymous>::gt_set(const typed::aff, Anonymous> &aff2) const +{ + auto res = isl::aff::gt_set(aff2); + return typed::set>(res); +} + +template +typed::set> typed::aff, Anonymous>::gt_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::gt_set(pwaff2); + return typed::set>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::identity() const +{ + auto res = isl::aff::identity(); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::aff::intersect_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::aff::intersect_domain(space); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::aff::intersect_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::aff::intersect_params(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::aff, Anonymous>::le_set(const typed::aff, Anonymous> &aff2) const +{ + auto res = isl::aff::le_set(aff2); + return typed::set>(res); +} + +template +typed::set> typed::aff, Anonymous>::le_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::le_set(pwaff2); + return typed::set>(res); +} + +template +typed::aff_list, Anonymous> typed::aff, Anonymous>::list() const +{ + auto res = isl::aff::list(); + return typed::aff_list, Anonymous>(res); +} + +template +typed::set> typed::aff, Anonymous>::lt_set(const typed::aff, Anonymous> &aff2) const +{ + auto res = isl::aff::lt_set(aff2); + return typed::set>(res); +} + +template +typed::set> typed::aff, Anonymous>::lt_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::lt_set(pwaff2); + return typed::set>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::max(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::max(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::max(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::max(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::multi_val typed::aff, Anonymous>::max_multi_val() const +{ + auto res = isl::aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::aff, Anonymous>::max_val() const +{ + auto res = isl::aff::max_val(); + return typed::val(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::min(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::min(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::min(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::min(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::multi_val typed::aff, Anonymous>::min_multi_val() const +{ + auto res = isl::aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::aff, Anonymous>::min_val() const +{ + auto res = isl::aff::min_val(); + return typed::val(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::mod(const typed::val &mod) const +{ + auto res = isl::aff::mod(mod); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::mod(long mod) const +{ + auto res = isl::aff::mod(mod); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::neg() const +{ + auto res = isl::aff::neg(); + return typed::aff, Anonymous>(res); +} + +template +typed::set<> typed::aff, Anonymous>::params() const +{ + auto res = isl::aff::params(); + return typed::set<>(res); +} + +template +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +template +typed::union_pw_multi_aff, Anonymous> typed::aff, Anonymous>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +template +typed::multi_aff, Arg1>, pair> typed::aff, Anonymous>::product(const typed::multi_aff &multi2) const +{ + auto res = isl::aff::product(multi2); + return typed::multi_aff, Arg1>, pair>(res); +} + +template +template +typed::multi_pw_aff, Arg1>, pair> typed::aff, Anonymous>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::aff::product(multi2); + return typed::multi_pw_aff, Arg1>, pair>(res); +} + +template +template +typed::pw_multi_aff, Arg1>, pair> typed::aff, Anonymous>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::aff::product(pma2); + return typed::pw_multi_aff, Arg1>, pair>(res); +} + +template +template +typed::aff typed::aff, Anonymous>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +typed::aff typed::aff, Anonymous>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +template +typed::pw_aff typed::aff, Anonymous>::pullback(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::aff, Anonymous>::pullback(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +template +typed::pw_aff typed::aff, Anonymous>::pullback(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::aff::pullback(pma); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::aff, Anonymous>::pullback(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::aff::pullback(pma); + return typed::pw_aff(res); +} + +template +template +typed::union_pw_aff typed::aff, Anonymous>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::aff, Anonymous>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::aff typed::aff, Anonymous>::pullback(const typed::aff> &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +typed::aff typed::aff, Anonymous>::pullback(const typed::aff> &ma) const +{ + auto res = isl::aff::pullback(ma); + return typed::aff(res); +} + +template +typed::pw_multi_aff_list, Anonymous> typed::aff, Anonymous>::pw_multi_aff_list() const +{ + auto res = isl::aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, Anonymous>(res); +} + +template +template +typed::multi_aff, pair> typed::aff, Anonymous>::range_product(const typed::multi_aff, Arg1> &multi2) const +{ + auto res = isl::aff::range_product(multi2); + return typed::multi_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::aff, Anonymous>::range_product(const typed::multi_pw_aff, Arg1> &multi2) const +{ + auto res = isl::aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_union_pw_aff, pair> typed::aff, Anonymous>::range_product(const typed::multi_union_pw_aff, Arg1> &multi2) const +{ + auto res = isl::aff::range_product(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::aff, Anonymous>::range_product(const typed::pw_multi_aff, Arg1> &pma2) const +{ + auto res = isl::aff::range_product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::aff, Anonymous>::range_product(const typed::union_pw_multi_aff, Arg1> &upma2) const +{ + auto res = isl::aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::scale(const typed::val &v) const +{ + auto res = isl::aff::scale(v); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::scale(long v) const +{ + auto res = isl::aff::scale(v); + return typed::aff, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::scale(const typed::multi_val &mv) const +{ + auto res = isl::aff::scale(mv); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::scale_down(const typed::val &v) const +{ + auto res = isl::aff::scale_down(v); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::scale_down(long v) const +{ + auto res = isl::aff::scale_down(v); + return typed::aff, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::aff::scale_down(mv); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::set_at(int pos, const typed::aff, Anonymous> &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::aff, Anonymous>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::aff::set_at(pos, el); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +template +typed::multi_aff, Arg1> typed::aff, Anonymous>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::aff::set_range_tuple(id); + return typed::multi_aff, Arg1>(res); +} + +template +template +typed::multi_aff, Arg1> typed::aff, Anonymous>::set_range_tuple(const std::string &id) const +{ + auto res = isl::aff::set_range_tuple(id); + return typed::multi_aff, Arg1>(res); +} + +template +typed::space, Anonymous> typed::aff, Anonymous>::space() const +{ + auto res = isl::aff::space(); + return typed::space, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::aff, Anonymous>::sub(const typed::aff, Anonymous> &aff2) const +{ + auto res = isl::aff::sub(aff2); + return typed::aff, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::multi_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::multi_union_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::aff::sub(multi2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::sub(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::pw_multi_aff, Anonymous> &pma2) const +{ + auto res = isl::aff::sub(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::aff::sub(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::aff, Anonymous>::sub(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::aff::sub(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::subtract_domain(const typed::set> &set) const +{ + auto res = isl::aff::subtract_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::aff::subtract_domain(space); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::aff::subtract_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::to_multi_pw_aff() const +{ + auto res = isl::aff::to_multi_pw_aff(); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::aff, Anonymous>::to_multi_union_pw_aff() const +{ + auto res = isl::aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::to_pw_multi_aff() const +{ + auto res = isl::aff::to_pw_multi_aff(); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::to_union_pw_aff() const +{ + auto res = isl::aff::to_union_pw_aff(); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::aff, Anonymous>::to_union_pw_multi_aff() const +{ + auto res = isl::aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::aff, Anonymous>::union_add(const typed::multi_pw_aff, Anonymous> &mpa2) const +{ + auto res = isl::aff::union_add(mpa2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::aff, Anonymous>::union_add(const typed::multi_union_pw_aff, Anonymous> &mupa2) const +{ + auto res = isl::aff::union_add(mupa2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::aff, Anonymous>::union_add(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::aff::union_add(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::aff, Anonymous>::union_add(const typed::pw_multi_aff, Anonymous> &pma2) const +{ + auto res = isl::aff::union_add(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::aff, Anonymous>::union_add(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::aff::union_add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::aff, Anonymous>::union_add(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::aff::union_add(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +typed::aff_list::aff_list(const isl::ctx &ctx, int n) + : isl::aff_list(ctx, n) +{ +} + +typed::aff_list::aff_list(const typed::aff &el) + : isl::aff_list(el) +{ +} + +typed::aff_list::aff_list(const isl::ctx &ctx, const std::string &str) + : isl::aff_list(ctx, str) +{ +} + +typed::aff_list typed::aff_list::add(const typed::aff &el) const +{ + auto res = isl::aff_list::add(el); + return typed::aff_list(res); +} + +typed::aff typed::aff_list::at(int index) const +{ + auto res = isl::aff_list::at(index); + return typed::aff(res); +} + +typed::aff_list typed::aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::aff_list::drop(first, n); + return typed::aff_list(res); +} + +void typed::aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::aff arg0) { + return fn(typed::aff(arg0)); + }; + return isl::aff_list::foreach(lambda_fn); +} + +void typed::aff_list::foreach_scc(const std::function, typed::aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::aff arg0, isl::aff arg1) { + return follows(typed::aff(arg0), typed::aff(arg1)); + }; + auto lambda_fn = [&] (isl::aff_list arg0) { + return fn(typed::aff_list(arg0)); + }; + return isl::aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +typed::aff_list typed::aff_list::set_at(int index, const typed::aff &el) const +{ + auto res = isl::aff_list::set_at(index, el); + return typed::aff_list(res); +} + +template +typed::aff_list::aff_list(const isl::ctx &ctx, int n) + : isl::aff_list(ctx, n) +{ +} + +template +typed::aff_list::aff_list(const typed::aff &el) + : isl::aff_list(el) +{ +} + +template +typed::aff_list::aff_list(const isl::ctx &ctx, const std::string &str) + : isl::aff_list(ctx, str) +{ +} + +template +typed::aff_list typed::aff_list::add(const typed::aff &el) const +{ + auto res = isl::aff_list::add(el); + return typed::aff_list(res); +} + +template +typed::aff typed::aff_list::at(int index) const +{ + auto res = isl::aff_list::at(index); + return typed::aff(res); +} + +template +typed::aff_list typed::aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::aff_list::drop(first, n); + return typed::aff_list(res); +} + +template +void typed::aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::aff arg0) { + return fn(typed::aff(arg0)); + }; + return isl::aff_list::foreach(lambda_fn); +} + +template +void typed::aff_list::foreach_scc(const std::function, typed::aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::aff arg0, isl::aff arg1) { + return follows(typed::aff(arg0), typed::aff(arg1)); + }; + auto lambda_fn = [&] (isl::aff_list arg0) { + return fn(typed::aff_list(arg0)); + }; + return isl::aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::aff_list typed::aff_list::set_at(int index, const typed::aff &el) const +{ + auto res = isl::aff_list::set_at(index, el); + return typed::aff_list(res); +} + +template +typed::basic_map::basic_map(const isl::ctx &ctx, const std::string &str) + : isl::basic_map(ctx, str) +{ +} + +template +template +typed::basic_map typed::basic_map::apply_domain(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::apply_domain(bmap2); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::apply_domain(const typed::map &map2) const +{ + auto res = isl::basic_map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::basic_map typed::basic_map::apply_range(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::apply_range(bmap2); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::apply_range(const typed::map &map2) const +{ + auto res = isl::basic_map::apply_range(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::apply_range(umap2); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::as_map() const +{ + auto res = isl::basic_map::as_map(); + return typed::map(res); +} + +template +typed::multi_union_pw_aff typed::basic_map::as_multi_union_pw_aff() const +{ + auto res = isl::basic_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::basic_map::as_pw_multi_aff() const +{ + auto res = isl::basic_map::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::basic_map::as_union_pw_multi_aff() const +{ + auto res = isl::basic_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::set typed::basic_map::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::basic_map::bind_domain(tuple); + return typed::set(res); +} + +template +typed::set typed::basic_map::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::basic_map::bind_range(tuple); + return typed::set(res); +} + +template +typed::map typed::basic_map::coalesce() const +{ + auto res = isl::basic_map::coalesce(); + return typed::map(res); +} + +template +typed::basic_map typed::basic_map::detect_equalities() const +{ + auto res = isl::basic_map::detect_equalities(); + return typed::basic_map(res); +} + +template +typed::set typed::basic_map::domain() const +{ + auto res = isl::basic_map::domain(); + return typed::set(res); +} + +template +typed::union_map, Domain> typed::basic_map::domain_map() const +{ + auto res = isl::basic_map::domain_map(); + return typed::union_map, Domain>(res); +} + +template +typed::union_pw_multi_aff, Domain> typed::basic_map::domain_map_union_pw_multi_aff() const +{ + auto res = isl::basic_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Domain>(res); +} + +template +template +typed::map, Range> typed::basic_map::domain_product(const typed::map &map2) const +{ + auto res = isl::basic_map::domain_product(map2); + return typed::map, Range>(res); +} + +template +template +typed::union_map, Range> typed::basic_map::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::domain_product(umap2); + return typed::union_map, Range>(res); +} + +template +typed::map typed::basic_map::drop_unused_params() const +{ + auto res = isl::basic_map::drop_unused_params(); + return typed::map(res); +} + +template +bool typed::basic_map::every_map(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map(arg0)); + }; + return isl::basic_map::every_map(lambda_test); +} + +template +typed::map typed::basic_map::extract_map(const typed::space &space) const +{ + auto res = isl::basic_map::extract_map(space); + return typed::map(res); +} + +template +void typed::basic_map::foreach_basic_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map(arg0)); + }; + return isl::basic_map::foreach_basic_map(lambda_fn); +} + +template +void typed::basic_map::foreach_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::basic_map::foreach_map(lambda_fn); +} + +template +typed::basic_map typed::basic_map::gist(const typed::basic_map &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::gist(const typed::map &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::gist(const typed::union_map &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::gist_domain(const typed::set &context) const +{ + auto res = isl::basic_map::gist_domain(context); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::basic_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_map::gist_params(context); + return typed::map(res); +} + +template +typed::basic_map typed::basic_map::intersect(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::intersect(bmap2); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect(const typed::map &map2) const +{ + auto res = isl::basic_map::intersect(map2); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::intersect(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::basic_map typed::basic_map::intersect_domain(const typed::basic_set &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect_domain(const typed::set &set) const +{ + auto res = isl::basic_map::intersect_domain(set); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::intersect_domain(const typed::space &space) const +{ + auto res = isl::basic_map::intersect_domain(space); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::basic_map::intersect_domain(uset); + return typed::union_map(res); +} + +template +typed::basic_map typed::basic_map::intersect_domain(const typed::point &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_map::intersect_params(params); + return typed::map(res); +} + +template +typed::basic_map typed::basic_map::intersect_range(const typed::basic_set &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect_range(const typed::set &set) const +{ + auto res = isl::basic_map::intersect_range(set); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::intersect_range(const typed::space &space) const +{ + auto res = isl::basic_map::intersect_range(space); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::basic_map::intersect_range(uset); + return typed::union_map(res); +} + +template +typed::basic_map typed::basic_map::intersect_range(const typed::point &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::lexmax() const +{ + auto res = isl::basic_map::lexmax(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::basic_map::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::basic_map::lexmin() const +{ + auto res = isl::basic_map::lexmin(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::basic_map::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::basic_map::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::basic_map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map_list typed::basic_map::map_list() const +{ + auto res = isl::basic_map::map_list(); + return typed::map_list(res); +} + +template +typed::multi_pw_aff typed::basic_map::max_multi_pw_aff() const +{ + auto res = isl::basic_map::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::basic_map::min_multi_pw_aff() const +{ + auto res = isl::basic_map::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::set<> typed::basic_map::params() const +{ + auto res = isl::basic_map::params(); + return typed::set<>(res); +} + +template +template +typed::map typed::basic_map::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::basic_map::preimage_domain(ma); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::preimage_domain(mpa); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_map::preimage_domain(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::map typed::basic_map::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::basic_map::preimage_range(ma); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_map::preimage_range(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::map, pair> typed::basic_map::product(const typed::map &map2) const +{ + auto res = isl::basic_map::product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::basic_map::product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map typed::basic_map::project_out_all_params() const +{ + auto res = isl::basic_map::project_out_all_params(); + return typed::map(res); +} + +template +typed::map typed::basic_map::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::basic_map::project_out_param(const std::string &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::basic_map::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_map::project_out_param(list); + return typed::map(res); +} + +template +typed::set typed::basic_map::range() const +{ + auto res = isl::basic_map::range(); + return typed::set(res); +} + +template +typed::fixed_box typed::basic_map::range_lattice_tile() const +{ + auto res = isl::basic_map::range_lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::union_map, Range> typed::basic_map::range_map() const +{ + auto res = isl::basic_map::range_map(); + return typed::union_map, Range>(res); +} + +template +template +typed::map> typed::basic_map::range_product(const typed::map &map2) const +{ + auto res = isl::basic_map::range_product(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map::range_product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::range_product(umap2); + return typed::union_map>(res); +} + +template +typed::fixed_box typed::basic_map::range_simple_fixed_box_hull() const +{ + auto res = isl::basic_map::range_simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::basic_map typed::basic_map::reverse() const +{ + auto res = isl::basic_map::reverse(); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::basic_map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::set_domain_tuple(const std::string &id) const +{ + auto res = isl::basic_map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::set_range_tuple(const typed::id &id) const +{ + auto res = isl::basic_map::set_range_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::set_range_tuple(const std::string &id) const +{ + auto res = isl::basic_map::set_range_tuple(id); + return typed::map(res); +} + +template +typed::space typed::basic_map::space() const +{ + auto res = isl::basic_map::space(); + return typed::space(res); +} + +template +typed::map typed::basic_map::subtract(const typed::map &map2) const +{ + auto res = isl::basic_map::subtract(map2); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::subtract(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::basic_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::basic_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::to_union_map() const +{ + auto res = isl::basic_map::to_union_map(); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::unite(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::unite(bmap2); + return typed::map(res); +} + +template +typed::map typed::basic_map::unite(const typed::map &map2) const +{ + auto res = isl::basic_map::unite(map2); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::unite(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::basic_map::upper_bound(upper); + return typed::map(res); +} + +template +typed::set> typed::basic_map::wrap() const +{ + auto res = isl::basic_map::wrap(); + return typed::set>(res); +} + +template +typed::basic_map, Range2>::basic_map(const isl::ctx &ctx, const std::string &str) + : isl::basic_map(ctx, str) +{ +} + +template +template +typed::basic_map typed::basic_map, Range2>::apply_domain(const typed::basic_map, Domain2> &bmap2) const +{ + auto res = isl::basic_map::apply_domain(bmap2); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map, Range2>::apply_domain(const typed::map, Domain2> &map2) const +{ + auto res = isl::basic_map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map, Range2>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::basic_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::basic_map, Arg3> typed::basic_map, Range2>::apply_range(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::apply_range(bmap2); + return typed::basic_map, Arg3>(res); +} + +template +template +typed::map, Arg3> typed::basic_map, Range2>::apply_range(const typed::map &map2) const +{ + auto res = isl::basic_map::apply_range(map2); + return typed::map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::basic_map, Range2>::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::apply_range(umap2); + return typed::union_map, Arg3>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::as_map() const +{ + auto res = isl::basic_map::as_map(); + return typed::map, Range2>(res); +} + +template +typed::multi_union_pw_aff, Range2> typed::basic_map, Range2>::as_multi_union_pw_aff() const +{ + auto res = isl::basic_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range2>(res); +} + +template +typed::pw_multi_aff, Range2> typed::basic_map, Range2>::as_pw_multi_aff() const +{ + auto res = isl::basic_map::as_pw_multi_aff(); + return typed::pw_multi_aff, Range2>(res); +} + +template +typed::union_pw_multi_aff, Range2> typed::basic_map, Range2>::as_union_pw_multi_aff() const +{ + auto res = isl::basic_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +typed::set typed::basic_map, Range2>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_map::bind_domain(tuple); + return typed::set(res); +} + +template +typed::set> typed::basic_map, Range2>::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::basic_map::bind_range(tuple); + return typed::set>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::coalesce() const +{ + auto res = isl::basic_map::coalesce(); + return typed::map, Range2>(res); +} + +template +typed::map> typed::basic_map, Range2>::curry() const +{ + auto res = isl::basic_map::curry(); + return typed::map>(res); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::detect_equalities() const +{ + auto res = isl::basic_map::detect_equalities(); + return typed::basic_map, Range2>(res); +} + +template +typed::set> typed::basic_map, Range2>::domain() const +{ + auto res = isl::basic_map::domain(); + return typed::set>(res); +} + +template +typed::map typed::basic_map, Range2>::domain_factor_domain() const +{ + auto res = isl::basic_map::domain_factor_domain(); + return typed::map(res); +} + +template +typed::map typed::basic_map, Range2>::domain_factor_range() const +{ + auto res = isl::basic_map::domain_factor_range(); + return typed::map(res); +} + +template +typed::union_map, Range2>, pair> typed::basic_map, Range2>::domain_map() const +{ + auto res = isl::basic_map::domain_map(); + return typed::union_map, Range2>, pair>(res); +} + +template +typed::union_pw_multi_aff, Range2>, pair> typed::basic_map, Range2>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::basic_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range2>, pair>(res); +} + +template +template +typed::map, Domain2>, Range2> typed::basic_map, Range2>::domain_product(const typed::map &map2) const +{ + auto res = isl::basic_map::domain_product(map2); + return typed::map, Domain2>, Range2>(res); +} + +template +template +typed::union_map, Domain2>, Range2> typed::basic_map, Range2>::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::domain_product(umap2); + return typed::union_map, Domain2>, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::domain_reverse() const +{ + auto res = isl::basic_map::domain_reverse(); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::drop_unused_params() const +{ + auto res = isl::basic_map::drop_unused_params(); + return typed::map, Range2>(res); +} + +template +bool typed::basic_map, Range2>::every_map(const std::function, Range2>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, Range2>(arg0)); + }; + return isl::basic_map::every_map(lambda_test); +} + +template +typed::map, Range2> typed::basic_map, Range2>::extract_map(const typed::space, Range2> &space) const +{ + auto res = isl::basic_map::extract_map(space); + return typed::map, Range2>(res); +} + +template +typed::basic_map typed::basic_map, Range2>::flatten_domain() const +{ + auto res = isl::basic_map::flatten_domain(); + return typed::basic_map(res); +} + +template +void typed::basic_map, Range2>::foreach_basic_map(const std::function, Range2>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map, Range2>(arg0)); + }; + return isl::basic_map::foreach_basic_map(lambda_fn); +} + +template +void typed::basic_map, Range2>::foreach_map(const std::function, Range2>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, Range2>(arg0)); + }; + return isl::basic_map::foreach_map(lambda_fn); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::gist(const typed::basic_map, Range2> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::basic_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::gist(const typed::map, Range2> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::gist(const typed::union_map, Range2> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::gist_domain(const typed::set> &context) const +{ + auto res = isl::basic_map::gist_domain(context); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::gist_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_map::gist_params(context); + return typed::map, Range2>(res); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::intersect(const typed::basic_map, Range2> &bmap2) const +{ + auto res = isl::basic_map::intersect(bmap2); + return typed::basic_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::intersect(const typed::map, Range2> &map2) const +{ + auto res = isl::basic_map::intersect(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::intersect(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::basic_map::intersect(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::intersect_domain(const typed::basic_set> &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::basic_map::intersect_domain(set); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::basic_map::intersect_domain(space); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::intersect_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::intersect_domain(const typed::point> &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::basic_map::intersect_domain_wrapped_domain(domain); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::basic_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_map::intersect_params(params); + return typed::map, Range2>(res); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::intersect_range(const typed::basic_set &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::intersect_range(const typed::set &set) const +{ + auto res = isl::basic_map::intersect_range(set); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::intersect_range(const typed::space &space) const +{ + auto res = isl::basic_map::intersect_range(space); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::basic_map::intersect_range(uset); + return typed::union_map, Range2>(res); +} + +template +typed::basic_map, Range2> typed::basic_map, Range2>::intersect_range(const typed::point &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::lexmax() const +{ + auto res = isl::basic_map::lexmax(); + return typed::map, Range2>(res); +} + +template +typed::pw_multi_aff, Range2> typed::basic_map, Range2>::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::lexmin() const +{ + auto res = isl::basic_map::lexmin(); + return typed::map, Range2>(res); +} + +template +typed::pw_multi_aff, Range2> typed::basic_map, Range2>::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::lower_bound(const typed::multi_pw_aff, Range2> &lower) const +{ + auto res = isl::basic_map::lower_bound(lower); + return typed::map, Range2>(res); +} + +template +typed::map_list, Range2> typed::basic_map, Range2>::map_list() const +{ + auto res = isl::basic_map::map_list(); + return typed::map_list, Range2>(res); +} + +template +typed::multi_pw_aff, Range2> typed::basic_map, Range2>::max_multi_pw_aff() const +{ + auto res = isl::basic_map::max_multi_pw_aff(); + return typed::multi_pw_aff, Range2>(res); +} + +template +typed::multi_pw_aff, Range2> typed::basic_map, Range2>::min_multi_pw_aff() const +{ + auto res = isl::basic_map::min_multi_pw_aff(); + return typed::multi_pw_aff, Range2>(res); +} + +template +typed::set<> typed::basic_map, Range2>::params() const +{ + auto res = isl::basic_map::params(); + return typed::set<>(res); +} + +template +template +typed::map typed::basic_map, Range2>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_map::preimage_domain(ma); + return typed::map(res); +} + +template +template +typed::map typed::basic_map, Range2>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::basic_map::preimage_domain(mpa); + return typed::map(res); +} + +template +template +typed::map typed::basic_map, Range2>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_map::preimage_domain(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map, Range2>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::map, Arg3> typed::basic_map, Range2>::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::basic_map::preimage_range(ma); + return typed::map, Arg3>(res); +} + +template +template +typed::map, Arg3> typed::basic_map, Range2>::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_map::preimage_range(pma); + return typed::map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::basic_map, Range2>::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_map::preimage_range(upma); + return typed::union_map, Arg3>(res); +} + +template +template +typed::map, Domain2>, pair> typed::basic_map, Range2>::product(const typed::map &map2) const +{ + auto res = isl::basic_map::product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::basic_map, Range2>::product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::project_out_all_params() const +{ + auto res = isl::basic_map::project_out_all_params(); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::project_out_param(const std::string &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_map::project_out_param(list); + return typed::map, Range2>(res); +} + +template +typed::set typed::basic_map, Range2>::range() const +{ + auto res = isl::basic_map::range(); + return typed::set(res); +} + +template +typed::fixed_box, Range2> typed::basic_map, Range2>::range_lattice_tile() const +{ + auto res = isl::basic_map::range_lattice_tile(); + return typed::fixed_box, Range2>(res); +} + +template +typed::union_map, Range2>, Range2> typed::basic_map, Range2>::range_map() const +{ + auto res = isl::basic_map::range_map(); + return typed::union_map, Range2>, Range2>(res); +} + +template +template +typed::map, pair> typed::basic_map, Range2>::range_product(const typed::map, Arg3> &map2) const +{ + auto res = isl::basic_map::range_product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::basic_map, Range2>::range_product(const typed::union_map, Arg3> &umap2) const +{ + auto res = isl::basic_map::range_product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::fixed_box, Range2> typed::basic_map, Range2>::range_simple_fixed_box_hull() const +{ + auto res = isl::basic_map::range_simple_fixed_box_hull(); + return typed::fixed_box, Range2>(res); +} + +template +typed::basic_map> typed::basic_map, Range2>::reverse() const +{ + auto res = isl::basic_map::reverse(); + return typed::basic_map>(res); +} + +template +template +typed::map, Arg2> typed::basic_map, Range2>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::basic_map::set_range_tuple(id); + return typed::map, Arg2>(res); +} + +template +template +typed::map, Arg2> typed::basic_map, Range2>::set_range_tuple(const std::string &id) const +{ + auto res = isl::basic_map::set_range_tuple(id); + return typed::map, Arg2>(res); +} + +template +typed::space, Range2> typed::basic_map, Range2>::space() const +{ + auto res = isl::basic_map::space(); + return typed::space, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::subtract(const typed::map, Range2> &map2) const +{ + auto res = isl::basic_map::subtract(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::subtract(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::basic_map::subtract(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::basic_map::subtract_domain(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::basic_map::subtract_range(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::to_union_map() const +{ + auto res = isl::basic_map::to_union_map(); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::unite(const typed::basic_map, Range2> &bmap2) const +{ + auto res = isl::basic_map::unite(bmap2); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::unite(const typed::map, Range2> &map2) const +{ + auto res = isl::basic_map::unite(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::basic_map, Range2>::unite(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::basic_map::unite(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::basic_map, Range2>::upper_bound(const typed::multi_pw_aff, Range2> &upper) const +{ + auto res = isl::basic_map::upper_bound(upper); + return typed::map, Range2>(res); +} + +template +typed::set, Range2>> typed::basic_map, Range2>::wrap() const +{ + auto res = isl::basic_map::wrap(); + return typed::set, Range2>>(res); +} + +template +typed::basic_map::basic_map(const isl::ctx &ctx, const std::string &str) + : isl::basic_map(ctx, str) +{ +} + +template +template +typed::basic_map typed::basic_map::apply_domain(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::apply_domain(bmap2); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::apply_domain(const typed::map &map2) const +{ + auto res = isl::basic_map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::basic_map typed::basic_map::apply_range(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::apply_range(bmap2); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::apply_range(const typed::map &map2) const +{ + auto res = isl::basic_map::apply_range(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::apply_range(umap2); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::as_map() const +{ + auto res = isl::basic_map::as_map(); + return typed::map(res); +} + +template +typed::multi_union_pw_aff typed::basic_map::as_multi_union_pw_aff() const +{ + auto res = isl::basic_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::basic_map::as_pw_multi_aff() const +{ + auto res = isl::basic_map::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::basic_map::as_union_pw_multi_aff() const +{ + auto res = isl::basic_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::set typed::basic_map::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::basic_map::bind_domain(tuple); + return typed::set(res); +} + +template +typed::set typed::basic_map::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::basic_map::bind_range(tuple); + return typed::set(res); +} + +template +typed::map typed::basic_map::coalesce() const +{ + auto res = isl::basic_map::coalesce(); + return typed::map(res); +} + +template +typed::basic_set typed::basic_map::deltas() const +{ + auto res = isl::basic_map::deltas(); + return typed::basic_set(res); +} + +template +typed::basic_map typed::basic_map::detect_equalities() const +{ + auto res = isl::basic_map::detect_equalities(); + return typed::basic_map(res); +} + +template +typed::set typed::basic_map::domain() const +{ + auto res = isl::basic_map::domain(); + return typed::set(res); +} + +template +typed::union_map, Domain> typed::basic_map::domain_map() const +{ + auto res = isl::basic_map::domain_map(); + return typed::union_map, Domain>(res); +} + +template +typed::union_pw_multi_aff, Domain> typed::basic_map::domain_map_union_pw_multi_aff() const +{ + auto res = isl::basic_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Domain>(res); +} + +template +template +typed::map, Domain> typed::basic_map::domain_product(const typed::map &map2) const +{ + auto res = isl::basic_map::domain_product(map2); + return typed::map, Domain>(res); +} + +template +template +typed::union_map, Domain> typed::basic_map::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::domain_product(umap2); + return typed::union_map, Domain>(res); +} + +template +typed::map typed::basic_map::drop_unused_params() const +{ + auto res = isl::basic_map::drop_unused_params(); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::eq_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::eq_at(mpa); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::eq_at(const typed::multi_union_pw_aff &mupa) const +{ + auto res = isl::basic_map::eq_at(mupa); + return typed::union_map(res); +} + +template +bool typed::basic_map::every_map(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map(arg0)); + }; + return isl::basic_map::every_map(lambda_test); +} + +template +typed::map typed::basic_map::extract_map(const typed::space &space) const +{ + auto res = isl::basic_map::extract_map(space); + return typed::map(res); +} + +template +void typed::basic_map::foreach_basic_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map(arg0)); + }; + return isl::basic_map::foreach_basic_map(lambda_fn); +} + +template +void typed::basic_map::foreach_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::basic_map::foreach_map(lambda_fn); +} + +template +typed::basic_map typed::basic_map::gist(const typed::basic_map &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::gist(const typed::map &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::gist(const typed::union_map &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::gist_domain(const typed::set &context) const +{ + auto res = isl::basic_map::gist_domain(context); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::basic_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_map::gist_params(context); + return typed::map(res); +} + +template +typed::basic_map typed::basic_map::intersect(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::intersect(bmap2); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect(const typed::map &map2) const +{ + auto res = isl::basic_map::intersect(map2); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::intersect(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::basic_map typed::basic_map::intersect_domain(const typed::basic_set &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect_domain(const typed::set &set) const +{ + auto res = isl::basic_map::intersect_domain(set); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::intersect_domain(const typed::space &space) const +{ + auto res = isl::basic_map::intersect_domain(space); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::basic_map::intersect_domain(uset); + return typed::union_map(res); +} + +template +typed::basic_map typed::basic_map::intersect_domain(const typed::point &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_map::intersect_params(params); + return typed::map(res); +} + +template +typed::basic_map typed::basic_map::intersect_range(const typed::basic_set &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map(res); +} + +template +typed::map typed::basic_map::intersect_range(const typed::set &set) const +{ + auto res = isl::basic_map::intersect_range(set); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::intersect_range(const typed::space &space) const +{ + auto res = isl::basic_map::intersect_range(space); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::basic_map::intersect_range(uset); + return typed::union_map(res); +} + +template +typed::basic_map typed::basic_map::intersect_range(const typed::point &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::lex_ge_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::lex_ge_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::lex_gt_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::lex_gt_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::lex_le_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::lex_le_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::lex_lt_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::lex_lt_at(mpa); + return typed::map(res); +} + +template +typed::map typed::basic_map::lexmax() const +{ + auto res = isl::basic_map::lexmax(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::basic_map::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::basic_map::lexmin() const +{ + auto res = isl::basic_map::lexmin(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::basic_map::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::basic_map::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::basic_map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map_list typed::basic_map::map_list() const +{ + auto res = isl::basic_map::map_list(); + return typed::map_list(res); +} + +template +typed::multi_pw_aff typed::basic_map::max_multi_pw_aff() const +{ + auto res = isl::basic_map::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::basic_map::min_multi_pw_aff() const +{ + auto res = isl::basic_map::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::set<> typed::basic_map::params() const +{ + auto res = isl::basic_map::params(); + return typed::set<>(res); +} + +template +template +typed::map typed::basic_map::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::basic_map::preimage_domain(ma); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::preimage_domain(mpa); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_map::preimage_domain(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::map typed::basic_map::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::basic_map::preimage_range(ma); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_map::preimage_range(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::map, pair> typed::basic_map::product(const typed::map &map2) const +{ + auto res = isl::basic_map::product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::basic_map::product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map typed::basic_map::project_out_all_params() const +{ + auto res = isl::basic_map::project_out_all_params(); + return typed::map(res); +} + +template +typed::map typed::basic_map::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::basic_map::project_out_param(const std::string &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::basic_map::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_map::project_out_param(list); + return typed::map(res); +} + +template +typed::set typed::basic_map::range() const +{ + auto res = isl::basic_map::range(); + return typed::set(res); +} + +template +typed::fixed_box typed::basic_map::range_lattice_tile() const +{ + auto res = isl::basic_map::range_lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::union_map, Domain> typed::basic_map::range_map() const +{ + auto res = isl::basic_map::range_map(); + return typed::union_map, Domain>(res); +} + +template +template +typed::map> typed::basic_map::range_product(const typed::map &map2) const +{ + auto res = isl::basic_map::range_product(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map::range_product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::range_product(umap2); + return typed::union_map>(res); +} + +template +typed::fixed_box typed::basic_map::range_simple_fixed_box_hull() const +{ + auto res = isl::basic_map::range_simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::basic_map typed::basic_map::reverse() const +{ + auto res = isl::basic_map::reverse(); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::basic_map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::set_domain_tuple(const std::string &id) const +{ + auto res = isl::basic_map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::set_range_tuple(const typed::id &id) const +{ + auto res = isl::basic_map::set_range_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::basic_map::set_range_tuple(const std::string &id) const +{ + auto res = isl::basic_map::set_range_tuple(id); + return typed::map(res); +} + +template +typed::space typed::basic_map::space() const +{ + auto res = isl::basic_map::space(); + return typed::space(res); +} + +template +typed::map typed::basic_map::subtract(const typed::map &map2) const +{ + auto res = isl::basic_map::subtract(map2); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::subtract(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::basic_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::basic_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::basic_map::to_union_map() const +{ + auto res = isl::basic_map::to_union_map(); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::unite(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::unite(bmap2); + return typed::map(res); +} + +template +typed::map typed::basic_map::unite(const typed::map &map2) const +{ + auto res = isl::basic_map::unite(map2); + return typed::map(res); +} + +template +typed::union_map typed::basic_map::unite(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::map typed::basic_map::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::basic_map::upper_bound(upper); + return typed::map(res); +} + +template +typed::set> typed::basic_map::wrap() const +{ + auto res = isl::basic_map::wrap(); + return typed::set>(res); +} + +template +typed::basic_map>::basic_map(const isl::ctx &ctx, const std::string &str) + : isl::basic_map(ctx, str) +{ +} + +template +template +typed::basic_map> typed::basic_map>::apply_domain(const typed::basic_map &bmap2) const +{ + auto res = isl::basic_map::apply_domain(bmap2); + return typed::basic_map>(res); +} + +template +template +typed::map> typed::basic_map>::apply_domain(const typed::map &map2) const +{ + auto res = isl::basic_map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map>::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::basic_map typed::basic_map>::apply_range(const typed::basic_map, Arg3> &bmap2) const +{ + auto res = isl::basic_map::apply_range(bmap2); + return typed::basic_map(res); +} + +template +template +typed::map typed::basic_map>::apply_range(const typed::map, Arg3> &map2) const +{ + auto res = isl::basic_map::apply_range(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map>::apply_range(const typed::union_map, Arg3> &umap2) const +{ + auto res = isl::basic_map::apply_range(umap2); + return typed::union_map(res); +} + +template +typed::map> typed::basic_map>::as_map() const +{ + auto res = isl::basic_map::as_map(); + return typed::map>(res); +} + +template +typed::multi_union_pw_aff> typed::basic_map>::as_multi_union_pw_aff() const +{ + auto res = isl::basic_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::basic_map>::as_pw_multi_aff() const +{ + auto res = isl::basic_map::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::basic_map>::as_union_pw_multi_aff() const +{ + auto res = isl::basic_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::set> typed::basic_map>::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::basic_map::bind_domain(tuple); + return typed::set>(res); +} + +template +typed::set typed::basic_map>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_map::bind_range(tuple); + return typed::set(res); +} + +template +typed::map> typed::basic_map>::coalesce() const +{ + auto res = isl::basic_map::coalesce(); + return typed::map>(res); +} + +template +typed::basic_map> typed::basic_map>::detect_equalities() const +{ + auto res = isl::basic_map::detect_equalities(); + return typed::basic_map>(res); +} + +template +typed::set typed::basic_map>::domain() const +{ + auto res = isl::basic_map::domain(); + return typed::set(res); +} + +template +typed::union_map>, Domain> typed::basic_map>::domain_map() const +{ + auto res = isl::basic_map::domain_map(); + return typed::union_map>, Domain>(res); +} + +template +typed::union_pw_multi_aff>, Domain> typed::basic_map>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::basic_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff>, Domain>(res); +} + +template +template +typed::map, pair> typed::basic_map>::domain_product(const typed::map> &map2) const +{ + auto res = isl::basic_map::domain_product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::basic_map>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::basic_map::domain_product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map> typed::basic_map>::drop_unused_params() const +{ + auto res = isl::basic_map::drop_unused_params(); + return typed::map>(res); +} + +template +bool typed::basic_map>::every_map(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map>(arg0)); + }; + return isl::basic_map::every_map(lambda_test); +} + +template +typed::map> typed::basic_map>::extract_map(const typed::space> &space) const +{ + auto res = isl::basic_map::extract_map(space); + return typed::map>(res); +} + +template +typed::basic_map typed::basic_map>::flatten_range() const +{ + auto res = isl::basic_map::flatten_range(); + return typed::basic_map(res); +} + +template +void typed::basic_map>::foreach_basic_map(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map>(arg0)); + }; + return isl::basic_map::foreach_basic_map(lambda_fn); +} + +template +void typed::basic_map>::foreach_map(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map>(arg0)); + }; + return isl::basic_map::foreach_map(lambda_fn); +} + +template +typed::basic_map> typed::basic_map>::gist(const typed::basic_map> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::basic_map>(res); +} + +template +typed::map> typed::basic_map>::gist(const typed::map> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::gist(const typed::union_map> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::union_map>(res); +} + +template +typed::map> typed::basic_map>::gist_domain(const typed::set &context) const +{ + auto res = isl::basic_map::gist_domain(context); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::basic_map::gist_domain(uset); + return typed::union_map>(res); +} + +template +typed::map> typed::basic_map>::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_map::gist_params(context); + return typed::map>(res); +} + +template +typed::basic_map> typed::basic_map>::intersect(const typed::basic_map> &bmap2) const +{ + auto res = isl::basic_map::intersect(bmap2); + return typed::basic_map>(res); +} + +template +typed::map> typed::basic_map>::intersect(const typed::map> &map2) const +{ + auto res = isl::basic_map::intersect(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::intersect(const typed::union_map> &umap2) const +{ + auto res = isl::basic_map::intersect(umap2); + return typed::union_map>(res); +} + +template +typed::basic_map> typed::basic_map>::intersect_domain(const typed::basic_set &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map>(res); +} + +template +typed::map> typed::basic_map>::intersect_domain(const typed::set &set) const +{ + auto res = isl::basic_map::intersect_domain(set); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::intersect_domain(const typed::space &space) const +{ + auto res = isl::basic_map::intersect_domain(space); + return typed::union_map>(res); +} + +template +typed::union_map> typed::basic_map>::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::basic_map::intersect_domain(uset); + return typed::union_map>(res); +} + +template +typed::basic_map> typed::basic_map>::intersect_domain(const typed::point &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map>(res); +} + +template +typed::map> typed::basic_map>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_map::intersect_params(params); + return typed::map>(res); +} + +template +typed::basic_map> typed::basic_map>::intersect_range(const typed::basic_set> &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map>(res); +} + +template +typed::map> typed::basic_map>::intersect_range(const typed::set> &set) const +{ + auto res = isl::basic_map::intersect_range(set); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::intersect_range(const typed::space> &space) const +{ + auto res = isl::basic_map::intersect_range(space); + return typed::union_map>(res); +} + +template +typed::union_map> typed::basic_map>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::intersect_range(uset); + return typed::union_map>(res); +} + +template +typed::basic_map> typed::basic_map>::intersect_range(const typed::point> &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map>(res); +} + +template +typed::map> typed::basic_map>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::basic_map::intersect_range_wrapped_domain(domain); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::basic_map::intersect_range_wrapped_domain(domain); + return typed::union_map>(res); +} + +template +typed::map> typed::basic_map>::lexmax() const +{ + auto res = isl::basic_map::lexmax(); + return typed::map>(res); +} + +template +typed::pw_multi_aff> typed::basic_map>::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::map> typed::basic_map>::lexmin() const +{ + auto res = isl::basic_map::lexmin(); + return typed::map>(res); +} + +template +typed::pw_multi_aff> typed::basic_map>::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::map> typed::basic_map>::lower_bound(const typed::multi_pw_aff> &lower) const +{ + auto res = isl::basic_map::lower_bound(lower); + return typed::map>(res); +} + +template +typed::map_list> typed::basic_map>::map_list() const +{ + auto res = isl::basic_map::map_list(); + return typed::map_list>(res); +} + +template +typed::multi_pw_aff> typed::basic_map>::max_multi_pw_aff() const +{ + auto res = isl::basic_map::max_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::basic_map>::min_multi_pw_aff() const +{ + auto res = isl::basic_map::min_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::set<> typed::basic_map>::params() const +{ + auto res = isl::basic_map::params(); + return typed::set<>(res); +} + +template +template +typed::map> typed::basic_map>::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::basic_map::preimage_domain(ma); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map>::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_map::preimage_domain(mpa); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map>::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_map::preimage_domain(pma); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map>::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::map typed::basic_map>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_map::preimage_range(ma); + return typed::map(res); +} + +template +template +typed::map typed::basic_map>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_map::preimage_range(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::basic_map>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::map, pair, Arg3>> typed::basic_map>::product(const typed::map &map2) const +{ + auto res = isl::basic_map::product(map2); + return typed::map, pair, Arg3>>(res); +} + +template +template +typed::union_map, pair, Arg3>> typed::basic_map>::product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::product(umap2); + return typed::union_map, pair, Arg3>>(res); +} + +template +typed::map> typed::basic_map>::project_out_all_params() const +{ + auto res = isl::basic_map::project_out_all_params(); + return typed::map>(res); +} + +template +typed::map> typed::basic_map>::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map>(res); +} + +template +typed::map> typed::basic_map>::project_out_param(const std::string &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map>(res); +} + +template +typed::map> typed::basic_map>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_map::project_out_param(list); + return typed::map>(res); +} + +template +typed::set> typed::basic_map>::range() const +{ + auto res = isl::basic_map::range(); + return typed::set>(res); +} + +template +typed::map typed::basic_map>::range_factor_domain() const +{ + auto res = isl::basic_map::range_factor_domain(); + return typed::map(res); +} + +template +typed::map typed::basic_map>::range_factor_range() const +{ + auto res = isl::basic_map::range_factor_range(); + return typed::map(res); +} + +template +typed::fixed_box> typed::basic_map>::range_lattice_tile() const +{ + auto res = isl::basic_map::range_lattice_tile(); + return typed::fixed_box>(res); +} + +template +typed::union_map>, pair> typed::basic_map>::range_map() const +{ + auto res = isl::basic_map::range_map(); + return typed::union_map>, pair>(res); +} + +template +template +typed::map, Arg3>> typed::basic_map>::range_product(const typed::map &map2) const +{ + auto res = isl::basic_map::range_product(map2); + return typed::map, Arg3>>(res); +} + +template +template +typed::union_map, Arg3>> typed::basic_map>::range_product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::range_product(umap2); + return typed::union_map, Arg3>>(res); +} + +template +typed::map> typed::basic_map>::range_reverse() const +{ + auto res = isl::basic_map::range_reverse(); + return typed::map>(res); +} + +template +typed::fixed_box> typed::basic_map>::range_simple_fixed_box_hull() const +{ + auto res = isl::basic_map::range_simple_fixed_box_hull(); + return typed::fixed_box>(res); +} + +template +typed::basic_map, Domain> typed::basic_map>::reverse() const +{ + auto res = isl::basic_map::reverse(); + return typed::basic_map, Domain>(res); +} + +template +template +typed::map> typed::basic_map>::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::basic_map::set_domain_tuple(id); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map>::set_domain_tuple(const std::string &id) const +{ + auto res = isl::basic_map::set_domain_tuple(id); + return typed::map>(res); +} + +template +typed::space> typed::basic_map>::space() const +{ + auto res = isl::basic_map::space(); + return typed::space>(res); +} + +template +typed::map> typed::basic_map>::subtract(const typed::map> &map2) const +{ + auto res = isl::basic_map::subtract(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::subtract(const typed::union_map> &umap2) const +{ + auto res = isl::basic_map::subtract(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::basic_map>::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::basic_map::subtract_domain(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::basic_map>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::basic_map::subtract_range(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::basic_map>::to_union_map() const +{ + auto res = isl::basic_map::to_union_map(); + return typed::union_map>(res); +} + +template +typed::map, Range2> typed::basic_map>::uncurry() const +{ + auto res = isl::basic_map::uncurry(); + return typed::map, Range2>(res); +} + +template +typed::map> typed::basic_map>::unite(const typed::basic_map> &bmap2) const +{ + auto res = isl::basic_map::unite(bmap2); + return typed::map>(res); +} + +template +typed::map> typed::basic_map>::unite(const typed::map> &map2) const +{ + auto res = isl::basic_map::unite(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::basic_map>::unite(const typed::union_map> &umap2) const +{ + auto res = isl::basic_map::unite(umap2); + return typed::union_map>(res); +} + +template +typed::map> typed::basic_map>::upper_bound(const typed::multi_pw_aff> &upper) const +{ + auto res = isl::basic_map::upper_bound(upper); + return typed::map>(res); +} + +template +typed::set>> typed::basic_map>::wrap() const +{ + auto res = isl::basic_map::wrap(); + return typed::set>>(res); +} + +template +typed::basic_map, pair>::basic_map(const isl::ctx &ctx, const std::string &str) + : isl::basic_map(ctx, str) +{ +} + +template +template +typed::basic_map> typed::basic_map, pair>::apply_domain(const typed::basic_map, Domain2> &bmap2) const +{ + auto res = isl::basic_map::apply_domain(bmap2); + return typed::basic_map>(res); +} + +template +template +typed::map> typed::basic_map, pair>::apply_domain(const typed::map, Domain2> &map2) const +{ + auto res = isl::basic_map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map, pair>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::basic_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::basic_map, Range2> typed::basic_map, pair>::apply_range(const typed::basic_map, Range2> &bmap2) const +{ + auto res = isl::basic_map::apply_range(bmap2); + return typed::basic_map, Range2>(res); +} + +template +template +typed::map, Range2> typed::basic_map, pair>::apply_range(const typed::map, Range2> &map2) const +{ + auto res = isl::basic_map::apply_range(map2); + return typed::map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::basic_map, pair>::apply_range(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::basic_map::apply_range(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::as_map() const +{ + auto res = isl::basic_map::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::basic_map, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::basic_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::basic_map, pair>::as_pw_multi_aff() const +{ + auto res = isl::basic_map::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::basic_map, pair>::as_union_pw_multi_aff() const +{ + auto res = isl::basic_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::set> typed::basic_map, pair>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_map::bind_domain(tuple); + return typed::set>(res); +} + +template +typed::set> typed::basic_map, pair>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_map::bind_range(tuple); + return typed::set>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::coalesce() const +{ + auto res = isl::basic_map::coalesce(); + return typed::map, pair>(res); +} + +template +typed::map>> typed::basic_map, pair>::curry() const +{ + auto res = isl::basic_map::curry(); + return typed::map>>(res); +} + +template +typed::basic_set> typed::basic_map, pair>::deltas() const +{ + auto res = isl::basic_map::deltas(); + return typed::basic_set>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::detect_equalities() const +{ + auto res = isl::basic_map::detect_equalities(); + return typed::basic_map, pair>(res); +} + +template +typed::set> typed::basic_map, pair>::domain() const +{ + auto res = isl::basic_map::domain(); + return typed::set>(res); +} + +template +typed::map> typed::basic_map, pair>::domain_factor_domain() const +{ + auto res = isl::basic_map::domain_factor_domain(); + return typed::map>(res); +} + +template +typed::map> typed::basic_map, pair>::domain_factor_range() const +{ + auto res = isl::basic_map::domain_factor_range(); + return typed::map>(res); +} + +template +typed::union_map, pair>, pair> typed::basic_map, pair>::domain_map() const +{ + auto res = isl::basic_map::domain_map(); + return typed::union_map, pair>, pair>(res); +} + +template +typed::union_pw_multi_aff, pair>, pair> typed::basic_map, pair>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::basic_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::basic_map, pair>::domain_product(const typed::map> &map2) const +{ + auto res = isl::basic_map::domain_product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::basic_map, pair>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::basic_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::domain_reverse() const +{ + auto res = isl::basic_map::domain_reverse(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::drop_unused_params() const +{ + auto res = isl::basic_map::drop_unused_params(); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::basic_map, pair>::eq_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::basic_map::eq_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::basic_map, pair>::eq_at(const typed::multi_union_pw_aff, Range> &mupa) const +{ + auto res = isl::basic_map::eq_at(mupa); + return typed::union_map, pair>(res); +} + +template +bool typed::basic_map, pair>::every_map(const std::function, pair>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, pair>(arg0)); + }; + return isl::basic_map::every_map(lambda_test); +} + +template +typed::map, pair> typed::basic_map, pair>::extract_map(const typed::space, pair> &space) const +{ + auto res = isl::basic_map::extract_map(space); + return typed::map, pair>(res); +} + +template +typed::basic_map> typed::basic_map, pair>::flatten_domain() const +{ + auto res = isl::basic_map::flatten_domain(); + return typed::basic_map>(res); +} + +template +typed::basic_map, Anonymous> typed::basic_map, pair>::flatten_range() const +{ + auto res = isl::basic_map::flatten_range(); + return typed::basic_map, Anonymous>(res); +} + +template +void typed::basic_map, pair>::foreach_basic_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map, pair>(arg0)); + }; + return isl::basic_map::foreach_basic_map(lambda_fn); +} + +template +void typed::basic_map, pair>::foreach_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, pair>(arg0)); + }; + return isl::basic_map::foreach_map(lambda_fn); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::gist(const typed::basic_map, pair> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::gist(const typed::map, pair> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::gist(const typed::union_map, pair> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::gist_domain(const typed::set> &context) const +{ + auto res = isl::basic_map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect(const typed::basic_map, pair> &bmap2) const +{ + auto res = isl::basic_map::intersect(bmap2); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect(const typed::map, pair> &map2) const +{ + auto res = isl::basic_map::intersect(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect(const typed::union_map, pair> &umap2) const +{ + auto res = isl::basic_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_domain(const typed::basic_set> &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::basic_map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::basic_map::intersect_domain(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::intersect_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_domain(const typed::point> &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::basic_map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::basic_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_range(const typed::basic_set> &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_range(const typed::set> &set) const +{ + auto res = isl::basic_map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_range(const typed::space> &space) const +{ + auto res = isl::basic_map::intersect_range(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::intersect_range(uset); + return typed::union_map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_range(const typed::point> &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::basic_map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::basic_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +template +typed::map, pair> typed::basic_map, pair>::lex_ge_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::basic_map::lex_ge_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::basic_map, pair>::lex_gt_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::basic_map::lex_gt_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::basic_map, pair>::lex_le_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::basic_map::lex_le_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::basic_map, pair>::lex_lt_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::basic_map::lex_lt_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::lexmax() const +{ + auto res = isl::basic_map::lexmax(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::basic_map, pair>::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::lexmin() const +{ + auto res = isl::basic_map::lexmin(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::basic_map, pair>::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::lower_bound(const typed::multi_pw_aff, pair> &lower) const +{ + auto res = isl::basic_map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map_list, pair> typed::basic_map, pair>::map_list() const +{ + auto res = isl::basic_map::map_list(); + return typed::map_list, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::basic_map, pair>::max_multi_pw_aff() const +{ + auto res = isl::basic_map::max_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::basic_map, pair>::min_multi_pw_aff() const +{ + auto res = isl::basic_map::min_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::set<> typed::basic_map, pair>::params() const +{ + auto res = isl::basic_map::params(); + return typed::set<>(res); +} + +template +template +typed::map> typed::basic_map, pair>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_map::preimage_domain(ma); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map, pair>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::basic_map::preimage_domain(mpa); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map, pair>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_map::preimage_domain(pma); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map, pair>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::map, Range2> typed::basic_map, pair>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_map::preimage_range(ma); + return typed::map, Range2>(res); +} + +template +template +typed::map, Range2> typed::basic_map, pair>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_map::preimage_range(pma); + return typed::map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::basic_map, pair>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_map::preimage_range(upma); + return typed::union_map, Range2>(res); +} + +template +template +typed::map, Domain2>, pair, Range2>> typed::basic_map, pair>::product(const typed::map &map2) const +{ + auto res = isl::basic_map::product(map2); + return typed::map, Domain2>, pair, Range2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Range2>> typed::basic_map, pair>::product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::product(umap2); + return typed::union_map, Domain2>, pair, Range2>>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_all_params() const +{ + auto res = isl::basic_map::project_out_all_params(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_param(const std::string &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_map::project_out_param(list); + return typed::map, pair>(res); +} + +template +typed::set> typed::basic_map, pair>::range() const +{ + auto res = isl::basic_map::range(); + return typed::set>(res); +} + +template +typed::map, T1> typed::basic_map, pair>::range_factor_domain() const +{ + auto res = isl::basic_map::range_factor_domain(); + return typed::map, T1>(res); +} + +template +typed::map, T2> typed::basic_map, pair>::range_factor_range() const +{ + auto res = isl::basic_map::range_factor_range(); + return typed::map, T2>(res); +} + +template +typed::fixed_box, pair> typed::basic_map, pair>::range_lattice_tile() const +{ + auto res = isl::basic_map::range_lattice_tile(); + return typed::fixed_box, pair>(res); +} + +template +typed::union_map, pair>, pair> typed::basic_map, pair>::range_map() const +{ + auto res = isl::basic_map::range_map(); + return typed::union_map, pair>, pair>(res); +} + +template +template +typed::map, pair, Range2>> typed::basic_map, pair>::range_product(const typed::map, Range2> &map2) const +{ + auto res = isl::basic_map::range_product(map2); + return typed::map, pair, Range2>>(res); +} + +template +template +typed::union_map, pair, Range2>> typed::basic_map, pair>::range_product(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::basic_map::range_product(umap2); + return typed::union_map, pair, Range2>>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::range_reverse() const +{ + auto res = isl::basic_map::range_reverse(); + return typed::map, pair>(res); +} + +template +typed::fixed_box, pair> typed::basic_map, pair>::range_simple_fixed_box_hull() const +{ + auto res = isl::basic_map::range_simple_fixed_box_hull(); + return typed::fixed_box, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::reverse() const +{ + auto res = isl::basic_map::reverse(); + return typed::basic_map, pair>(res); +} + +template +typed::space, pair> typed::basic_map, pair>::space() const +{ + auto res = isl::basic_map::space(); + return typed::space, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::subtract(const typed::map, pair> &map2) const +{ + auto res = isl::basic_map::subtract(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::subtract(const typed::union_map, pair> &umap2) const +{ + auto res = isl::basic_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::basic_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::basic_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::to_union_map() const +{ + auto res = isl::basic_map::to_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::map, T1>, T2> typed::basic_map, pair>::uncurry() const +{ + auto res = isl::basic_map::uncurry(); + return typed::map, T1>, T2>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::unite(const typed::basic_map, pair> &bmap2) const +{ + auto res = isl::basic_map::unite(bmap2); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::unite(const typed::map, pair> &map2) const +{ + auto res = isl::basic_map::unite(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::unite(const typed::union_map, pair> &umap2) const +{ + auto res = isl::basic_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::upper_bound(const typed::multi_pw_aff, pair> &upper) const +{ + auto res = isl::basic_map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::set, pair>> typed::basic_map, pair>::wrap() const +{ + auto res = isl::basic_map::wrap(); + return typed::set, pair>>(res); +} + +template +typed::basic_map, pair>::basic_map(const isl::ctx &ctx, const std::string &str) + : isl::basic_map(ctx, str) +{ +} + +template +template +typed::basic_map> typed::basic_map, pair>::apply_domain(const typed::basic_map, Domain2> &bmap2) const +{ + auto res = isl::basic_map::apply_domain(bmap2); + return typed::basic_map>(res); +} + +template +template +typed::map> typed::basic_map, pair>::apply_domain(const typed::map, Domain2> &map2) const +{ + auto res = isl::basic_map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map, pair>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::basic_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::basic_map, Arg2> typed::basic_map, pair>::apply_range(const typed::basic_map, Arg2> &bmap2) const +{ + auto res = isl::basic_map::apply_range(bmap2); + return typed::basic_map, Arg2>(res); +} + +template +template +typed::map, Arg2> typed::basic_map, pair>::apply_range(const typed::map, Arg2> &map2) const +{ + auto res = isl::basic_map::apply_range(map2); + return typed::map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::basic_map, pair>::apply_range(const typed::union_map, Arg2> &umap2) const +{ + auto res = isl::basic_map::apply_range(umap2); + return typed::union_map, Arg2>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::as_map() const +{ + auto res = isl::basic_map::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::basic_map, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::basic_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::basic_map, pair>::as_pw_multi_aff() const +{ + auto res = isl::basic_map::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::basic_map, pair>::as_union_pw_multi_aff() const +{ + auto res = isl::basic_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::set> typed::basic_map, pair>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_map::bind_domain(tuple); + return typed::set>(res); +} + +template +typed::set> typed::basic_map, pair>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_map::bind_range(tuple); + return typed::set>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::coalesce() const +{ + auto res = isl::basic_map::coalesce(); + return typed::map, pair>(res); +} + +template +typed::map>> typed::basic_map, pair>::curry() const +{ + auto res = isl::basic_map::curry(); + return typed::map>>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::detect_equalities() const +{ + auto res = isl::basic_map::detect_equalities(); + return typed::basic_map, pair>(res); +} + +template +typed::set> typed::basic_map, pair>::domain() const +{ + auto res = isl::basic_map::domain(); + return typed::set>(res); +} + +template +typed::map> typed::basic_map, pair>::domain_factor_domain() const +{ + auto res = isl::basic_map::domain_factor_domain(); + return typed::map>(res); +} + +template +typed::map> typed::basic_map, pair>::domain_factor_range() const +{ + auto res = isl::basic_map::domain_factor_range(); + return typed::map>(res); +} + +template +typed::union_map, pair>, pair> typed::basic_map, pair>::domain_map() const +{ + auto res = isl::basic_map::domain_map(); + return typed::union_map, pair>, pair>(res); +} + +template +typed::union_pw_multi_aff, pair>, pair> typed::basic_map, pair>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::basic_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::basic_map, pair>::domain_product(const typed::map> &map2) const +{ + auto res = isl::basic_map::domain_product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::basic_map, pair>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::basic_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::domain_reverse() const +{ + auto res = isl::basic_map::domain_reverse(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::drop_unused_params() const +{ + auto res = isl::basic_map::drop_unused_params(); + return typed::map, pair>(res); +} + +template +bool typed::basic_map, pair>::every_map(const std::function, pair>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, pair>(arg0)); + }; + return isl::basic_map::every_map(lambda_test); +} + +template +typed::map, pair> typed::basic_map, pair>::extract_map(const typed::space, pair> &space) const +{ + auto res = isl::basic_map::extract_map(space); + return typed::map, pair>(res); +} + +template +typed::basic_map> typed::basic_map, pair>::flatten_domain() const +{ + auto res = isl::basic_map::flatten_domain(); + return typed::basic_map>(res); +} + +template +typed::basic_map, Anonymous> typed::basic_map, pair>::flatten_range() const +{ + auto res = isl::basic_map::flatten_range(); + return typed::basic_map, Anonymous>(res); +} + +template +void typed::basic_map, pair>::foreach_basic_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map, pair>(arg0)); + }; + return isl::basic_map::foreach_basic_map(lambda_fn); +} + +template +void typed::basic_map, pair>::foreach_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, pair>(arg0)); + }; + return isl::basic_map::foreach_map(lambda_fn); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::gist(const typed::basic_map, pair> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::gist(const typed::map, pair> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::gist(const typed::union_map, pair> &context) const +{ + auto res = isl::basic_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::gist_domain(const typed::set> &context) const +{ + auto res = isl::basic_map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect(const typed::basic_map, pair> &bmap2) const +{ + auto res = isl::basic_map::intersect(bmap2); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect(const typed::map, pair> &map2) const +{ + auto res = isl::basic_map::intersect(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect(const typed::union_map, pair> &umap2) const +{ + auto res = isl::basic_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_domain(const typed::basic_set> &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::basic_map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::basic_map::intersect_domain(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::intersect_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_domain(const typed::point> &bset) const +{ + auto res = isl::basic_map::intersect_domain(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::basic_map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::basic_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_range(const typed::basic_set> &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_range(const typed::set> &set) const +{ + auto res = isl::basic_map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_range(const typed::space> &space) const +{ + auto res = isl::basic_map::intersect_range(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::basic_map::intersect_range(uset); + return typed::union_map, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::intersect_range(const typed::point> &bset) const +{ + auto res = isl::basic_map::intersect_range(bset); + return typed::basic_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::basic_map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::basic_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::lexmax() const +{ + auto res = isl::basic_map::lexmax(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::basic_map, pair>::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::lexmin() const +{ + auto res = isl::basic_map::lexmin(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::basic_map, pair>::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::lower_bound(const typed::multi_pw_aff, pair> &lower) const +{ + auto res = isl::basic_map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map_list, pair> typed::basic_map, pair>::map_list() const +{ + auto res = isl::basic_map::map_list(); + return typed::map_list, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::basic_map, pair>::max_multi_pw_aff() const +{ + auto res = isl::basic_map::max_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::basic_map, pair>::min_multi_pw_aff() const +{ + auto res = isl::basic_map::min_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::set<> typed::basic_map, pair>::params() const +{ + auto res = isl::basic_map::params(); + return typed::set<>(res); +} + +template +template +typed::map> typed::basic_map, pair>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_map::preimage_domain(ma); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map, pair>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::basic_map::preimage_domain(mpa); + return typed::map>(res); +} + +template +template +typed::map> typed::basic_map, pair>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_map::preimage_domain(pma); + return typed::map>(res); +} + +template +template +typed::union_map> typed::basic_map, pair>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::map, Arg2> typed::basic_map, pair>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_map::preimage_range(ma); + return typed::map, Arg2>(res); +} + +template +template +typed::map, Arg2> typed::basic_map, pair>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_map::preimage_range(pma); + return typed::map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::basic_map, pair>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_map::preimage_range(upma); + return typed::union_map, Arg2>(res); +} + +template +template +typed::map, Domain2>, pair, Arg2>> typed::basic_map, pair>::product(const typed::map &map2) const +{ + auto res = isl::basic_map::product(map2); + return typed::map, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Arg2>> typed::basic_map, pair>::product(const typed::union_map &umap2) const +{ + auto res = isl::basic_map::product(umap2); + return typed::union_map, Domain2>, pair, Arg2>>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_all_params() const +{ + auto res = isl::basic_map::project_out_all_params(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_param(const std::string &id) const +{ + auto res = isl::basic_map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_map::project_out_param(list); + return typed::map, pair>(res); +} + +template +typed::set> typed::basic_map, pair>::range() const +{ + auto res = isl::basic_map::range(); + return typed::set>(res); +} + +template +typed::map, Range> typed::basic_map, pair>::range_factor_domain() const +{ + auto res = isl::basic_map::range_factor_domain(); + return typed::map, Range>(res); +} + +template +typed::map, Range2> typed::basic_map, pair>::range_factor_range() const +{ + auto res = isl::basic_map::range_factor_range(); + return typed::map, Range2>(res); +} + +template +typed::fixed_box, pair> typed::basic_map, pair>::range_lattice_tile() const +{ + auto res = isl::basic_map::range_lattice_tile(); + return typed::fixed_box, pair>(res); +} + +template +typed::union_map, pair>, pair> typed::basic_map, pair>::range_map() const +{ + auto res = isl::basic_map::range_map(); + return typed::union_map, pair>, pair>(res); +} + +template +template +typed::map, pair, Arg2>> typed::basic_map, pair>::range_product(const typed::map, Arg2> &map2) const +{ + auto res = isl::basic_map::range_product(map2); + return typed::map, pair, Arg2>>(res); +} + +template +template +typed::union_map, pair, Arg2>> typed::basic_map, pair>::range_product(const typed::union_map, Arg2> &umap2) const +{ + auto res = isl::basic_map::range_product(umap2); + return typed::union_map, pair, Arg2>>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::range_reverse() const +{ + auto res = isl::basic_map::range_reverse(); + return typed::map, pair>(res); +} + +template +typed::fixed_box, pair> typed::basic_map, pair>::range_simple_fixed_box_hull() const +{ + auto res = isl::basic_map::range_simple_fixed_box_hull(); + return typed::fixed_box, pair>(res); +} + +template +typed::basic_map, pair> typed::basic_map, pair>::reverse() const +{ + auto res = isl::basic_map::reverse(); + return typed::basic_map, pair>(res); +} + +template +typed::space, pair> typed::basic_map, pair>::space() const +{ + auto res = isl::basic_map::space(); + return typed::space, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::subtract(const typed::map, pair> &map2) const +{ + auto res = isl::basic_map::subtract(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::subtract(const typed::union_map, pair> &umap2) const +{ + auto res = isl::basic_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::basic_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::basic_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::to_union_map() const +{ + auto res = isl::basic_map::to_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::map, Range>, Range2> typed::basic_map, pair>::uncurry() const +{ + auto res = isl::basic_map::uncurry(); + return typed::map, Range>, Range2>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::unite(const typed::basic_map, pair> &bmap2) const +{ + auto res = isl::basic_map::unite(bmap2); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::unite(const typed::map, pair> &map2) const +{ + auto res = isl::basic_map::unite(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::basic_map, pair>::unite(const typed::union_map, pair> &umap2) const +{ + auto res = isl::basic_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::basic_map, pair>::upper_bound(const typed::multi_pw_aff, pair> &upper) const +{ + auto res = isl::basic_map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::set, pair>> typed::basic_map, pair>::wrap() const +{ + auto res = isl::basic_map::wrap(); + return typed::set, pair>>(res); +} + +typed::basic_set<>::basic_set(const typed::point<> &pnt) + : isl::basic_set(pnt) +{ +} + +typed::basic_set<>::basic_set(const isl::ctx &ctx, const std::string &str) + : isl::basic_set(ctx, str) +{ +} + +typed::set<> typed::basic_set<>::coalesce() const +{ + auto res = isl::basic_set::coalesce(); + return typed::set<>(res); +} + +typed::basic_set<> typed::basic_set<>::detect_equalities() const +{ + auto res = isl::basic_set::detect_equalities(); + return typed::basic_set<>(res); +} + +typed::set<> typed::basic_set<>::drop_unused_params() const +{ + auto res = isl::basic_set::drop_unused_params(); + return typed::set<>(res); +} + +bool typed::basic_set<>::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set<>(arg0)); + }; + return isl::basic_set::every_set(lambda_test); +} + +typed::set<> typed::basic_set<>::extract_set(const typed::space<> &space) const +{ + auto res = isl::basic_set::extract_set(space); + return typed::set<>(res); +} + +void typed::basic_set<>::foreach_basic_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set<>(arg0)); + }; + return isl::basic_set::foreach_basic_set(lambda_fn); +} + +void typed::basic_set<>::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point<>(arg0)); + }; + return isl::basic_set::foreach_point(lambda_fn); +} + +void typed::basic_set<>::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set<>(arg0)); + }; + return isl::basic_set::foreach_set(lambda_fn); +} + +typed::basic_set<> typed::basic_set<>::gist(const typed::basic_set<> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::basic_set<>(res); +} + +typed::set<> typed::basic_set<>::gist(const typed::set<> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::set<>(res); +} + +typed::union_set<> typed::basic_set<>::gist(const typed::union_set<> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::union_set<>(res); +} + +typed::basic_set<> typed::basic_set<>::gist(const typed::point<> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::basic_set<>(res); +} + +typed::pw_aff typed::basic_set<>::indicator_function() const +{ + auto res = isl::basic_set::indicator_function(); + return typed::pw_aff(res); +} + +typed::basic_set<> typed::basic_set<>::intersect(const typed::basic_set<> &bset2) const +{ + auto res = isl::basic_set::intersect(bset2); + return typed::basic_set<>(res); +} + +typed::set<> typed::basic_set<>::intersect(const typed::set<> &set2) const +{ + auto res = isl::basic_set::intersect(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::basic_set<>::intersect(const typed::union_set<> &uset2) const +{ + auto res = isl::basic_set::intersect(uset2); + return typed::union_set<>(res); +} + +typed::basic_set<> typed::basic_set<>::intersect(const typed::point<> &bset2) const +{ + auto res = isl::basic_set::intersect(bset2); + return typed::basic_set<>(res); +} + +typed::pw_aff typed::basic_set<>::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::basic_set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +typed::pw_aff typed::basic_set<>::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::basic_set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +typed::set<> typed::basic_set<>::project_out_all_params() const +{ + auto res = isl::basic_set::project_out_all_params(); + return typed::set<>(res); +} + +typed::set<> typed::basic_set<>::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_set::project_out_param(id); + return typed::set<>(res); +} + +typed::set<> typed::basic_set<>::project_out_param(const std::string &id) const +{ + auto res = isl::basic_set::project_out_param(id); + return typed::set<>(res); +} + +typed::set<> typed::basic_set<>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_set::project_out_param(list); + return typed::set<>(res); +} + +typed::pw_aff typed::basic_set<>::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::basic_set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +typed::pw_aff typed::basic_set<>::pw_aff_on_domain(long v) const +{ + auto res = isl::basic_set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::basic_set<>::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::basic_set::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff(res); +} + +typed::set_list<> typed::basic_set<>::set_list() const +{ + auto res = isl::basic_set::set_list(); + return typed::set_list<>(res); +} + +typed::space<> typed::basic_set<>::space() const +{ + auto res = isl::basic_set::space(); + return typed::space<>(res); +} + +typed::set<> typed::basic_set<>::subtract(const typed::set<> &set2) const +{ + auto res = isl::basic_set::subtract(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::basic_set<>::subtract(const typed::union_set<> &uset2) const +{ + auto res = isl::basic_set::subtract(uset2); + return typed::union_set<>(res); +} + +typed::set<> typed::basic_set<>::to_set() const +{ + auto res = isl::basic_set::to_set(); + return typed::set<>(res); +} + +typed::union_set<> typed::basic_set<>::to_union_set() const +{ + auto res = isl::basic_set::to_union_set(); + return typed::union_set<>(res); +} + +template +typed::set typed::basic_set<>::unbind_params(const typed::multi_id &tuple) const +{ + auto res = isl::basic_set::unbind_params(tuple); + return typed::set(res); +} + +typed::set<> typed::basic_set<>::unite(const typed::basic_set<> &bset2) const +{ + auto res = isl::basic_set::unite(bset2); + return typed::set<>(res); +} + +typed::set<> typed::basic_set<>::unite(const typed::set<> &set2) const +{ + auto res = isl::basic_set::unite(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::basic_set<>::unite(const typed::union_set<> &uset2) const +{ + auto res = isl::basic_set::unite(uset2); + return typed::union_set<>(res); +} + +typed::set<> typed::basic_set<>::unite(const typed::point<> &bset2) const +{ + auto res = isl::basic_set::unite(bset2); + return typed::set<>(res); +} + +template +typed::basic_set::basic_set(const typed::point &pnt) + : isl::basic_set(pnt) +{ +} + +template +typed::basic_set::basic_set(const isl::ctx &ctx, const std::string &str) + : isl::basic_set(ctx, str) +{ +} + +template +template +typed::basic_set typed::basic_set::apply(const typed::basic_map &bmap) const +{ + auto res = isl::basic_set::apply(bmap); + return typed::basic_set(res); +} + +template +template +typed::set typed::basic_set::apply(const typed::map &map) const +{ + auto res = isl::basic_set::apply(map); + return typed::set(res); +} + +template +template +typed::union_set typed::basic_set::apply(const typed::union_map &umap) const +{ + auto res = isl::basic_set::apply(umap); + return typed::union_set(res); +} + +template +typed::pw_multi_aff typed::basic_set::as_pw_multi_aff() const +{ + auto res = isl::basic_set::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::basic_set::as_set() const +{ + auto res = isl::basic_set::as_set(); + return typed::set(res); +} + +template +typed::set<> typed::basic_set::bind(const typed::multi_id &tuple) const +{ + auto res = isl::basic_set::bind(tuple); + return typed::set<>(res); +} + +template +typed::set typed::basic_set::coalesce() const +{ + auto res = isl::basic_set::coalesce(); + return typed::set(res); +} + +template +typed::basic_set typed::basic_set::detect_equalities() const +{ + auto res = isl::basic_set::detect_equalities(); + return typed::basic_set(res); +} + +template +typed::set typed::basic_set::drop_unused_params() const +{ + auto res = isl::basic_set::drop_unused_params(); + return typed::set(res); +} + +template +bool typed::basic_set::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set(arg0)); + }; + return isl::basic_set::every_set(lambda_test); +} + +template +typed::set typed::basic_set::extract_set(const typed::space &space) const +{ + auto res = isl::basic_set::extract_set(space); + return typed::set(res); +} + +template +void typed::basic_set::foreach_basic_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set(arg0)); + }; + return isl::basic_set::foreach_basic_set(lambda_fn); +} + +template +void typed::basic_set::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point(arg0)); + }; + return isl::basic_set::foreach_point(lambda_fn); +} + +template +void typed::basic_set::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set(arg0)); + }; + return isl::basic_set::foreach_set(lambda_fn); +} + +template +typed::basic_set typed::basic_set::gist(const typed::basic_set &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::basic_set(res); +} + +template +typed::set typed::basic_set::gist(const typed::set &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::set(res); +} + +template +typed::union_set typed::basic_set::gist(const typed::union_set &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::union_set(res); +} + +template +typed::basic_set typed::basic_set::gist(const typed::point &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::basic_set(res); +} + +template +typed::set typed::basic_set::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_set::gist_params(context); + return typed::set(res); +} + +template +typed::map typed::basic_set::identity() const +{ + auto res = isl::basic_set::identity(); + return typed::map(res); +} + +template +typed::pw_aff typed::basic_set::indicator_function() const +{ + auto res = isl::basic_set::indicator_function(); + return typed::pw_aff(res); +} + +template +template +typed::map typed::basic_set::insert_domain(const typed::space &domain) const +{ + auto res = isl::basic_set::insert_domain(domain); + return typed::map(res); +} + +template +typed::basic_set typed::basic_set::intersect(const typed::basic_set &bset2) const +{ + auto res = isl::basic_set::intersect(bset2); + return typed::basic_set(res); +} + +template +typed::set typed::basic_set::intersect(const typed::set &set2) const +{ + auto res = isl::basic_set::intersect(set2); + return typed::set(res); +} + +template +typed::union_set typed::basic_set::intersect(const typed::union_set &uset2) const +{ + auto res = isl::basic_set::intersect(uset2); + return typed::union_set(res); +} + +template +typed::basic_set typed::basic_set::intersect(const typed::point &bset2) const +{ + auto res = isl::basic_set::intersect(bset2); + return typed::basic_set(res); +} + +template +typed::basic_set typed::basic_set::intersect_params(const typed::basic_set<> &bset2) const +{ + auto res = isl::basic_set::intersect_params(bset2); + return typed::basic_set(res); +} + +template +typed::set typed::basic_set::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_set::intersect_params(params); + return typed::set(res); +} + +template +typed::basic_set typed::basic_set::intersect_params(const typed::point<> &bset2) const +{ + auto res = isl::basic_set::intersect_params(bset2); + return typed::basic_set(res); +} + +template +typed::fixed_box typed::basic_set::lattice_tile() const +{ + auto res = isl::basic_set::lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::set typed::basic_set::lexmax() const +{ + auto res = isl::basic_set::lexmax(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::basic_set::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_set::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::basic_set::lexmin() const +{ + auto res = isl::basic_set::lexmin(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::basic_set::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_set::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::basic_set::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::basic_set::lower_bound(lower); + return typed::set(res); +} + +template +typed::set typed::basic_set::lower_bound(const typed::multi_val &lower) const +{ + auto res = isl::basic_set::lower_bound(lower); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::basic_set::max_multi_pw_aff() const +{ + auto res = isl::basic_set::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::basic_set::min_multi_pw_aff() const +{ + auto res = isl::basic_set::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::basic_set::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::basic_set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::basic_set::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::basic_set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +template +typed::basic_set<> typed::basic_set::params() const +{ + auto res = isl::basic_set::params(); + return typed::basic_set<>(res); +} + +template +typed::multi_val typed::basic_set::plain_multi_val_if_fixed() const +{ + auto res = isl::basic_set::plain_multi_val_if_fixed(); + return typed::multi_val(res); +} + +template +template +typed::set typed::basic_set::preimage(const typed::multi_aff &ma) const +{ + auto res = isl::basic_set::preimage(ma); + return typed::set(res); +} + +template +template +typed::set typed::basic_set::preimage(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::basic_set::preimage(mpa); + return typed::set(res); +} + +template +template +typed::set typed::basic_set::preimage(const typed::pw_multi_aff &pma) const +{ + auto res = isl::basic_set::preimage(pma); + return typed::set(res); +} + +template +template +typed::union_set typed::basic_set::preimage(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::basic_set::preimage(upma); + return typed::union_set(res); +} + +template +template +typed::set> typed::basic_set::product(const typed::set &set2) const +{ + auto res = isl::basic_set::product(set2); + return typed::set>(res); +} + +template +typed::set typed::basic_set::project_out_all_params() const +{ + auto res = isl::basic_set::project_out_all_params(); + return typed::set(res); +} + +template +typed::set typed::basic_set::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_set::project_out_param(id); + return typed::set(res); +} + +template +typed::set typed::basic_set::project_out_param(const std::string &id) const +{ + auto res = isl::basic_set::project_out_param(id); + return typed::set(res); +} + +template +typed::set typed::basic_set::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_set::project_out_param(list); + return typed::set(res); +} + +template +typed::pw_aff typed::basic_set::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::basic_set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::basic_set::pw_aff_on_domain(long v) const +{ + auto res = isl::basic_set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::basic_set::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::basic_set::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff(res); +} + +template +typed::set_list typed::basic_set::set_list() const +{ + auto res = isl::basic_set::set_list(); + return typed::set_list(res); +} + +template +typed::fixed_box typed::basic_set::simple_fixed_box_hull() const +{ + auto res = isl::basic_set::simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::space typed::basic_set::space() const +{ + auto res = isl::basic_set::space(); + return typed::space(res); +} + +template +typed::set typed::basic_set::subtract(const typed::set &set2) const +{ + auto res = isl::basic_set::subtract(set2); + return typed::set(res); +} + +template +typed::union_set typed::basic_set::subtract(const typed::union_set &uset2) const +{ + auto res = isl::basic_set::subtract(uset2); + return typed::union_set(res); +} + +template +typed::set typed::basic_set::to_set() const +{ + auto res = isl::basic_set::to_set(); + return typed::set(res); +} + +template +typed::union_set typed::basic_set::to_union_set() const +{ + auto res = isl::basic_set::to_union_set(); + return typed::union_set(res); +} + +template +typed::map typed::basic_set::translation() const +{ + auto res = isl::basic_set::translation(); + return typed::map(res); +} + +template +template +typed::map typed::basic_set::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::basic_set::unbind_params_insert_domain(domain); + return typed::map(res); +} + +template +typed::set typed::basic_set::unite(const typed::basic_set &bset2) const +{ + auto res = isl::basic_set::unite(bset2); + return typed::set(res); +} + +template +typed::set typed::basic_set::unite(const typed::set &set2) const +{ + auto res = isl::basic_set::unite(set2); + return typed::set(res); +} + +template +typed::union_set typed::basic_set::unite(const typed::union_set &uset2) const +{ + auto res = isl::basic_set::unite(uset2); + return typed::union_set(res); +} + +template +typed::set typed::basic_set::unite(const typed::point &bset2) const +{ + auto res = isl::basic_set::unite(bset2); + return typed::set(res); +} + +template +typed::set typed::basic_set::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::basic_set::upper_bound(upper); + return typed::set(res); +} + +template +typed::set typed::basic_set::upper_bound(const typed::multi_val &upper) const +{ + auto res = isl::basic_set::upper_bound(upper); + return typed::set(res); +} + +template +typed::basic_set>::basic_set(const typed::point> &pnt) + : isl::basic_set(pnt) +{ +} + +template +typed::basic_set>::basic_set(const isl::ctx &ctx, const std::string &str) + : isl::basic_set(ctx, str) +{ +} + +template +template +typed::basic_set typed::basic_set>::apply(const typed::basic_map, Arg2> &bmap) const +{ + auto res = isl::basic_set::apply(bmap); + return typed::basic_set(res); +} + +template +template +typed::set typed::basic_set>::apply(const typed::map, Arg2> &map) const +{ + auto res = isl::basic_set::apply(map); + return typed::set(res); +} + +template +template +typed::union_set typed::basic_set>::apply(const typed::union_map, Arg2> &umap) const +{ + auto res = isl::basic_set::apply(umap); + return typed::union_set(res); +} + +template +typed::pw_multi_aff> typed::basic_set>::as_pw_multi_aff() const +{ + auto res = isl::basic_set::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::basic_set>::as_set() const +{ + auto res = isl::basic_set::as_set(); + return typed::set>(res); +} + +template +typed::set<> typed::basic_set>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::basic_set::bind(tuple); + return typed::set<>(res); +} + +template +typed::set> typed::basic_set>::coalesce() const +{ + auto res = isl::basic_set::coalesce(); + return typed::set>(res); +} + +template +typed::basic_set> typed::basic_set>::detect_equalities() const +{ + auto res = isl::basic_set::detect_equalities(); + return typed::basic_set>(res); +} + +template +typed::set> typed::basic_set>::drop_unused_params() const +{ + auto res = isl::basic_set::drop_unused_params(); + return typed::set>(res); +} + +template +bool typed::basic_set>::every_set(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set>(arg0)); + }; + return isl::basic_set::every_set(lambda_test); +} + +template +typed::set> typed::basic_set>::extract_set(const typed::space> &space) const +{ + auto res = isl::basic_set::extract_set(space); + return typed::set>(res); +} + +template +void typed::basic_set>::foreach_basic_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set>(arg0)); + }; + return isl::basic_set::foreach_basic_set(lambda_fn); +} + +template +void typed::basic_set>::foreach_point(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point>(arg0)); + }; + return isl::basic_set::foreach_point(lambda_fn); +} + +template +void typed::basic_set>::foreach_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set>(arg0)); + }; + return isl::basic_set::foreach_set(lambda_fn); +} + +template +typed::basic_set> typed::basic_set>::gist(const typed::basic_set> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::basic_set>(res); +} + +template +typed::set> typed::basic_set>::gist(const typed::set> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::set>(res); +} + +template +typed::union_set> typed::basic_set>::gist(const typed::union_set> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::union_set>(res); +} + +template +typed::basic_set> typed::basic_set>::gist(const typed::point> &context) const +{ + auto res = isl::basic_set::gist(context); + return typed::basic_set>(res); +} + +template +typed::set> typed::basic_set>::gist_params(const typed::set<> &context) const +{ + auto res = isl::basic_set::gist_params(context); + return typed::set>(res); +} + +template +typed::map, pair> typed::basic_set>::identity() const +{ + auto res = isl::basic_set::identity(); + return typed::map, pair>(res); +} + +template +typed::pw_aff, Anonymous> typed::basic_set>::indicator_function() const +{ + auto res = isl::basic_set::indicator_function(); + return typed::pw_aff, Anonymous>(res); +} + +template +template +typed::map> typed::basic_set>::insert_domain(const typed::space &domain) const +{ + auto res = isl::basic_set::insert_domain(domain); + return typed::map>(res); +} + +template +typed::basic_set> typed::basic_set>::intersect(const typed::basic_set> &bset2) const +{ + auto res = isl::basic_set::intersect(bset2); + return typed::basic_set>(res); +} + +template +typed::set> typed::basic_set>::intersect(const typed::set> &set2) const +{ + auto res = isl::basic_set::intersect(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::basic_set>::intersect(const typed::union_set> &uset2) const +{ + auto res = isl::basic_set::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::basic_set> typed::basic_set>::intersect(const typed::point> &bset2) const +{ + auto res = isl::basic_set::intersect(bset2); + return typed::basic_set>(res); +} + +template +typed::basic_set> typed::basic_set>::intersect_params(const typed::basic_set<> &bset2) const +{ + auto res = isl::basic_set::intersect_params(bset2); + return typed::basic_set>(res); +} + +template +typed::set> typed::basic_set>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::basic_set::intersect_params(params); + return typed::set>(res); +} + +template +typed::basic_set> typed::basic_set>::intersect_params(const typed::point<> &bset2) const +{ + auto res = isl::basic_set::intersect_params(bset2); + return typed::basic_set>(res); +} + +template +typed::fixed_box> typed::basic_set>::lattice_tile() const +{ + auto res = isl::basic_set::lattice_tile(); + return typed::fixed_box>(res); +} + +template +typed::set> typed::basic_set>::lexmax() const +{ + auto res = isl::basic_set::lexmax(); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::basic_set>::lexmax_pw_multi_aff() const +{ + auto res = isl::basic_set::lexmax_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::basic_set>::lexmin() const +{ + auto res = isl::basic_set::lexmin(); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::basic_set>::lexmin_pw_multi_aff() const +{ + auto res = isl::basic_set::lexmin_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::basic_set>::lower_bound(const typed::multi_pw_aff> &lower) const +{ + auto res = isl::basic_set::lower_bound(lower); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::lower_bound(const typed::multi_val> &lower) const +{ + auto res = isl::basic_set::lower_bound(lower); + return typed::set>(res); +} + +template +typed::multi_pw_aff> typed::basic_set>::max_multi_pw_aff() const +{ + auto res = isl::basic_set::max_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::basic_set>::min_multi_pw_aff() const +{ + auto res = isl::basic_set::min_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::pw_aff, Anonymous> typed::basic_set>::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::basic_set::param_pw_aff_on_domain(id); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::basic_set>::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::basic_set::param_pw_aff_on_domain(id); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::basic_set<> typed::basic_set>::params() const +{ + auto res = isl::basic_set::params(); + return typed::basic_set<>(res); +} + +template +typed::multi_val> typed::basic_set>::plain_multi_val_if_fixed() const +{ + auto res = isl::basic_set::plain_multi_val_if_fixed(); + return typed::multi_val>(res); +} + +template +template +typed::set typed::basic_set>::preimage(const typed::multi_aff> &ma) const +{ + auto res = isl::basic_set::preimage(ma); + return typed::set(res); +} + +template +template +typed::set typed::basic_set>::preimage(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::basic_set::preimage(mpa); + return typed::set(res); +} + +template +template +typed::set typed::basic_set>::preimage(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::basic_set::preimage(pma); + return typed::set(res); +} + +template +template +typed::union_set typed::basic_set>::preimage(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::basic_set::preimage(upma); + return typed::union_set(res); +} + +template +template +typed::set, Arg2>> typed::basic_set>::product(const typed::set &set2) const +{ + auto res = isl::basic_set::product(set2); + return typed::set, Arg2>>(res); +} + +template +typed::set> typed::basic_set>::project_out_all_params() const +{ + auto res = isl::basic_set::project_out_all_params(); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::project_out_param(const typed::id &id) const +{ + auto res = isl::basic_set::project_out_param(id); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::project_out_param(const std::string &id) const +{ + auto res = isl::basic_set::project_out_param(id); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::basic_set::project_out_param(list); + return typed::set>(res); +} + +template +typed::pw_aff, Anonymous> typed::basic_set>::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::basic_set::pw_aff_on_domain(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::basic_set>::pw_aff_on_domain(long v) const +{ + auto res = isl::basic_set::pw_aff_on_domain(v); + return typed::pw_aff, Anonymous>(res); +} + +template +template +typed::pw_multi_aff, Arg2> typed::basic_set>::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::basic_set::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff, Arg2>(res); +} + +template +typed::set_list> typed::basic_set>::set_list() const +{ + auto res = isl::basic_set::set_list(); + return typed::set_list>(res); +} + +template +typed::fixed_box> typed::basic_set>::simple_fixed_box_hull() const +{ + auto res = isl::basic_set::simple_fixed_box_hull(); + return typed::fixed_box>(res); +} + +template +typed::space> typed::basic_set>::space() const +{ + auto res = isl::basic_set::space(); + return typed::space>(res); +} + +template +typed::set> typed::basic_set>::subtract(const typed::set> &set2) const +{ + auto res = isl::basic_set::subtract(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::basic_set>::subtract(const typed::union_set> &uset2) const +{ + auto res = isl::basic_set::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::set> typed::basic_set>::to_set() const +{ + auto res = isl::basic_set::to_set(); + return typed::set>(res); +} + +template +typed::union_set> typed::basic_set>::to_union_set() const +{ + auto res = isl::basic_set::to_union_set(); + return typed::union_set>(res); +} + +template +typed::map, pair> typed::basic_set>::translation() const +{ + auto res = isl::basic_set::translation(); + return typed::map, pair>(res); +} + +template +template +typed::map> typed::basic_set>::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::basic_set::unbind_params_insert_domain(domain); + return typed::map>(res); +} + +template +typed::set> typed::basic_set>::unite(const typed::basic_set> &bset2) const +{ + auto res = isl::basic_set::unite(bset2); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::unite(const typed::set> &set2) const +{ + auto res = isl::basic_set::unite(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::basic_set>::unite(const typed::union_set> &uset2) const +{ + auto res = isl::basic_set::unite(uset2); + return typed::union_set>(res); +} + +template +typed::set> typed::basic_set>::unite(const typed::point> &bset2) const +{ + auto res = isl::basic_set::unite(bset2); + return typed::set>(res); +} + +template +typed::map typed::basic_set>::unwrap() const +{ + auto res = isl::basic_set::unwrap(); + return typed::map(res); +} + +template +typed::set> typed::basic_set>::upper_bound(const typed::multi_pw_aff> &upper) const +{ + auto res = isl::basic_set::upper_bound(upper); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::upper_bound(const typed::multi_val> &upper) const +{ + auto res = isl::basic_set::upper_bound(upper); + return typed::set>(res); +} + +template +typed::set> typed::basic_set>::wrapped_reverse() const +{ + auto res = isl::basic_set::wrapped_reverse(); + return typed::set>(res); +} + +template +typed::fixed_box::fixed_box(const isl::ctx &ctx, const std::string &str) + : isl::fixed_box(ctx, str) +{ +} + +template +typed::multi_aff typed::fixed_box::offset() const +{ + auto res = isl::fixed_box::offset(); + return typed::multi_aff(res); +} + +template +typed::multi_val typed::fixed_box::size() const +{ + auto res = isl::fixed_box::size(); + return typed::multi_val(res); +} + +template +typed::space typed::fixed_box::space() const +{ + auto res = isl::fixed_box::space(); + return typed::space(res); +} + +template +typed::fixed_box::fixed_box(const isl::ctx &ctx, const std::string &str) + : isl::fixed_box(ctx, str) +{ +} + +template +typed::multi_aff typed::fixed_box::offset() const +{ + auto res = isl::fixed_box::offset(); + return typed::multi_aff(res); +} + +template +typed::multi_val typed::fixed_box::size() const +{ + auto res = isl::fixed_box::size(); + return typed::multi_val(res); +} + +template +typed::space typed::fixed_box::space() const +{ + auto res = isl::fixed_box::space(); + return typed::space(res); +} + +typed::id::id(const isl::ctx &ctx, const std::string &str) + : isl::id(ctx, str) +{ +} + +typed::id_list::id_list(const isl::ctx &ctx, int n) + : isl::id_list(ctx, n) +{ +} + +typed::id_list::id_list(const typed::id &el) + : isl::id_list(el) +{ +} + +typed::id_list::id_list(const isl::ctx &ctx, const std::string &str) + : isl::id_list(ctx, str) +{ +} + +typed::id_list typed::id_list::add(const typed::id &el) const +{ + auto res = isl::id_list::add(el); + return typed::id_list(res); +} + +typed::id_list typed::id_list::add(const std::string &el) const +{ + auto res = isl::id_list::add(el); + return typed::id_list(res); +} + +typed::id typed::id_list::at(int index) const +{ + auto res = isl::id_list::at(index); + return typed::id(res); +} + +typed::id_list typed::id_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::id_list::drop(first, n); + return typed::id_list(res); +} + +void typed::id_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::id arg0) { + return fn(typed::id(arg0)); + }; + return isl::id_list::foreach(lambda_fn); +} + +void typed::id_list::foreach_scc(const std::function, typed::id)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::id arg0, isl::id arg1) { + return follows(typed::id(arg0), typed::id(arg1)); + }; + auto lambda_fn = [&] (isl::id_list arg0) { + return fn(typed::id_list(arg0)); + }; + return isl::id_list::foreach_scc(lambda_follows, lambda_fn); +} + +typed::id_list typed::id_list::set_at(int index, const typed::id &el) const +{ + auto res = isl::id_list::set_at(index, el); + return typed::id_list(res); +} + +typed::id_list typed::id_list::set_at(int index, const std::string &el) const +{ + auto res = isl::id_list::set_at(index, el); + return typed::id_list(res); +} + +template +typed::map::map(const typed::basic_map &bmap) + : isl::map(bmap) +{ +} + +template +typed::map::map(const isl::ctx &ctx, const std::string &str) + : isl::map(ctx, str) +{ +} + +template +template +typed::map typed::map::apply_domain(const typed::map &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::map::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::map typed::map::apply_domain(const typed::basic_map &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::map typed::map::apply_range(const typed::map &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::map::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::map typed::map::apply_range(const typed::basic_map &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map(res); +} + +template +typed::map typed::map::as_map() const +{ + auto res = isl::map::as_map(); + return typed::map(res); +} + +template +typed::multi_union_pw_aff typed::map::as_multi_union_pw_aff() const +{ + auto res = isl::map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::map::as_pw_multi_aff() const +{ + auto res = isl::map::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::map::as_union_pw_multi_aff() const +{ + auto res = isl::map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::set typed::map::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::map::bind_domain(tuple); + return typed::set(res); +} + +template +typed::set typed::map::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::map::bind_range(tuple); + return typed::set(res); +} + +template +typed::map typed::map::coalesce() const +{ + auto res = isl::map::coalesce(); + return typed::map(res); +} + +template +typed::map typed::map::detect_equalities() const +{ + auto res = isl::map::detect_equalities(); + return typed::map(res); +} + +template +typed::set typed::map::domain() const +{ + auto res = isl::map::domain(); + return typed::set(res); +} + +template +typed::union_map, Domain> typed::map::domain_map() const +{ + auto res = isl::map::domain_map(); + return typed::union_map, Domain>(res); +} + +template +typed::union_pw_multi_aff, Domain> typed::map::domain_map_union_pw_multi_aff() const +{ + auto res = isl::map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Domain>(res); +} + +template +template +typed::map, Range> typed::map::domain_product(const typed::map &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Range>(res); +} + +template +template +typed::union_map, Range> typed::map::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::map::domain_product(umap2); + return typed::union_map, Range>(res); +} + +template +template +typed::map, Range> typed::map::domain_product(const typed::basic_map &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Range>(res); +} + +template +typed::map typed::map::drop_unused_params() const +{ + auto res = isl::map::drop_unused_params(); + return typed::map(res); +} + +template +bool typed::map::every_map(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map(arg0)); + }; + return isl::map::every_map(lambda_test); +} + +template +typed::map typed::map::extract_map(const typed::space &space) const +{ + auto res = isl::map::extract_map(space); + return typed::map(res); +} + +template +void typed::map::foreach_basic_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map(arg0)); + }; + return isl::map::foreach_basic_map(lambda_fn); +} + +template +void typed::map::foreach_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::map::foreach_map(lambda_fn); +} + +template +typed::map typed::map::gist(const typed::map &context) const +{ + auto res = isl::map::gist(context); + return typed::map(res); +} + +template +typed::union_map typed::map::gist(const typed::union_map &context) const +{ + auto res = isl::map::gist(context); + return typed::union_map(res); +} + +template +typed::map typed::map::gist(const typed::basic_map &context) const +{ + auto res = isl::map::gist(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_domain(const typed::set &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map(res); +} + +template +typed::union_map typed::map::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::map typed::map::gist_domain(const typed::basic_set &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_domain(const typed::point &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_params(const typed::set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_params(const typed::point<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map(res); +} + +template +typed::map typed::map::intersect(const typed::map &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::intersect(const typed::union_map &umap2) const +{ + auto res = isl::map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::map typed::map::intersect(const typed::basic_map &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map(res); +} + +template +typed::map typed::map::intersect_domain(const typed::set &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map(res); +} + +template +typed::union_map typed::map::intersect_domain(const typed::space &space) const +{ + auto res = isl::map::intersect_domain(space); + return typed::union_map(res); +} + +template +typed::union_map typed::map::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::map::intersect_domain(uset); + return typed::union_map(res); +} + +template +typed::map typed::map::intersect_domain(const typed::basic_set &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map(res); +} + +template +typed::map typed::map::intersect_domain(const typed::point &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map(res); +} + +template +typed::map typed::map::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map(res); +} + +template +typed::map typed::map::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map(res); +} + +template +typed::map typed::map::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map(res); +} + +template +typed::map typed::map::intersect_range(const typed::set &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map(res); +} + +template +typed::union_map typed::map::intersect_range(const typed::space &space) const +{ + auto res = isl::map::intersect_range(space); + return typed::union_map(res); +} + +template +typed::union_map typed::map::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::map::intersect_range(uset); + return typed::union_map(res); +} + +template +typed::map typed::map::intersect_range(const typed::basic_set &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map(res); +} + +template +typed::map typed::map::intersect_range(const typed::point &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map(res); +} + +template +typed::map typed::map::lexmax() const +{ + auto res = isl::map::lexmax(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::map::lexmax_pw_multi_aff() const +{ + auto res = isl::map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::map::lexmin() const +{ + auto res = isl::map::lexmin(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::map::lexmin_pw_multi_aff() const +{ + auto res = isl::map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::map::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::multi_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::pw_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::pw_multi_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map_list typed::map::map_list() const +{ + auto res = isl::map::map_list(); + return typed::map_list(res); +} + +template +typed::multi_pw_aff typed::map::max_multi_pw_aff() const +{ + auto res = isl::map::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::map::min_multi_pw_aff() const +{ + auto res = isl::map::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::set<> typed::map::params() const +{ + auto res = isl::map::params(); + return typed::set<>(res); +} + +template +template +typed::map typed::map::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::map::preimage_domain(ma); + return typed::map(res); +} + +template +template +typed::map typed::map::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::preimage_domain(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::map::preimage_domain(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::map::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::map typed::map::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::map::preimage_range(ma); + return typed::map(res); +} + +template +template +typed::map typed::map::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::map::preimage_range(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::map::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::map, pair> typed::map::product(const typed::map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::map::product(const typed::union_map &umap2) const +{ + auto res = isl::map::product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::map, pair> typed::map::product(const typed::basic_map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, pair>(res); +} + +template +typed::map typed::map::project_out_all_params() const +{ + auto res = isl::map::project_out_all_params(); + return typed::map(res); +} + +template +typed::map typed::map::project_out_param(const typed::id &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::map::project_out_param(const std::string &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::map::project_out_param(const typed::id_list &list) const +{ + auto res = isl::map::project_out_param(list); + return typed::map(res); +} + +template +typed::set typed::map::range() const +{ + auto res = isl::map::range(); + return typed::set(res); +} + +template +typed::fixed_box typed::map::range_lattice_tile() const +{ + auto res = isl::map::range_lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::union_map, Range> typed::map::range_map() const +{ + auto res = isl::map::range_map(); + return typed::union_map, Range>(res); +} + +template +template +typed::map> typed::map::range_product(const typed::map &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map::range_product(const typed::union_map &umap2) const +{ + auto res = isl::map::range_product(umap2); + return typed::union_map>(res); +} + +template +template +typed::map> typed::map::range_product(const typed::basic_map &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map>(res); +} + +template +typed::fixed_box typed::map::range_simple_fixed_box_hull() const +{ + auto res = isl::map::range_simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::map typed::map::reverse() const +{ + auto res = isl::map::reverse(); + return typed::map(res); +} + +template +template +typed::map typed::map::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::map::set_domain_tuple(const std::string &id) const +{ + auto res = isl::map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::map::set_range_tuple(const typed::id &id) const +{ + auto res = isl::map::set_range_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::map::set_range_tuple(const std::string &id) const +{ + auto res = isl::map::set_range_tuple(id); + return typed::map(res); +} + +template +typed::space typed::map::space() const +{ + auto res = isl::map::space(); + return typed::space(res); +} + +template +typed::map typed::map::subtract(const typed::map &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::subtract(const typed::union_map &umap2) const +{ + auto res = isl::map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::map typed::map::subtract(const typed::basic_map &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::map::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::map::to_union_map() const +{ + auto res = isl::map::to_union_map(); + return typed::union_map(res); +} + +template +typed::map typed::map::unite(const typed::map &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::unite(const typed::union_map &umap2) const +{ + auto res = isl::map::unite(umap2); + return typed::union_map(res); +} + +template +typed::map typed::map::unite(const typed::basic_map &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map(res); +} + +template +typed::map typed::map::universe(const typed::space &space) +{ + auto res = isl::map::universe(space); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::multi_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::pw_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::pw_multi_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::set> typed::map::wrap() const +{ + auto res = isl::map::wrap(); + return typed::set>(res); +} + +template +typed::map, Range2>::map(const typed::basic_map, Range2> &bmap) + : isl::map(bmap) +{ +} + +template +typed::map, Range2>::map(const isl::ctx &ctx, const std::string &str) + : isl::map(ctx, str) +{ +} + +template +template +typed::map typed::map, Range2>::apply_domain(const typed::map, Domain2> &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::map, Range2>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::map typed::map, Range2>::apply_domain(const typed::basic_map, Domain2> &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::map, Arg3> typed::map, Range2>::apply_range(const typed::map &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::map, Range2>::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::map::apply_range(umap2); + return typed::union_map, Arg3>(res); +} + +template +template +typed::map, Arg3> typed::map, Range2>::apply_range(const typed::basic_map &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map, Arg3>(res); +} + +template +typed::map, Range2> typed::map, Range2>::as_map() const +{ + auto res = isl::map::as_map(); + return typed::map, Range2>(res); +} + +template +typed::multi_union_pw_aff, Range2> typed::map, Range2>::as_multi_union_pw_aff() const +{ + auto res = isl::map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range2>(res); +} + +template +typed::pw_multi_aff, Range2> typed::map, Range2>::as_pw_multi_aff() const +{ + auto res = isl::map::as_pw_multi_aff(); + return typed::pw_multi_aff, Range2>(res); +} + +template +typed::union_pw_multi_aff, Range2> typed::map, Range2>::as_union_pw_multi_aff() const +{ + auto res = isl::map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +typed::set typed::map, Range2>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::map::bind_domain(tuple); + return typed::set(res); +} + +template +typed::set> typed::map, Range2>::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::map::bind_range(tuple); + return typed::set>(res); +} + +template +typed::map, Range2> typed::map, Range2>::coalesce() const +{ + auto res = isl::map::coalesce(); + return typed::map, Range2>(res); +} + +template +typed::map> typed::map, Range2>::curry() const +{ + auto res = isl::map::curry(); + return typed::map>(res); +} + +template +typed::map, Range2> typed::map, Range2>::detect_equalities() const +{ + auto res = isl::map::detect_equalities(); + return typed::map, Range2>(res); +} + +template +typed::set> typed::map, Range2>::domain() const +{ + auto res = isl::map::domain(); + return typed::set>(res); +} + +template +typed::map typed::map, Range2>::domain_factor_domain() const +{ + auto res = isl::map::domain_factor_domain(); + return typed::map(res); +} + +template +typed::map typed::map, Range2>::domain_factor_range() const +{ + auto res = isl::map::domain_factor_range(); + return typed::map(res); +} + +template +typed::union_map, Range2>, pair> typed::map, Range2>::domain_map() const +{ + auto res = isl::map::domain_map(); + return typed::union_map, Range2>, pair>(res); +} + +template +typed::union_pw_multi_aff, Range2>, pair> typed::map, Range2>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range2>, pair>(res); +} + +template +template +typed::map, Domain2>, Range2> typed::map, Range2>::domain_product(const typed::map &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain2>, Range2>(res); +} + +template +template +typed::union_map, Domain2>, Range2> typed::map, Range2>::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::map::domain_product(umap2); + return typed::union_map, Domain2>, Range2>(res); +} + +template +template +typed::map, Domain2>, Range2> typed::map, Range2>::domain_product(const typed::basic_map &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain2>, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::domain_reverse() const +{ + auto res = isl::map::domain_reverse(); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::drop_unused_params() const +{ + auto res = isl::map::drop_unused_params(); + return typed::map, Range2>(res); +} + +template +bool typed::map, Range2>::every_map(const std::function, Range2>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, Range2>(arg0)); + }; + return isl::map::every_map(lambda_test); +} + +template +typed::map, Range2> typed::map, Range2>::extract_map(const typed::space, Range2> &space) const +{ + auto res = isl::map::extract_map(space); + return typed::map, Range2>(res); +} + +template +typed::map typed::map, Range2>::flatten_domain() const +{ + auto res = isl::map::flatten_domain(); + return typed::map(res); +} + +template +void typed::map, Range2>::foreach_basic_map(const std::function, Range2>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map, Range2>(arg0)); + }; + return isl::map::foreach_basic_map(lambda_fn); +} + +template +void typed::map, Range2>::foreach_map(const std::function, Range2>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, Range2>(arg0)); + }; + return isl::map::foreach_map(lambda_fn); +} + +template +typed::map, Range2> typed::map, Range2>::gist(const typed::map, Range2> &context) const +{ + auto res = isl::map::gist(context); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::gist(const typed::union_map, Range2> &context) const +{ + auto res = isl::map::gist(context); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist(const typed::basic_map, Range2> &context) const +{ + auto res = isl::map::gist(context); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist_domain(const typed::set> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::map::gist_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist_domain(const typed::basic_set> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist_domain(const typed::point> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist_params(const typed::set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::gist_params(const typed::point<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect(const typed::map, Range2> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::intersect(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::map::intersect(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect(const typed::basic_map, Range2> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::map::intersect_domain(space); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::map::intersect_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_domain(const typed::basic_set> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_domain(const typed::point> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_domain_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_domain_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_range(const typed::set &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::intersect_range(const typed::space &space) const +{ + auto res = isl::map::intersect_range(space); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::map::intersect_range(uset); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_range(const typed::basic_set &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::intersect_range(const typed::point &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lexmax() const +{ + auto res = isl::map::lexmax(); + return typed::map, Range2>(res); +} + +template +typed::pw_multi_aff, Range2> typed::map, Range2>::lexmax_pw_multi_aff() const +{ + auto res = isl::map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lexmin() const +{ + auto res = isl::map::lexmin(); + return typed::map, Range2>(res); +} + +template +typed::pw_multi_aff, Range2> typed::map, Range2>::lexmin_pw_multi_aff() const +{ + auto res = isl::map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lower_bound(const typed::multi_pw_aff, Range2> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lower_bound(const typed::aff, Range2> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lower_bound(const typed::multi_aff, Range2> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lower_bound(const typed::pw_aff, Range2> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::lower_bound(const typed::pw_multi_aff, Range2> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, Range2>(res); +} + +template +typed::map_list, Range2> typed::map, Range2>::map_list() const +{ + auto res = isl::map::map_list(); + return typed::map_list, Range2>(res); +} + +template +typed::multi_pw_aff, Range2> typed::map, Range2>::max_multi_pw_aff() const +{ + auto res = isl::map::max_multi_pw_aff(); + return typed::multi_pw_aff, Range2>(res); +} + +template +typed::multi_pw_aff, Range2> typed::map, Range2>::min_multi_pw_aff() const +{ + auto res = isl::map::min_multi_pw_aff(); + return typed::multi_pw_aff, Range2>(res); +} + +template +typed::set<> typed::map, Range2>::params() const +{ + auto res = isl::map::params(); + return typed::set<>(res); +} + +template +template +typed::map typed::map, Range2>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::map::preimage_domain(ma); + return typed::map(res); +} + +template +template +typed::map typed::map, Range2>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::map::preimage_domain(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map, Range2>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::map::preimage_domain(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::map, Range2>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::map, Arg3> typed::map, Range2>::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::map::preimage_range(ma); + return typed::map, Arg3>(res); +} + +template +template +typed::map, Arg3> typed::map, Range2>::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::map::preimage_range(pma); + return typed::map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::map, Range2>::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::map::preimage_range(upma); + return typed::union_map, Arg3>(res); +} + +template +template +typed::map, Domain2>, pair> typed::map, Range2>::product(const typed::map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::map, Range2>::product(const typed::union_map &umap2) const +{ + auto res = isl::map::product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::map, Range2>::product(const typed::basic_map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +typed::map, Range2> typed::map, Range2>::project_out_all_params() const +{ + auto res = isl::map::project_out_all_params(); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::project_out_param(const typed::id &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::project_out_param(const std::string &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::map::project_out_param(list); + return typed::map, Range2>(res); +} + +template +typed::set typed::map, Range2>::range() const +{ + auto res = isl::map::range(); + return typed::set(res); +} + +template +typed::fixed_box, Range2> typed::map, Range2>::range_lattice_tile() const +{ + auto res = isl::map::range_lattice_tile(); + return typed::fixed_box, Range2>(res); +} + +template +typed::union_map, Range2>, Range2> typed::map, Range2>::range_map() const +{ + auto res = isl::map::range_map(); + return typed::union_map, Range2>, Range2>(res); +} + +template +template +typed::map, pair> typed::map, Range2>::range_product(const typed::map, Arg3> &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::map, Range2>::range_product(const typed::union_map, Arg3> &umap2) const +{ + auto res = isl::map::range_product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::map, pair> typed::map, Range2>::range_product(const typed::basic_map, Arg3> &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, pair>(res); +} + +template +typed::fixed_box, Range2> typed::map, Range2>::range_simple_fixed_box_hull() const +{ + auto res = isl::map::range_simple_fixed_box_hull(); + return typed::fixed_box, Range2>(res); +} + +template +typed::map> typed::map, Range2>::reverse() const +{ + auto res = isl::map::reverse(); + return typed::map>(res); +} + +template +template +typed::map, Arg2> typed::map, Range2>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::map::set_range_tuple(id); + return typed::map, Arg2>(res); +} + +template +template +typed::map, Arg2> typed::map, Range2>::set_range_tuple(const std::string &id) const +{ + auto res = isl::map::set_range_tuple(id); + return typed::map, Arg2>(res); +} + +template +typed::space, Range2> typed::map, Range2>::space() const +{ + auto res = isl::map::space(); + return typed::space, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::subtract(const typed::map, Range2> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::subtract(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::map::subtract(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::subtract(const typed::basic_map, Range2> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::map::subtract_domain(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::map::subtract_range(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::to_union_map() const +{ + auto res = isl::map::to_union_map(); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::unite(const typed::map, Range2> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map, Range2>(res); +} + +template +typed::union_map, Range2> typed::map, Range2>::unite(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::map::unite(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::unite(const typed::basic_map, Range2> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::universe(const typed::space, Range2> &space) +{ + auto res = isl::map::universe(space); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::upper_bound(const typed::multi_pw_aff, Range2> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::upper_bound(const typed::aff, Range2> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::upper_bound(const typed::multi_aff, Range2> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::upper_bound(const typed::pw_aff, Range2> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, Range2>(res); +} + +template +typed::map, Range2> typed::map, Range2>::upper_bound(const typed::pw_multi_aff, Range2> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, Range2>(res); +} + +template +typed::set, Range2>> typed::map, Range2>::wrap() const +{ + auto res = isl::map::wrap(); + return typed::set, Range2>>(res); +} + +template +typed::map::map(const typed::basic_map &bmap) + : isl::map(bmap) +{ +} + +template +typed::map::map(const isl::ctx &ctx, const std::string &str) + : isl::map(ctx, str) +{ +} + +template +template +typed::map typed::map::apply_domain(const typed::map &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::map::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::map typed::map::apply_domain(const typed::basic_map &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map(res); +} + +template +template +typed::map typed::map::apply_range(const typed::map &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::map::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::map typed::map::apply_range(const typed::basic_map &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map(res); +} + +template +typed::map typed::map::as_map() const +{ + auto res = isl::map::as_map(); + return typed::map(res); +} + +template +typed::multi_union_pw_aff typed::map::as_multi_union_pw_aff() const +{ + auto res = isl::map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::map::as_pw_multi_aff() const +{ + auto res = isl::map::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::map::as_union_pw_multi_aff() const +{ + auto res = isl::map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::set typed::map::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::map::bind_domain(tuple); + return typed::set(res); +} + +template +typed::set typed::map::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::map::bind_range(tuple); + return typed::set(res); +} + +template +typed::map typed::map::coalesce() const +{ + auto res = isl::map::coalesce(); + return typed::map(res); +} + +template +typed::set typed::map::deltas() const +{ + auto res = isl::map::deltas(); + return typed::set(res); +} + +template +typed::map typed::map::detect_equalities() const +{ + auto res = isl::map::detect_equalities(); + return typed::map(res); +} + +template +typed::set typed::map::domain() const +{ + auto res = isl::map::domain(); + return typed::set(res); +} + +template +typed::union_map, Domain> typed::map::domain_map() const +{ + auto res = isl::map::domain_map(); + return typed::union_map, Domain>(res); +} + +template +typed::union_pw_multi_aff, Domain> typed::map::domain_map_union_pw_multi_aff() const +{ + auto res = isl::map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Domain>(res); +} + +template +template +typed::map, Domain> typed::map::domain_product(const typed::map &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain>(res); +} + +template +template +typed::union_map, Domain> typed::map::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::map::domain_product(umap2); + return typed::union_map, Domain>(res); +} + +template +template +typed::map, Domain> typed::map::domain_product(const typed::basic_map &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain>(res); +} + +template +typed::map typed::map::drop_unused_params() const +{ + auto res = isl::map::drop_unused_params(); + return typed::map(res); +} + +template +template +typed::map typed::map::eq_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map(res); +} + +template +template +typed::union_map typed::map::eq_at(const typed::multi_union_pw_aff &mupa) const +{ + auto res = isl::map::eq_at(mupa); + return typed::union_map(res); +} + +template +typed::map typed::map::eq_at(const typed::aff &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::eq_at(const typed::multi_aff &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::eq_at(const typed::pw_aff &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::eq_at(const typed::pw_multi_aff &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map(res); +} + +template +bool typed::map::every_map(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map(arg0)); + }; + return isl::map::every_map(lambda_test); +} + +template +typed::map typed::map::extract_map(const typed::space &space) const +{ + auto res = isl::map::extract_map(space); + return typed::map(res); +} + +template +void typed::map::foreach_basic_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map(arg0)); + }; + return isl::map::foreach_basic_map(lambda_fn); +} + +template +void typed::map::foreach_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::map::foreach_map(lambda_fn); +} + +template +typed::map typed::map::gist(const typed::map &context) const +{ + auto res = isl::map::gist(context); + return typed::map(res); +} + +template +typed::union_map typed::map::gist(const typed::union_map &context) const +{ + auto res = isl::map::gist(context); + return typed::union_map(res); +} + +template +typed::map typed::map::gist(const typed::basic_map &context) const +{ + auto res = isl::map::gist(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_domain(const typed::set &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map(res); +} + +template +typed::union_map typed::map::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::map typed::map::gist_domain(const typed::basic_set &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_domain(const typed::point &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_params(const typed::set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map(res); +} + +template +typed::map typed::map::gist_params(const typed::point<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map(res); +} + +template +typed::map typed::map::intersect(const typed::map &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::intersect(const typed::union_map &umap2) const +{ + auto res = isl::map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::map typed::map::intersect(const typed::basic_map &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map(res); +} + +template +typed::map typed::map::intersect_domain(const typed::set &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map(res); +} + +template +typed::union_map typed::map::intersect_domain(const typed::space &space) const +{ + auto res = isl::map::intersect_domain(space); + return typed::union_map(res); +} + +template +typed::union_map typed::map::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::map::intersect_domain(uset); + return typed::union_map(res); +} + +template +typed::map typed::map::intersect_domain(const typed::basic_set &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map(res); +} + +template +typed::map typed::map::intersect_domain(const typed::point &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map(res); +} + +template +typed::map typed::map::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map(res); +} + +template +typed::map typed::map::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map(res); +} + +template +typed::map typed::map::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map(res); +} + +template +typed::map typed::map::intersect_range(const typed::set &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map(res); +} + +template +typed::union_map typed::map::intersect_range(const typed::space &space) const +{ + auto res = isl::map::intersect_range(space); + return typed::union_map(res); +} + +template +typed::union_map typed::map::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::map::intersect_range(uset); + return typed::union_map(res); +} + +template +typed::map typed::map::intersect_range(const typed::basic_set &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map(res); +} + +template +typed::map typed::map::intersect_range(const typed::point &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_ge_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_ge_at(const typed::aff &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_ge_at(const typed::multi_aff &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_ge_at(const typed::pw_aff &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_ge_at(const typed::pw_multi_aff &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_gt_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_gt_at(const typed::aff &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_gt_at(const typed::multi_aff &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_gt_at(const typed::pw_aff &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_gt_at(const typed::pw_multi_aff &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_le_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_le_at(const typed::aff &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_le_at(const typed::multi_aff &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_le_at(const typed::pw_aff &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_le_at(const typed::pw_multi_aff &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_lt_at(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_lt_at(const typed::aff &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_lt_at(const typed::multi_aff &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lex_lt_at(const typed::pw_aff &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::lex_lt_at(const typed::pw_multi_aff &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map(res); +} + +template +typed::map typed::map::lexmax() const +{ + auto res = isl::map::lexmax(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::map::lexmax_pw_multi_aff() const +{ + auto res = isl::map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::map::lexmin() const +{ + auto res = isl::map::lexmin(); + return typed::map(res); +} + +template +typed::pw_multi_aff typed::map::lexmin_pw_multi_aff() const +{ + auto res = isl::map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::map typed::map::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::multi_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::pw_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map typed::map::lower_bound(const typed::pw_multi_aff &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map(res); +} + +template +typed::map_list typed::map::map_list() const +{ + auto res = isl::map::map_list(); + return typed::map_list(res); +} + +template +typed::multi_pw_aff typed::map::max_multi_pw_aff() const +{ + auto res = isl::map::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::map::min_multi_pw_aff() const +{ + auto res = isl::map::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::set<> typed::map::params() const +{ + auto res = isl::map::params(); + return typed::set<>(res); +} + +template +template +typed::map typed::map::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::map::preimage_domain(ma); + return typed::map(res); +} + +template +template +typed::map typed::map::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::preimage_domain(mpa); + return typed::map(res); +} + +template +template +typed::map typed::map::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::map::preimage_domain(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::map::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::map typed::map::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::map::preimage_range(ma); + return typed::map(res); +} + +template +template +typed::map typed::map::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::map::preimage_range(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::map::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::map, pair> typed::map::product(const typed::map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::map::product(const typed::union_map &umap2) const +{ + auto res = isl::map::product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::map, pair> typed::map::product(const typed::basic_map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, pair>(res); +} + +template +typed::map typed::map::project_out_all_params() const +{ + auto res = isl::map::project_out_all_params(); + return typed::map(res); +} + +template +typed::map typed::map::project_out_param(const typed::id &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::map::project_out_param(const std::string &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map(res); +} + +template +typed::map typed::map::project_out_param(const typed::id_list &list) const +{ + auto res = isl::map::project_out_param(list); + return typed::map(res); +} + +template +typed::set typed::map::range() const +{ + auto res = isl::map::range(); + return typed::set(res); +} + +template +typed::fixed_box typed::map::range_lattice_tile() const +{ + auto res = isl::map::range_lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::union_map, Domain> typed::map::range_map() const +{ + auto res = isl::map::range_map(); + return typed::union_map, Domain>(res); +} + +template +template +typed::map> typed::map::range_product(const typed::map &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map::range_product(const typed::union_map &umap2) const +{ + auto res = isl::map::range_product(umap2); + return typed::union_map>(res); +} + +template +template +typed::map> typed::map::range_product(const typed::basic_map &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map>(res); +} + +template +typed::fixed_box typed::map::range_simple_fixed_box_hull() const +{ + auto res = isl::map::range_simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::map typed::map::reverse() const +{ + auto res = isl::map::reverse(); + return typed::map(res); +} + +template +template +typed::map typed::map::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::map::set_domain_tuple(const std::string &id) const +{ + auto res = isl::map::set_domain_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::map::set_range_tuple(const typed::id &id) const +{ + auto res = isl::map::set_range_tuple(id); + return typed::map(res); +} + +template +template +typed::map typed::map::set_range_tuple(const std::string &id) const +{ + auto res = isl::map::set_range_tuple(id); + return typed::map(res); +} + +template +typed::space typed::map::space() const +{ + auto res = isl::map::space(); + return typed::space(res); +} + +template +typed::map typed::map::subtract(const typed::map &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::subtract(const typed::union_map &umap2) const +{ + auto res = isl::map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::map typed::map::subtract(const typed::basic_map &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::map::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::map::to_union_map() const +{ + auto res = isl::map::to_union_map(); + return typed::union_map(res); +} + +template +typed::map typed::map::unite(const typed::map &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map(res); +} + +template +typed::union_map typed::map::unite(const typed::union_map &umap2) const +{ + auto res = isl::map::unite(umap2); + return typed::union_map(res); +} + +template +typed::map typed::map::unite(const typed::basic_map &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map(res); +} + +template +typed::map typed::map::universe(const typed::space &space) +{ + auto res = isl::map::universe(space); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::multi_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::pw_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::map typed::map::upper_bound(const typed::pw_multi_aff &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map(res); +} + +template +typed::set> typed::map::wrap() const +{ + auto res = isl::map::wrap(); + return typed::set>(res); +} + +template +typed::map>::map(const typed::basic_map> &bmap) + : isl::map(bmap) +{ +} + +template +typed::map>::map(const isl::ctx &ctx, const std::string &str) + : isl::map(ctx, str) +{ +} + +template +template +typed::map> typed::map>::apply_domain(const typed::map &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map>::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::map> typed::map>::apply_domain(const typed::basic_map &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::map typed::map>::apply_range(const typed::map, Arg3> &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map(res); +} + +template +template +typed::union_map typed::map>::apply_range(const typed::union_map, Arg3> &umap2) const +{ + auto res = isl::map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::map typed::map>::apply_range(const typed::basic_map, Arg3> &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map(res); +} + +template +typed::map> typed::map>::as_map() const +{ + auto res = isl::map::as_map(); + return typed::map>(res); +} + +template +typed::multi_union_pw_aff> typed::map>::as_multi_union_pw_aff() const +{ + auto res = isl::map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::map>::as_pw_multi_aff() const +{ + auto res = isl::map::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::map>::as_union_pw_multi_aff() const +{ + auto res = isl::map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::set> typed::map>::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::map::bind_domain(tuple); + return typed::set>(res); +} + +template +typed::set typed::map>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::map::bind_range(tuple); + return typed::set(res); +} + +template +typed::map> typed::map>::coalesce() const +{ + auto res = isl::map::coalesce(); + return typed::map>(res); +} + +template +typed::map> typed::map>::detect_equalities() const +{ + auto res = isl::map::detect_equalities(); + return typed::map>(res); +} + +template +typed::set typed::map>::domain() const +{ + auto res = isl::map::domain(); + return typed::set(res); +} + +template +typed::union_map>, Domain> typed::map>::domain_map() const +{ + auto res = isl::map::domain_map(); + return typed::union_map>, Domain>(res); +} + +template +typed::union_pw_multi_aff>, Domain> typed::map>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff>, Domain>(res); +} + +template +template +typed::map, pair> typed::map>::domain_product(const typed::map> &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::map>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::map::domain_product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::map, pair> typed::map>::domain_product(const typed::basic_map> &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, pair>(res); +} + +template +typed::map> typed::map>::drop_unused_params() const +{ + auto res = isl::map::drop_unused_params(); + return typed::map>(res); +} + +template +bool typed::map>::every_map(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map>(arg0)); + }; + return isl::map::every_map(lambda_test); +} + +template +typed::map> typed::map>::extract_map(const typed::space> &space) const +{ + auto res = isl::map::extract_map(space); + return typed::map>(res); +} + +template +typed::map typed::map>::flatten_range() const +{ + auto res = isl::map::flatten_range(); + return typed::map(res); +} + +template +void typed::map>::foreach_basic_map(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map>(arg0)); + }; + return isl::map::foreach_basic_map(lambda_fn); +} + +template +void typed::map>::foreach_map(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map>(arg0)); + }; + return isl::map::foreach_map(lambda_fn); +} + +template +typed::map> typed::map>::gist(const typed::map> &context) const +{ + auto res = isl::map::gist(context); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::gist(const typed::union_map> &context) const +{ + auto res = isl::map::gist(context); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::gist(const typed::basic_map> &context) const +{ + auto res = isl::map::gist(context); + return typed::map>(res); +} + +template +typed::map> typed::map>::gist_domain(const typed::set &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::map::gist_domain(uset); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::gist_domain(const typed::basic_set &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map>(res); +} + +template +typed::map> typed::map>::gist_domain(const typed::point &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map>(res); +} + +template +typed::map> typed::map>::gist_params(const typed::set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map>(res); +} + +template +typed::map> typed::map>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map>(res); +} + +template +typed::map> typed::map>::gist_params(const typed::point<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect(const typed::map> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::intersect(const typed::union_map> &umap2) const +{ + auto res = isl::map::intersect(umap2); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::intersect(const typed::basic_map> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_domain(const typed::set &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::intersect_domain(const typed::space &space) const +{ + auto res = isl::map::intersect_domain(space); + return typed::union_map>(res); +} + +template +typed::union_map> typed::map>::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::map::intersect_domain(uset); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::intersect_domain(const typed::basic_set &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_domain(const typed::point &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_range(const typed::set> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::intersect_range(const typed::space> &space) const +{ + auto res = isl::map::intersect_range(space); + return typed::union_map>(res); +} + +template +typed::union_map> typed::map>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::map::intersect_range(uset); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::intersect_range(const typed::basic_set> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_range(const typed::point> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::intersect_range_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map>(res); +} + +template +typed::map> typed::map>::intersect_range_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map>(res); +} + +template +typed::map> typed::map>::lexmax() const +{ + auto res = isl::map::lexmax(); + return typed::map>(res); +} + +template +typed::pw_multi_aff> typed::map>::lexmax_pw_multi_aff() const +{ + auto res = isl::map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::map> typed::map>::lexmin() const +{ + auto res = isl::map::lexmin(); + return typed::map>(res); +} + +template +typed::pw_multi_aff> typed::map>::lexmin_pw_multi_aff() const +{ + auto res = isl::map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::map> typed::map>::lower_bound(const typed::multi_pw_aff> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map>(res); +} + +template +typed::map> typed::map>::lower_bound(const typed::aff> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map>(res); +} + +template +typed::map> typed::map>::lower_bound(const typed::multi_aff> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map>(res); +} + +template +typed::map> typed::map>::lower_bound(const typed::pw_aff> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map>(res); +} + +template +typed::map> typed::map>::lower_bound(const typed::pw_multi_aff> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map>(res); +} + +template +typed::map_list> typed::map>::map_list() const +{ + auto res = isl::map::map_list(); + return typed::map_list>(res); +} + +template +typed::multi_pw_aff> typed::map>::max_multi_pw_aff() const +{ + auto res = isl::map::max_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::map>::min_multi_pw_aff() const +{ + auto res = isl::map::min_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::set<> typed::map>::params() const +{ + auto res = isl::map::params(); + return typed::set<>(res); +} + +template +template +typed::map> typed::map>::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::map::preimage_domain(ma); + return typed::map>(res); +} + +template +template +typed::map> typed::map>::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::map::preimage_domain(mpa); + return typed::map>(res); +} + +template +template +typed::map> typed::map>::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::map::preimage_domain(pma); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map>::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::map typed::map>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::map::preimage_range(ma); + return typed::map(res); +} + +template +template +typed::map typed::map>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::map::preimage_range(pma); + return typed::map(res); +} + +template +template +typed::union_map typed::map>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::map, pair, Arg3>> typed::map>::product(const typed::map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, pair, Arg3>>(res); +} + +template +template +typed::union_map, pair, Arg3>> typed::map>::product(const typed::union_map &umap2) const +{ + auto res = isl::map::product(umap2); + return typed::union_map, pair, Arg3>>(res); +} + +template +template +typed::map, pair, Arg3>> typed::map>::product(const typed::basic_map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, pair, Arg3>>(res); +} + +template +typed::map> typed::map>::project_out_all_params() const +{ + auto res = isl::map::project_out_all_params(); + return typed::map>(res); +} + +template +typed::map> typed::map>::project_out_param(const typed::id &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map>(res); +} + +template +typed::map> typed::map>::project_out_param(const std::string &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map>(res); +} + +template +typed::map> typed::map>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::map::project_out_param(list); + return typed::map>(res); +} + +template +typed::set> typed::map>::range() const +{ + auto res = isl::map::range(); + return typed::set>(res); +} + +template +typed::map typed::map>::range_factor_domain() const +{ + auto res = isl::map::range_factor_domain(); + return typed::map(res); +} + +template +typed::map typed::map>::range_factor_range() const +{ + auto res = isl::map::range_factor_range(); + return typed::map(res); +} + +template +typed::fixed_box> typed::map>::range_lattice_tile() const +{ + auto res = isl::map::range_lattice_tile(); + return typed::fixed_box>(res); +} + +template +typed::union_map>, pair> typed::map>::range_map() const +{ + auto res = isl::map::range_map(); + return typed::union_map>, pair>(res); +} + +template +template +typed::map, Arg3>> typed::map>::range_product(const typed::map &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, Arg3>>(res); +} + +template +template +typed::union_map, Arg3>> typed::map>::range_product(const typed::union_map &umap2) const +{ + auto res = isl::map::range_product(umap2); + return typed::union_map, Arg3>>(res); +} + +template +template +typed::map, Arg3>> typed::map>::range_product(const typed::basic_map &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, Arg3>>(res); +} + +template +typed::map> typed::map>::range_reverse() const +{ + auto res = isl::map::range_reverse(); + return typed::map>(res); +} + +template +typed::fixed_box> typed::map>::range_simple_fixed_box_hull() const +{ + auto res = isl::map::range_simple_fixed_box_hull(); + return typed::fixed_box>(res); +} + +template +typed::map, Domain> typed::map>::reverse() const +{ + auto res = isl::map::reverse(); + return typed::map, Domain>(res); +} + +template +template +typed::map> typed::map>::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::map::set_domain_tuple(id); + return typed::map>(res); +} + +template +template +typed::map> typed::map>::set_domain_tuple(const std::string &id) const +{ + auto res = isl::map::set_domain_tuple(id); + return typed::map>(res); +} + +template +typed::space> typed::map>::space() const +{ + auto res = isl::map::space(); + return typed::space>(res); +} + +template +typed::map> typed::map>::subtract(const typed::map> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::subtract(const typed::union_map> &umap2) const +{ + auto res = isl::map::subtract(umap2); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::subtract(const typed::basic_map> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::map::subtract_domain(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::map>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::map::subtract_range(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::map>::to_union_map() const +{ + auto res = isl::map::to_union_map(); + return typed::union_map>(res); +} + +template +typed::map, Range2> typed::map>::uncurry() const +{ + auto res = isl::map::uncurry(); + return typed::map, Range2>(res); +} + +template +typed::map> typed::map>::unite(const typed::map> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map>(res); +} + +template +typed::union_map> typed::map>::unite(const typed::union_map> &umap2) const +{ + auto res = isl::map::unite(umap2); + return typed::union_map>(res); +} + +template +typed::map> typed::map>::unite(const typed::basic_map> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map>(res); +} + +template +typed::map> typed::map>::universe(const typed::space> &space) +{ + auto res = isl::map::universe(space); + return typed::map>(res); +} + +template +typed::map> typed::map>::upper_bound(const typed::multi_pw_aff> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map>(res); +} + +template +typed::map> typed::map>::upper_bound(const typed::aff> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map>(res); +} + +template +typed::map> typed::map>::upper_bound(const typed::multi_aff> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map>(res); +} + +template +typed::map> typed::map>::upper_bound(const typed::pw_aff> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map>(res); +} + +template +typed::map> typed::map>::upper_bound(const typed::pw_multi_aff> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map>(res); +} + +template +typed::set>> typed::map>::wrap() const +{ + auto res = isl::map::wrap(); + return typed::set>>(res); +} + +template +typed::map, pair>::map(const typed::basic_map, pair> &bmap) + : isl::map(bmap) +{ +} + +template +typed::map, pair>::map(const isl::ctx &ctx, const std::string &str) + : isl::map(ctx, str) +{ +} + +template +template +typed::map> typed::map, pair>::apply_domain(const typed::map, Domain2> &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map, pair>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::map> typed::map, pair>::apply_domain(const typed::basic_map, Domain2> &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::map, Range2> typed::map, pair>::apply_range(const typed::map, Range2> &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::map, pair>::apply_range(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::map::apply_range(umap2); + return typed::union_map, Range2>(res); +} + +template +template +typed::map, Range2> typed::map, pair>::apply_range(const typed::basic_map, Range2> &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map, Range2>(res); +} + +template +typed::map, pair> typed::map, pair>::as_map() const +{ + auto res = isl::map::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::map, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::map, pair>::as_pw_multi_aff() const +{ + auto res = isl::map::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::map, pair>::as_union_pw_multi_aff() const +{ + auto res = isl::map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::set> typed::map, pair>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::map::bind_domain(tuple); + return typed::set>(res); +} + +template +typed::set> typed::map, pair>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::map::bind_range(tuple); + return typed::set>(res); +} + +template +typed::map, pair> typed::map, pair>::coalesce() const +{ + auto res = isl::map::coalesce(); + return typed::map, pair>(res); +} + +template +typed::map>> typed::map, pair>::curry() const +{ + auto res = isl::map::curry(); + return typed::map>>(res); +} + +template +typed::set> typed::map, pair>::deltas() const +{ + auto res = isl::map::deltas(); + return typed::set>(res); +} + +template +typed::map, pair> typed::map, pair>::detect_equalities() const +{ + auto res = isl::map::detect_equalities(); + return typed::map, pair>(res); +} + +template +typed::set> typed::map, pair>::domain() const +{ + auto res = isl::map::domain(); + return typed::set>(res); +} + +template +typed::map> typed::map, pair>::domain_factor_domain() const +{ + auto res = isl::map::domain_factor_domain(); + return typed::map>(res); +} + +template +typed::map> typed::map, pair>::domain_factor_range() const +{ + auto res = isl::map::domain_factor_range(); + return typed::map>(res); +} + +template +typed::union_map, pair>, pair> typed::map, pair>::domain_map() const +{ + auto res = isl::map::domain_map(); + return typed::union_map, pair>, pair>(res); +} + +template +typed::union_pw_multi_aff, pair>, pair> typed::map, pair>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::map, pair>::domain_product(const typed::map> &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::map, pair>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::map, pair>::domain_product(const typed::basic_map> &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::domain_reverse() const +{ + auto res = isl::map::domain_reverse(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::drop_unused_params() const +{ + auto res = isl::map::drop_unused_params(); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::eq_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::union_map, pair> typed::map, pair>::eq_at(const typed::multi_union_pw_aff, Range> &mupa) const +{ + auto res = isl::map::eq_at(mupa); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::eq_at(const typed::aff, Anonymous> &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::eq_at(const typed::multi_aff, Range> &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::eq_at(const typed::pw_aff, Anonymous> &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::eq_at(const typed::pw_multi_aff, Range> &mpa) const +{ + auto res = isl::map::eq_at(mpa); + return typed::map, pair>(res); +} + +template +bool typed::map, pair>::every_map(const std::function, pair>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, pair>(arg0)); + }; + return isl::map::every_map(lambda_test); +} + +template +typed::map, pair> typed::map, pair>::extract_map(const typed::space, pair> &space) const +{ + auto res = isl::map::extract_map(space); + return typed::map, pair>(res); +} + +template +typed::map> typed::map, pair>::flatten_domain() const +{ + auto res = isl::map::flatten_domain(); + return typed::map>(res); +} + +template +typed::map, Anonymous> typed::map, pair>::flatten_range() const +{ + auto res = isl::map::flatten_range(); + return typed::map, Anonymous>(res); +} + +template +void typed::map, pair>::foreach_basic_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map, pair>(arg0)); + }; + return isl::map::foreach_basic_map(lambda_fn); +} + +template +void typed::map, pair>::foreach_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, pair>(arg0)); + }; + return isl::map::foreach_map(lambda_fn); +} + +template +typed::map, pair> typed::map, pair>::gist(const typed::map, pair> &context) const +{ + auto res = isl::map::gist(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::gist(const typed::union_map, pair> &context) const +{ + auto res = isl::map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist(const typed::basic_map, pair> &context) const +{ + auto res = isl::map::gist(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_domain(const typed::set> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_domain(const typed::basic_set> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_domain(const typed::point> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_params(const typed::set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_params(const typed::point<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect(const typed::map, pair> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect(const typed::union_map, pair> &umap2) const +{ + auto res = isl::map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect(const typed::basic_map, pair> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::map::intersect_domain(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::map::intersect_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain(const typed::basic_set> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain(const typed::point> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range(const typed::set> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_range(const typed::space> &space) const +{ + auto res = isl::map::intersect_range(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::map::intersect_range(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range(const typed::basic_set> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range(const typed::point> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_ge_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_ge_at(const typed::aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_ge_at(const typed::multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_ge_at(const typed::pw_aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_ge_at(const typed::pw_multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_ge_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_gt_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_gt_at(const typed::aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_gt_at(const typed::multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_gt_at(const typed::pw_aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_gt_at(const typed::pw_multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_gt_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_le_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_le_at(const typed::aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_le_at(const typed::multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_le_at(const typed::pw_aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_le_at(const typed::pw_multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_le_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_lt_at(const typed::multi_pw_aff, Range> &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_lt_at(const typed::aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_lt_at(const typed::multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lex_lt_at(const typed::pw_aff, Anonymous> &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map, pair>(res); +} + +template +template +typed::map, pair> typed::map, pair>::lex_lt_at(const typed::pw_multi_aff, Range> &mpa) const +{ + auto res = isl::map::lex_lt_at(mpa); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lexmax() const +{ + auto res = isl::map::lexmax(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::map, pair>::lexmax_pw_multi_aff() const +{ + auto res = isl::map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lexmin() const +{ + auto res = isl::map::lexmin(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::map, pair>::lexmin_pw_multi_aff() const +{ + auto res = isl::map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::multi_pw_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::multi_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::pw_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::pw_multi_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map_list, pair> typed::map, pair>::map_list() const +{ + auto res = isl::map::map_list(); + return typed::map_list, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::map, pair>::max_multi_pw_aff() const +{ + auto res = isl::map::max_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::map, pair>::min_multi_pw_aff() const +{ + auto res = isl::map::min_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::set<> typed::map, pair>::params() const +{ + auto res = isl::map::params(); + return typed::set<>(res); +} + +template +template +typed::map> typed::map, pair>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::map::preimage_domain(ma); + return typed::map>(res); +} + +template +template +typed::map> typed::map, pair>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::map::preimage_domain(mpa); + return typed::map>(res); +} + +template +template +typed::map> typed::map, pair>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::map::preimage_domain(pma); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map, pair>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::map, Range2> typed::map, pair>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::map::preimage_range(ma); + return typed::map, Range2>(res); +} + +template +template +typed::map, Range2> typed::map, pair>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::map::preimage_range(pma); + return typed::map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::map, pair>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::map::preimage_range(upma); + return typed::union_map, Range2>(res); +} + +template +template +typed::map, Domain2>, pair, Range2>> typed::map, pair>::product(const typed::map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, Domain2>, pair, Range2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Range2>> typed::map, pair>::product(const typed::union_map &umap2) const +{ + auto res = isl::map::product(umap2); + return typed::union_map, Domain2>, pair, Range2>>(res); +} + +template +template +typed::map, Domain2>, pair, Range2>> typed::map, pair>::product(const typed::basic_map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, Domain2>, pair, Range2>>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_all_params() const +{ + auto res = isl::map::project_out_all_params(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_param(const typed::id &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_param(const std::string &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::map::project_out_param(list); + return typed::map, pair>(res); +} + +template +typed::set> typed::map, pair>::range() const +{ + auto res = isl::map::range(); + return typed::set>(res); +} + +template +typed::map, T1> typed::map, pair>::range_factor_domain() const +{ + auto res = isl::map::range_factor_domain(); + return typed::map, T1>(res); +} + +template +typed::map, T2> typed::map, pair>::range_factor_range() const +{ + auto res = isl::map::range_factor_range(); + return typed::map, T2>(res); +} + +template +typed::fixed_box, pair> typed::map, pair>::range_lattice_tile() const +{ + auto res = isl::map::range_lattice_tile(); + return typed::fixed_box, pair>(res); +} + +template +typed::union_map, pair>, pair> typed::map, pair>::range_map() const +{ + auto res = isl::map::range_map(); + return typed::union_map, pair>, pair>(res); +} + +template +template +typed::map, pair, Range2>> typed::map, pair>::range_product(const typed::map, Range2> &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, pair, Range2>>(res); +} + +template +template +typed::union_map, pair, Range2>> typed::map, pair>::range_product(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::map::range_product(umap2); + return typed::union_map, pair, Range2>>(res); +} + +template +template +typed::map, pair, Range2>> typed::map, pair>::range_product(const typed::basic_map, Range2> &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, pair, Range2>>(res); +} + +template +typed::map, pair> typed::map, pair>::range_reverse() const +{ + auto res = isl::map::range_reverse(); + return typed::map, pair>(res); +} + +template +typed::fixed_box, pair> typed::map, pair>::range_simple_fixed_box_hull() const +{ + auto res = isl::map::range_simple_fixed_box_hull(); + return typed::fixed_box, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::reverse() const +{ + auto res = isl::map::reverse(); + return typed::map, pair>(res); +} + +template +typed::space, pair> typed::map, pair>::space() const +{ + auto res = isl::map::space(); + return typed::space, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::subtract(const typed::map, pair> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::subtract(const typed::union_map, pair> &umap2) const +{ + auto res = isl::map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::subtract(const typed::basic_map, pair> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::to_union_map() const +{ + auto res = isl::map::to_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::map, T1>, T2> typed::map, pair>::uncurry() const +{ + auto res = isl::map::uncurry(); + return typed::map, T1>, T2>(res); +} + +template +typed::map, pair> typed::map, pair>::unite(const typed::map, pair> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::unite(const typed::union_map, pair> &umap2) const +{ + auto res = isl::map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::unite(const typed::basic_map, pair> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::universe(const typed::space, pair> &space) +{ + auto res = isl::map::universe(space); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::multi_pw_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::multi_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::pw_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::pw_multi_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::set, pair>> typed::map, pair>::wrap() const +{ + auto res = isl::map::wrap(); + return typed::set, pair>>(res); +} + +template +typed::map, pair>::map(const typed::basic_map, pair> &bmap) + : isl::map(bmap) +{ +} + +template +typed::map, pair>::map(const isl::ctx &ctx, const std::string &str) + : isl::map(ctx, str) +{ +} + +template +template +typed::map> typed::map, pair>::apply_domain(const typed::map, Domain2> &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map, pair>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::map> typed::map, pair>::apply_domain(const typed::basic_map, Domain2> &map2) const +{ + auto res = isl::map::apply_domain(map2); + return typed::map>(res); +} + +template +template +typed::map, Arg2> typed::map, pair>::apply_range(const typed::map, Arg2> &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::map, pair>::apply_range(const typed::union_map, Arg2> &umap2) const +{ + auto res = isl::map::apply_range(umap2); + return typed::union_map, Arg2>(res); +} + +template +template +typed::map, Arg2> typed::map, pair>::apply_range(const typed::basic_map, Arg2> &map2) const +{ + auto res = isl::map::apply_range(map2); + return typed::map, Arg2>(res); +} + +template +typed::map, pair> typed::map, pair>::as_map() const +{ + auto res = isl::map::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::map, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::map, pair>::as_pw_multi_aff() const +{ + auto res = isl::map::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::map, pair>::as_union_pw_multi_aff() const +{ + auto res = isl::map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::set> typed::map, pair>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::map::bind_domain(tuple); + return typed::set>(res); +} + +template +typed::set> typed::map, pair>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::map::bind_range(tuple); + return typed::set>(res); +} + +template +typed::map, pair> typed::map, pair>::coalesce() const +{ + auto res = isl::map::coalesce(); + return typed::map, pair>(res); +} + +template +typed::map>> typed::map, pair>::curry() const +{ + auto res = isl::map::curry(); + return typed::map>>(res); +} + +template +typed::map, pair> typed::map, pair>::detect_equalities() const +{ + auto res = isl::map::detect_equalities(); + return typed::map, pair>(res); +} + +template +typed::set> typed::map, pair>::domain() const +{ + auto res = isl::map::domain(); + return typed::set>(res); +} + +template +typed::map> typed::map, pair>::domain_factor_domain() const +{ + auto res = isl::map::domain_factor_domain(); + return typed::map>(res); +} + +template +typed::map> typed::map, pair>::domain_factor_range() const +{ + auto res = isl::map::domain_factor_range(); + return typed::map>(res); +} + +template +typed::union_map, pair>, pair> typed::map, pair>::domain_map() const +{ + auto res = isl::map::domain_map(); + return typed::union_map, pair>, pair>(res); +} + +template +typed::union_pw_multi_aff, pair>, pair> typed::map, pair>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::map, pair>::domain_product(const typed::map> &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::map, pair>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::map, Domain2>, pair> typed::map, pair>::domain_product(const typed::basic_map> &map2) const +{ + auto res = isl::map::domain_product(map2); + return typed::map, Domain2>, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::domain_reverse() const +{ + auto res = isl::map::domain_reverse(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::drop_unused_params() const +{ + auto res = isl::map::drop_unused_params(); + return typed::map, pair>(res); +} + +template +bool typed::map, pair>::every_map(const std::function, pair>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, pair>(arg0)); + }; + return isl::map::every_map(lambda_test); +} + +template +typed::map, pair> typed::map, pair>::extract_map(const typed::space, pair> &space) const +{ + auto res = isl::map::extract_map(space); + return typed::map, pair>(res); +} + +template +typed::map> typed::map, pair>::flatten_domain() const +{ + auto res = isl::map::flatten_domain(); + return typed::map>(res); +} + +template +typed::map, Anonymous> typed::map, pair>::flatten_range() const +{ + auto res = isl::map::flatten_range(); + return typed::map, Anonymous>(res); +} + +template +void typed::map, pair>::foreach_basic_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_map arg0) { + return fn(typed::basic_map, pair>(arg0)); + }; + return isl::map::foreach_basic_map(lambda_fn); +} + +template +void typed::map, pair>::foreach_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, pair>(arg0)); + }; + return isl::map::foreach_map(lambda_fn); +} + +template +typed::map, pair> typed::map, pair>::gist(const typed::map, pair> &context) const +{ + auto res = isl::map::gist(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::gist(const typed::union_map, pair> &context) const +{ + auto res = isl::map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist(const typed::basic_map, pair> &context) const +{ + auto res = isl::map::gist(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_domain(const typed::set> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_domain(const typed::basic_set> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_domain(const typed::point> &context) const +{ + auto res = isl::map::gist_domain(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_params(const typed::set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::gist_params(const typed::point<> &context) const +{ + auto res = isl::map::gist_params(context); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect(const typed::map, pair> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect(const typed::union_map, pair> &umap2) const +{ + auto res = isl::map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect(const typed::basic_map, pair> &map2) const +{ + auto res = isl::map::intersect(map2); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::map::intersect_domain(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::map::intersect_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain(const typed::basic_set> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain(const typed::point> &set) const +{ + auto res = isl::map::intersect_domain(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_domain_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::map::intersect_domain_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::map::intersect_params(params); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range(const typed::set> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_range(const typed::space> &space) const +{ + auto res = isl::map::intersect_range(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::map::intersect_range(uset); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range(const typed::basic_set> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range(const typed::point> &set) const +{ + auto res = isl::map::intersect_range(set); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::intersect_range_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::map::intersect_range_wrapped_domain(domain); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lexmax() const +{ + auto res = isl::map::lexmax(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::map, pair>::lexmax_pw_multi_aff() const +{ + auto res = isl::map::lexmax_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lexmin() const +{ + auto res = isl::map::lexmin(); + return typed::map, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::map, pair>::lexmin_pw_multi_aff() const +{ + auto res = isl::map::lexmin_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::multi_pw_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::multi_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::pw_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::lower_bound(const typed::pw_multi_aff, pair> &lower) const +{ + auto res = isl::map::lower_bound(lower); + return typed::map, pair>(res); +} + +template +typed::map_list, pair> typed::map, pair>::map_list() const +{ + auto res = isl::map::map_list(); + return typed::map_list, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::map, pair>::max_multi_pw_aff() const +{ + auto res = isl::map::max_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::map, pair>::min_multi_pw_aff() const +{ + auto res = isl::map::min_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::set<> typed::map, pair>::params() const +{ + auto res = isl::map::params(); + return typed::set<>(res); +} + +template +template +typed::map> typed::map, pair>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::map::preimage_domain(ma); + return typed::map>(res); +} + +template +template +typed::map> typed::map, pair>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::map::preimage_domain(mpa); + return typed::map>(res); +} + +template +template +typed::map> typed::map, pair>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::map::preimage_domain(pma); + return typed::map>(res); +} + +template +template +typed::union_map> typed::map, pair>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::map, Arg2> typed::map, pair>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::map::preimage_range(ma); + return typed::map, Arg2>(res); +} + +template +template +typed::map, Arg2> typed::map, pair>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::map::preimage_range(pma); + return typed::map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::map, pair>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::map::preimage_range(upma); + return typed::union_map, Arg2>(res); +} + +template +template +typed::map, Domain2>, pair, Arg2>> typed::map, pair>::product(const typed::map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Arg2>> typed::map, pair>::product(const typed::union_map &umap2) const +{ + auto res = isl::map::product(umap2); + return typed::union_map, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::map, Domain2>, pair, Arg2>> typed::map, pair>::product(const typed::basic_map &map2) const +{ + auto res = isl::map::product(map2); + return typed::map, Domain2>, pair, Arg2>>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_all_params() const +{ + auto res = isl::map::project_out_all_params(); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_param(const typed::id &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_param(const std::string &id) const +{ + auto res = isl::map::project_out_param(id); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::map::project_out_param(list); + return typed::map, pair>(res); +} + +template +typed::set> typed::map, pair>::range() const +{ + auto res = isl::map::range(); + return typed::set>(res); +} + +template +typed::map, Range> typed::map, pair>::range_factor_domain() const +{ + auto res = isl::map::range_factor_domain(); + return typed::map, Range>(res); +} + +template +typed::map, Range2> typed::map, pair>::range_factor_range() const +{ + auto res = isl::map::range_factor_range(); + return typed::map, Range2>(res); +} + +template +typed::fixed_box, pair> typed::map, pair>::range_lattice_tile() const +{ + auto res = isl::map::range_lattice_tile(); + return typed::fixed_box, pair>(res); +} + +template +typed::union_map, pair>, pair> typed::map, pair>::range_map() const +{ + auto res = isl::map::range_map(); + return typed::union_map, pair>, pair>(res); +} + +template +template +typed::map, pair, Arg2>> typed::map, pair>::range_product(const typed::map, Arg2> &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, pair, Arg2>>(res); +} + +template +template +typed::union_map, pair, Arg2>> typed::map, pair>::range_product(const typed::union_map, Arg2> &umap2) const +{ + auto res = isl::map::range_product(umap2); + return typed::union_map, pair, Arg2>>(res); +} + +template +template +typed::map, pair, Arg2>> typed::map, pair>::range_product(const typed::basic_map, Arg2> &map2) const +{ + auto res = isl::map::range_product(map2); + return typed::map, pair, Arg2>>(res); +} + +template +typed::map, pair> typed::map, pair>::range_reverse() const +{ + auto res = isl::map::range_reverse(); + return typed::map, pair>(res); +} + +template +typed::fixed_box, pair> typed::map, pair>::range_simple_fixed_box_hull() const +{ + auto res = isl::map::range_simple_fixed_box_hull(); + return typed::fixed_box, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::reverse() const +{ + auto res = isl::map::reverse(); + return typed::map, pair>(res); +} + +template +typed::space, pair> typed::map, pair>::space() const +{ + auto res = isl::map::space(); + return typed::space, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::subtract(const typed::map, pair> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::subtract(const typed::union_map, pair> &umap2) const +{ + auto res = isl::map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::subtract(const typed::basic_map, pair> &map2) const +{ + auto res = isl::map::subtract(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::to_union_map() const +{ + auto res = isl::map::to_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::map, Range>, Range2> typed::map, pair>::uncurry() const +{ + auto res = isl::map::uncurry(); + return typed::map, Range>, Range2>(res); +} + +template +typed::map, pair> typed::map, pair>::unite(const typed::map, pair> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map, pair>(res); +} + +template +typed::union_map, pair> typed::map, pair>::unite(const typed::union_map, pair> &umap2) const +{ + auto res = isl::map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::unite(const typed::basic_map, pair> &map2) const +{ + auto res = isl::map::unite(map2); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::universe(const typed::space, pair> &space) +{ + auto res = isl::map::universe(space); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::multi_pw_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::multi_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::pw_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::map, pair> typed::map, pair>::upper_bound(const typed::pw_multi_aff, pair> &upper) const +{ + auto res = isl::map::upper_bound(upper); + return typed::map, pair>(res); +} + +template +typed::set, pair>> typed::map, pair>::wrap() const +{ + auto res = isl::map::wrap(); + return typed::set, pair>>(res); +} + +template +typed::map_list::map_list(const isl::ctx &ctx, int n) + : isl::map_list(ctx, n) +{ +} + +template +typed::map_list::map_list(const typed::map &el) + : isl::map_list(el) +{ +} + +template +typed::map_list::map_list(const isl::ctx &ctx, const std::string &str) + : isl::map_list(ctx, str) +{ +} + +template +typed::map_list typed::map_list::add(const typed::map &el) const +{ + auto res = isl::map_list::add(el); + return typed::map_list(res); +} + +template +typed::map_list typed::map_list::add(const typed::basic_map &el) const +{ + auto res = isl::map_list::add(el); + return typed::map_list(res); +} + +template +typed::map typed::map_list::at(int index) const +{ + auto res = isl::map_list::at(index); + return typed::map(res); +} + +template +typed::map_list typed::map_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::map_list::drop(first, n); + return typed::map_list(res); +} + +template +void typed::map_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::map_list::foreach(lambda_fn); +} + +template +void typed::map_list::foreach_scc(const std::function, typed::map)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::map arg0, isl::map arg1) { + return follows(typed::map(arg0), typed::map(arg1)); + }; + auto lambda_fn = [&] (isl::map_list arg0) { + return fn(typed::map_list(arg0)); + }; + return isl::map_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::map_list typed::map_list::set_at(int index, const typed::map &el) const +{ + auto res = isl::map_list::set_at(index, el); + return typed::map_list(res); +} + +template +typed::multi_aff::multi_aff(const typed::aff &aff) + : isl::multi_aff(aff) +{ +} + +template +typed::multi_aff::multi_aff(const typed::space &space, const typed::aff_list &list) + : isl::multi_aff(space, list) +{ +} + +template +typed::multi_aff::multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_aff(ctx, str) +{ +} + +template +typed::multi_aff typed::multi_aff::add(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::add_constant(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add_constant(const typed::val &v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add_constant(long v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::multi_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::as_multi_aff() const +{ + auto res = isl::multi_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::as_pw_multi_aff() const +{ + auto res = isl::multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::multi_aff::as_set() const +{ + auto res = isl::multi_aff::as_set(); + return typed::set(res); +} + +template +typed::aff typed::multi_aff::at(int pos) const +{ + auto res = isl::multi_aff::at(pos); + return typed::aff(res); +} + +template +typed::basic_set<> typed::multi_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind(tuple); + return typed::basic_set<>(res); +} + +template +typed::pw_multi_aff typed::multi_aff::coalesce() const +{ + auto res = isl::multi_aff::coalesce(); + return typed::pw_multi_aff(res); +} + +template +typed::multi_val typed::multi_aff::constant_multi_val() const +{ + auto res = isl::multi_aff::constant_multi_val(); + return typed::multi_val(res); +} + +template +typed::set<> typed::multi_aff::domain() const +{ + auto res = isl::multi_aff::domain(); + return typed::set<>(res); +} + +template +typed::pw_multi_aff typed::multi_aff::drop_unused_params() const +{ + auto res = isl::multi_aff::drop_unused_params(); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::floor() const +{ + auto res = isl::multi_aff::floor(); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist(const typed::set<> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist(const typed::basic_set<> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist(const typed::point<> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::identity() const +{ + auto res = isl::multi_aff::identity(); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::insert_domain(const typed::space &domain) const +{ + auto res = isl::multi_aff::insert_domain(domain); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::aff_list typed::multi_aff::list() const +{ + auto res = isl::multi_aff::list(); + return typed::aff_list(res); +} + +template +typed::multi_pw_aff typed::multi_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_aff::max_multi_val() const +{ + auto res = isl::multi_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::multi_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_aff::min_multi_val() const +{ + auto res = isl::multi_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_aff typed::multi_aff::neg() const +{ + auto res = isl::multi_aff::neg(); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff> typed::multi_aff::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::multi_aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::product(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff::product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff_list typed::multi_aff::pw_multi_aff_list() const +{ + auto res = isl::multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +typed::multi_aff typed::multi_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::scale(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale(const typed::val &v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale(long v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::scale_down(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale_down(const typed::val &v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale_down(long v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::set_at(int pos, const typed::aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +typed::space typed::multi_aff::space() const +{ + auto res = isl::multi_aff::space(); + return typed::space(res); +} + +template +typed::multi_aff typed::multi_aff::sub(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::sub(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::to_multi_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::to_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::to_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::to_union_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::multi_aff::unbind_params_insert_domain(domain); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff::multi_aff(const typed::aff &aff) + : isl::multi_aff(aff) +{ +} + +template +typed::multi_aff::multi_aff(const typed::space &space, const typed::aff_list &list) + : isl::multi_aff(space, list) +{ +} + +template +typed::multi_aff::multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_aff(ctx, str) +{ +} + +template +typed::multi_aff typed::multi_aff::add(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::add_constant(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add_constant(const typed::val &v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::add_constant(long v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::multi_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::map typed::multi_aff::as_map() const +{ + auto res = isl::multi_aff::as_map(); + return typed::map(res); +} + +template +typed::multi_aff typed::multi_aff::as_multi_aff() const +{ + auto res = isl::multi_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::as_pw_multi_aff() const +{ + auto res = isl::multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_map typed::multi_aff::as_union_map() const +{ + auto res = isl::multi_aff::as_union_map(); + return typed::union_map(res); +} + +template +typed::aff typed::multi_aff::at(int pos) const +{ + auto res = isl::multi_aff::at(pos); + return typed::aff(res); +} + +template +typed::basic_set typed::multi_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind(tuple); + return typed::basic_set(res); +} + +template +typed::multi_aff typed::multi_aff::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind_domain(tuple); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::coalesce() const +{ + auto res = isl::multi_aff::coalesce(); + return typed::pw_multi_aff(res); +} + +template +typed::multi_val typed::multi_aff::constant_multi_val() const +{ + auto res = isl::multi_aff::constant_multi_val(); + return typed::multi_val(res); +} + +template +typed::set typed::multi_aff::domain() const +{ + auto res = isl::multi_aff::domain(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::multi_aff::drop_unused_params() const +{ + auto res = isl::multi_aff::drop_unused_params(); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::floor() const +{ + auto res = isl::multi_aff::floor(); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist(const typed::set &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::gist(const typed::union_set &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist(const typed::basic_set &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist(const typed::point &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::identity() const +{ + auto res = isl::multi_aff::identity(); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::intersect_domain(const typed::set &set) const +{ + auto res = isl::multi_aff::intersect_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::intersect_domain(const typed::space &space) const +{ + auto res = isl::multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::aff_list typed::multi_aff::list() const +{ + auto res = isl::multi_aff::list(); + return typed::aff_list(res); +} + +template +typed::multi_pw_aff typed::multi_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_aff::max_multi_val() const +{ + auto res = isl::multi_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::multi_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_aff::min_multi_val() const +{ + auto res = isl::multi_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_aff typed::multi_aff::neg() const +{ + auto res = isl::multi_aff::neg(); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff, pair> typed::multi_aff::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::multi_aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::multi_aff, pair> typed::multi_aff::product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, pair>(res); +} + +template +template +typed::multi_aff typed::multi_aff::pullback(const typed::multi_aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::pullback(const typed::multi_aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_aff::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::multi_aff::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::multi_aff::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::pullback(const typed::aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::pullback(const typed::aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff_list typed::multi_aff::pw_multi_aff_list() const +{ + auto res = isl::multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +template +typed::multi_aff> typed::multi_aff::range_product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_aff::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::multi_aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::multi_aff::range_product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::range_product(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::multi_aff::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff::range_product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff>(res); +} + +template +typed::multi_aff typed::multi_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::scale(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale(const typed::val &v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale(long v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::scale_down(mv); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale_down(const typed::val &v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::scale_down(long v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::set_at(int pos, const typed::aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_aff::set_range_tuple(id); + return typed::multi_aff(res); +} + +template +typed::space typed::multi_aff::space() const +{ + auto res = isl::multi_aff::space(); + return typed::space(res); +} + +template +typed::multi_aff typed::multi_aff::sub(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff::sub(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::subtract_domain(const typed::set &set) const +{ + auto res = isl::multi_aff::subtract_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::subtract_domain(const typed::space &space) const +{ + auto res = isl::multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::to_multi_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::to_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::to_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::to_union_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff, Range>::multi_aff(const typed::aff, Range> &aff) + : isl::multi_aff(aff) +{ +} + +template +typed::multi_aff, Range>::multi_aff(const typed::space, Range> &space, const typed::aff_list, Anonymous> &list) + : isl::multi_aff(space, list) +{ +} + +template +typed::multi_aff, Range>::multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_aff(ctx, str) +{ +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::add(const typed::multi_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::add(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_aff, Range>::add(const typed::multi_union_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::add(const typed::pw_multi_aff, Range> &pma2) const +{ + auto res = isl::multi_aff::add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::add(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::multi_aff::add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::add(const typed::aff, Range> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::add_constant(mv); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::add_constant(const typed::val &v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::add_constant(long v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::multi_aff, Range>::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +typed::map, Range> typed::multi_aff, Range>::as_map() const +{ + auto res = isl::multi_aff::as_map(); + return typed::map, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::as_multi_aff() const +{ + auto res = isl::multi_aff::as_multi_aff(); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_aff, Range>::as_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::as_pw_multi_aff() const +{ + auto res = isl::multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_map, Range> typed::multi_aff, Range>::as_union_map() const +{ + auto res = isl::multi_aff::as_union_map(); + return typed::union_map, Range>(res); +} + +template +typed::aff, Anonymous> typed::multi_aff, Range>::at(int pos) const +{ + auto res = isl::multi_aff::at(pos); + return typed::aff, Anonymous>(res); +} + +template +typed::basic_set> typed::multi_aff, Range>::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind(tuple); + return typed::basic_set>(res); +} + +template +typed::multi_aff typed::multi_aff, Range>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::multi_aff::bind_domain(tuple); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff, Range>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind_domain_wrapped_domain(tuple); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::coalesce() const +{ + auto res = isl::multi_aff::coalesce(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::multi_val typed::multi_aff, Range>::constant_multi_val() const +{ + auto res = isl::multi_aff::constant_multi_val(); + return typed::multi_val(res); +} + +template +typed::set> typed::multi_aff, Range>::domain() const +{ + auto res = isl::multi_aff::domain(); + return typed::set>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::domain_reverse() const +{ + auto res = isl::multi_aff::domain_reverse(); + return typed::multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::drop_unused_params() const +{ + auto res = isl::multi_aff::drop_unused_params(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::extract_pw_multi_aff(const typed::space, Range> &space) const +{ + auto res = isl::multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::floor() const +{ + auto res = isl::multi_aff::floor(); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::gist(const typed::set> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::gist(const typed::union_set> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::gist(const typed::basic_set> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::gist(const typed::point> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::identity() const +{ + auto res = isl::multi_aff::identity(); + return typed::multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::multi_aff::intersect_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_aff::intersect_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::aff_list, Anonymous> typed::multi_aff, Range>::list() const +{ + auto res = isl::multi_aff::list(); + return typed::aff_list, Anonymous>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::max(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_val typed::multi_aff, Range>::max_multi_val() const +{ + auto res = isl::multi_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::min(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_val typed::multi_aff, Range>::min_multi_val() const +{ + auto res = isl::multi_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::neg() const +{ + auto res = isl::multi_aff::neg(); + return typed::multi_aff, Range>(res); +} + +template +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::multi_aff, Arg2>, pair> typed::multi_aff, Range>::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::multi_aff, Range>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::pw_multi_aff, Arg2>, pair> typed::multi_aff, Range>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::product(pma2); + return typed::pw_multi_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_aff, Arg2>, pair> typed::multi_aff, Range>::product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_aff typed::multi_aff, Range>::pullback(const typed::multi_aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff, Range>::pullback(const typed::multi_aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_aff, Range>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_aff, Range>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::multi_aff, Range>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff, Range>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::multi_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::multi_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::multi_aff typed::multi_aff, Range>::pullback(const typed::aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +typed::multi_aff typed::multi_aff, Range>::pullback(const typed::aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff(res); +} + +template +typed::pw_multi_aff_list, Range> typed::multi_aff, Range>::pw_multi_aff_list() const +{ + auto res = isl::multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, Range>(res); +} + +template +template +typed::multi_aff, pair> typed::multi_aff, Range>::range_product(const typed::multi_aff, Arg2> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_aff, Range>::range_product(const typed::multi_pw_aff, Arg2> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_union_pw_aff, pair> typed::multi_aff, Range>::range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::multi_aff, Range>::range_product(const typed::pw_multi_aff, Arg2> &pma2) const +{ + auto res = isl::multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::multi_aff, Range>::range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, Range>::range_product(const typed::aff, Anonymous> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::scale(mv); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::scale(const typed::val &v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::scale(long v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_aff::scale_down(mv); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::scale_down(const typed::val &v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::scale_down(long v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::set_at(int pos, const typed::aff, Anonymous> &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_aff, Range>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff, Range>(res); +} + +template +template +typed::multi_aff, Arg1> typed::multi_aff, Range>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_aff::set_range_tuple(id); + return typed::multi_aff, Arg1>(res); +} + +template +template +typed::multi_aff, Arg1> typed::multi_aff, Range>::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_aff::set_range_tuple(id); + return typed::multi_aff, Arg1>(res); +} + +template +typed::space, Range> typed::multi_aff, Range>::space() const +{ + auto res = isl::multi_aff::space(); + return typed::space, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::sub(const typed::multi_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::sub(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_aff, Range>::sub(const typed::multi_union_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::sub(const typed::pw_multi_aff, Range> &pma2) const +{ + auto res = isl::multi_aff::sub(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::sub(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::multi_aff::sub(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_aff, Range>::sub(const typed::aff, Range> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::subtract_domain(const typed::set> &set) const +{ + auto res = isl::multi_aff::subtract_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::to_multi_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_aff, Range>::to_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::to_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_pw_multi_aff(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::to_union_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_aff, Range>::union_add(const typed::multi_pw_aff, Range> &mpa2) const +{ + auto res = isl::multi_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_aff, Range>::union_add(const typed::multi_union_pw_aff, Range> &mupa2) const +{ + auto res = isl::multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, Range>::union_add(const typed::pw_multi_aff, Range> &pma2) const +{ + auto res = isl::multi_aff::union_add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::multi_aff, Range>::union_add(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_aff>::multi_aff(const typed::aff> &aff) + : isl::multi_aff(aff) +{ +} + +template +typed::multi_aff>::multi_aff(const typed::space> &space, const typed::aff_list &list) + : isl::multi_aff(space, list) +{ +} + +template +typed::multi_aff>::multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_aff(ctx, str) +{ +} + +template +typed::multi_aff> typed::multi_aff>::add(const typed::multi_aff> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::add(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_aff>::add(const typed::multi_union_pw_aff> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::add(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::add(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::add(const typed::aff> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::add_constant(const typed::multi_val> &mv) const +{ + auto res = isl::multi_aff::add_constant(mv); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::add_constant(const typed::val> &v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::add_constant(long v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff typed::multi_aff>::apply(const typed::union_pw_multi_aff, Arg3> &upma2) const +{ + auto res = isl::multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::map> typed::multi_aff>::as_map() const +{ + auto res = isl::multi_aff::as_map(); + return typed::map>(res); +} + +template +typed::multi_aff> typed::multi_aff>::as_multi_aff() const +{ + auto res = isl::multi_aff::as_multi_aff(); + return typed::multi_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_aff>::as_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::as_pw_multi_aff() const +{ + auto res = isl::multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::union_map> typed::multi_aff>::as_union_map() const +{ + auto res = isl::multi_aff::as_union_map(); + return typed::union_map>(res); +} + +template +typed::aff typed::multi_aff>::at(int pos) const +{ + auto res = isl::multi_aff::at(pos); + return typed::aff(res); +} + +template +typed::basic_set typed::multi_aff>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::multi_aff::bind(tuple); + return typed::basic_set(res); +} + +template +typed::multi_aff> typed::multi_aff>::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind_domain(tuple); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::coalesce() const +{ + auto res = isl::multi_aff::coalesce(); + return typed::pw_multi_aff>(res); +} + +template +typed::multi_val> typed::multi_aff>::constant_multi_val() const +{ + auto res = isl::multi_aff::constant_multi_val(); + return typed::multi_val>(res); +} + +template +typed::set typed::multi_aff>::domain() const +{ + auto res = isl::multi_aff::domain(); + return typed::set(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::drop_unused_params() const +{ + auto res = isl::multi_aff::drop_unused_params(); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::extract_pw_multi_aff(const typed::space> &space) const +{ + auto res = isl::multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::floor() const +{ + auto res = isl::multi_aff::floor(); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::gist(const typed::set &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::gist(const typed::union_set &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::gist(const typed::basic_set &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::gist(const typed::point &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::identity() const +{ + auto res = isl::multi_aff::identity(); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::intersect_domain(const typed::set &set) const +{ + auto res = isl::multi_aff::intersect_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::intersect_domain(const typed::space &space) const +{ + auto res = isl::multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_aff::intersect_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::aff_list typed::multi_aff>::list() const +{ + auto res = isl::multi_aff::list(); + return typed::aff_list(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::max(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::multi_aff::max(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_val> typed::multi_aff>::max_multi_val() const +{ + auto res = isl::multi_aff::max_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::min(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::multi_aff::min(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_val> typed::multi_aff>::min_multi_val() const +{ + auto res = isl::multi_aff::min_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_aff> typed::multi_aff>::neg() const +{ + auto res = isl::multi_aff::neg(); + return typed::multi_aff>(res); +} + +template +template +typed::multi_aff, pair, Arg3>> typed::multi_aff>::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, pair, Arg3>>(res); +} + +template +template +typed::multi_pw_aff, pair, Arg3>> typed::multi_aff>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_pw_aff, pair, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, pair, Arg3>> typed::multi_aff>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::product(pma2); + return typed::pw_multi_aff, pair, Arg3>>(res); +} + +template +template +typed::multi_aff, pair, Anonymous>> typed::multi_aff>::product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, pair, Anonymous>>(res); +} + +template +template +typed::multi_aff> typed::multi_aff>::pullback(const typed::multi_aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::pullback(const typed::multi_aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_aff>::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::multi_aff>::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::multi_aff>::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::multi_aff> typed::multi_aff>::pullback(const typed::aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::pullback(const typed::aff &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff_list> typed::multi_aff>::pw_multi_aff_list() const +{ + auto res = isl::multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list>(res); +} + +template +typed::pw_multi_aff typed::multi_aff>::range_factor_domain() const +{ + auto res = isl::multi_aff::range_factor_domain(); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::multi_aff>::range_factor_range() const +{ + auto res = isl::multi_aff::range_factor_range(); + return typed::pw_multi_aff(res); +} + +template +template +typed::multi_aff, Arg3>> typed::multi_aff>::range_product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff, Arg3>>(res); +} + +template +template +typed::multi_pw_aff, Arg3>> typed::multi_aff>::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_pw_aff, Arg3>>(res); +} + +template +template +typed::multi_union_pw_aff, Arg3>> typed::multi_aff>::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_union_pw_aff, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, Arg3>> typed::multi_aff>::range_product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::range_product(pma2); + return typed::pw_multi_aff, Arg3>>(res); +} + +template +template +typed::union_pw_multi_aff, Arg3>> typed::multi_aff>::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, Arg3>>(res); +} + +template +typed::multi_aff, Anonymous>> typed::multi_aff>::range_product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff, Anonymous>>(res); +} + +template +typed::multi_aff> typed::multi_aff>::scale(const typed::multi_val> &mv) const +{ + auto res = isl::multi_aff::scale(mv); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::scale(const typed::val> &v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::scale(long v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::scale_down(const typed::multi_val> &mv) const +{ + auto res = isl::multi_aff::scale_down(mv); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::scale_down(const typed::val> &v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::scale_down(long v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::set_at(int pos, const typed::aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_aff>::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff>(res); +} + +template +typed::space> typed::multi_aff>::space() const +{ + auto res = isl::multi_aff::space(); + return typed::space>(res); +} + +template +typed::multi_aff> typed::multi_aff>::sub(const typed::multi_aff> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::sub(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_aff>::sub(const typed::multi_union_pw_aff> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::sub(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::sub(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::sub(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::sub(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff>::sub(const typed::aff> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::subtract_domain(const typed::set &set) const +{ + auto res = isl::multi_aff::subtract_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::subtract_domain(const typed::space &space) const +{ + auto res = isl::multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::to_multi_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_aff>::to_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::to_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::to_union_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff>::union_add(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_aff::union_add(mpa2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_aff>::union_add(const typed::multi_union_pw_aff> &mupa2) const +{ + auto res = isl::multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff>::union_add(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::union_add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff>::union_add(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::union_add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_aff, pair>::multi_aff(const typed::aff, pair> &aff) + : isl::multi_aff(aff) +{ +} + +template +typed::multi_aff, pair>::multi_aff(const typed::space, pair> &space, const typed::aff_list, Anonymous> &list) + : isl::multi_aff(space, list) +{ +} + +template +typed::multi_aff, pair>::multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_aff(ctx, str) +{ +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::add(const typed::multi_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::add(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::multi_aff, pair>::add(const typed::multi_union_pw_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::add(const typed::pw_multi_aff, pair> &pma2) const +{ + auto res = isl::multi_aff::add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::add(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::multi_aff::add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::add(const typed::aff, pair> &multi2) const +{ + auto res = isl::multi_aff::add(multi2); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::add_constant(const typed::multi_val> &mv) const +{ + auto res = isl::multi_aff::add_constant(mv); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::add_constant(const typed::val> &v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::add_constant(long v) const +{ + auto res = isl::multi_aff::add_constant(v); + return typed::multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::multi_aff, pair>::apply(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +typed::map, pair> typed::multi_aff, pair>::as_map() const +{ + auto res = isl::multi_aff::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::as_multi_aff() const +{ + auto res = isl::multi_aff::as_multi_aff(); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::multi_aff, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::as_pw_multi_aff() const +{ + auto res = isl::multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_map, pair> typed::multi_aff, pair>::as_union_map() const +{ + auto res = isl::multi_aff::as_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::aff, Anonymous> typed::multi_aff, pair>::at(int pos) const +{ + auto res = isl::multi_aff::at(pos); + return typed::aff, Anonymous>(res); +} + +template +typed::basic_set> typed::multi_aff, pair>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::multi_aff::bind(tuple); + return typed::basic_set>(res); +} + +template +typed::multi_aff> typed::multi_aff, pair>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::multi_aff::bind_domain(tuple); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff, pair>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::multi_aff::bind_domain_wrapped_domain(tuple); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::coalesce() const +{ + auto res = isl::multi_aff::coalesce(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::multi_val> typed::multi_aff, pair>::constant_multi_val() const +{ + auto res = isl::multi_aff::constant_multi_val(); + return typed::multi_val>(res); +} + +template +typed::set> typed::multi_aff, pair>::domain() const +{ + auto res = isl::multi_aff::domain(); + return typed::set>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::domain_reverse() const +{ + auto res = isl::multi_aff::domain_reverse(); + return typed::multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::drop_unused_params() const +{ + auto res = isl::multi_aff::drop_unused_params(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::extract_pw_multi_aff(const typed::space, pair> &space) const +{ + auto res = isl::multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::floor() const +{ + auto res = isl::multi_aff::floor(); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::gist(const typed::set> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::gist(const typed::union_set> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::gist(const typed::basic_set> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::gist(const typed::point> &context) const +{ + auto res = isl::multi_aff::gist(context); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_aff::gist_params(context); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::identity() const +{ + auto res = isl::multi_aff::identity(); + return typed::multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::multi_aff::intersect_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_aff::intersect_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::aff_list, Anonymous> typed::multi_aff, pair>::list() const +{ + auto res = isl::multi_aff::list(); + return typed::aff_list, Anonymous>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::max(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::max(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_val> typed::multi_aff, pair>::max_multi_val() const +{ + auto res = isl::multi_aff::max_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::min(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::min(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_val> typed::multi_aff, pair>::min_multi_val() const +{ + auto res = isl::multi_aff::min_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::neg() const +{ + auto res = isl::multi_aff::neg(); + return typed::multi_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::multi_aff, Domain2>, pair, Arg2>> typed::multi_aff, pair>::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::multi_pw_aff, Domain2>, pair, Arg2>> typed::multi_aff, pair>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_pw_aff, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, Domain2>, pair, Arg2>> typed::multi_aff, pair>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::multi_aff::product(pma2); + return typed::pw_multi_aff, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::multi_aff, Domain2>, pair, Anonymous>> typed::multi_aff, pair>::product(const typed::aff &multi2) const +{ + auto res = isl::multi_aff::product(multi2); + return typed::multi_aff, Domain2>, pair, Anonymous>>(res); +} + +template +template +typed::multi_aff> typed::multi_aff, pair>::pullback(const typed::multi_aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff, pair>::pullback(const typed::multi_aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_aff, pair>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_aff, pair>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::multi_aff, pair>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::multi_aff, pair>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::multi_aff, pair>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::multi_aff, pair>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::multi_aff> typed::multi_aff, pair>::pullback(const typed::aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +typed::multi_aff> typed::multi_aff, pair>::pullback(const typed::aff> &ma2) const +{ + auto res = isl::multi_aff::pullback(ma2); + return typed::multi_aff>(res); +} + +template +typed::pw_multi_aff_list, pair> typed::multi_aff, pair>::pw_multi_aff_list() const +{ + auto res = isl::multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, pair>(res); +} + +template +typed::pw_multi_aff, Range> typed::multi_aff, pair>::range_factor_domain() const +{ + auto res = isl::multi_aff::range_factor_domain(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range2> typed::multi_aff, pair>::range_factor_range() const +{ + auto res = isl::multi_aff::range_factor_range(); + return typed::pw_multi_aff, Range2>(res); +} + +template +template +typed::multi_aff, pair, Arg2>> typed::multi_aff, pair>::range_product(const typed::multi_aff, Arg2> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff, pair, Arg2>>(res); +} + +template +template +typed::multi_pw_aff, pair, Arg2>> typed::multi_aff, pair>::range_product(const typed::multi_pw_aff, Arg2> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_pw_aff, pair, Arg2>>(res); +} + +template +template +typed::multi_union_pw_aff, pair, Arg2>> typed::multi_aff, pair>::range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, pair, Arg2>> typed::multi_aff, pair>::range_product(const typed::pw_multi_aff, Arg2> &pma2) const +{ + auto res = isl::multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair, Arg2>>(res); +} + +template +template +typed::union_pw_multi_aff, pair, Arg2>> typed::multi_aff, pair>::range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair, Arg2>>(res); +} + +template +typed::multi_aff, pair, Anonymous>> typed::multi_aff, pair>::range_product(const typed::aff, Anonymous> &multi2) const +{ + auto res = isl::multi_aff::range_product(multi2); + return typed::multi_aff, pair, Anonymous>>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::scale(const typed::multi_val> &mv) const +{ + auto res = isl::multi_aff::scale(mv); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::scale(const typed::val> &v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::scale(long v) const +{ + auto res = isl::multi_aff::scale(v); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::scale_down(const typed::multi_val> &mv) const +{ + auto res = isl::multi_aff::scale_down(mv); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::scale_down(const typed::val> &v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::scale_down(long v) const +{ + auto res = isl::multi_aff::scale_down(v); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::set_at(int pos, const typed::aff, Anonymous> &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::multi_aff, pair>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::space, pair> typed::multi_aff, pair>::space() const +{ + auto res = isl::multi_aff::space(); + return typed::space, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::sub(const typed::multi_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::sub(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::multi_aff, pair>::sub(const typed::multi_union_pw_aff, pair> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::sub(const typed::pw_multi_aff, pair> &pma2) const +{ + auto res = isl::multi_aff::sub(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::sub(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::multi_aff::sub(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_aff, pair> typed::multi_aff, pair>::sub(const typed::aff, pair> &multi2) const +{ + auto res = isl::multi_aff::sub(multi2); + return typed::multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::subtract_domain(const typed::set> &set) const +{ + auto res = isl::multi_aff::subtract_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::to_multi_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::multi_aff, pair>::to_multi_union_pw_aff() const +{ + auto res = isl::multi_aff::to_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::to_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::to_union_pw_multi_aff() const +{ + auto res = isl::multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_aff, pair>::union_add(const typed::multi_pw_aff, pair> &mpa2) const +{ + auto res = isl::multi_aff::union_add(mpa2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::multi_aff, pair>::union_add(const typed::multi_union_pw_aff, pair> &mupa2) const +{ + auto res = isl::multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::multi_aff, pair>::union_add(const typed::pw_multi_aff, pair> &pma2) const +{ + auto res = isl::multi_aff::union_add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::multi_aff, pair>::union_add(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_id::multi_id(const typed::space &space, const typed::id_list &list) + : isl::multi_id(space, list) +{ +} + +template +typed::multi_id::multi_id(const isl::ctx &ctx, const std::string &str) + : isl::multi_id(ctx, str) +{ +} + +template +typed::id typed::multi_id::at(int pos) const +{ + auto res = isl::multi_id::at(pos); + return typed::id(res); +} + +template +typed::id_list typed::multi_id::list() const +{ + auto res = isl::multi_id::list(); + return typed::id_list(res); +} + +template +typed::multi_id typed::multi_id::set_at(int pos, const typed::id &el) const +{ + auto res = isl::multi_id::set_at(pos, el); + return typed::multi_id(res); +} + +template +typed::multi_id typed::multi_id::set_at(int pos, const std::string &el) const +{ + auto res = isl::multi_id::set_at(pos, el); + return typed::multi_id(res); +} + +template +typed::space typed::multi_id::space() const +{ + auto res = isl::multi_id::space(); + return typed::space(res); +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::aff &aff) + : isl::multi_pw_aff(aff) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::multi_aff &ma) + : isl::multi_pw_aff(ma) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::pw_aff &pa) + : isl::multi_pw_aff(pa) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::space &space, const typed::pw_aff_list &list) + : isl::multi_pw_aff(space, list) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::pw_multi_aff &pma) + : isl::multi_pw_aff(pma) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_pw_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::add_constant(mv); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add_constant(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::add_constant(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add_constant(long v) const +{ + auto res = isl::multi_pw_aff::add_constant(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_aff typed::multi_pw_aff::as_multi_aff() const +{ + auto res = isl::multi_pw_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::set typed::multi_pw_aff::as_set() const +{ + auto res = isl::multi_pw_aff::as_set(); + return typed::set(res); +} + +template +typed::pw_aff typed::multi_pw_aff::at(int pos) const +{ + auto res = isl::multi_pw_aff::at(pos); + return typed::pw_aff(res); +} + +template +typed::set<> typed::multi_pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_pw_aff::bind(tuple); + return typed::set<>(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::coalesce() const +{ + auto res = isl::multi_pw_aff::coalesce(); + return typed::multi_pw_aff(res); +} + +template +typed::set<> typed::multi_pw_aff::domain() const +{ + auto res = isl::multi_pw_aff::domain(); + return typed::set<>(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::multi_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist_params(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist_params(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::identity() const +{ + auto res = isl::multi_pw_aff::identity(); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::insert_domain(const typed::space &domain) const +{ + auto res = isl::multi_pw_aff::insert_domain(domain); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff_list typed::multi_pw_aff::list() const +{ + auto res = isl::multi_pw_aff::list(); + return typed::pw_aff_list(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_pw_aff::max_multi_val() const +{ + auto res = isl::multi_pw_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_pw_aff::min_multi_val() const +{ + auto res = isl::multi_pw_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::neg() const +{ + auto res = isl::multi_pw_aff::neg(); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff> typed::multi_pw_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_pw_aff::product(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_pw_aff::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_pw_aff::product(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_pw_aff::product(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::scale(mv); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::scale(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale(long v) const +{ + auto res = isl::multi_pw_aff::scale(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::scale_down(mv); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale_down(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::scale_down(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale_down(long v) const +{ + auto res = isl::multi_pw_aff::scale_down(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::multi_pw_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_pw_aff::set_range_tuple(id); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_pw_aff::set_range_tuple(id); + return typed::multi_pw_aff(res); +} + +template +typed::space typed::multi_pw_aff::space() const +{ + auto res = isl::multi_pw_aff::space(); + return typed::space(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::multi_pw_aff::unbind_params_insert_domain(domain); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::multi_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::multi_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::pw_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::pw_multi_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::aff &aff) + : isl::multi_pw_aff(aff) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::multi_aff &ma) + : isl::multi_pw_aff(ma) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::pw_aff &pa) + : isl::multi_pw_aff(pa) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::space &space, const typed::pw_aff_list &list) + : isl::multi_pw_aff(space, list) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const typed::pw_multi_aff &pma) + : isl::multi_pw_aff(pma) +{ +} + +template +typed::multi_pw_aff::multi_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_pw_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::add_constant(mv); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add_constant(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::add_constant(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::add_constant(long v) const +{ + auto res = isl::multi_pw_aff::add_constant(v); + return typed::multi_pw_aff(res); +} + +template +typed::map typed::multi_pw_aff::as_map() const +{ + auto res = isl::multi_pw_aff::as_map(); + return typed::map(res); +} + +template +typed::multi_aff typed::multi_pw_aff::as_multi_aff() const +{ + auto res = isl::multi_pw_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::pw_aff typed::multi_pw_aff::at(int pos) const +{ + auto res = isl::multi_pw_aff::at(pos); + return typed::pw_aff(res); +} + +template +typed::set typed::multi_pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_pw_aff::bind(tuple); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::multi_pw_aff::bind_domain(tuple); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::coalesce() const +{ + auto res = isl::multi_pw_aff::coalesce(); + return typed::multi_pw_aff(res); +} + +template +typed::set typed::multi_pw_aff::domain() const +{ + auto res = isl::multi_pw_aff::domain(); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist(const typed::set &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::gist(const typed::union_set &context) const +{ + auto res = isl::multi_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist(const typed::basic_set &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist(const typed::point &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist_params(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::gist_params(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::identity() const +{ + auto res = isl::multi_pw_aff::identity(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_domain(const typed::set &domain) const +{ + auto res = isl::multi_pw_aff::intersect_domain(domain); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_pw_aff::intersect_domain(uset); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_domain(const typed::basic_set &domain) const +{ + auto res = isl::multi_pw_aff::intersect_domain(domain); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_domain(const typed::point &domain) const +{ + auto res = isl::multi_pw_aff::intersect_domain(domain); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff_list typed::multi_pw_aff::list() const +{ + auto res = isl::multi_pw_aff::list(); + return typed::pw_aff_list(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::max(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_pw_aff::max_multi_val() const +{ + auto res = isl::multi_pw_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::min(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::multi_pw_aff::min_multi_val() const +{ + auto res = isl::multi_pw_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::neg() const +{ + auto res = isl::multi_pw_aff::neg(); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff::product(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff::product(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff::product(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::multi_pw_aff::pullback(ma); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::multi_pw_aff::pullback(ma); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::pullback(const typed::pw_multi_aff &pma) const +{ + auto res = isl::multi_pw_aff::pullback(pma); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::pullback(const typed::pw_multi_aff &pma) const +{ + auto res = isl::multi_pw_aff::pullback(pma); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::multi_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::multi_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_pw_aff> typed::multi_pw_aff::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::multi_pw_aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_pw_aff::range_product(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_pw_aff::range_product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::multi_pw_aff::range_product(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_pw_aff> typed::multi_pw_aff::range_product(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::scale(mv); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::scale(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale(long v) const +{ + auto res = isl::multi_pw_aff::scale(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::scale_down(mv); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale_down(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::scale_down(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::scale_down(long v) const +{ + auto res = isl::multi_pw_aff::scale_down(v); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::multi_pw_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_pw_aff::set_range_tuple(id); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_pw_aff::set_range_tuple(id); + return typed::multi_pw_aff(res); +} + +template +typed::space typed::multi_pw_aff::space() const +{ + auto res = isl::multi_pw_aff::space(); + return typed::space(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::sub(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::multi_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::multi_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::pw_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff::union_add(const typed::pw_multi_aff &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff, Range>::multi_pw_aff(const typed::aff, Range> &aff) + : isl::multi_pw_aff(aff) +{ +} + +template +typed::multi_pw_aff, Range>::multi_pw_aff(const typed::multi_aff, Range> &ma) + : isl::multi_pw_aff(ma) +{ +} + +template +typed::multi_pw_aff, Range>::multi_pw_aff(const typed::pw_aff, Range> &pa) + : isl::multi_pw_aff(pa) +{ +} + +template +typed::multi_pw_aff, Range>::multi_pw_aff(const typed::space, Range> &space, const typed::pw_aff_list, Anonymous> &list) + : isl::multi_pw_aff(space, list) +{ +} + +template +typed::multi_pw_aff, Range>::multi_pw_aff(const typed::pw_multi_aff, Range> &pma) + : isl::multi_pw_aff(pma) +{ +} + +template +typed::multi_pw_aff, Range>::multi_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_pw_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_pw_aff, Range>::add(const typed::multi_union_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add(const typed::aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add(const typed::multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add(const typed::pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add(const typed::pw_multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::add_constant(mv); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add_constant(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::add_constant(v); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::add_constant(long v) const +{ + auto res = isl::multi_pw_aff::add_constant(v); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::map, Range> typed::multi_pw_aff, Range>::as_map() const +{ + auto res = isl::multi_pw_aff::as_map(); + return typed::map, Range>(res); +} + +template +typed::multi_aff, Range> typed::multi_pw_aff, Range>::as_multi_aff() const +{ + auto res = isl::multi_pw_aff::as_multi_aff(); + return typed::multi_aff, Range>(res); +} + +template +typed::pw_aff, Anonymous> typed::multi_pw_aff, Range>::at(int pos) const +{ + auto res = isl::multi_pw_aff::at(pos); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::multi_pw_aff, Range>::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_pw_aff::bind(tuple); + return typed::set>(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::multi_pw_aff::bind_domain(tuple); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::multi_pw_aff::bind_domain_wrapped_domain(tuple); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::coalesce() const +{ + auto res = isl::multi_pw_aff::coalesce(); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::set> typed::multi_pw_aff, Range>::domain() const +{ + auto res = isl::multi_pw_aff::domain(); + return typed::set>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::domain_reverse() const +{ + auto res = isl::multi_pw_aff::domain_reverse(); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::gist(const typed::set> &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_pw_aff, Range>::gist(const typed::union_set> &context) const +{ + auto res = isl::multi_pw_aff::gist(context); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::gist(const typed::basic_set> &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::gist(const typed::point> &set) const +{ + auto res = isl::multi_pw_aff::gist(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::gist_params(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::gist_params(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::gist_params(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::identity() const +{ + auto res = isl::multi_pw_aff::identity(); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_domain(const typed::set> &domain) const +{ + auto res = isl::multi_pw_aff::intersect_domain(domain); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::multi_pw_aff::intersect_domain(uset); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_domain(const typed::basic_set> &domain) const +{ + auto res = isl::multi_pw_aff::intersect_domain(domain); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_domain(const typed::point> &domain) const +{ + auto res = isl::multi_pw_aff::intersect_domain(domain); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::multi_pw_aff::intersect_params(set); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::pw_aff_list, Anonymous> typed::multi_pw_aff, Range>::list() const +{ + auto res = isl::multi_pw_aff::list(); + return typed::pw_aff_list, Anonymous>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::max(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::max(const typed::aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::max(const typed::multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::max(const typed::pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::max(const typed::pw_multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_val typed::multi_pw_aff, Range>::max_multi_val() const +{ + auto res = isl::multi_pw_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::min(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::min(const typed::aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::min(const typed::multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::min(const typed::pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::min(const typed::pw_multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_val typed::multi_pw_aff, Range>::min_multi_val() const +{ + auto res = isl::multi_pw_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::neg() const +{ + auto res = isl::multi_pw_aff::neg(); + return typed::multi_pw_aff, Range>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::multi_pw_aff, Range>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::multi_pw_aff, Range>::product(const typed::aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::multi_pw_aff, Range>::product(const typed::multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::multi_pw_aff, Range>::product(const typed::pw_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::multi_pw_aff, Range>::product(const typed::pw_multi_aff &multi2) const +{ + auto res = isl::multi_pw_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::multi_pw_aff::pullback(ma); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::multi_pw_aff::pullback(ma); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_pw_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::multi_pw_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::multi_pw_aff::pullback(pma); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::multi_pw_aff::pullback(pma); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::multi_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_pw_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::multi_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff, Range>::range_product(const typed::multi_pw_aff, Arg2> &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_union_pw_aff, pair> typed::multi_pw_aff, Range>::range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_pw_aff, Range>::range_product(const typed::aff, Anonymous> &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff, Range>::range_product(const typed::multi_aff, Arg2> &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::multi_pw_aff, Range>::range_product(const typed::pw_aff, Anonymous> &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::multi_pw_aff, Range>::range_product(const typed::pw_multi_aff, Arg2> &multi2) const +{ + auto res = isl::multi_pw_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::scale(mv); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::scale(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::scale(v); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::scale(long v) const +{ + auto res = isl::multi_pw_aff::scale(v); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_pw_aff::scale_down(mv); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::scale_down(const typed::val &v) const +{ + auto res = isl::multi_pw_aff::scale_down(v); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::scale_down(long v) const +{ + auto res = isl::multi_pw_aff::scale_down(v); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::multi_pw_aff::set_at(pos, el); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_pw_aff, Range>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::multi_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff, Range>(res); +} + +template +template +typed::multi_pw_aff, Arg1> typed::multi_pw_aff, Range>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_pw_aff::set_range_tuple(id); + return typed::multi_pw_aff, Arg1>(res); +} + +template +template +typed::multi_pw_aff, Arg1> typed::multi_pw_aff, Range>::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_pw_aff::set_range_tuple(id); + return typed::multi_pw_aff, Arg1>(res); +} + +template +typed::space, Range> typed::multi_pw_aff, Range>::space() const +{ + auto res = isl::multi_pw_aff::space(); + return typed::space, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::sub(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_pw_aff, Range>::sub(const typed::multi_union_pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::sub(const typed::aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::sub(const typed::multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::sub(const typed::pw_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::sub(const typed::pw_multi_aff, Range> &multi2) const +{ + auto res = isl::multi_pw_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::union_add(const typed::multi_pw_aff, Range> &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::multi_pw_aff, Range>::union_add(const typed::multi_union_pw_aff, Range> &mupa2) const +{ + auto res = isl::multi_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::union_add(const typed::aff, Range> &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::union_add(const typed::multi_aff, Range> &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::union_add(const typed::pw_aff, Range> &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::multi_pw_aff, Range>::union_add(const typed::pw_multi_aff, Range> &mpa2) const +{ + auto res = isl::multi_pw_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const typed::multi_pw_aff &mpa) + : isl::multi_union_pw_aff(mpa) +{ +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const typed::union_pw_aff &upa) + : isl::multi_union_pw_aff(upa) +{ +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const typed::space &space, const typed::union_pw_aff_list &list) + : isl::multi_union_pw_aff(space, list) +{ +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_union_pw_aff(ctx, str) +{ +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::add(const typed::union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff typed::multi_union_pw_aff::at(int pos) const +{ + auto res = isl::multi_union_pw_aff::at(pos); + return typed::union_pw_aff(res); +} + +template +typed::union_set<> typed::multi_union_pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_union_pw_aff::bind(tuple); + return typed::union_set<>(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::coalesce() const +{ + auto res = isl::multi_union_pw_aff::coalesce(); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_set<> typed::multi_union_pw_aff::domain() const +{ + auto res = isl::multi_union_pw_aff::domain(); + return typed::union_set<>(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::basic_set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::point<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::multi_union_pw_aff::intersect_params(params); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::multi_union_pw_aff::intersect_params(params); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::multi_union_pw_aff::intersect_params(params); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff_list typed::multi_union_pw_aff::list() const +{ + auto res = isl::multi_union_pw_aff::list(); + return typed::union_pw_aff_list(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::neg() const +{ + auto res = isl::multi_union_pw_aff::neg(); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_union_pw_aff::scale(mv); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale(const typed::val &v) const +{ + auto res = isl::multi_union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale(long v) const +{ + auto res = isl::multi_union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_union_pw_aff::scale_down(mv); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale_down(const typed::val &v) const +{ + auto res = isl::multi_union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale_down(long v) const +{ + auto res = isl::multi_union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_union_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +typed::space typed::multi_union_pw_aff::space() const +{ + auto res = isl::multi_union_pw_aff::space(); + return typed::space(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::sub(const typed::union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::multi_union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::union_add(const typed::multi_pw_aff &mupa2) const +{ + auto res = isl::multi_union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::union_add(const typed::union_pw_aff &mupa2) const +{ + auto res = isl::multi_union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const typed::multi_pw_aff &mpa) + : isl::multi_union_pw_aff(mpa) +{ +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const typed::union_pw_aff &upa) + : isl::multi_union_pw_aff(upa) +{ +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const typed::space &space, const typed::union_pw_aff_list &list) + : isl::multi_union_pw_aff(space, list) +{ +} + +template +typed::multi_union_pw_aff::multi_union_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::multi_union_pw_aff(ctx, str) +{ +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::add(const typed::union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff typed::multi_union_pw_aff::at(int pos) const +{ + auto res = isl::multi_union_pw_aff::at(pos); + return typed::union_pw_aff(res); +} + +template +typed::union_set typed::multi_union_pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::multi_union_pw_aff::bind(tuple); + return typed::union_set(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::coalesce() const +{ + auto res = isl::multi_union_pw_aff::coalesce(); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_set typed::multi_union_pw_aff::domain() const +{ + auto res = isl::multi_union_pw_aff::domain(); + return typed::union_set(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::union_set &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::basic_set &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::point &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist(const typed::set &context) const +{ + auto res = isl::multi_union_pw_aff::gist(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::multi_union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::multi_union_pw_aff::intersect_domain(uset); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_domain(const typed::basic_set &uset) const +{ + auto res = isl::multi_union_pw_aff::intersect_domain(uset); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_domain(const typed::point &uset) const +{ + auto res = isl::multi_union_pw_aff::intersect_domain(uset); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_domain(const typed::set &uset) const +{ + auto res = isl::multi_union_pw_aff::intersect_domain(uset); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::multi_union_pw_aff::intersect_params(params); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::multi_union_pw_aff::intersect_params(params); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::multi_union_pw_aff::intersect_params(params); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff_list typed::multi_union_pw_aff::list() const +{ + auto res = isl::multi_union_pw_aff::list(); + return typed::union_pw_aff_list(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::neg() const +{ + auto res = isl::multi_union_pw_aff::neg(); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::multi_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::multi_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::pw_multi_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::pw_multi_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::union_pw_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::pullback(const typed::union_pw_aff &upma) const +{ + auto res = isl::multi_union_pw_aff::pullback(upma); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff> typed::multi_union_pw_aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::multi_union_pw_aff::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::multi_union_pw_aff::range_product(const typed::union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_union_pw_aff::scale(mv); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale(const typed::val &v) const +{ + auto res = isl::multi_union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale(long v) const +{ + auto res = isl::multi_union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_union_pw_aff::scale_down(mv); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale_down(const typed::val &v) const +{ + auto res = isl::multi_union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::scale_down(long v) const +{ + auto res = isl::multi_union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::multi_union_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +typed::space typed::multi_union_pw_aff::space() const +{ + auto res = isl::multi_union_pw_aff::space(); + return typed::space(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::sub(const typed::union_pw_aff &multi2) const +{ + auto res = isl::multi_union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::multi_union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::union_add(const typed::multi_pw_aff &mupa2) const +{ + auto res = isl::multi_union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::multi_union_pw_aff::union_add(const typed::union_pw_aff &mupa2) const +{ + auto res = isl::multi_union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_val::multi_val(const typed::space &space, const typed::val_list &list) + : isl::multi_val(space, list) +{ +} + +template +typed::multi_val::multi_val(const isl::ctx &ctx, const std::string &str) + : isl::multi_val(ctx, str) +{ +} + +template +typed::multi_val typed::multi_val::add(const typed::multi_val &multi2) const +{ + auto res = isl::multi_val::add(multi2); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::add(const typed::val &v) const +{ + auto res = isl::multi_val::add(v); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::add(long v) const +{ + auto res = isl::multi_val::add(v); + return typed::multi_val(res); +} + +template +typed::val typed::multi_val::at(int pos) const +{ + auto res = isl::multi_val::at(pos); + return typed::val(res); +} + +template +typed::val_list typed::multi_val::list() const +{ + auto res = isl::multi_val::list(); + return typed::val_list(res); +} + +template +typed::multi_val typed::multi_val::max(const typed::multi_val &multi2) const +{ + auto res = isl::multi_val::max(multi2); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::min(const typed::multi_val &multi2) const +{ + auto res = isl::multi_val::min(multi2); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::neg() const +{ + auto res = isl::multi_val::neg(); + return typed::multi_val(res); +} + +template +template +typed::multi_val> typed::multi_val::product(const typed::multi_val &multi2) const +{ + auto res = isl::multi_val::product(multi2); + return typed::multi_val>(res); +} + +template +typed::multi_val typed::multi_val::scale(const typed::multi_val &mv) const +{ + auto res = isl::multi_val::scale(mv); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::scale(const typed::val &v) const +{ + auto res = isl::multi_val::scale(v); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::scale(long v) const +{ + auto res = isl::multi_val::scale(v); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::multi_val::scale_down(mv); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::scale_down(const typed::val &v) const +{ + auto res = isl::multi_val::scale_down(v); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::scale_down(long v) const +{ + auto res = isl::multi_val::scale_down(v); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::set_at(int pos, const typed::val &el) const +{ + auto res = isl::multi_val::set_at(pos, el); + return typed::multi_val(res); +} + +template +typed::multi_val typed::multi_val::set_at(int pos, long el) const +{ + auto res = isl::multi_val::set_at(pos, el); + return typed::multi_val(res); +} + +template +template +typed::multi_val typed::multi_val::set_range_tuple(const typed::id &id) const +{ + auto res = isl::multi_val::set_range_tuple(id); + return typed::multi_val(res); +} + +template +template +typed::multi_val typed::multi_val::set_range_tuple(const std::string &id) const +{ + auto res = isl::multi_val::set_range_tuple(id); + return typed::multi_val(res); +} + +template +typed::space typed::multi_val::space() const +{ + auto res = isl::multi_val::space(); + return typed::space(res); +} + +template +typed::multi_val typed::multi_val::sub(const typed::multi_val &multi2) const +{ + auto res = isl::multi_val::sub(multi2); + return typed::multi_val(res); +} + +typed::set<> typed::point<>::coalesce() const +{ + auto res = isl::point::coalesce(); + return typed::set<>(res); +} + +typed::basic_set<> typed::point<>::detect_equalities() const +{ + auto res = isl::point::detect_equalities(); + return typed::basic_set<>(res); +} + +typed::set<> typed::point<>::drop_unused_params() const +{ + auto res = isl::point::drop_unused_params(); + return typed::set<>(res); +} + +bool typed::point<>::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set<>(arg0)); + }; + return isl::point::every_set(lambda_test); +} + +typed::set<> typed::point<>::extract_set(const typed::space<> &space) const +{ + auto res = isl::point::extract_set(space); + return typed::set<>(res); +} + +void typed::point<>::foreach_basic_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set<>(arg0)); + }; + return isl::point::foreach_basic_set(lambda_fn); +} + +void typed::point<>::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point<>(arg0)); + }; + return isl::point::foreach_point(lambda_fn); +} + +void typed::point<>::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set<>(arg0)); + }; + return isl::point::foreach_set(lambda_fn); +} + +typed::basic_set<> typed::point<>::gist(const typed::basic_set<> &context) const +{ + auto res = isl::point::gist(context); + return typed::basic_set<>(res); +} + +typed::set<> typed::point<>::gist(const typed::set<> &context) const +{ + auto res = isl::point::gist(context); + return typed::set<>(res); +} + +typed::union_set<> typed::point<>::gist(const typed::union_set<> &context) const +{ + auto res = isl::point::gist(context); + return typed::union_set<>(res); +} + +typed::pw_aff typed::point<>::indicator_function() const +{ + auto res = isl::point::indicator_function(); + return typed::pw_aff(res); +} + +typed::basic_set<> typed::point<>::intersect(const typed::basic_set<> &bset2) const +{ + auto res = isl::point::intersect(bset2); + return typed::basic_set<>(res); +} + +typed::set<> typed::point<>::intersect(const typed::set<> &set2) const +{ + auto res = isl::point::intersect(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::point<>::intersect(const typed::union_set<> &uset2) const +{ + auto res = isl::point::intersect(uset2); + return typed::union_set<>(res); +} + +typed::pw_aff typed::point<>::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::point::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +typed::pw_aff typed::point<>::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::point::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +typed::set<> typed::point<>::project_out_all_params() const +{ + auto res = isl::point::project_out_all_params(); + return typed::set<>(res); +} + +typed::set<> typed::point<>::project_out_param(const typed::id &id) const +{ + auto res = isl::point::project_out_param(id); + return typed::set<>(res); +} + +typed::set<> typed::point<>::project_out_param(const std::string &id) const +{ + auto res = isl::point::project_out_param(id); + return typed::set<>(res); +} + +typed::set<> typed::point<>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::point::project_out_param(list); + return typed::set<>(res); +} + +typed::pw_aff typed::point<>::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::point::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +typed::pw_aff typed::point<>::pw_aff_on_domain(long v) const +{ + auto res = isl::point::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::point<>::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::point::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff(res); +} + +typed::set_list<> typed::point<>::set_list() const +{ + auto res = isl::point::set_list(); + return typed::set_list<>(res); +} + +typed::space<> typed::point<>::space() const +{ + auto res = isl::point::space(); + return typed::space<>(res); +} + +typed::set<> typed::point<>::subtract(const typed::set<> &set2) const +{ + auto res = isl::point::subtract(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::point<>::subtract(const typed::union_set<> &uset2) const +{ + auto res = isl::point::subtract(uset2); + return typed::union_set<>(res); +} + +typed::set<> typed::point<>::to_set() const +{ + auto res = isl::point::to_set(); + return typed::set<>(res); +} + +typed::union_set<> typed::point<>::to_union_set() const +{ + auto res = isl::point::to_union_set(); + return typed::union_set<>(res); +} + +template +typed::set typed::point<>::unbind_params(const typed::multi_id &tuple) const +{ + auto res = isl::point::unbind_params(tuple); + return typed::set(res); +} + +typed::set<> typed::point<>::unite(const typed::basic_set<> &bset2) const +{ + auto res = isl::point::unite(bset2); + return typed::set<>(res); +} + +typed::set<> typed::point<>::unite(const typed::set<> &set2) const +{ + auto res = isl::point::unite(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::point<>::unite(const typed::union_set<> &uset2) const +{ + auto res = isl::point::unite(uset2); + return typed::union_set<>(res); +} + +template +template +typed::basic_set typed::point::apply(const typed::basic_map &bmap) const +{ + auto res = isl::point::apply(bmap); + return typed::basic_set(res); +} + +template +template +typed::set typed::point::apply(const typed::map &map) const +{ + auto res = isl::point::apply(map); + return typed::set(res); +} + +template +template +typed::union_set typed::point::apply(const typed::union_map &umap) const +{ + auto res = isl::point::apply(umap); + return typed::union_set(res); +} + +template +typed::pw_multi_aff typed::point::as_pw_multi_aff() const +{ + auto res = isl::point::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::point::as_set() const +{ + auto res = isl::point::as_set(); + return typed::set(res); +} + +template +typed::set<> typed::point::bind(const typed::multi_id &tuple) const +{ + auto res = isl::point::bind(tuple); + return typed::set<>(res); +} + +template +typed::set typed::point::coalesce() const +{ + auto res = isl::point::coalesce(); + return typed::set(res); +} + +template +typed::basic_set typed::point::detect_equalities() const +{ + auto res = isl::point::detect_equalities(); + return typed::basic_set(res); +} + +template +typed::set typed::point::drop_unused_params() const +{ + auto res = isl::point::drop_unused_params(); + return typed::set(res); +} + +template +bool typed::point::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set(arg0)); + }; + return isl::point::every_set(lambda_test); +} + +template +typed::set typed::point::extract_set(const typed::space &space) const +{ + auto res = isl::point::extract_set(space); + return typed::set(res); +} + +template +void typed::point::foreach_basic_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set(arg0)); + }; + return isl::point::foreach_basic_set(lambda_fn); +} + +template +void typed::point::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point(arg0)); + }; + return isl::point::foreach_point(lambda_fn); +} + +template +void typed::point::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set(arg0)); + }; + return isl::point::foreach_set(lambda_fn); +} + +template +typed::basic_set typed::point::gist(const typed::basic_set &context) const +{ + auto res = isl::point::gist(context); + return typed::basic_set(res); +} + +template +typed::set typed::point::gist(const typed::set &context) const +{ + auto res = isl::point::gist(context); + return typed::set(res); +} + +template +typed::union_set typed::point::gist(const typed::union_set &context) const +{ + auto res = isl::point::gist(context); + return typed::union_set(res); +} + +template +typed::set typed::point::gist_params(const typed::set<> &context) const +{ + auto res = isl::point::gist_params(context); + return typed::set(res); +} + +template +typed::map typed::point::identity() const +{ + auto res = isl::point::identity(); + return typed::map(res); +} + +template +typed::pw_aff typed::point::indicator_function() const +{ + auto res = isl::point::indicator_function(); + return typed::pw_aff(res); +} + +template +template +typed::map typed::point::insert_domain(const typed::space &domain) const +{ + auto res = isl::point::insert_domain(domain); + return typed::map(res); +} + +template +typed::basic_set typed::point::intersect(const typed::basic_set &bset2) const +{ + auto res = isl::point::intersect(bset2); + return typed::basic_set(res); +} + +template +typed::set typed::point::intersect(const typed::set &set2) const +{ + auto res = isl::point::intersect(set2); + return typed::set(res); +} + +template +typed::union_set typed::point::intersect(const typed::union_set &uset2) const +{ + auto res = isl::point::intersect(uset2); + return typed::union_set(res); +} + +template +typed::basic_set typed::point::intersect_params(const typed::basic_set<> &bset2) const +{ + auto res = isl::point::intersect_params(bset2); + return typed::basic_set(res); +} + +template +typed::set typed::point::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::point::intersect_params(params); + return typed::set(res); +} + +template +typed::fixed_box typed::point::lattice_tile() const +{ + auto res = isl::point::lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::set typed::point::lexmax() const +{ + auto res = isl::point::lexmax(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::point::lexmax_pw_multi_aff() const +{ + auto res = isl::point::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::point::lexmin() const +{ + auto res = isl::point::lexmin(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::point::lexmin_pw_multi_aff() const +{ + auto res = isl::point::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::point::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::point::lower_bound(lower); + return typed::set(res); +} + +template +typed::set typed::point::lower_bound(const typed::multi_val &lower) const +{ + auto res = isl::point::lower_bound(lower); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::point::max_multi_pw_aff() const +{ + auto res = isl::point::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::point::min_multi_pw_aff() const +{ + auto res = isl::point::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::point::multi_val() const +{ + auto res = isl::point::multi_val(); + return typed::multi_val(res); +} + +template +typed::pw_aff typed::point::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::point::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::point::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::point::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +template +typed::basic_set<> typed::point::params() const +{ + auto res = isl::point::params(); + return typed::basic_set<>(res); +} + +template +typed::multi_val typed::point::plain_multi_val_if_fixed() const +{ + auto res = isl::point::plain_multi_val_if_fixed(); + return typed::multi_val(res); +} + +template +template +typed::set typed::point::preimage(const typed::multi_aff &ma) const +{ + auto res = isl::point::preimage(ma); + return typed::set(res); +} + +template +template +typed::set typed::point::preimage(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::point::preimage(mpa); + return typed::set(res); +} + +template +template +typed::set typed::point::preimage(const typed::pw_multi_aff &pma) const +{ + auto res = isl::point::preimage(pma); + return typed::set(res); +} + +template +template +typed::union_set typed::point::preimage(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::point::preimage(upma); + return typed::union_set(res); +} + +template +template +typed::set> typed::point::product(const typed::set &set2) const +{ + auto res = isl::point::product(set2); + return typed::set>(res); +} + +template +typed::set typed::point::project_out_all_params() const +{ + auto res = isl::point::project_out_all_params(); + return typed::set(res); +} + +template +typed::set typed::point::project_out_param(const typed::id &id) const +{ + auto res = isl::point::project_out_param(id); + return typed::set(res); +} + +template +typed::set typed::point::project_out_param(const std::string &id) const +{ + auto res = isl::point::project_out_param(id); + return typed::set(res); +} + +template +typed::set typed::point::project_out_param(const typed::id_list &list) const +{ + auto res = isl::point::project_out_param(list); + return typed::set(res); +} + +template +typed::pw_aff typed::point::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::point::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::point::pw_aff_on_domain(long v) const +{ + auto res = isl::point::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::point::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::point::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff(res); +} + +template +typed::set_list typed::point::set_list() const +{ + auto res = isl::point::set_list(); + return typed::set_list(res); +} + +template +typed::fixed_box typed::point::simple_fixed_box_hull() const +{ + auto res = isl::point::simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::space typed::point::space() const +{ + auto res = isl::point::space(); + return typed::space(res); +} + +template +typed::set typed::point::subtract(const typed::set &set2) const +{ + auto res = isl::point::subtract(set2); + return typed::set(res); +} + +template +typed::union_set typed::point::subtract(const typed::union_set &uset2) const +{ + auto res = isl::point::subtract(uset2); + return typed::union_set(res); +} + +template +typed::set typed::point::to_set() const +{ + auto res = isl::point::to_set(); + return typed::set(res); +} + +template +typed::union_set typed::point::to_union_set() const +{ + auto res = isl::point::to_union_set(); + return typed::union_set(res); +} + +template +typed::map typed::point::translation() const +{ + auto res = isl::point::translation(); + return typed::map(res); +} + +template +template +typed::map typed::point::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::point::unbind_params_insert_domain(domain); + return typed::map(res); +} + +template +typed::set typed::point::unite(const typed::basic_set &bset2) const +{ + auto res = isl::point::unite(bset2); + return typed::set(res); +} + +template +typed::set typed::point::unite(const typed::set &set2) const +{ + auto res = isl::point::unite(set2); + return typed::set(res); +} + +template +typed::union_set typed::point::unite(const typed::union_set &uset2) const +{ + auto res = isl::point::unite(uset2); + return typed::union_set(res); +} + +template +typed::set typed::point::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::point::upper_bound(upper); + return typed::set(res); +} + +template +typed::set typed::point::upper_bound(const typed::multi_val &upper) const +{ + auto res = isl::point::upper_bound(upper); + return typed::set(res); +} + +template +template +typed::basic_set typed::point>::apply(const typed::basic_map, Arg2> &bmap) const +{ + auto res = isl::point::apply(bmap); + return typed::basic_set(res); +} + +template +template +typed::set typed::point>::apply(const typed::map, Arg2> &map) const +{ + auto res = isl::point::apply(map); + return typed::set(res); +} + +template +template +typed::union_set typed::point>::apply(const typed::union_map, Arg2> &umap) const +{ + auto res = isl::point::apply(umap); + return typed::union_set(res); +} + +template +typed::pw_multi_aff> typed::point>::as_pw_multi_aff() const +{ + auto res = isl::point::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::point>::as_set() const +{ + auto res = isl::point::as_set(); + return typed::set>(res); +} + +template +typed::set<> typed::point>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::point::bind(tuple); + return typed::set<>(res); +} + +template +typed::set> typed::point>::coalesce() const +{ + auto res = isl::point::coalesce(); + return typed::set>(res); +} + +template +typed::basic_set> typed::point>::detect_equalities() const +{ + auto res = isl::point::detect_equalities(); + return typed::basic_set>(res); +} + +template +typed::set> typed::point>::drop_unused_params() const +{ + auto res = isl::point::drop_unused_params(); + return typed::set>(res); +} + +template +bool typed::point>::every_set(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set>(arg0)); + }; + return isl::point::every_set(lambda_test); +} + +template +typed::set> typed::point>::extract_set(const typed::space> &space) const +{ + auto res = isl::point::extract_set(space); + return typed::set>(res); +} + +template +void typed::point>::foreach_basic_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set>(arg0)); + }; + return isl::point::foreach_basic_set(lambda_fn); +} + +template +void typed::point>::foreach_point(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point>(arg0)); + }; + return isl::point::foreach_point(lambda_fn); +} + +template +void typed::point>::foreach_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set>(arg0)); + }; + return isl::point::foreach_set(lambda_fn); +} + +template +typed::basic_set> typed::point>::gist(const typed::basic_set> &context) const +{ + auto res = isl::point::gist(context); + return typed::basic_set>(res); +} + +template +typed::set> typed::point>::gist(const typed::set> &context) const +{ + auto res = isl::point::gist(context); + return typed::set>(res); +} + +template +typed::union_set> typed::point>::gist(const typed::union_set> &context) const +{ + auto res = isl::point::gist(context); + return typed::union_set>(res); +} + +template +typed::set> typed::point>::gist_params(const typed::set<> &context) const +{ + auto res = isl::point::gist_params(context); + return typed::set>(res); +} + +template +typed::map, pair> typed::point>::identity() const +{ + auto res = isl::point::identity(); + return typed::map, pair>(res); +} + +template +typed::pw_aff, Anonymous> typed::point>::indicator_function() const +{ + auto res = isl::point::indicator_function(); + return typed::pw_aff, Anonymous>(res); +} + +template +template +typed::map> typed::point>::insert_domain(const typed::space &domain) const +{ + auto res = isl::point::insert_domain(domain); + return typed::map>(res); +} + +template +typed::basic_set> typed::point>::intersect(const typed::basic_set> &bset2) const +{ + auto res = isl::point::intersect(bset2); + return typed::basic_set>(res); +} + +template +typed::set> typed::point>::intersect(const typed::set> &set2) const +{ + auto res = isl::point::intersect(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::point>::intersect(const typed::union_set> &uset2) const +{ + auto res = isl::point::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::basic_set> typed::point>::intersect_params(const typed::basic_set<> &bset2) const +{ + auto res = isl::point::intersect_params(bset2); + return typed::basic_set>(res); +} + +template +typed::set> typed::point>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::point::intersect_params(params); + return typed::set>(res); +} + +template +typed::fixed_box> typed::point>::lattice_tile() const +{ + auto res = isl::point::lattice_tile(); + return typed::fixed_box>(res); +} + +template +typed::set> typed::point>::lexmax() const +{ + auto res = isl::point::lexmax(); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::point>::lexmax_pw_multi_aff() const +{ + auto res = isl::point::lexmax_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::point>::lexmin() const +{ + auto res = isl::point::lexmin(); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::point>::lexmin_pw_multi_aff() const +{ + auto res = isl::point::lexmin_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::point>::lower_bound(const typed::multi_pw_aff> &lower) const +{ + auto res = isl::point::lower_bound(lower); + return typed::set>(res); +} + +template +typed::set> typed::point>::lower_bound(const typed::multi_val> &lower) const +{ + auto res = isl::point::lower_bound(lower); + return typed::set>(res); +} + +template +typed::multi_pw_aff> typed::point>::max_multi_pw_aff() const +{ + auto res = isl::point::max_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::point>::min_multi_pw_aff() const +{ + auto res = isl::point::min_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_val> typed::point>::multi_val() const +{ + auto res = isl::point::multi_val(); + return typed::multi_val>(res); +} + +template +typed::pw_aff, Anonymous> typed::point>::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::point::param_pw_aff_on_domain(id); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::point>::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::point::param_pw_aff_on_domain(id); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::basic_set<> typed::point>::params() const +{ + auto res = isl::point::params(); + return typed::basic_set<>(res); +} + +template +typed::multi_val> typed::point>::plain_multi_val_if_fixed() const +{ + auto res = isl::point::plain_multi_val_if_fixed(); + return typed::multi_val>(res); +} + +template +template +typed::set typed::point>::preimage(const typed::multi_aff> &ma) const +{ + auto res = isl::point::preimage(ma); + return typed::set(res); +} + +template +template +typed::set typed::point>::preimage(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::point::preimage(mpa); + return typed::set(res); +} + +template +template +typed::set typed::point>::preimage(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::point::preimage(pma); + return typed::set(res); +} + +template +template +typed::union_set typed::point>::preimage(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::point::preimage(upma); + return typed::union_set(res); +} + +template +template +typed::set, Arg2>> typed::point>::product(const typed::set &set2) const +{ + auto res = isl::point::product(set2); + return typed::set, Arg2>>(res); +} + +template +typed::set> typed::point>::project_out_all_params() const +{ + auto res = isl::point::project_out_all_params(); + return typed::set>(res); +} + +template +typed::set> typed::point>::project_out_param(const typed::id &id) const +{ + auto res = isl::point::project_out_param(id); + return typed::set>(res); +} + +template +typed::set> typed::point>::project_out_param(const std::string &id) const +{ + auto res = isl::point::project_out_param(id); + return typed::set>(res); +} + +template +typed::set> typed::point>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::point::project_out_param(list); + return typed::set>(res); +} + +template +typed::pw_aff, Anonymous> typed::point>::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::point::pw_aff_on_domain(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::point>::pw_aff_on_domain(long v) const +{ + auto res = isl::point::pw_aff_on_domain(v); + return typed::pw_aff, Anonymous>(res); +} + +template +template +typed::pw_multi_aff, Arg2> typed::point>::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::point::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff, Arg2>(res); +} + +template +typed::set_list> typed::point>::set_list() const +{ + auto res = isl::point::set_list(); + return typed::set_list>(res); +} + +template +typed::fixed_box> typed::point>::simple_fixed_box_hull() const +{ + auto res = isl::point::simple_fixed_box_hull(); + return typed::fixed_box>(res); +} + +template +typed::space> typed::point>::space() const +{ + auto res = isl::point::space(); + return typed::space>(res); +} + +template +typed::set> typed::point>::subtract(const typed::set> &set2) const +{ + auto res = isl::point::subtract(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::point>::subtract(const typed::union_set> &uset2) const +{ + auto res = isl::point::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::set> typed::point>::to_set() const +{ + auto res = isl::point::to_set(); + return typed::set>(res); +} + +template +typed::union_set> typed::point>::to_union_set() const +{ + auto res = isl::point::to_union_set(); + return typed::union_set>(res); +} + +template +typed::map, pair> typed::point>::translation() const +{ + auto res = isl::point::translation(); + return typed::map, pair>(res); +} + +template +template +typed::map> typed::point>::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::point::unbind_params_insert_domain(domain); + return typed::map>(res); +} + +template +typed::set> typed::point>::unite(const typed::basic_set> &bset2) const +{ + auto res = isl::point::unite(bset2); + return typed::set>(res); +} + +template +typed::set> typed::point>::unite(const typed::set> &set2) const +{ + auto res = isl::point::unite(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::point>::unite(const typed::union_set> &uset2) const +{ + auto res = isl::point::unite(uset2); + return typed::union_set>(res); +} + +template +typed::map typed::point>::unwrap() const +{ + auto res = isl::point::unwrap(); + return typed::map(res); +} + +template +typed::set> typed::point>::upper_bound(const typed::multi_pw_aff> &upper) const +{ + auto res = isl::point::upper_bound(upper); + return typed::set>(res); +} + +template +typed::set> typed::point>::upper_bound(const typed::multi_val> &upper) const +{ + auto res = isl::point::upper_bound(upper); + return typed::set>(res); +} + +template +typed::set> typed::point>::wrapped_reverse() const +{ + auto res = isl::point::wrapped_reverse(); + return typed::set>(res); +} + +typed::pw_aff::pw_aff(const typed::aff &aff) + : isl::pw_aff(aff) +{ +} + +typed::pw_aff::pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_aff(ctx, str) +{ +} + +typed::multi_pw_aff typed::pw_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +typed::pw_aff typed::pw_aff::add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::add(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::pw_aff::add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::pw_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::pw_aff typed::pw_aff::add(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::add(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::add_constant(const typed::val &v) const +{ + auto res = isl::pw_aff::add_constant(v); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::add_constant(long v) const +{ + auto res = isl::pw_aff::add_constant(v); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::add_constant(mv); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::aff typed::pw_aff::as_aff() const +{ + auto res = isl::pw_aff::as_aff(); + return typed::aff(res); +} + +typed::multi_aff typed::pw_aff::as_multi_aff() const +{ + auto res = isl::pw_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +typed::multi_union_pw_aff typed::pw_aff::as_multi_union_pw_aff() const +{ + auto res = isl::pw_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::as_pw_multi_aff() const +{ + auto res = isl::pw_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +typed::set typed::pw_aff::as_set() const +{ + auto res = isl::pw_aff::as_set(); + return typed::set(res); +} + +typed::pw_aff typed::pw_aff::at(int pos) const +{ + auto res = isl::pw_aff::at(pos); + return typed::pw_aff(res); +} + +typed::set<> typed::pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::pw_aff::bind(tuple); + return typed::set<>(res); +} + +typed::set<> typed::pw_aff::bind(const typed::id &id) const +{ + auto res = isl::pw_aff::bind(id); + return typed::set<>(res); +} + +typed::set<> typed::pw_aff::bind(const std::string &id) const +{ + auto res = isl::pw_aff::bind(id); + return typed::set<>(res); +} + +typed::pw_aff typed::pw_aff::ceil() const +{ + auto res = isl::pw_aff::ceil(); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::coalesce() const +{ + auto res = isl::pw_aff::coalesce(); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const +{ + auto res = isl::pw_aff::cond(pwaff_true, pwaff_false); + return typed::pw_aff(res); +} + +typed::set<> typed::pw_aff::domain() const +{ + auto res = isl::pw_aff::domain(); + return typed::set<>(res); +} + +typed::pw_aff typed::pw_aff::drop_unused_params() const +{ + auto res = isl::pw_aff::drop_unused_params(); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::pw_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +typed::pw_aff typed::pw_aff::floor() const +{ + auto res = isl::pw_aff::floor(); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::gist(const typed::set<> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff(res); +} + +typed::union_pw_aff typed::pw_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +typed::pw_aff typed::pw_aff::gist(const typed::basic_set<> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::gist(const typed::point<> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff(res); +} + +typed::multi_pw_aff typed::pw_aff::identity() const +{ + auto res = isl::pw_aff::identity(); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::insert_domain(const typed::space &domain) const +{ + auto res = isl::pw_aff::insert_domain(domain); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff(res); +} + +typed::pw_aff_list typed::pw_aff::list() const +{ + auto res = isl::pw_aff::list(); + return typed::pw_aff_list(res); +} + +typed::multi_pw_aff typed::pw_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +typed::pw_aff typed::pw_aff::max(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::max(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::max(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::max(pwaff2); + return typed::pw_aff(res); +} + +typed::multi_val typed::pw_aff::max_multi_val() const +{ + auto res = isl::pw_aff::max_multi_val(); + return typed::multi_val(res); +} + +typed::val typed::pw_aff::max_val() const +{ + auto res = isl::pw_aff::max_val(); + return typed::val(res); +} + +typed::multi_pw_aff typed::pw_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +typed::pw_aff typed::pw_aff::min(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::min(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::min(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::min(pwaff2); + return typed::pw_aff(res); +} + +typed::multi_val typed::pw_aff::min_multi_val() const +{ + auto res = isl::pw_aff::min_multi_val(); + return typed::multi_val(res); +} + +typed::val typed::pw_aff::min_val() const +{ + auto res = isl::pw_aff::min_val(); + return typed::val(res); +} + +typed::pw_aff typed::pw_aff::mod(const typed::val &mod) const +{ + auto res = isl::pw_aff::mod(mod); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::mod(long mod) const +{ + auto res = isl::pw_aff::mod(mod); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::neg() const +{ + auto res = isl::pw_aff::neg(); + return typed::pw_aff(res); +} + +typed::set<> typed::pw_aff::params() const +{ + auto res = isl::pw_aff::params(); + return typed::set<>(res); +} + +template +typed::multi_pw_aff> typed::pw_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::product(pma2); + return typed::pw_multi_aff>(res); +} + +typed::pw_multi_aff_list typed::pw_aff::pw_multi_aff_list() const +{ + auto res = isl::pw_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +typed::pw_aff typed::pw_aff::scale(const typed::val &v) const +{ + auto res = isl::pw_aff::scale(v); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::scale(long v) const +{ + auto res = isl::pw_aff::scale(v); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::scale(mv); + return typed::pw_multi_aff(res); +} + +typed::pw_aff typed::pw_aff::scale_down(const typed::val &f) const +{ + auto res = isl::pw_aff::scale_down(f); + return typed::pw_aff(res); +} + +typed::pw_aff typed::pw_aff::scale_down(long f) const +{ + auto res = isl::pw_aff::scale_down(f); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::scale_down(mv); + return typed::pw_multi_aff(res); +} + +typed::multi_pw_aff typed::pw_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::pw_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::pw_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::pw_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +typed::space typed::pw_aff::space() const +{ + auto res = isl::pw_aff::space(); + return typed::space(res); +} + +typed::multi_pw_aff typed::pw_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +typed::pw_aff typed::pw_aff::sub(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::sub(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::pw_aff::sub(const typed::union_pw_aff &upa2) const +{ + auto res = isl::pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::pw_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::pw_aff typed::pw_aff::sub(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::sub(pwaff2); + return typed::pw_aff(res); +} + +typed::multi_pw_aff typed::pw_aff::to_multi_pw_aff() const +{ + auto res = isl::pw_aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +typed::union_pw_aff typed::pw_aff::to_union_pw_aff() const +{ + auto res = isl::pw_aff::to_union_pw_aff(); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::pw_aff::to_union_pw_multi_aff() const +{ + auto res = isl::pw_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_aff::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::pw_aff::unbind_params_insert_domain(domain); + return typed::multi_pw_aff(res); +} + +typed::multi_pw_aff typed::pw_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +typed::multi_union_pw_aff typed::pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +typed::pw_aff typed::pw_aff::union_add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::union_add(pwaff2); + return typed::pw_aff(res); +} + +typed::pw_multi_aff typed::pw_aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::pw_aff::union_add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::pw_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::pw_aff typed::pw_aff::union_add(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::union_add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_aff::pw_aff(const typed::aff &aff) + : isl::pw_aff(aff) +{ +} + +template +typed::pw_aff::pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff typed::pw_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_aff typed::pw_aff::add(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::add_constant(const typed::val &v) const +{ + auto res = isl::pw_aff::add_constant(v); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::add_constant(long v) const +{ + auto res = isl::pw_aff::add_constant(v); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::add_constant(mv); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::pw_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::aff typed::pw_aff::as_aff() const +{ + auto res = isl::pw_aff::as_aff(); + return typed::aff(res); +} + +template +typed::map typed::pw_aff::as_map() const +{ + auto res = isl::pw_aff::as_map(); + return typed::map(res); +} + +template +typed::multi_aff typed::pw_aff::as_multi_aff() const +{ + auto res = isl::pw_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_aff::as_multi_union_pw_aff() const +{ + auto res = isl::pw_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::as_pw_multi_aff() const +{ + auto res = isl::pw_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_map typed::pw_aff::as_union_map() const +{ + auto res = isl::pw_aff::as_union_map(); + return typed::union_map(res); +} + +template +typed::pw_aff typed::pw_aff::at(int pos) const +{ + auto res = isl::pw_aff::at(pos); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::pw_aff::bind(tuple); + return typed::set(res); +} + +template +typed::set typed::pw_aff::bind(const typed::id &id) const +{ + auto res = isl::pw_aff::bind(id); + return typed::set(res); +} + +template +typed::set typed::pw_aff::bind(const std::string &id) const +{ + auto res = isl::pw_aff::bind(id); + return typed::set(res); +} + +template +typed::pw_aff typed::pw_aff::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::pw_aff::bind_domain(tuple); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::ceil() const +{ + auto res = isl::pw_aff::ceil(); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::coalesce() const +{ + auto res = isl::pw_aff::coalesce(); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::cond(const typed::pw_aff &pwaff_true, const typed::pw_aff &pwaff_false) const +{ + auto res = isl::pw_aff::cond(pwaff_true, pwaff_false); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_aff::domain() const +{ + auto res = isl::pw_aff::domain(); + return typed::set(res); +} + +template +typed::pw_aff typed::pw_aff::drop_unused_params() const +{ + auto res = isl::pw_aff::drop_unused_params(); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::pw_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::pw_aff typed::pw_aff::floor() const +{ + auto res = isl::pw_aff::floor(); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_aff::ge_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::ge_set(pwaff2); + return typed::set(res); +} + +template +typed::set typed::pw_aff::ge_set(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::ge_set(pwaff2); + return typed::set(res); +} + +template +typed::pw_aff typed::pw_aff::gist(const typed::set &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::gist(const typed::union_set &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::gist(const typed::basic_set &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::gist(const typed::point &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::gist_params(const typed::point<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_aff::gt_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::gt_set(pwaff2); + return typed::set(res); +} + +template +typed::set typed::pw_aff::gt_set(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::gt_set(pwaff2); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::pw_aff::identity() const +{ + auto res = isl::pw_aff::identity(); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::intersect_domain(const typed::set &set) const +{ + auto res = isl::pw_aff::intersect_domain(set); + return typed::pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::intersect_domain(const typed::space &space) const +{ + auto res = isl::pw_aff::intersect_domain(space); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_aff::intersect_domain(uset); + return typed::union_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::intersect_domain(const typed::basic_set &set) const +{ + auto res = isl::pw_aff::intersect_domain(set); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::intersect_domain(const typed::point &set) const +{ + auto res = isl::pw_aff::intersect_domain(set); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_aff::le_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::le_set(pwaff2); + return typed::set(res); +} + +template +typed::set typed::pw_aff::le_set(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::le_set(pwaff2); + return typed::set(res); +} + +template +typed::pw_aff_list typed::pw_aff::list() const +{ + auto res = isl::pw_aff::list(); + return typed::pw_aff_list(res); +} + +template +typed::set typed::pw_aff::lt_set(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::lt_set(pwaff2); + return typed::set(res); +} + +template +typed::set typed::pw_aff::lt_set(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::lt_set(pwaff2); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::pw_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::max(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::max(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::max(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::max(pwaff2); + return typed::pw_aff(res); +} + +template +typed::multi_val typed::pw_aff::max_multi_val() const +{ + auto res = isl::pw_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::pw_aff::max_val() const +{ + auto res = isl::pw_aff::max_val(); + return typed::val(res); +} + +template +typed::multi_pw_aff typed::pw_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::min(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::min(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::min(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::min(pwaff2); + return typed::pw_aff(res); +} + +template +typed::multi_val typed::pw_aff::min_multi_val() const +{ + auto res = isl::pw_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::pw_aff::min_val() const +{ + auto res = isl::pw_aff::min_val(); + return typed::val(res); +} + +template +typed::pw_aff typed::pw_aff::mod(const typed::val &mod) const +{ + auto res = isl::pw_aff::mod(mod); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::mod(long mod) const +{ + auto res = isl::pw_aff::mod(mod); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::neg() const +{ + auto res = isl::pw_aff::neg(); + return typed::pw_aff(res); +} + +template +typed::set<> typed::pw_aff::params() const +{ + auto res = isl::pw_aff::params(); + return typed::set<>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::pw_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::pw_aff typed::pw_aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::pw_aff::pullback(ma); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::pw_aff::pullback(ma); + return typed::pw_aff(res); +} + +template +template +typed::pw_aff typed::pw_aff::pullback(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::pw_aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::pullback(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::pw_aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +template +typed::pw_aff typed::pw_aff::pullback(const typed::pw_multi_aff &pma) const +{ + auto res = isl::pw_aff::pullback(pma); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::pullback(const typed::pw_multi_aff &pma) const +{ + auto res = isl::pw_aff::pullback(pma); + return typed::pw_aff(res); +} + +template +template +typed::union_pw_aff typed::pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::pw_multi_aff_list typed::pw_aff::pw_multi_aff_list() const +{ + auto res = isl::pw_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +template +typed::multi_pw_aff> typed::pw_aff::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::pw_aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_aff::range_product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::range_product(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::pw_aff::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_aff typed::pw_aff::scale(const typed::val &v) const +{ + auto res = isl::pw_aff::scale(v); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::scale(long v) const +{ + auto res = isl::pw_aff::scale(v); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::scale(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_aff typed::pw_aff::scale_down(const typed::val &f) const +{ + auto res = isl::pw_aff::scale_down(f); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::scale_down(long f) const +{ + auto res = isl::pw_aff::scale_down(f); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::scale_down(mv); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::pw_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::pw_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::pw_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +typed::space typed::pw_aff::space() const +{ + auto res = isl::pw_aff::space(); + return typed::space(res); +} + +template +typed::multi_pw_aff typed::pw_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::sub(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::sub(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::sub(const typed::union_pw_aff &upa2) const +{ + auto res = isl::pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_aff typed::pw_aff::sub(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::sub(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::subtract_domain(const typed::set &set) const +{ + auto res = isl::pw_aff::subtract_domain(set); + return typed::pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::subtract_domain(const typed::space &space) const +{ + auto res = isl::pw_aff::subtract_domain(space); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_aff::subtract_domain(uset); + return typed::union_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::subtract_domain(const typed::basic_set &set) const +{ + auto res = isl::pw_aff::subtract_domain(set); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::subtract_domain(const typed::point &set) const +{ + auto res = isl::pw_aff::subtract_domain(set); + return typed::pw_aff(res); +} + +template +typed::multi_pw_aff typed::pw_aff::to_multi_pw_aff() const +{ + auto res = isl::pw_aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::to_union_pw_aff() const +{ + auto res = isl::pw_aff::to_union_pw_aff(); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_aff::to_union_pw_multi_aff() const +{ + auto res = isl::pw_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff::union_add(const typed::pw_aff &pwaff2) const +{ + auto res = isl::pw_aff::union_add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff::union_add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_aff typed::pw_aff::union_add(const typed::aff &pwaff2) const +{ + auto res = isl::pw_aff::union_add(pwaff2); + return typed::pw_aff(res); +} + +template +typed::pw_aff, Anonymous>::pw_aff(const typed::aff, Anonymous> &aff) + : isl::pw_aff(aff) +{ +} + +template +typed::pw_aff, Anonymous>::pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::pw_aff::add(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::multi_union_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::pw_aff::add(multi2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::add(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::pw_multi_aff, Anonymous> &pma2) const +{ + auto res = isl::pw_aff::add(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::pw_aff::add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::pw_aff::add(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::add(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::add(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::add_constant(const typed::val &v) const +{ + auto res = isl::pw_aff::add_constant(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::add_constant(long v) const +{ + auto res = isl::pw_aff::add_constant(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::add_constant(mv); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +template +typed::union_pw_multi_aff, Arg1> typed::pw_aff, Anonymous>::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg1>(res); +} + +template +typed::aff, Anonymous> typed::pw_aff, Anonymous>::as_aff() const +{ + auto res = isl::pw_aff::as_aff(); + return typed::aff, Anonymous>(res); +} + +template +typed::map, Anonymous> typed::pw_aff, Anonymous>::as_map() const +{ + auto res = isl::pw_aff::as_map(); + return typed::map, Anonymous>(res); +} + +template +typed::multi_aff, Anonymous> typed::pw_aff, Anonymous>::as_multi_aff() const +{ + auto res = isl::pw_aff::as_multi_aff(); + return typed::multi_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::as_multi_union_pw_aff() const +{ + auto res = isl::pw_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::as_pw_multi_aff() const +{ + auto res = isl::pw_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_map, Anonymous> typed::pw_aff, Anonymous>::as_union_map() const +{ + auto res = isl::pw_aff::as_union_map(); + return typed::union_map, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::at(int pos) const +{ + auto res = isl::pw_aff::at(pos); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::bind(const typed::multi_id &tuple) const +{ + auto res = isl::pw_aff::bind(tuple); + return typed::set>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::bind(const typed::id &id) const +{ + auto res = isl::pw_aff::bind(id); + return typed::set>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::bind(const std::string &id) const +{ + auto res = isl::pw_aff::bind(id); + return typed::set>(res); +} + +template +typed::pw_aff typed::pw_aff, Anonymous>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::pw_aff::bind_domain(tuple); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff, Anonymous>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::pw_aff::bind_domain_wrapped_domain(tuple); + return typed::pw_aff(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::ceil() const +{ + auto res = isl::pw_aff::ceil(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::coalesce() const +{ + auto res = isl::pw_aff::coalesce(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::cond(const typed::pw_aff, Anonymous> &pwaff_true, const typed::pw_aff, Anonymous> &pwaff_false) const +{ + auto res = isl::pw_aff::cond(pwaff_true, pwaff_false); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::domain() const +{ + auto res = isl::pw_aff::domain(); + return typed::set>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::domain_reverse() const +{ + auto res = isl::pw_aff::domain_reverse(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::drop_unused_params() const +{ + auto res = isl::pw_aff::drop_unused_params(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::extract_pw_multi_aff(const typed::space, Anonymous> &space) const +{ + auto res = isl::pw_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::floor() const +{ + auto res = isl::pw_aff::floor(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::ge_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::ge_set(pwaff2); + return typed::set>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::ge_set(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::ge_set(pwaff2); + return typed::set>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist(const typed::set> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist(const typed::union_set> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist(const typed::basic_set> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist(const typed::point> &context) const +{ + auto res = isl::pw_aff::gist(context); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist_params(const typed::set<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::gist_params(const typed::point<> &context) const +{ + auto res = isl::pw_aff::gist_params(context); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::gt_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::gt_set(pwaff2); + return typed::set>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::gt_set(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::gt_set(pwaff2); + return typed::set>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::identity() const +{ + auto res = isl::pw_aff::identity(); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::pw_aff::intersect_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::pw_aff::intersect_domain(space); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::pw_aff::intersect_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_domain(const typed::basic_set> &set) const +{ + auto res = isl::pw_aff::intersect_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_domain(const typed::point> &set) const +{ + auto res = isl::pw_aff::intersect_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_aff::intersect_params(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::le_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::le_set(pwaff2); + return typed::set>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::le_set(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::le_set(pwaff2); + return typed::set>(res); +} + +template +typed::pw_aff_list, Anonymous> typed::pw_aff, Anonymous>::list() const +{ + auto res = isl::pw_aff::list(); + return typed::pw_aff_list, Anonymous>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::lt_set(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::lt_set(pwaff2); + return typed::set>(res); +} + +template +typed::set> typed::pw_aff, Anonymous>::lt_set(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::lt_set(pwaff2); + return typed::set>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::max(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::pw_aff::max(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::max(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::max(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::max(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::max(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::multi_val typed::pw_aff, Anonymous>::max_multi_val() const +{ + auto res = isl::pw_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::pw_aff, Anonymous>::max_val() const +{ + auto res = isl::pw_aff::max_val(); + return typed::val(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::min(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::pw_aff::min(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::min(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::min(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::min(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::min(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::multi_val typed::pw_aff, Anonymous>::min_multi_val() const +{ + auto res = isl::pw_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::val typed::pw_aff, Anonymous>::min_val() const +{ + auto res = isl::pw_aff::min_val(); + return typed::val(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::mod(const typed::val &mod) const +{ + auto res = isl::pw_aff::mod(mod); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::mod(long mod) const +{ + auto res = isl::pw_aff::mod(mod); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::neg() const +{ + auto res = isl::pw_aff::neg(); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set<> typed::pw_aff, Anonymous>::params() const +{ + auto res = isl::pw_aff::params(); + return typed::set<>(res); +} + +template +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +template +typed::union_pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +template +typed::multi_pw_aff, Arg1>, pair> typed::pw_aff, Anonymous>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_aff::product(multi2); + return typed::multi_pw_aff, Arg1>, pair>(res); +} + +template +template +typed::pw_multi_aff, Arg1>, pair> typed::pw_aff, Anonymous>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_aff::product(pma2); + return typed::pw_multi_aff, Arg1>, pair>(res); +} + +template +template +typed::pw_aff typed::pw_aff, Anonymous>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::pw_aff::pullback(ma); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff, Anonymous>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::pw_aff::pullback(ma); + return typed::pw_aff(res); +} + +template +template +typed::pw_aff typed::pw_aff, Anonymous>::pullback(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::pw_aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff, Anonymous>::pullback(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::pw_aff::pullback(mpa); + return typed::pw_aff(res); +} + +template +template +typed::pw_aff typed::pw_aff, Anonymous>::pullback(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::pw_aff::pullback(pma); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::pw_aff, Anonymous>::pullback(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::pw_aff::pullback(pma); + return typed::pw_aff(res); +} + +template +template +typed::union_pw_aff typed::pw_aff, Anonymous>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::pw_aff, Anonymous>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::pw_multi_aff_list, Anonymous> typed::pw_aff, Anonymous>::pw_multi_aff_list() const +{ + auto res = isl::pw_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, Anonymous>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::pw_aff, Anonymous>::range_product(const typed::multi_pw_aff, Arg1> &multi2) const +{ + auto res = isl::pw_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_union_pw_aff, pair> typed::pw_aff, Anonymous>::range_product(const typed::multi_union_pw_aff, Arg1> &multi2) const +{ + auto res = isl::pw_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_aff, Anonymous>::range_product(const typed::pw_multi_aff, Arg1> &pma2) const +{ + auto res = isl::pw_aff::range_product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::pw_aff, Anonymous>::range_product(const typed::union_pw_multi_aff, Arg1> &upma2) const +{ + auto res = isl::pw_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::scale(const typed::val &v) const +{ + auto res = isl::pw_aff::scale(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::scale(long v) const +{ + auto res = isl::pw_aff::scale(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::scale(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::scale(mv); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::scale_down(const typed::val &f) const +{ + auto res = isl::pw_aff::scale_down(f); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::scale_down(long f) const +{ + auto res = isl::pw_aff::scale_down(f); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::pw_aff::scale_down(mv); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::pw_aff::set_at(pos, el); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +template +typed::pw_multi_aff, Arg1> typed::pw_aff, Anonymous>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::pw_aff::set_range_tuple(id); + return typed::pw_multi_aff, Arg1>(res); +} + +template +template +typed::pw_multi_aff, Arg1> typed::pw_aff, Anonymous>::set_range_tuple(const std::string &id) const +{ + auto res = isl::pw_aff::set_range_tuple(id); + return typed::pw_multi_aff, Arg1>(res); +} + +template +typed::space, Anonymous> typed::pw_aff, Anonymous>::space() const +{ + auto res = isl::pw_aff::space(); + return typed::space, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::multi_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::pw_aff::sub(multi2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::multi_union_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::pw_aff::sub(multi2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::sub(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::pw_multi_aff, Anonymous> &pma2) const +{ + auto res = isl::pw_aff::sub(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::pw_aff::sub(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::pw_aff::sub(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::sub(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::sub(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::subtract_domain(const typed::set> &set) const +{ + auto res = isl::pw_aff::subtract_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::pw_aff::subtract_domain(space); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::pw_aff::subtract_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::subtract_domain(const typed::basic_set> &set) const +{ + auto res = isl::pw_aff::subtract_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::subtract_domain(const typed::point> &set) const +{ + auto res = isl::pw_aff::subtract_domain(set); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::to_multi_pw_aff() const +{ + auto res = isl::pw_aff::to_multi_pw_aff(); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::to_union_pw_aff() const +{ + auto res = isl::pw_aff::to_union_pw_aff(); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::to_union_pw_multi_aff() const +{ + auto res = isl::pw_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::multi_pw_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::multi_pw_aff, Anonymous> &mpa2) const +{ + auto res = isl::pw_aff::union_add(mpa2); + return typed::multi_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::multi_union_pw_aff, Anonymous> &mupa2) const +{ + auto res = isl::pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::pw_aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::union_add(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::pw_multi_aff, Anonymous> &pma2) const +{ + auto res = isl::pw_aff::union_add(pma2); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::pw_aff::union_add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::pw_aff::union_add(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_aff, Anonymous>::union_add(const typed::aff, Anonymous> &pwaff2) const +{ + auto res = isl::pw_aff::union_add(pwaff2); + return typed::pw_aff, Anonymous>(res); +} + +typed::pw_aff_list::pw_aff_list(const isl::ctx &ctx, int n) + : isl::pw_aff_list(ctx, n) +{ +} + +typed::pw_aff_list::pw_aff_list(const typed::pw_aff &el) + : isl::pw_aff_list(el) +{ +} + +typed::pw_aff_list::pw_aff_list(const isl::ctx &ctx, const std::string &str) + : isl::pw_aff_list(ctx, str) +{ +} + +typed::pw_aff_list typed::pw_aff_list::add(const typed::pw_aff &el) const +{ + auto res = isl::pw_aff_list::add(el); + return typed::pw_aff_list(res); +} + +typed::pw_aff_list typed::pw_aff_list::add(const typed::aff &el) const +{ + auto res = isl::pw_aff_list::add(el); + return typed::pw_aff_list(res); +} + +typed::pw_aff typed::pw_aff_list::at(int index) const +{ + auto res = isl::pw_aff_list::at(index); + return typed::pw_aff(res); +} + +typed::pw_aff_list typed::pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::pw_aff_list::drop(first, n); + return typed::pw_aff_list(res); +} + +void typed::pw_aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::pw_aff arg0) { + return fn(typed::pw_aff(arg0)); + }; + return isl::pw_aff_list::foreach(lambda_fn); +} + +void typed::pw_aff_list::foreach_scc(const std::function, typed::pw_aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::pw_aff arg0, isl::pw_aff arg1) { + return follows(typed::pw_aff(arg0), typed::pw_aff(arg1)); + }; + auto lambda_fn = [&] (isl::pw_aff_list arg0) { + return fn(typed::pw_aff_list(arg0)); + }; + return isl::pw_aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +typed::pw_aff_list typed::pw_aff_list::set_at(int index, const typed::pw_aff &el) const +{ + auto res = isl::pw_aff_list::set_at(index, el); + return typed::pw_aff_list(res); +} + +template +typed::pw_aff_list::pw_aff_list(const isl::ctx &ctx, int n) + : isl::pw_aff_list(ctx, n) +{ +} + +template +typed::pw_aff_list::pw_aff_list(const typed::pw_aff &el) + : isl::pw_aff_list(el) +{ +} + +template +typed::pw_aff_list::pw_aff_list(const isl::ctx &ctx, const std::string &str) + : isl::pw_aff_list(ctx, str) +{ +} + +template +typed::pw_aff_list typed::pw_aff_list::add(const typed::pw_aff &el) const +{ + auto res = isl::pw_aff_list::add(el); + return typed::pw_aff_list(res); +} + +template +typed::pw_aff_list typed::pw_aff_list::add(const typed::aff &el) const +{ + auto res = isl::pw_aff_list::add(el); + return typed::pw_aff_list(res); +} + +template +typed::pw_aff typed::pw_aff_list::at(int index) const +{ + auto res = isl::pw_aff_list::at(index); + return typed::pw_aff(res); +} + +template +typed::pw_aff_list typed::pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::pw_aff_list::drop(first, n); + return typed::pw_aff_list(res); +} + +template +void typed::pw_aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::pw_aff arg0) { + return fn(typed::pw_aff(arg0)); + }; + return isl::pw_aff_list::foreach(lambda_fn); +} + +template +void typed::pw_aff_list::foreach_scc(const std::function, typed::pw_aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::pw_aff arg0, isl::pw_aff arg1) { + return follows(typed::pw_aff(arg0), typed::pw_aff(arg1)); + }; + auto lambda_fn = [&] (isl::pw_aff_list arg0) { + return fn(typed::pw_aff_list(arg0)); + }; + return isl::pw_aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::pw_aff_list typed::pw_aff_list::set_at(int index, const typed::pw_aff &el) const +{ + auto res = isl::pw_aff_list::set_at(index, el); + return typed::pw_aff_list(res); +} + +template +typed::pw_multi_aff::pw_multi_aff(const typed::multi_aff &ma) + : isl::pw_multi_aff(ma) +{ +} + +template +typed::pw_multi_aff::pw_multi_aff(const typed::pw_aff &pa) + : isl::pw_multi_aff(pa) +{ +} + +template +typed::pw_multi_aff::pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff typed::pw_multi_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::add_constant(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add_constant(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add_constant(long v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::pw_multi_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_aff typed::pw_multi_aff::as_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::as_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::pw_multi_aff::as_set() const +{ + auto res = isl::pw_multi_aff::as_set(); + return typed::set(res); +} + +template +typed::pw_aff typed::pw_multi_aff::at(int pos) const +{ + auto res = isl::pw_multi_aff::at(pos); + return typed::pw_aff(res); +} + +template +typed::set<> typed::pw_multi_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind(tuple); + return typed::set<>(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::coalesce() const +{ + auto res = isl::pw_multi_aff::coalesce(); + return typed::pw_multi_aff(res); +} + +template +typed::set<> typed::pw_multi_aff::domain() const +{ + auto res = isl::pw_multi_aff::domain(); + return typed::set<>(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::drop_unused_params() const +{ + auto res = isl::pw_multi_aff::drop_unused_params(); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::identity() const +{ + auto res = isl::pw_multi_aff::identity(); + return typed::multi_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::insert_domain(const typed::space &domain) const +{ + auto res = isl::pw_multi_aff::insert_domain(domain); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_aff_list typed::pw_multi_aff::list() const +{ + auto res = isl::pw_multi_aff::list(); + return typed::pw_aff_list(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::pw_multi_aff::max_multi_val() const +{ + auto res = isl::pw_multi_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::pw_multi_aff::min_multi_val() const +{ + auto res = isl::pw_multi_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::neg() const +{ + auto res = isl::pw_multi_aff::neg(); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff> typed::pw_multi_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff::product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff::product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff::pw_multi_aff_list() const +{ + auto res = isl::pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::scale(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale(long v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::scale_down(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale_down(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale_down(long v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::pw_multi_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::pw_multi_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +typed::space typed::pw_multi_aff::space() const +{ + auto res = isl::pw_multi_aff::space(); + return typed::space(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::sub(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::sub(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::to_multi_pw_aff() const +{ + auto res = isl::pw_multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::to_union_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::multi_pw_aff typed::pw_multi_aff::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::pw_multi_aff::unbind_params_insert_domain(domain); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_multi_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::pw_multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::union_add(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::union_add(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff::pw_multi_aff(const typed::multi_aff &ma) + : isl::pw_multi_aff(ma) +{ +} + +template +typed::pw_multi_aff::pw_multi_aff(const typed::pw_aff &pa) + : isl::pw_multi_aff(pa) +{ +} + +template +typed::pw_multi_aff::pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff typed::pw_multi_aff::add(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::add_constant(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add_constant(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::add_constant(long v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::pw_multi_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::map typed::pw_multi_aff::as_map() const +{ + auto res = isl::pw_multi_aff::as_map(); + return typed::map(res); +} + +template +typed::multi_aff typed::pw_multi_aff::as_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::as_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_map typed::pw_multi_aff::as_union_map() const +{ + auto res = isl::pw_multi_aff::as_union_map(); + return typed::union_map(res); +} + +template +typed::pw_aff typed::pw_multi_aff::at(int pos) const +{ + auto res = isl::pw_multi_aff::at(pos); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_multi_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind(tuple); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind_domain(tuple); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::coalesce() const +{ + auto res = isl::pw_multi_aff::coalesce(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::pw_multi_aff::domain() const +{ + auto res = isl::pw_multi_aff::domain(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::drop_unused_params() const +{ + auto res = isl::pw_multi_aff::drop_unused_params(); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist(const typed::set &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::gist(const typed::union_set &context) const +{ + auto res = isl::pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist(const typed::basic_set &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist(const typed::point &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::gist_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::identity() const +{ + auto res = isl::pw_multi_aff::identity(); + return typed::multi_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_domain(const typed::set &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::intersect_domain(const typed::space &space) const +{ + auto res = isl::pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_domain(const typed::basic_set &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_domain(const typed::point &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_aff_list typed::pw_multi_aff::list() const +{ + auto res = isl::pw_multi_aff::list(); + return typed::pw_aff_list(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::max(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::max(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::pw_multi_aff::max_multi_val() const +{ + auto res = isl::pw_multi_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::min(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::min(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_val typed::pw_multi_aff::min_multi_val() const +{ + auto res = isl::pw_multi_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::neg() const +{ + auto res = isl::pw_multi_aff::neg(); + return typed::multi_pw_aff(res); +} + +template +template +typed::multi_pw_aff, pair> typed::pw_multi_aff::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff::product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff::product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::multi_pw_aff typed::pw_multi_aff::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::pw_multi_aff::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff::pw_multi_aff_list() const +{ + auto res = isl::pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +template +typed::multi_pw_aff> typed::pw_multi_aff::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::pw_multi_aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff::range_product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::pw_multi_aff::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff::range_product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff::range_product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::scale(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale(long v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::scale_down(mv); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale_down(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::scale_down(long v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::pw_multi_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::pw_multi_aff::set_range_tuple(id); + return typed::pw_multi_aff(res); +} + +template +typed::space typed::pw_multi_aff::space() const +{ + auto res = isl::pw_multi_aff::space(); + return typed::space(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::sub(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::sub(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::sub(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::sub(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::subtract_domain(const typed::set &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::subtract_domain(const typed::space &space) const +{ + auto res = isl::pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::subtract_domain(const typed::basic_set &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::subtract_domain(const typed::point &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::to_multi_pw_aff() const +{ + auto res = isl::pw_multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::to_union_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff::union_add(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_multi_aff::union_add(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::pw_multi_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::pw_multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::union_add(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::union_add(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff::union_add(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff, Range>::pw_multi_aff(const typed::multi_aff, Range> &ma) + : isl::pw_multi_aff(ma) +{ +} + +template +typed::pw_multi_aff, Range>::pw_multi_aff(const typed::pw_aff, Range> &pa) + : isl::pw_multi_aff(pa) +{ +} + +template +typed::pw_multi_aff, Range>::pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::add(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::pw_multi_aff, Range>::add(const typed::multi_union_pw_aff, Range> &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::add(const typed::pw_multi_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::add(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::add(const typed::multi_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::add(const typed::pw_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::add_constant(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::add_constant(mv); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::add_constant(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::add_constant(long v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::pw_multi_aff, Range>::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +typed::map, Range> typed::pw_multi_aff, Range>::as_map() const +{ + auto res = isl::pw_multi_aff::as_map(); + return typed::map, Range>(res); +} + +template +typed::multi_aff, Range> typed::pw_multi_aff, Range>::as_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_aff(); + return typed::multi_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::pw_multi_aff, Range>::as_multi_union_pw_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::as_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_map, Range> typed::pw_multi_aff, Range>::as_union_map() const +{ + auto res = isl::pw_multi_aff::as_union_map(); + return typed::union_map, Range>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_multi_aff, Range>::at(int pos) const +{ + auto res = isl::pw_multi_aff::at(pos); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_multi_aff, Range>::bind(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind(tuple); + return typed::set>(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff, Range>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::pw_multi_aff::bind_domain(tuple); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff, Range>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind_domain_wrapped_domain(tuple); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::coalesce() const +{ + auto res = isl::pw_multi_aff::coalesce(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::set> typed::pw_multi_aff, Range>::domain() const +{ + auto res = isl::pw_multi_aff::domain(); + return typed::set>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::domain_reverse() const +{ + auto res = isl::pw_multi_aff::domain_reverse(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::drop_unused_params() const +{ + auto res = isl::pw_multi_aff::drop_unused_params(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::extract_pw_multi_aff(const typed::space, Range> &space) const +{ + auto res = isl::pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist(const typed::set> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist(const typed::union_set> &context) const +{ + auto res = isl::pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist(const typed::basic_set> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist(const typed::point> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::gist_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::identity() const +{ + auto res = isl::pw_multi_aff::identity(); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_domain(const typed::basic_set> &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_domain(const typed::point> &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_aff_list, Anonymous> typed::pw_multi_aff, Range>::list() const +{ + auto res = isl::pw_multi_aff::list(); + return typed::pw_aff_list, Anonymous>(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::max(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::pw_multi_aff::max(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_val typed::pw_multi_aff, Range>::max_multi_val() const +{ + auto res = isl::pw_multi_aff::max_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::min(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::pw_multi_aff::min(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_val typed::pw_multi_aff, Range>::min_multi_val() const +{ + auto res = isl::pw_multi_aff::min_multi_val(); + return typed::multi_val(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::neg() const +{ + auto res = isl::pw_multi_aff::neg(); + return typed::multi_pw_aff, Range>(res); +} + +template +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +template +typed::multi_pw_aff, Arg2>, pair> typed::pw_multi_aff, Range>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::product(multi2); + return typed::multi_pw_aff, Arg2>, pair>(res); +} + +template +template +typed::pw_multi_aff, Arg2>, pair> typed::pw_multi_aff, Range>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, Arg2>, pair>(res); +} + +template +template +typed::pw_multi_aff, Arg2>, pair> typed::pw_multi_aff, Range>::product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, Arg2>, pair>(res); +} + +template +template +typed::pw_multi_aff, Arg2>, pair> typed::pw_multi_aff, Range>::product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, Arg2>, pair>(res); +} + +template +template +typed::multi_pw_aff typed::pw_multi_aff, Range>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::pw_multi_aff, Range>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff, Range>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff, Range>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff(res); +} + +template +template +typed::pw_multi_aff typed::pw_multi_aff, Range>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff, Range>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::pw_multi_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::pw_multi_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list, Range> typed::pw_multi_aff, Range>::pw_multi_aff_list() const +{ + auto res = isl::pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, Range>(res); +} + +template +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, Range>::range_product(const typed::multi_pw_aff, Arg2> &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::multi_union_pw_aff, pair> typed::pw_multi_aff, Range>::range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, Range>::range_product(const typed::pw_multi_aff, Arg2> &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, Range>::range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, Range>::range_product(const typed::multi_aff, Arg2> &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, Range>::range_product(const typed::pw_aff, Anonymous> &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::scale(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::scale(mv); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::scale(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::scale(long v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::pw_multi_aff::scale_down(mv); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::scale_down(const typed::val &v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::scale_down(long v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::pw_multi_aff, Range>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff, Range>(res); +} + +template +template +typed::pw_multi_aff, Arg1> typed::pw_multi_aff, Range>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::pw_multi_aff::set_range_tuple(id); + return typed::pw_multi_aff, Arg1>(res); +} + +template +template +typed::pw_multi_aff, Arg1> typed::pw_multi_aff, Range>::set_range_tuple(const std::string &id) const +{ + auto res = isl::pw_multi_aff::set_range_tuple(id); + return typed::pw_multi_aff, Arg1>(res); +} + +template +typed::space, Range> typed::pw_multi_aff, Range>::space() const +{ + auto res = isl::pw_multi_aff::space(); + return typed::space, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::sub(const typed::multi_pw_aff, Range> &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::pw_multi_aff, Range>::sub(const typed::multi_union_pw_aff, Range> &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::sub(const typed::pw_multi_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::sub(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::sub(const typed::multi_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::sub(const typed::pw_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::subtract_domain(const typed::set> &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::subtract_domain(const typed::basic_set> &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::subtract_domain(const typed::point> &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::to_multi_pw_aff() const +{ + auto res = isl::pw_multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::to_union_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::multi_pw_aff, Range> typed::pw_multi_aff, Range>::union_add(const typed::multi_pw_aff, Range> &mpa2) const +{ + auto res = isl::pw_multi_aff::union_add(mpa2); + return typed::multi_pw_aff, Range>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::pw_multi_aff, Range>::union_add(const typed::multi_union_pw_aff, Range> &mupa2) const +{ + auto res = isl::pw_multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::union_add(const typed::pw_multi_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::pw_multi_aff, Range>::union_add(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::union_add(const typed::multi_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, Range>::union_add(const typed::pw_aff, Range> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff>::pw_multi_aff(const typed::multi_aff> &ma) + : isl::pw_multi_aff(ma) +{ +} + +template +typed::pw_multi_aff>::pw_multi_aff(const typed::pw_aff> &pa) + : isl::pw_multi_aff(pa) +{ +} + +template +typed::pw_multi_aff>::pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::add(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::pw_multi_aff>::add(const typed::multi_union_pw_aff> &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::add(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::add(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::add(const typed::multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::add(const typed::pw_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::add_constant(const typed::multi_val> &mv) const +{ + auto res = isl::pw_multi_aff::add_constant(mv); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::add_constant(const typed::val> &v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::add_constant(long v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff typed::pw_multi_aff>::apply(const typed::union_pw_multi_aff, Arg3> &upma2) const +{ + auto res = isl::pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::map> typed::pw_multi_aff>::as_map() const +{ + auto res = isl::pw_multi_aff::as_map(); + return typed::map>(res); +} + +template +typed::multi_aff> typed::pw_multi_aff>::as_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_aff(); + return typed::multi_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::pw_multi_aff>::as_multi_union_pw_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::as_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::union_map> typed::pw_multi_aff>::as_union_map() const +{ + auto res = isl::pw_multi_aff::as_union_map(); + return typed::union_map>(res); +} + +template +typed::pw_aff typed::pw_multi_aff>::at(int pos) const +{ + auto res = isl::pw_multi_aff::at(pos); + return typed::pw_aff(res); +} + +template +typed::set typed::pw_multi_aff>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::pw_multi_aff::bind(tuple); + return typed::set(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::bind_domain(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind_domain(tuple); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::coalesce() const +{ + auto res = isl::pw_multi_aff::coalesce(); + return typed::pw_multi_aff>(res); +} + +template +typed::set typed::pw_multi_aff>::domain() const +{ + auto res = isl::pw_multi_aff::domain(); + return typed::set(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::drop_unused_params() const +{ + auto res = isl::pw_multi_aff::drop_unused_params(); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::extract_pw_multi_aff(const typed::space> &space) const +{ + auto res = isl::pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::gist(const typed::set &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::gist(const typed::union_set &context) const +{ + auto res = isl::pw_multi_aff::gist(context); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::gist(const typed::basic_set &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::gist(const typed::point &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::gist_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::gist_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::identity() const +{ + auto res = isl::pw_multi_aff::identity(); + return typed::multi_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::intersect_domain(const typed::set &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::intersect_domain(const typed::space &space) const +{ + auto res = isl::pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::intersect_domain(const typed::basic_set &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::intersect_domain(const typed::point &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_aff_list typed::pw_multi_aff>::list() const +{ + auto res = isl::pw_multi_aff::list(); + return typed::pw_aff_list(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::max(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::pw_multi_aff::max(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_val> typed::pw_multi_aff>::max_multi_val() const +{ + auto res = isl::pw_multi_aff::max_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::min(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::pw_multi_aff::min(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_val> typed::pw_multi_aff>::min_multi_val() const +{ + auto res = isl::pw_multi_aff::min_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::neg() const +{ + auto res = isl::pw_multi_aff::neg(); + return typed::multi_pw_aff>(res); +} + +template +template +typed::multi_pw_aff, pair, Arg3>> typed::pw_multi_aff>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::product(multi2); + return typed::multi_pw_aff, pair, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, pair, Arg3>> typed::pw_multi_aff>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, pair, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, pair, Arg3>> typed::pw_multi_aff>::product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, pair, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, pair, Anonymous>> typed::pw_multi_aff>::product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, pair, Anonymous>>(res); +} + +template +template +typed::multi_pw_aff> typed::pw_multi_aff>::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::pullback(const typed::multi_pw_aff &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff>::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::pullback(const typed::multi_aff &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff>::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::pullback(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff_list> typed::pw_multi_aff>::pw_multi_aff_list() const +{ + auto res = isl::pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list>(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff>::range_factor_domain() const +{ + auto res = isl::pw_multi_aff::range_factor_domain(); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff>::range_factor_range() const +{ + auto res = isl::pw_multi_aff::range_factor_range(); + return typed::pw_multi_aff(res); +} + +template +template +typed::multi_pw_aff, Arg3>> typed::pw_multi_aff>::range_product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_pw_aff, Arg3>>(res); +} + +template +template +typed::multi_union_pw_aff, Arg3>> typed::pw_multi_aff>::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_union_pw_aff, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, Arg3>> typed::pw_multi_aff>::range_product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, Arg3>>(res); +} + +template +template +typed::union_pw_multi_aff, Arg3>> typed::pw_multi_aff>::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, Arg3>>(res); +} + +template +template +typed::pw_multi_aff, Arg3>> typed::pw_multi_aff>::range_product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, Arg3>>(res); +} + +template +typed::pw_multi_aff, Anonymous>> typed::pw_multi_aff>::range_product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, Anonymous>>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::scale(const typed::multi_val> &mv) const +{ + auto res = isl::pw_multi_aff::scale(mv); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::scale(const typed::val> &v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::scale(long v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::scale_down(const typed::multi_val> &mv) const +{ + auto res = isl::pw_multi_aff::scale_down(mv); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::scale_down(const typed::val> &v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::scale_down(long v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::set_at(int pos, const typed::pw_aff &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::pw_multi_aff>::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff>(res); +} + +template +typed::space> typed::pw_multi_aff>::space() const +{ + auto res = isl::pw_multi_aff::space(); + return typed::space>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::sub(const typed::multi_pw_aff> &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::pw_multi_aff>::sub(const typed::multi_union_pw_aff> &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::sub(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::sub(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::sub(const typed::multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::sub(const typed::pw_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::subtract_domain(const typed::set &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::subtract_domain(const typed::space &space) const +{ + auto res = isl::pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::subtract_domain(const typed::basic_set &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::subtract_domain(const typed::point &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::to_multi_pw_aff() const +{ + auto res = isl::pw_multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::to_union_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff>::union_add(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::pw_multi_aff::union_add(mpa2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::pw_multi_aff>::union_add(const typed::multi_union_pw_aff> &mupa2) const +{ + auto res = isl::pw_multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::union_add(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff>::union_add(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::union_add(const typed::multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff>::union_add(const typed::pw_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff, pair>::pw_multi_aff(const typed::multi_aff, pair> &ma) + : isl::pw_multi_aff(ma) +{ +} + +template +typed::pw_multi_aff, pair>::pw_multi_aff(const typed::pw_aff, pair> &pa) + : isl::pw_multi_aff(pa) +{ +} + +template +typed::pw_multi_aff, pair>::pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff(ctx, str) +{ +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::add(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::pw_multi_aff, pair>::add(const typed::multi_union_pw_aff, pair> &multi2) const +{ + auto res = isl::pw_multi_aff::add(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::add(const typed::pw_multi_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::add(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::add(const typed::multi_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::add(const typed::pw_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::add_constant(const typed::multi_val> &mv) const +{ + auto res = isl::pw_multi_aff::add_constant(mv); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::add_constant(const typed::val> &v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::add_constant(long v) const +{ + auto res = isl::pw_multi_aff::add_constant(v); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::pw_multi_aff, pair>::apply(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +typed::map, pair> typed::pw_multi_aff, pair>::as_map() const +{ + auto res = isl::pw_multi_aff::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_aff, pair> typed::pw_multi_aff, pair>::as_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_aff(); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::pw_multi_aff, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::as_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_map, pair> typed::pw_multi_aff, pair>::as_union_map() const +{ + auto res = isl::pw_multi_aff::as_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::pw_aff, Anonymous> typed::pw_multi_aff, pair>::at(int pos) const +{ + auto res = isl::pw_multi_aff::at(pos); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set> typed::pw_multi_aff, pair>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::pw_multi_aff::bind(tuple); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff, pair>::bind_domain(const typed::multi_id> &tuple) const +{ + auto res = isl::pw_multi_aff::bind_domain(tuple); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff, pair>::bind_domain_wrapped_domain(const typed::multi_id &tuple) const +{ + auto res = isl::pw_multi_aff::bind_domain_wrapped_domain(tuple); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::coalesce() const +{ + auto res = isl::pw_multi_aff::coalesce(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::set> typed::pw_multi_aff, pair>::domain() const +{ + auto res = isl::pw_multi_aff::domain(); + return typed::set>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::domain_reverse() const +{ + auto res = isl::pw_multi_aff::domain_reverse(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::drop_unused_params() const +{ + auto res = isl::pw_multi_aff::drop_unused_params(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::extract_pw_multi_aff(const typed::space, pair> &space) const +{ + auto res = isl::pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist(const typed::set> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist(const typed::union_set> &context) const +{ + auto res = isl::pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist(const typed::basic_set> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist(const typed::point> &set) const +{ + auto res = isl::pw_multi_aff::gist(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::gist_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::gist_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::identity() const +{ + auto res = isl::pw_multi_aff::identity(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_domain(const typed::set> &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_domain(const typed::basic_set> &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_domain(const typed::point> &set) const +{ + auto res = isl::pw_multi_aff::intersect_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::pw_multi_aff::intersect_params(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_aff_list, Anonymous> typed::pw_multi_aff, pair>::list() const +{ + auto res = isl::pw_multi_aff::list(); + return typed::pw_aff_list, Anonymous>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::max(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::pw_multi_aff::max(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_val> typed::pw_multi_aff, pair>::max_multi_val() const +{ + auto res = isl::pw_multi_aff::max_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::min(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::pw_multi_aff::min(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_val> typed::pw_multi_aff, pair>::min_multi_val() const +{ + auto res = isl::pw_multi_aff::min_multi_val(); + return typed::multi_val>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::neg() const +{ + auto res = isl::pw_multi_aff::neg(); + return typed::multi_pw_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::preimage_domain_wrapped_domain(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +template +typed::multi_pw_aff, Domain2>, pair, Arg2>> typed::pw_multi_aff, pair>::product(const typed::multi_pw_aff &multi2) const +{ + auto res = isl::pw_multi_aff::product(multi2); + return typed::multi_pw_aff, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, Domain2>, pair, Arg2>> typed::pw_multi_aff, pair>::product(const typed::pw_multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, Domain2>, pair, Arg2>> typed::pw_multi_aff, pair>::product(const typed::multi_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, Domain2>, pair, Anonymous>> typed::pw_multi_aff, pair>::product(const typed::pw_aff &pma2) const +{ + auto res = isl::pw_multi_aff::product(pma2); + return typed::pw_multi_aff, Domain2>, pair, Anonymous>>(res); +} + +template +template +typed::multi_pw_aff> typed::pw_multi_aff, pair>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::pw_multi_aff, pair>::pullback(const typed::multi_pw_aff> &mpa2) const +{ + auto res = isl::pw_multi_aff::pullback(mpa2); + return typed::multi_pw_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff, pair>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff, pair>::pullback(const typed::multi_aff> &ma) const +{ + auto res = isl::pw_multi_aff::pullback(ma); + return typed::pw_multi_aff>(res); +} + +template +template +typed::pw_multi_aff> typed::pw_multi_aff, pair>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::pw_multi_aff, pair>::pullback(const typed::pw_multi_aff> &pma2) const +{ + auto res = isl::pw_multi_aff::pullback(pma2); + return typed::pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::pw_multi_aff, pair>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::pw_multi_aff, pair>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff_list, pair> typed::pw_multi_aff, pair>::pw_multi_aff_list() const +{ + auto res = isl::pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, pair>(res); +} + +template +typed::pw_multi_aff, Range> typed::pw_multi_aff, pair>::range_factor_domain() const +{ + auto res = isl::pw_multi_aff::range_factor_domain(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range2> typed::pw_multi_aff, pair>::range_factor_range() const +{ + auto res = isl::pw_multi_aff::range_factor_range(); + return typed::pw_multi_aff, Range2>(res); +} + +template +template +typed::multi_pw_aff, pair, Arg2>> typed::pw_multi_aff, pair>::range_product(const typed::multi_pw_aff, Arg2> &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_pw_aff, pair, Arg2>>(res); +} + +template +template +typed::multi_union_pw_aff, pair, Arg2>> typed::pw_multi_aff, pair>::range_product(const typed::multi_union_pw_aff, Arg2> &multi2) const +{ + auto res = isl::pw_multi_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, pair, Arg2>> typed::pw_multi_aff, pair>::range_product(const typed::pw_multi_aff, Arg2> &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair, Arg2>>(res); +} + +template +template +typed::union_pw_multi_aff, pair, Arg2>> typed::pw_multi_aff, pair>::range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair, Arg2>>(res); +} + +template +template +typed::pw_multi_aff, pair, Arg2>> typed::pw_multi_aff, pair>::range_product(const typed::multi_aff, Arg2> &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair, Arg2>>(res); +} + +template +typed::pw_multi_aff, pair, Anonymous>> typed::pw_multi_aff, pair>::range_product(const typed::pw_aff, Anonymous> &pma2) const +{ + auto res = isl::pw_multi_aff::range_product(pma2); + return typed::pw_multi_aff, pair, Anonymous>>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::scale(const typed::multi_val> &mv) const +{ + auto res = isl::pw_multi_aff::scale(mv); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::scale(const typed::val> &v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::scale(long v) const +{ + auto res = isl::pw_multi_aff::scale(v); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::scale_down(const typed::multi_val> &mv) const +{ + auto res = isl::pw_multi_aff::scale_down(mv); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::scale_down(const typed::val> &v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::scale_down(long v) const +{ + auto res = isl::pw_multi_aff::scale_down(v); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::set_at(int pos, const typed::pw_aff, Anonymous> &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::pw_multi_aff, pair>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::pw_multi_aff::set_at(pos, el); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::space, pair> typed::pw_multi_aff, pair>::space() const +{ + auto res = isl::pw_multi_aff::space(); + return typed::space, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::sub(const typed::multi_pw_aff, pair> &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::pw_multi_aff, pair>::sub(const typed::multi_union_pw_aff, pair> &multi2) const +{ + auto res = isl::pw_multi_aff::sub(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::sub(const typed::pw_multi_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::sub(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::sub(const typed::multi_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::sub(const typed::pw_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::sub(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::subtract_domain(const typed::set> &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::subtract_domain(const typed::basic_set> &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::subtract_domain(const typed::point> &set) const +{ + auto res = isl::pw_multi_aff::subtract_domain(set); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::to_multi_pw_aff() const +{ + auto res = isl::pw_multi_aff::to_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::to_union_pw_multi_aff() const +{ + auto res = isl::pw_multi_aff::to_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::pw_multi_aff, pair>::union_add(const typed::multi_pw_aff, pair> &mpa2) const +{ + auto res = isl::pw_multi_aff::union_add(mpa2); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::pw_multi_aff, pair>::union_add(const typed::multi_union_pw_aff, pair> &mupa2) const +{ + auto res = isl::pw_multi_aff::union_add(mupa2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::union_add(const typed::pw_multi_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::pw_multi_aff, pair>::union_add(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::union_add(const typed::multi_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::pw_multi_aff, pair>::union_add(const typed::pw_aff, pair> &pma2) const +{ + auto res = isl::pw_multi_aff::union_add(pma2); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff_list::pw_multi_aff_list(const isl::ctx &ctx, int n) + : isl::pw_multi_aff_list(ctx, n) +{ +} + +template +typed::pw_multi_aff_list::pw_multi_aff_list(const typed::pw_multi_aff &el) + : isl::pw_multi_aff_list(el) +{ +} + +template +typed::pw_multi_aff_list::pw_multi_aff_list(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff_list(ctx, str) +{ +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::add(const typed::pw_multi_aff &el) const +{ + auto res = isl::pw_multi_aff_list::add(el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::add(const typed::multi_aff &el) const +{ + auto res = isl::pw_multi_aff_list::add(el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::add(const typed::pw_aff &el) const +{ + auto res = isl::pw_multi_aff_list::add(el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff_list::at(int index) const +{ + auto res = isl::pw_multi_aff_list::at(index); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::pw_multi_aff_list::drop(first, n); + return typed::pw_multi_aff_list(res); +} + +template +void typed::pw_multi_aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::pw_multi_aff arg0) { + return fn(typed::pw_multi_aff(arg0)); + }; + return isl::pw_multi_aff_list::foreach(lambda_fn); +} + +template +void typed::pw_multi_aff_list::foreach_scc(const std::function, typed::pw_multi_aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::pw_multi_aff arg0, isl::pw_multi_aff arg1) { + return follows(typed::pw_multi_aff(arg0), typed::pw_multi_aff(arg1)); + }; + auto lambda_fn = [&] (isl::pw_multi_aff_list arg0) { + return fn(typed::pw_multi_aff_list(arg0)); + }; + return isl::pw_multi_aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::set_at(int index, const typed::pw_multi_aff &el) const +{ + auto res = isl::pw_multi_aff_list::set_at(index, el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff_list::pw_multi_aff_list(const isl::ctx &ctx, int n) + : isl::pw_multi_aff_list(ctx, n) +{ +} + +template +typed::pw_multi_aff_list::pw_multi_aff_list(const typed::pw_multi_aff &el) + : isl::pw_multi_aff_list(el) +{ +} + +template +typed::pw_multi_aff_list::pw_multi_aff_list(const isl::ctx &ctx, const std::string &str) + : isl::pw_multi_aff_list(ctx, str) +{ +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::add(const typed::pw_multi_aff &el) const +{ + auto res = isl::pw_multi_aff_list::add(el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::add(const typed::multi_aff &el) const +{ + auto res = isl::pw_multi_aff_list::add(el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::add(const typed::pw_aff &el) const +{ + auto res = isl::pw_multi_aff_list::add(el); + return typed::pw_multi_aff_list(res); +} + +template +typed::pw_multi_aff typed::pw_multi_aff_list::at(int index) const +{ + auto res = isl::pw_multi_aff_list::at(index); + return typed::pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::pw_multi_aff_list::drop(first, n); + return typed::pw_multi_aff_list(res); +} + +template +void typed::pw_multi_aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::pw_multi_aff arg0) { + return fn(typed::pw_multi_aff(arg0)); + }; + return isl::pw_multi_aff_list::foreach(lambda_fn); +} + +template +void typed::pw_multi_aff_list::foreach_scc(const std::function, typed::pw_multi_aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::pw_multi_aff arg0, isl::pw_multi_aff arg1) { + return follows(typed::pw_multi_aff(arg0), typed::pw_multi_aff(arg1)); + }; + auto lambda_fn = [&] (isl::pw_multi_aff_list arg0) { + return fn(typed::pw_multi_aff_list(arg0)); + }; + return isl::pw_multi_aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::pw_multi_aff_list typed::pw_multi_aff_list::set_at(int index, const typed::pw_multi_aff &el) const +{ + auto res = isl::pw_multi_aff_list::set_at(index, el); + return typed::pw_multi_aff_list(res); +} + +typed::set<>::set(const typed::basic_set<> &bset) + : isl::set(bset) +{ +} + +typed::set<>::set(const typed::point<> &pnt) + : isl::set(pnt) +{ +} + +typed::set<>::set(const isl::ctx &ctx, const std::string &str) + : isl::set(ctx, str) +{ +} + +typed::set<> typed::set<>::coalesce() const +{ + auto res = isl::set::coalesce(); + return typed::set<>(res); +} + +typed::set<> typed::set<>::detect_equalities() const +{ + auto res = isl::set::detect_equalities(); + return typed::set<>(res); +} + +typed::set<> typed::set<>::drop_unused_params() const +{ + auto res = isl::set::drop_unused_params(); + return typed::set<>(res); +} + +bool typed::set<>::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set<>(arg0)); + }; + return isl::set::every_set(lambda_test); +} + +typed::set<> typed::set<>::extract_set(const typed::space<> &space) const +{ + auto res = isl::set::extract_set(space); + return typed::set<>(res); +} + +void typed::set<>::foreach_basic_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set<>(arg0)); + }; + return isl::set::foreach_basic_set(lambda_fn); +} + +void typed::set<>::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point<>(arg0)); + }; + return isl::set::foreach_point(lambda_fn); +} + +void typed::set<>::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set<>(arg0)); + }; + return isl::set::foreach_set(lambda_fn); +} + +typed::set<> typed::set<>::gist(const typed::set<> &context) const +{ + auto res = isl::set::gist(context); + return typed::set<>(res); +} + +typed::union_set<> typed::set<>::gist(const typed::union_set<> &context) const +{ + auto res = isl::set::gist(context); + return typed::union_set<>(res); +} + +typed::set<> typed::set<>::gist(const typed::basic_set<> &context) const +{ + auto res = isl::set::gist(context); + return typed::set<>(res); +} + +typed::set<> typed::set<>::gist(const typed::point<> &context) const +{ + auto res = isl::set::gist(context); + return typed::set<>(res); +} + +typed::pw_aff typed::set<>::indicator_function() const +{ + auto res = isl::set::indicator_function(); + return typed::pw_aff(res); +} + +typed::set<> typed::set<>::intersect(const typed::set<> &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::set<>::intersect(const typed::union_set<> &uset2) const +{ + auto res = isl::set::intersect(uset2); + return typed::union_set<>(res); +} + +typed::set<> typed::set<>::intersect(const typed::basic_set<> &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set<>(res); +} + +typed::set<> typed::set<>::intersect(const typed::point<> &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set<>(res); +} + +typed::pw_aff typed::set<>::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +typed::pw_aff typed::set<>::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +typed::set<> typed::set<>::project_out_all_params() const +{ + auto res = isl::set::project_out_all_params(); + return typed::set<>(res); +} + +typed::set<> typed::set<>::project_out_param(const typed::id &id) const +{ + auto res = isl::set::project_out_param(id); + return typed::set<>(res); +} + +typed::set<> typed::set<>::project_out_param(const std::string &id) const +{ + auto res = isl::set::project_out_param(id); + return typed::set<>(res); +} + +typed::set<> typed::set<>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::set::project_out_param(list); + return typed::set<>(res); +} + +typed::pw_aff typed::set<>::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +typed::pw_aff typed::set<>::pw_aff_on_domain(long v) const +{ + auto res = isl::set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +typed::pw_multi_aff typed::set<>::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::set::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff(res); +} + +typed::set_list<> typed::set<>::set_list() const +{ + auto res = isl::set::set_list(); + return typed::set_list<>(res); +} + +typed::space<> typed::set<>::space() const +{ + auto res = isl::set::space(); + return typed::space<>(res); +} + +typed::set<> typed::set<>::subtract(const typed::set<> &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::set<>::subtract(const typed::union_set<> &uset2) const +{ + auto res = isl::set::subtract(uset2); + return typed::union_set<>(res); +} + +typed::set<> typed::set<>::subtract(const typed::basic_set<> &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set<>(res); +} + +typed::set<> typed::set<>::subtract(const typed::point<> &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::set<>::to_union_set() const +{ + auto res = isl::set::to_union_set(); + return typed::union_set<>(res); +} + +template +typed::set typed::set<>::unbind_params(const typed::multi_id &tuple) const +{ + auto res = isl::set::unbind_params(tuple); + return typed::set(res); +} + +typed::set<> typed::set<>::unite(const typed::set<> &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set<>(res); +} + +typed::union_set<> typed::set<>::unite(const typed::union_set<> &uset2) const +{ + auto res = isl::set::unite(uset2); + return typed::union_set<>(res); +} + +typed::set<> typed::set<>::unite(const typed::basic_set<> &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set<>(res); +} + +typed::set<> typed::set<>::unite(const typed::point<> &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set<>(res); +} + +typed::set<> typed::set<>::universe(const typed::space<> &space) +{ + auto res = isl::set::universe(space); + return typed::set<>(res); +} + +template +typed::set::set(const typed::basic_set &bset) + : isl::set(bset) +{ +} + +template +typed::set::set(const typed::point &pnt) + : isl::set(pnt) +{ +} + +template +typed::set::set(const isl::ctx &ctx, const std::string &str) + : isl::set(ctx, str) +{ +} + +template +template +typed::set typed::set::apply(const typed::map &map) const +{ + auto res = isl::set::apply(map); + return typed::set(res); +} + +template +template +typed::union_set typed::set::apply(const typed::union_map &umap) const +{ + auto res = isl::set::apply(umap); + return typed::union_set(res); +} + +template +template +typed::set typed::set::apply(const typed::basic_map &map) const +{ + auto res = isl::set::apply(map); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::set::as_pw_multi_aff() const +{ + auto res = isl::set::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::set::as_set() const +{ + auto res = isl::set::as_set(); + return typed::set(res); +} + +template +typed::set<> typed::set::bind(const typed::multi_id &tuple) const +{ + auto res = isl::set::bind(tuple); + return typed::set<>(res); +} + +template +typed::set typed::set::coalesce() const +{ + auto res = isl::set::coalesce(); + return typed::set(res); +} + +template +typed::set typed::set::detect_equalities() const +{ + auto res = isl::set::detect_equalities(); + return typed::set(res); +} + +template +typed::set typed::set::drop_unused_params() const +{ + auto res = isl::set::drop_unused_params(); + return typed::set(res); +} + +template +bool typed::set::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set(arg0)); + }; + return isl::set::every_set(lambda_test); +} + +template +typed::set typed::set::extract_set(const typed::space &space) const +{ + auto res = isl::set::extract_set(space); + return typed::set(res); +} + +template +void typed::set::foreach_basic_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set(arg0)); + }; + return isl::set::foreach_basic_set(lambda_fn); +} + +template +void typed::set::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point(arg0)); + }; + return isl::set::foreach_point(lambda_fn); +} + +template +void typed::set::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set(arg0)); + }; + return isl::set::foreach_set(lambda_fn); +} + +template +typed::set typed::set::gist(const typed::set &context) const +{ + auto res = isl::set::gist(context); + return typed::set(res); +} + +template +typed::union_set typed::set::gist(const typed::union_set &context) const +{ + auto res = isl::set::gist(context); + return typed::union_set(res); +} + +template +typed::set typed::set::gist(const typed::basic_set &context) const +{ + auto res = isl::set::gist(context); + return typed::set(res); +} + +template +typed::set typed::set::gist(const typed::point &context) const +{ + auto res = isl::set::gist(context); + return typed::set(res); +} + +template +typed::set typed::set::gist_params(const typed::set<> &context) const +{ + auto res = isl::set::gist_params(context); + return typed::set(res); +} + +template +typed::set typed::set::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::set::gist_params(context); + return typed::set(res); +} + +template +typed::set typed::set::gist_params(const typed::point<> &context) const +{ + auto res = isl::set::gist_params(context); + return typed::set(res); +} + +template +typed::map typed::set::identity() const +{ + auto res = isl::set::identity(); + return typed::map(res); +} + +template +typed::pw_aff typed::set::indicator_function() const +{ + auto res = isl::set::indicator_function(); + return typed::pw_aff(res); +} + +template +template +typed::map typed::set::insert_domain(const typed::space &domain) const +{ + auto res = isl::set::insert_domain(domain); + return typed::map(res); +} + +template +typed::set typed::set::intersect(const typed::set &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set(res); +} + +template +typed::union_set typed::set::intersect(const typed::union_set &uset2) const +{ + auto res = isl::set::intersect(uset2); + return typed::union_set(res); +} + +template +typed::set typed::set::intersect(const typed::basic_set &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set(res); +} + +template +typed::set typed::set::intersect(const typed::point &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set(res); +} + +template +typed::set typed::set::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::set::intersect_params(params); + return typed::set(res); +} + +template +typed::set typed::set::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::set::intersect_params(params); + return typed::set(res); +} + +template +typed::set typed::set::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::set::intersect_params(params); + return typed::set(res); +} + +template +typed::fixed_box typed::set::lattice_tile() const +{ + auto res = isl::set::lattice_tile(); + return typed::fixed_box(res); +} + +template +typed::set typed::set::lexmax() const +{ + auto res = isl::set::lexmax(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::set::lexmax_pw_multi_aff() const +{ + auto res = isl::set::lexmax_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::set::lexmin() const +{ + auto res = isl::set::lexmin(); + return typed::set(res); +} + +template +typed::pw_multi_aff typed::set::lexmin_pw_multi_aff() const +{ + auto res = isl::set::lexmin_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::set typed::set::lower_bound(const typed::multi_pw_aff &lower) const +{ + auto res = isl::set::lower_bound(lower); + return typed::set(res); +} + +template +typed::set typed::set::lower_bound(const typed::multi_val &lower) const +{ + auto res = isl::set::lower_bound(lower); + return typed::set(res); +} + +template +typed::multi_pw_aff typed::set::max_multi_pw_aff() const +{ + auto res = isl::set::max_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_pw_aff typed::set::min_multi_pw_aff() const +{ + auto res = isl::set::min_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::pw_aff typed::set::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::set::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::set::param_pw_aff_on_domain(id); + return typed::pw_aff(res); +} + +template +typed::set<> typed::set::params() const +{ + auto res = isl::set::params(); + return typed::set<>(res); +} + +template +typed::multi_val typed::set::plain_multi_val_if_fixed() const +{ + auto res = isl::set::plain_multi_val_if_fixed(); + return typed::multi_val(res); +} + +template +template +typed::set typed::set::preimage(const typed::multi_aff &ma) const +{ + auto res = isl::set::preimage(ma); + return typed::set(res); +} + +template +template +typed::set typed::set::preimage(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::set::preimage(mpa); + return typed::set(res); +} + +template +template +typed::set typed::set::preimage(const typed::pw_multi_aff &pma) const +{ + auto res = isl::set::preimage(pma); + return typed::set(res); +} + +template +template +typed::union_set typed::set::preimage(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::set::preimage(upma); + return typed::union_set(res); +} + +template +template +typed::set> typed::set::product(const typed::set &set2) const +{ + auto res = isl::set::product(set2); + return typed::set>(res); +} + +template +template +typed::set> typed::set::product(const typed::basic_set &set2) const +{ + auto res = isl::set::product(set2); + return typed::set>(res); +} + +template +template +typed::set> typed::set::product(const typed::point &set2) const +{ + auto res = isl::set::product(set2); + return typed::set>(res); +} + +template +typed::set typed::set::project_out_all_params() const +{ + auto res = isl::set::project_out_all_params(); + return typed::set(res); +} + +template +typed::set typed::set::project_out_param(const typed::id &id) const +{ + auto res = isl::set::project_out_param(id); + return typed::set(res); +} + +template +typed::set typed::set::project_out_param(const std::string &id) const +{ + auto res = isl::set::project_out_param(id); + return typed::set(res); +} + +template +typed::set typed::set::project_out_param(const typed::id_list &list) const +{ + auto res = isl::set::project_out_param(list); + return typed::set(res); +} + +template +typed::pw_aff typed::set::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +typed::pw_aff typed::set::pw_aff_on_domain(long v) const +{ + auto res = isl::set::pw_aff_on_domain(v); + return typed::pw_aff(res); +} + +template +template +typed::pw_multi_aff typed::set::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::set::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff(res); +} + +template +typed::set_list typed::set::set_list() const +{ + auto res = isl::set::set_list(); + return typed::set_list(res); +} + +template +typed::fixed_box typed::set::simple_fixed_box_hull() const +{ + auto res = isl::set::simple_fixed_box_hull(); + return typed::fixed_box(res); +} + +template +typed::space typed::set::space() const +{ + auto res = isl::set::space(); + return typed::space(res); +} + +template +typed::set typed::set::subtract(const typed::set &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set(res); +} + +template +typed::union_set typed::set::subtract(const typed::union_set &uset2) const +{ + auto res = isl::set::subtract(uset2); + return typed::union_set(res); +} + +template +typed::set typed::set::subtract(const typed::basic_set &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set(res); +} + +template +typed::set typed::set::subtract(const typed::point &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set(res); +} + +template +typed::union_set typed::set::to_union_set() const +{ + auto res = isl::set::to_union_set(); + return typed::union_set(res); +} + +template +typed::map typed::set::translation() const +{ + auto res = isl::set::translation(); + return typed::map(res); +} + +template +template +typed::map typed::set::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::set::unbind_params_insert_domain(domain); + return typed::map(res); +} + +template +typed::set typed::set::unite(const typed::set &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set(res); +} + +template +typed::union_set typed::set::unite(const typed::union_set &uset2) const +{ + auto res = isl::set::unite(uset2); + return typed::union_set(res); +} + +template +typed::set typed::set::unite(const typed::basic_set &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set(res); +} + +template +typed::set typed::set::unite(const typed::point &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set(res); +} + +template +typed::set typed::set::universe(const typed::space &space) +{ + auto res = isl::set::universe(space); + return typed::set(res); +} + +template +typed::set typed::set::upper_bound(const typed::multi_pw_aff &upper) const +{ + auto res = isl::set::upper_bound(upper); + return typed::set(res); +} + +template +typed::set typed::set::upper_bound(const typed::multi_val &upper) const +{ + auto res = isl::set::upper_bound(upper); + return typed::set(res); +} + +template +typed::set>::set(const typed::basic_set> &bset) + : isl::set(bset) +{ +} + +template +typed::set>::set(const typed::point> &pnt) + : isl::set(pnt) +{ +} + +template +typed::set>::set(const isl::ctx &ctx, const std::string &str) + : isl::set(ctx, str) +{ +} + +template +template +typed::set typed::set>::apply(const typed::map, Arg2> &map) const +{ + auto res = isl::set::apply(map); + return typed::set(res); +} + +template +template +typed::union_set typed::set>::apply(const typed::union_map, Arg2> &umap) const +{ + auto res = isl::set::apply(umap); + return typed::union_set(res); +} + +template +template +typed::set typed::set>::apply(const typed::basic_map, Arg2> &map) const +{ + auto res = isl::set::apply(map); + return typed::set(res); +} + +template +typed::pw_multi_aff> typed::set>::as_pw_multi_aff() const +{ + auto res = isl::set::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::set>::as_set() const +{ + auto res = isl::set::as_set(); + return typed::set>(res); +} + +template +typed::set<> typed::set>::bind(const typed::multi_id> &tuple) const +{ + auto res = isl::set::bind(tuple); + return typed::set<>(res); +} + +template +typed::set> typed::set>::coalesce() const +{ + auto res = isl::set::coalesce(); + return typed::set>(res); +} + +template +typed::set> typed::set>::detect_equalities() const +{ + auto res = isl::set::detect_equalities(); + return typed::set>(res); +} + +template +typed::set> typed::set>::drop_unused_params() const +{ + auto res = isl::set::drop_unused_params(); + return typed::set>(res); +} + +template +bool typed::set>::every_set(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set>(arg0)); + }; + return isl::set::every_set(lambda_test); +} + +template +typed::set> typed::set>::extract_set(const typed::space> &space) const +{ + auto res = isl::set::extract_set(space); + return typed::set>(res); +} + +template +void typed::set>::foreach_basic_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::basic_set arg0) { + return fn(typed::basic_set>(arg0)); + }; + return isl::set::foreach_basic_set(lambda_fn); +} + +template +void typed::set>::foreach_point(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point>(arg0)); + }; + return isl::set::foreach_point(lambda_fn); +} + +template +void typed::set>::foreach_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set>(arg0)); + }; + return isl::set::foreach_set(lambda_fn); +} + +template +typed::set> typed::set>::gist(const typed::set> &context) const +{ + auto res = isl::set::gist(context); + return typed::set>(res); +} + +template +typed::union_set> typed::set>::gist(const typed::union_set> &context) const +{ + auto res = isl::set::gist(context); + return typed::union_set>(res); +} + +template +typed::set> typed::set>::gist(const typed::basic_set> &context) const +{ + auto res = isl::set::gist(context); + return typed::set>(res); +} + +template +typed::set> typed::set>::gist(const typed::point> &context) const +{ + auto res = isl::set::gist(context); + return typed::set>(res); +} + +template +typed::set> typed::set>::gist_params(const typed::set<> &context) const +{ + auto res = isl::set::gist_params(context); + return typed::set>(res); +} + +template +typed::set> typed::set>::gist_params(const typed::basic_set<> &context) const +{ + auto res = isl::set::gist_params(context); + return typed::set>(res); +} + +template +typed::set> typed::set>::gist_params(const typed::point<> &context) const +{ + auto res = isl::set::gist_params(context); + return typed::set>(res); +} + +template +typed::map, pair> typed::set>::identity() const +{ + auto res = isl::set::identity(); + return typed::map, pair>(res); +} + +template +typed::pw_aff, Anonymous> typed::set>::indicator_function() const +{ + auto res = isl::set::indicator_function(); + return typed::pw_aff, Anonymous>(res); +} + +template +template +typed::map> typed::set>::insert_domain(const typed::space &domain) const +{ + auto res = isl::set::insert_domain(domain); + return typed::map>(res); +} + +template +typed::set> typed::set>::intersect(const typed::set> &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::set>::intersect(const typed::union_set> &uset2) const +{ + auto res = isl::set::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::set> typed::set>::intersect(const typed::basic_set> &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set>(res); +} + +template +typed::set> typed::set>::intersect(const typed::point> &set2) const +{ + auto res = isl::set::intersect(set2); + return typed::set>(res); +} + +template +typed::set> typed::set>::intersect_params(const typed::set<> ¶ms) const +{ + auto res = isl::set::intersect_params(params); + return typed::set>(res); +} + +template +typed::set> typed::set>::intersect_params(const typed::basic_set<> ¶ms) const +{ + auto res = isl::set::intersect_params(params); + return typed::set>(res); +} + +template +typed::set> typed::set>::intersect_params(const typed::point<> ¶ms) const +{ + auto res = isl::set::intersect_params(params); + return typed::set>(res); +} + +template +typed::fixed_box> typed::set>::lattice_tile() const +{ + auto res = isl::set::lattice_tile(); + return typed::fixed_box>(res); +} + +template +typed::set> typed::set>::lexmax() const +{ + auto res = isl::set::lexmax(); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::set>::lexmax_pw_multi_aff() const +{ + auto res = isl::set::lexmax_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::set>::lexmin() const +{ + auto res = isl::set::lexmin(); + return typed::set>(res); +} + +template +typed::pw_multi_aff> typed::set>::lexmin_pw_multi_aff() const +{ + auto res = isl::set::lexmin_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::set> typed::set>::lower_bound(const typed::multi_pw_aff> &lower) const +{ + auto res = isl::set::lower_bound(lower); + return typed::set>(res); +} + +template +typed::set> typed::set>::lower_bound(const typed::multi_val> &lower) const +{ + auto res = isl::set::lower_bound(lower); + return typed::set>(res); +} + +template +typed::multi_pw_aff> typed::set>::max_multi_pw_aff() const +{ + auto res = isl::set::max_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_pw_aff> typed::set>::min_multi_pw_aff() const +{ + auto res = isl::set::min_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::pw_aff, Anonymous> typed::set>::param_pw_aff_on_domain(const typed::id &id) const +{ + auto res = isl::set::param_pw_aff_on_domain(id); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::set>::param_pw_aff_on_domain(const std::string &id) const +{ + auto res = isl::set::param_pw_aff_on_domain(id); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::set<> typed::set>::params() const +{ + auto res = isl::set::params(); + return typed::set<>(res); +} + +template +typed::multi_val> typed::set>::plain_multi_val_if_fixed() const +{ + auto res = isl::set::plain_multi_val_if_fixed(); + return typed::multi_val>(res); +} + +template +template +typed::set typed::set>::preimage(const typed::multi_aff> &ma) const +{ + auto res = isl::set::preimage(ma); + return typed::set(res); +} + +template +template +typed::set typed::set>::preimage(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::set::preimage(mpa); + return typed::set(res); +} + +template +template +typed::set typed::set>::preimage(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::set::preimage(pma); + return typed::set(res); +} + +template +template +typed::union_set typed::set>::preimage(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::set::preimage(upma); + return typed::union_set(res); +} + +template +template +typed::set, Arg2>> typed::set>::product(const typed::set &set2) const +{ + auto res = isl::set::product(set2); + return typed::set, Arg2>>(res); +} + +template +template +typed::set, Arg2>> typed::set>::product(const typed::basic_set &set2) const +{ + auto res = isl::set::product(set2); + return typed::set, Arg2>>(res); +} + +template +template +typed::set, Arg2>> typed::set>::product(const typed::point &set2) const +{ + auto res = isl::set::product(set2); + return typed::set, Arg2>>(res); +} + +template +typed::set> typed::set>::project_out_all_params() const +{ + auto res = isl::set::project_out_all_params(); + return typed::set>(res); +} + +template +typed::set> typed::set>::project_out_param(const typed::id &id) const +{ + auto res = isl::set::project_out_param(id); + return typed::set>(res); +} + +template +typed::set> typed::set>::project_out_param(const std::string &id) const +{ + auto res = isl::set::project_out_param(id); + return typed::set>(res); +} + +template +typed::set> typed::set>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::set::project_out_param(list); + return typed::set>(res); +} + +template +typed::pw_aff, Anonymous> typed::set>::pw_aff_on_domain(const typed::val &v) const +{ + auto res = isl::set::pw_aff_on_domain(v); + return typed::pw_aff, Anonymous>(res); +} + +template +typed::pw_aff, Anonymous> typed::set>::pw_aff_on_domain(long v) const +{ + auto res = isl::set::pw_aff_on_domain(v); + return typed::pw_aff, Anonymous>(res); +} + +template +template +typed::pw_multi_aff, Arg2> typed::set>::pw_multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::set::pw_multi_aff_on_domain(mv); + return typed::pw_multi_aff, Arg2>(res); +} + +template +typed::set_list> typed::set>::set_list() const +{ + auto res = isl::set::set_list(); + return typed::set_list>(res); +} + +template +typed::fixed_box> typed::set>::simple_fixed_box_hull() const +{ + auto res = isl::set::simple_fixed_box_hull(); + return typed::fixed_box>(res); +} + +template +typed::space> typed::set>::space() const +{ + auto res = isl::set::space(); + return typed::space>(res); +} + +template +typed::set> typed::set>::subtract(const typed::set> &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::set>::subtract(const typed::union_set> &uset2) const +{ + auto res = isl::set::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::set> typed::set>::subtract(const typed::basic_set> &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set>(res); +} + +template +typed::set> typed::set>::subtract(const typed::point> &set2) const +{ + auto res = isl::set::subtract(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::set>::to_union_set() const +{ + auto res = isl::set::to_union_set(); + return typed::union_set>(res); +} + +template +typed::map, pair> typed::set>::translation() const +{ + auto res = isl::set::translation(); + return typed::map, pair>(res); +} + +template +template +typed::map> typed::set>::unbind_params_insert_domain(const typed::multi_id &domain) const +{ + auto res = isl::set::unbind_params_insert_domain(domain); + return typed::map>(res); +} + +template +typed::set> typed::set>::unite(const typed::set> &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set>(res); +} + +template +typed::union_set> typed::set>::unite(const typed::union_set> &uset2) const +{ + auto res = isl::set::unite(uset2); + return typed::union_set>(res); +} + +template +typed::set> typed::set>::unite(const typed::basic_set> &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set>(res); +} + +template +typed::set> typed::set>::unite(const typed::point> &set2) const +{ + auto res = isl::set::unite(set2); + return typed::set>(res); +} + +template +typed::set> typed::set>::universe(const typed::space> &space) +{ + auto res = isl::set::universe(space); + return typed::set>(res); +} + +template +typed::map typed::set>::unwrap() const +{ + auto res = isl::set::unwrap(); + return typed::map(res); +} + +template +typed::set> typed::set>::upper_bound(const typed::multi_pw_aff> &upper) const +{ + auto res = isl::set::upper_bound(upper); + return typed::set>(res); +} + +template +typed::set> typed::set>::upper_bound(const typed::multi_val> &upper) const +{ + auto res = isl::set::upper_bound(upper); + return typed::set>(res); +} + +template +typed::set> typed::set>::wrapped_reverse() const +{ + auto res = isl::set::wrapped_reverse(); + return typed::set>(res); +} + +typed::set_list<>::set_list(const isl::ctx &ctx, int n) + : isl::set_list(ctx, n) +{ +} + +typed::set_list<>::set_list(const typed::set<> &el) + : isl::set_list(el) +{ +} + +typed::set_list<>::set_list(const isl::ctx &ctx, const std::string &str) + : isl::set_list(ctx, str) +{ +} + +typed::set_list<> typed::set_list<>::add(const typed::set<> &el) const +{ + auto res = isl::set_list::add(el); + return typed::set_list<>(res); +} + +typed::set_list<> typed::set_list<>::add(const typed::basic_set<> &el) const +{ + auto res = isl::set_list::add(el); + return typed::set_list<>(res); +} + +typed::set_list<> typed::set_list<>::add(const typed::point<> &el) const +{ + auto res = isl::set_list::add(el); + return typed::set_list<>(res); +} + +typed::set_list<> typed::set_list<>::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::set_list::drop(first, n); + return typed::set_list<>(res); +} + +void typed::set_list<>::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set<>(arg0)); + }; + return isl::set_list::foreach(lambda_fn); +} + +void typed::set_list<>::foreach_scc(const std::function, typed::set<>)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::set arg0, isl::set arg1) { + return follows(typed::set<>(arg0), typed::set<>(arg1)); + }; + auto lambda_fn = [&] (isl::set_list arg0) { + return fn(typed::set_list<>(arg0)); + }; + return isl::set_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::set_list::set_list(const isl::ctx &ctx, int n) + : isl::set_list(ctx, n) +{ +} + +template +typed::set_list::set_list(const typed::set &el) + : isl::set_list(el) +{ +} + +template +typed::set_list::set_list(const isl::ctx &ctx, const std::string &str) + : isl::set_list(ctx, str) +{ +} + +template +typed::set_list typed::set_list::add(const typed::set &el) const +{ + auto res = isl::set_list::add(el); + return typed::set_list(res); +} + +template +typed::set_list typed::set_list::add(const typed::basic_set &el) const +{ + auto res = isl::set_list::add(el); + return typed::set_list(res); +} + +template +typed::set_list typed::set_list::add(const typed::point &el) const +{ + auto res = isl::set_list::add(el); + return typed::set_list(res); +} + +template +typed::set typed::set_list::at(int index) const +{ + auto res = isl::set_list::at(index); + return typed::set(res); +} + +template +typed::set_list typed::set_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::set_list::drop(first, n); + return typed::set_list(res); +} + +template +void typed::set_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set(arg0)); + }; + return isl::set_list::foreach(lambda_fn); +} + +template +void typed::set_list::foreach_scc(const std::function, typed::set)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::set arg0, isl::set arg1) { + return follows(typed::set(arg0), typed::set(arg1)); + }; + auto lambda_fn = [&] (isl::set_list arg0) { + return fn(typed::set_list(arg0)); + }; + return isl::set_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::set_list typed::set_list::set_at(int index, const typed::set &el) const +{ + auto res = isl::set_list::set_at(index, el); + return typed::set_list(res); +} + +typed::space<>::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +typed::space typed::space<>::add_named_tuple(const typed::id &tuple_id, unsigned int dim) const +{ + auto res = isl::space::add_named_tuple(tuple_id, dim); + return typed::space(res); +} + +template +typed::space typed::space<>::add_named_tuple(const std::string &tuple_id, unsigned int dim) const +{ + auto res = isl::space::add_named_tuple(tuple_id, dim); + return typed::space(res); +} + +typed::space<> typed::space<>::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space<>(res); +} + +typed::space<> typed::space<>::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space<>(res); +} + +template +typed::space typed::space<>::add_unnamed_tuple(unsigned int dim) const +{ + auto res = isl::space::add_unnamed_tuple(dim); + return typed::space(res); +} + +typed::space<> typed::space<>::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space<>(res); +} + +template +typed::multi_aff typed::space<>::multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::space::multi_aff_on_domain(mv); + return typed::multi_aff(res); +} + +typed::aff typed::space<>::param_aff_on_domain(const typed::id &id) const +{ + auto res = isl::space::param_aff_on_domain(id); + return typed::aff(res); +} + +typed::aff typed::space<>::param_aff_on_domain(const std::string &id) const +{ + auto res = isl::space::param_aff_on_domain(id); + return typed::aff(res); +} + +typed::space<> typed::space<>::unit(const isl::ctx &ctx) +{ + auto res = isl::space::unit(ctx); + return typed::space<>(res); +} + +typed::set<> typed::space<>::universe_set() const +{ + auto res = isl::space::universe_set(); + return typed::set<>(res); +} + +template +typed::space::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +template +typed::space typed::space::add_named_tuple(const typed::id &tuple_id, unsigned int dim) const +{ + auto res = isl::space::add_named_tuple(tuple_id, dim); + return typed::space(res); +} + +template +template +typed::space typed::space::add_named_tuple(const std::string &tuple_id, unsigned int dim) const +{ + auto res = isl::space::add_named_tuple(tuple_id, dim); + return typed::space(res); +} + +template +typed::space typed::space::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space(res); +} + +template +typed::space typed::space::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space(res); +} + +template +template +typed::space typed::space::add_unnamed_tuple(unsigned int dim) const +{ + auto res = isl::space::add_unnamed_tuple(dim); + return typed::space(res); +} + +template +typed::space<> typed::space::domain() const +{ + auto res = isl::space::domain(); + return typed::space<>(res); +} + +template +typed::space typed::space::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space(res); +} + +template +typed::multi_aff typed::space::identity_multi_aff_on_domain() const +{ + auto res = isl::space::identity_multi_aff_on_domain(); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::space::identity_multi_pw_aff_on_domain() const +{ + auto res = isl::space::identity_multi_pw_aff_on_domain(); + return typed::multi_pw_aff(res); +} + +template +typed::pw_multi_aff typed::space::identity_pw_multi_aff_on_domain() const +{ + auto res = isl::space::identity_pw_multi_aff_on_domain(); + return typed::pw_multi_aff(res); +} + +template +typed::space typed::space::map_from_set() const +{ + auto res = isl::space::map_from_set(); + return typed::space(res); +} + +template +typed::multi_aff typed::space::multi_aff(const typed::aff_list &list) const +{ + auto res = isl::space::multi_aff(list); + return typed::multi_aff(res); +} + +template +template +typed::multi_aff typed::space::multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::space::multi_aff_on_domain(mv); + return typed::multi_aff(res); +} + +template +typed::multi_id typed::space::multi_id(const typed::id_list &list) const +{ + auto res = isl::space::multi_id(list); + return typed::multi_id(res); +} + +template +typed::multi_pw_aff typed::space::multi_pw_aff(const typed::pw_aff_list &list) const +{ + auto res = isl::space::multi_pw_aff(list); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::space::multi_union_pw_aff(const typed::union_pw_aff_list &list) const +{ + auto res = isl::space::multi_union_pw_aff(list); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::space::multi_union_pw_aff(const typed::union_pw_aff_list &list) const +{ + auto res = isl::space::multi_union_pw_aff(list); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_val typed::space::multi_val(const typed::val_list &list) const +{ + auto res = isl::space::multi_val(list); + return typed::multi_val(res); +} + +template +typed::aff typed::space::param_aff_on_domain(const typed::id &id) const +{ + auto res = isl::space::param_aff_on_domain(id); + return typed::aff(res); +} + +template +typed::aff typed::space::param_aff_on_domain(const std::string &id) const +{ + auto res = isl::space::param_aff_on_domain(id); + return typed::aff(res); +} + +template +typed::space<> typed::space::params() const +{ + auto res = isl::space::params(); + return typed::space<>(res); +} + +template +template +typed::space> typed::space::product(const typed::space &right) const +{ + auto res = isl::space::product(right); + return typed::space>(res); +} + +template +template +typed::space typed::space::set_range_tuple(const typed::id &id) const +{ + auto res = isl::space::set_range_tuple(id); + return typed::space(res); +} + +template +template +typed::space typed::space::set_range_tuple(const std::string &id) const +{ + auto res = isl::space::set_range_tuple(id); + return typed::space(res); +} + +template +typed::set typed::space::universe_set() const +{ + auto res = isl::space::universe_set(); + return typed::set(res); +} + +template +typed::aff typed::space::zero_aff_on_domain() const +{ + auto res = isl::space::zero_aff_on_domain(); + return typed::aff(res); +} + +template +typed::multi_aff typed::space::zero_multi_aff() const +{ + auto res = isl::space::zero_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::space::zero_multi_pw_aff() const +{ + auto res = isl::space::zero_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::space::zero_multi_union_pw_aff() const +{ + auto res = isl::space::zero_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_val typed::space::zero_multi_val() const +{ + auto res = isl::space::zero_multi_val(); + return typed::multi_val(res); +} + +template +typed::space::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +typed::space typed::space::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space(res); +} + +template +typed::space typed::space::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space(res); +} + +template +typed::space typed::space::domain() const +{ + auto res = isl::space::domain(); + return typed::space(res); +} + +template +typed::multi_aff, Domain> typed::space::domain_map_multi_aff() const +{ + auto res = isl::space::domain_map_multi_aff(); + return typed::multi_aff, Domain>(res); +} + +template +typed::pw_multi_aff, Domain> typed::space::domain_map_pw_multi_aff() const +{ + auto res = isl::space::domain_map_pw_multi_aff(); + return typed::pw_multi_aff, Domain>(res); +} + +template +typed::space typed::space::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space(res); +} + +template +typed::multi_aff typed::space::multi_aff(const typed::aff_list &list) const +{ + auto res = isl::space::multi_aff(list); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::space::multi_pw_aff(const typed::pw_aff_list &list) const +{ + auto res = isl::space::multi_pw_aff(list); + return typed::multi_pw_aff(res); +} + +template +typed::space<> typed::space::params() const +{ + auto res = isl::space::params(); + return typed::space<>(res); +} + +template +template +typed::space, pair> typed::space::product(const typed::space &right) const +{ + auto res = isl::space::product(right); + return typed::space, pair>(res); +} + +template +typed::space typed::space::range() const +{ + auto res = isl::space::range(); + return typed::space(res); +} + +template +typed::multi_aff, Range> typed::space::range_map_multi_aff() const +{ + auto res = isl::space::range_map_multi_aff(); + return typed::multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::space::range_map_pw_multi_aff() const +{ + auto res = isl::space::range_map_pw_multi_aff(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::space typed::space::reverse() const +{ + auto res = isl::space::reverse(); + return typed::space(res); +} + +template +template +typed::space typed::space::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::space::set_domain_tuple(id); + return typed::space(res); +} + +template +template +typed::space typed::space::set_domain_tuple(const std::string &id) const +{ + auto res = isl::space::set_domain_tuple(id); + return typed::space(res); +} + +template +template +typed::space typed::space::set_range_tuple(const typed::id &id) const +{ + auto res = isl::space::set_range_tuple(id); + return typed::space(res); +} + +template +template +typed::space typed::space::set_range_tuple(const std::string &id) const +{ + auto res = isl::space::set_range_tuple(id); + return typed::space(res); +} + +template +typed::map typed::space::universe_map() const +{ + auto res = isl::space::universe_map(); + return typed::map(res); +} + +template +typed::space> typed::space::wrap() const +{ + auto res = isl::space::wrap(); + return typed::space>(res); +} + +template +typed::multi_aff typed::space::zero_multi_aff() const +{ + auto res = isl::space::zero_multi_aff(); + return typed::multi_aff(res); +} + +template +typed::multi_pw_aff typed::space::zero_multi_pw_aff() const +{ + auto res = isl::space::zero_multi_pw_aff(); + return typed::multi_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::space::zero_multi_union_pw_aff() const +{ + auto res = isl::space::zero_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::space>::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +template +typed::space, Arg2> typed::space>::add_named_tuple(const typed::id &tuple_id, unsigned int dim) const +{ + auto res = isl::space::add_named_tuple(tuple_id, dim); + return typed::space, Arg2>(res); +} + +template +template +typed::space, Arg2> typed::space>::add_named_tuple(const std::string &tuple_id, unsigned int dim) const +{ + auto res = isl::space::add_named_tuple(tuple_id, dim); + return typed::space, Arg2>(res); +} + +template +typed::space> typed::space>::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space>(res); +} + +template +typed::space> typed::space>::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space>(res); +} + +template +template +typed::space, Arg2> typed::space>::add_unnamed_tuple(unsigned int dim) const +{ + auto res = isl::space::add_unnamed_tuple(dim); + return typed::space, Arg2>(res); +} + +template +typed::space<> typed::space>::domain() const +{ + auto res = isl::space::domain(); + return typed::space<>(res); +} + +template +typed::space> typed::space>::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space>(res); +} + +template +typed::multi_aff, pair> typed::space>::identity_multi_aff_on_domain() const +{ + auto res = isl::space::identity_multi_aff_on_domain(); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::space>::identity_multi_pw_aff_on_domain() const +{ + auto res = isl::space::identity_multi_pw_aff_on_domain(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::space>::identity_pw_multi_aff_on_domain() const +{ + auto res = isl::space::identity_pw_multi_aff_on_domain(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::space, pair> typed::space>::map_from_set() const +{ + auto res = isl::space::map_from_set(); + return typed::space, pair>(res); +} + +template +typed::multi_aff> typed::space>::multi_aff(const typed::aff_list &list) const +{ + auto res = isl::space::multi_aff(list); + return typed::multi_aff>(res); +} + +template +template +typed::multi_aff, Arg2> typed::space>::multi_aff_on_domain(const typed::multi_val &mv) const +{ + auto res = isl::space::multi_aff_on_domain(mv); + return typed::multi_aff, Arg2>(res); +} + +template +typed::multi_id> typed::space>::multi_id(const typed::id_list &list) const +{ + auto res = isl::space::multi_id(list); + return typed::multi_id>(res); +} + +template +typed::multi_pw_aff> typed::space>::multi_pw_aff(const typed::pw_aff_list &list) const +{ + auto res = isl::space::multi_pw_aff(list); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::space>::multi_union_pw_aff(const typed::union_pw_aff_list &list) const +{ + auto res = isl::space::multi_union_pw_aff(list); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::multi_union_pw_aff> typed::space>::multi_union_pw_aff(const typed::union_pw_aff_list &list) const +{ + auto res = isl::space::multi_union_pw_aff(list); + return typed::multi_union_pw_aff>(res); +} + +template +typed::multi_val> typed::space>::multi_val(const typed::val_list &list) const +{ + auto res = isl::space::multi_val(list); + return typed::multi_val>(res); +} + +template +typed::aff, Anonymous> typed::space>::param_aff_on_domain(const typed::id &id) const +{ + auto res = isl::space::param_aff_on_domain(id); + return typed::aff, Anonymous>(res); +} + +template +typed::aff, Anonymous> typed::space>::param_aff_on_domain(const std::string &id) const +{ + auto res = isl::space::param_aff_on_domain(id); + return typed::aff, Anonymous>(res); +} + +template +typed::space<> typed::space>::params() const +{ + auto res = isl::space::params(); + return typed::space<>(res); +} + +template +template +typed::space, Arg2>> typed::space>::product(const typed::space &right) const +{ + auto res = isl::space::product(right); + return typed::space, Arg2>>(res); +} + +template +typed::set> typed::space>::universe_set() const +{ + auto res = isl::space::universe_set(); + return typed::set>(res); +} + +template +typed::space typed::space>::unwrap() const +{ + auto res = isl::space::unwrap(); + return typed::space(res); +} + +template +typed::space> typed::space>::wrapped_reverse() const +{ + auto res = isl::space::wrapped_reverse(); + return typed::space>(res); +} + +template +typed::aff, Anonymous> typed::space>::zero_aff_on_domain() const +{ + auto res = isl::space::zero_aff_on_domain(); + return typed::aff, Anonymous>(res); +} + +template +typed::multi_aff> typed::space>::zero_multi_aff() const +{ + auto res = isl::space::zero_multi_aff(); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::space>::zero_multi_pw_aff() const +{ + auto res = isl::space::zero_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::space>::zero_multi_union_pw_aff() const +{ + auto res = isl::space::zero_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::multi_val> typed::space>::zero_multi_val() const +{ + auto res = isl::space::zero_multi_val(); + return typed::multi_val>(res); +} + +template +typed::space, Range2>::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +typed::space, Range2> typed::space, Range2>::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space, Range2>(res); +} + +template +typed::space, Range2> typed::space, Range2>::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space, Range2>(res); +} + +template +typed::space> typed::space, Range2>::curry() const +{ + auto res = isl::space::curry(); + return typed::space>(res); +} + +template +typed::space> typed::space, Range2>::domain() const +{ + auto res = isl::space::domain(); + return typed::space>(res); +} + +template +typed::multi_aff, Range2>, pair> typed::space, Range2>::domain_map_multi_aff() const +{ + auto res = isl::space::domain_map_multi_aff(); + return typed::multi_aff, Range2>, pair>(res); +} + +template +typed::pw_multi_aff, Range2>, pair> typed::space, Range2>::domain_map_pw_multi_aff() const +{ + auto res = isl::space::domain_map_pw_multi_aff(); + return typed::pw_multi_aff, Range2>, pair>(res); +} + +template +typed::space, Range2> typed::space, Range2>::domain_reverse() const +{ + auto res = isl::space::domain_reverse(); + return typed::space, Range2>(res); +} + +template +typed::space, Range2> typed::space, Range2>::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space, Range2>(res); +} + +template +typed::space typed::space, Range2>::flatten_domain() const +{ + auto res = isl::space::flatten_domain(); + return typed::space(res); +} + +template +typed::multi_aff, Range2> typed::space, Range2>::multi_aff(const typed::aff_list, Anonymous> &list) const +{ + auto res = isl::space::multi_aff(list); + return typed::multi_aff, Range2>(res); +} + +template +typed::multi_pw_aff, Range2> typed::space, Range2>::multi_pw_aff(const typed::pw_aff_list, Anonymous> &list) const +{ + auto res = isl::space::multi_pw_aff(list); + return typed::multi_pw_aff, Range2>(res); +} + +template +typed::space<> typed::space, Range2>::params() const +{ + auto res = isl::space::params(); + return typed::space<>(res); +} + +template +template +typed::space, Domain2>, pair> typed::space, Range2>::product(const typed::space &right) const +{ + auto res = isl::space::product(right); + return typed::space, Domain2>, pair>(res); +} + +template +typed::space typed::space, Range2>::range() const +{ + auto res = isl::space::range(); + return typed::space(res); +} + +template +typed::multi_aff, Range2>, Range2> typed::space, Range2>::range_map_multi_aff() const +{ + auto res = isl::space::range_map_multi_aff(); + return typed::multi_aff, Range2>, Range2>(res); +} + +template +typed::pw_multi_aff, Range2>, Range2> typed::space, Range2>::range_map_pw_multi_aff() const +{ + auto res = isl::space::range_map_pw_multi_aff(); + return typed::pw_multi_aff, Range2>, Range2>(res); +} + +template +typed::space> typed::space, Range2>::reverse() const +{ + auto res = isl::space::reverse(); + return typed::space>(res); +} + +template +template +typed::space, Arg2> typed::space, Range2>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::space::set_range_tuple(id); + return typed::space, Arg2>(res); +} + +template +template +typed::space, Arg2> typed::space, Range2>::set_range_tuple(const std::string &id) const +{ + auto res = isl::space::set_range_tuple(id); + return typed::space, Arg2>(res); +} + +template +typed::map, Range2> typed::space, Range2>::universe_map() const +{ + auto res = isl::space::universe_map(); + return typed::map, Range2>(res); +} + +template +typed::space, Range2>> typed::space, Range2>::wrap() const +{ + auto res = isl::space::wrap(); + return typed::space, Range2>>(res); +} + +template +typed::multi_aff, Range2> typed::space, Range2>::zero_multi_aff() const +{ + auto res = isl::space::zero_multi_aff(); + return typed::multi_aff, Range2>(res); +} + +template +typed::multi_pw_aff, Range2> typed::space, Range2>::zero_multi_pw_aff() const +{ + auto res = isl::space::zero_multi_pw_aff(); + return typed::multi_pw_aff, Range2>(res); +} + +template +typed::multi_union_pw_aff, Range2> typed::space, Range2>::zero_multi_union_pw_aff() const +{ + auto res = isl::space::zero_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range2>(res); +} + +template +typed::space>::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +typed::space> typed::space>::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space>(res); +} + +template +typed::space> typed::space>::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space>(res); +} + +template +typed::space typed::space>::domain() const +{ + auto res = isl::space::domain(); + return typed::space(res); +} + +template +typed::multi_aff>, Domain> typed::space>::domain_map_multi_aff() const +{ + auto res = isl::space::domain_map_multi_aff(); + return typed::multi_aff>, Domain>(res); +} + +template +typed::pw_multi_aff>, Domain> typed::space>::domain_map_pw_multi_aff() const +{ + auto res = isl::space::domain_map_pw_multi_aff(); + return typed::pw_multi_aff>, Domain>(res); +} + +template +typed::space> typed::space>::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space>(res); +} + +template +typed::space typed::space>::flatten_range() const +{ + auto res = isl::space::flatten_range(); + return typed::space(res); +} + +template +typed::multi_aff> typed::space>::multi_aff(const typed::aff_list &list) const +{ + auto res = isl::space::multi_aff(list); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::space>::multi_pw_aff(const typed::pw_aff_list &list) const +{ + auto res = isl::space::multi_pw_aff(list); + return typed::multi_pw_aff>(res); +} + +template +typed::space<> typed::space>::params() const +{ + auto res = isl::space::params(); + return typed::space<>(res); +} + +template +template +typed::space, pair, Arg3>> typed::space>::product(const typed::space &right) const +{ + auto res = isl::space::product(right); + return typed::space, pair, Arg3>>(res); +} + +template +typed::space> typed::space>::range() const +{ + auto res = isl::space::range(); + return typed::space>(res); +} + +template +typed::multi_aff>, pair> typed::space>::range_map_multi_aff() const +{ + auto res = isl::space::range_map_multi_aff(); + return typed::multi_aff>, pair>(res); +} + +template +typed::pw_multi_aff>, pair> typed::space>::range_map_pw_multi_aff() const +{ + auto res = isl::space::range_map_pw_multi_aff(); + return typed::pw_multi_aff>, pair>(res); +} + +template +typed::space> typed::space>::range_reverse() const +{ + auto res = isl::space::range_reverse(); + return typed::space>(res); +} + +template +typed::space, Domain> typed::space>::reverse() const +{ + auto res = isl::space::reverse(); + return typed::space, Domain>(res); +} + +template +template +typed::space> typed::space>::set_domain_tuple(const typed::id &id) const +{ + auto res = isl::space::set_domain_tuple(id); + return typed::space>(res); +} + +template +template +typed::space> typed::space>::set_domain_tuple(const std::string &id) const +{ + auto res = isl::space::set_domain_tuple(id); + return typed::space>(res); +} + +template +typed::space, Range2> typed::space>::uncurry() const +{ + auto res = isl::space::uncurry(); + return typed::space, Range2>(res); +} + +template +typed::map> typed::space>::universe_map() const +{ + auto res = isl::space::universe_map(); + return typed::map>(res); +} + +template +typed::space>> typed::space>::wrap() const +{ + auto res = isl::space::wrap(); + return typed::space>>(res); +} + +template +typed::multi_aff> typed::space>::zero_multi_aff() const +{ + auto res = isl::space::zero_multi_aff(); + return typed::multi_aff>(res); +} + +template +typed::multi_pw_aff> typed::space>::zero_multi_pw_aff() const +{ + auto res = isl::space::zero_multi_pw_aff(); + return typed::multi_pw_aff>(res); +} + +template +typed::multi_union_pw_aff> typed::space>::zero_multi_union_pw_aff() const +{ + auto res = isl::space::zero_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::space, pair>::space(const isl::ctx &ctx, const std::string &str) + : isl::space(ctx, str) +{ +} + +template +typed::space, pair> typed::space, pair>::add_param(const typed::id &id) const +{ + auto res = isl::space::add_param(id); + return typed::space, pair>(res); +} + +template +typed::space, pair> typed::space, pair>::add_param(const std::string &id) const +{ + auto res = isl::space::add_param(id); + return typed::space, pair>(res); +} + +template +typed::space>> typed::space, pair>::curry() const +{ + auto res = isl::space::curry(); + return typed::space>>(res); +} + +template +typed::space> typed::space, pair>::domain() const +{ + auto res = isl::space::domain(); + return typed::space>(res); +} + +template +typed::multi_aff, pair>, pair> typed::space, pair>::domain_map_multi_aff() const +{ + auto res = isl::space::domain_map_multi_aff(); + return typed::multi_aff, pair>, pair>(res); +} + +template +typed::pw_multi_aff, pair>, pair> typed::space, pair>::domain_map_pw_multi_aff() const +{ + auto res = isl::space::domain_map_pw_multi_aff(); + return typed::pw_multi_aff, pair>, pair>(res); +} + +template +typed::space, pair> typed::space, pair>::domain_reverse() const +{ + auto res = isl::space::domain_reverse(); + return typed::space, pair>(res); +} + +template +typed::space, pair> typed::space, pair>::drop_all_params() const +{ + auto res = isl::space::drop_all_params(); + return typed::space, pair>(res); +} + +template +typed::space> typed::space, pair>::flatten_domain() const +{ + auto res = isl::space::flatten_domain(); + return typed::space>(res); +} + +template +typed::space, Anonymous> typed::space, pair>::flatten_range() const +{ + auto res = isl::space::flatten_range(); + return typed::space, Anonymous>(res); +} + +template +typed::multi_aff, pair> typed::space, pair>::multi_aff(const typed::aff_list, Anonymous> &list) const +{ + auto res = isl::space::multi_aff(list); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::space, pair>::multi_pw_aff(const typed::pw_aff_list, Anonymous> &list) const +{ + auto res = isl::space::multi_pw_aff(list); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::space<> typed::space, pair>::params() const +{ + auto res = isl::space::params(); + return typed::space<>(res); +} + +template +template +typed::space, Domain2>, pair, Arg2>> typed::space, pair>::product(const typed::space &right) const +{ + auto res = isl::space::product(right); + return typed::space, Domain2>, pair, Arg2>>(res); +} + +template +typed::space> typed::space, pair>::range() const +{ + auto res = isl::space::range(); + return typed::space>(res); +} + +template +typed::multi_aff, pair>, pair> typed::space, pair>::range_map_multi_aff() const +{ + auto res = isl::space::range_map_multi_aff(); + return typed::multi_aff, pair>, pair>(res); +} + +template +typed::pw_multi_aff, pair>, pair> typed::space, pair>::range_map_pw_multi_aff() const +{ + auto res = isl::space::range_map_pw_multi_aff(); + return typed::pw_multi_aff, pair>, pair>(res); +} + +template +typed::space, pair> typed::space, pair>::range_reverse() const +{ + auto res = isl::space::range_reverse(); + return typed::space, pair>(res); +} + +template +typed::space, pair> typed::space, pair>::reverse() const +{ + auto res = isl::space::reverse(); + return typed::space, pair>(res); +} + +template +typed::space, Range>, Range2> typed::space, pair>::uncurry() const +{ + auto res = isl::space::uncurry(); + return typed::space, Range>, Range2>(res); +} + +template +typed::map, pair> typed::space, pair>::universe_map() const +{ + auto res = isl::space::universe_map(); + return typed::map, pair>(res); +} + +template +typed::space, pair>> typed::space, pair>::wrap() const +{ + auto res = isl::space::wrap(); + return typed::space, pair>>(res); +} + +template +typed::multi_aff, pair> typed::space, pair>::zero_multi_aff() const +{ + auto res = isl::space::zero_multi_aff(); + return typed::multi_aff, pair>(res); +} + +template +typed::multi_pw_aff, pair> typed::space, pair>::zero_multi_pw_aff() const +{ + auto res = isl::space::zero_multi_pw_aff(); + return typed::multi_pw_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::space, pair>::zero_multi_union_pw_aff() const +{ + auto res = isl::space::zero_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::union_map::union_map(const typed::basic_map &bmap) + : isl::union_map(bmap) +{ +} + +template +typed::union_map::union_map(const typed::map &map) + : isl::union_map(map) +{ +} + +template +typed::union_map::union_map(const isl::ctx &ctx, const std::string &str) + : isl::union_map(ctx, str) +{ +} + +template +template +typed::union_map typed::union_map::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_domain(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_domain(const typed::map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_range(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_range(const typed::map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +typed::map typed::union_map::as_map() const +{ + auto res = isl::union_map::as_map(); + return typed::map(res); +} + +template +typed::multi_union_pw_aff typed::union_map::as_multi_union_pw_aff() const +{ + auto res = isl::union_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_map::as_union_pw_multi_aff() const +{ + auto res = isl::union_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_set typed::union_map::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::union_map::bind_range(tuple); + return typed::union_set(res); +} + +template +typed::union_map typed::union_map::coalesce() const +{ + auto res = isl::union_map::coalesce(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::detect_equalities() const +{ + auto res = isl::union_map::detect_equalities(); + return typed::union_map(res); +} + +template +typed::union_set typed::union_map::domain() const +{ + auto res = isl::union_map::domain(); + return typed::union_set(res); +} + +template +typed::union_map, Domain> typed::union_map::domain_map() const +{ + auto res = isl::union_map::domain_map(); + return typed::union_map, Domain>(res); +} + +template +typed::union_pw_multi_aff, Domain> typed::union_map::domain_map_union_pw_multi_aff() const +{ + auto res = isl::union_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Domain>(res); +} + +template +template +typed::union_map, Range> typed::union_map::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Range>(res); +} + +template +template +typed::union_map, Range> typed::union_map::domain_product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Range>(res); +} + +template +template +typed::union_map, Range> typed::union_map::domain_product(const typed::map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Range>(res); +} + +template +typed::union_map typed::union_map::drop_unused_params() const +{ + auto res = isl::union_map::drop_unused_params(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::empty(const isl::ctx &ctx) +{ + auto res = isl::union_map::empty(ctx); + return typed::union_map(res); +} + +template +bool typed::union_map::every_map(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map(arg0)); + }; + return isl::union_map::every_map(lambda_test); +} + +template +typed::map typed::union_map::extract_map(const typed::space &space) const +{ + auto res = isl::union_map::extract_map(space); + return typed::map(res); +} + +template +void typed::union_map::foreach_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::union_map::foreach_map(lambda_fn); +} + +template +typed::union_map typed::union_map::gist(const typed::union_map &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist(const typed::basic_map &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist(const typed::map &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::basic_set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::point &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect(const typed::union_map &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect(const typed::map &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_domain(const typed::space &space) const +{ + auto res = isl::union_map::intersect_domain(space); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::union_map::intersect_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_range(const typed::space &space) const +{ + auto res = isl::union_map::intersect_range(space); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::union_map::intersect_range(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::lexmax() const +{ + auto res = isl::union_map::lexmax(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::lexmin() const +{ + auto res = isl::union_map::lexmin(); + return typed::union_map(res); +} + +template +typed::map_list typed::union_map::map_list() const +{ + auto res = isl::union_map::map_list(); + return typed::map_list(res); +} + +template +typed::set<> typed::union_map::params() const +{ + auto res = isl::union_map::params(); + return typed::set<>(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::union_map::preimage_domain(ma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::union_map::preimage_domain(mpa); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_map::preimage_domain(pma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::union_map::preimage_range(ma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_map::preimage_range(pma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::union_map, pair> typed::union_map::product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map::product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map::product(const typed::map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map typed::union_map::project_out_all_params() const +{ + auto res = isl::union_map::project_out_all_params(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::project_out_param(const typed::id &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::project_out_param(const std::string &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::project_out_param(const typed::id_list &list) const +{ + auto res = isl::union_map::project_out_param(list); + return typed::union_map(res); +} + +template +typed::union_set typed::union_map::range() const +{ + auto res = isl::union_map::range(); + return typed::union_set(res); +} + +template +typed::union_map, Range> typed::union_map::range_map() const +{ + auto res = isl::union_map::range_map(); + return typed::union_map, Range>(res); +} + +template +template +typed::union_map> typed::union_map::range_product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map::range_product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map::range_product(const typed::map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map>(res); +} + +template +typed::union_map typed::union_map::reverse() const +{ + auto res = isl::union_map::reverse(); + return typed::union_map(res); +} + +template +typed::space<> typed::union_map::space() const +{ + auto res = isl::union_map::space(); + return typed::space<>(res); +} + +template +typed::union_map typed::union_map::subtract(const typed::union_map &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract(const typed::map &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::basic_set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::point &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::basic_set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::point &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::unite(const typed::union_map &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::unite(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::unite(const typed::map &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::universe() const +{ + auto res = isl::union_map::universe(); + return typed::union_map(res); +} + +template +typed::union_set> typed::union_map::wrap() const +{ + auto res = isl::union_map::wrap(); + return typed::union_set>(res); +} + +template +typed::union_map, Range2>::union_map(const typed::basic_map, Range2> &bmap) + : isl::union_map(bmap) +{ +} + +template +typed::union_map, Range2>::union_map(const typed::map, Range2> &map) + : isl::union_map(map) +{ +} + +template +typed::union_map, Range2>::union_map(const isl::ctx &ctx, const std::string &str) + : isl::union_map(ctx, str) +{ +} + +template +template +typed::union_map typed::union_map, Range2>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map, Range2>::apply_domain(const typed::basic_map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map, Range2>::apply_domain(const typed::map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map, Arg3> typed::union_map, Range2>::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::union_map, Range2>::apply_range(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::union_map, Range2>::apply_range(const typed::map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Arg3>(res); +} + +template +typed::map, Range2> typed::union_map, Range2>::as_map() const +{ + auto res = isl::union_map::as_map(); + return typed::map, Range2>(res); +} + +template +typed::multi_union_pw_aff, Range2> typed::union_map, Range2>::as_multi_union_pw_aff() const +{ + auto res = isl::union_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range2>(res); +} + +template +typed::union_pw_multi_aff, Range2> typed::union_map, Range2>::as_union_pw_multi_aff() const +{ + auto res = isl::union_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +typed::union_set> typed::union_map, Range2>::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::union_map::bind_range(tuple); + return typed::union_set>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::coalesce() const +{ + auto res = isl::union_map::coalesce(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map> typed::union_map, Range2>::curry() const +{ + auto res = isl::union_map::curry(); + return typed::union_map>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::detect_equalities() const +{ + auto res = isl::union_map::detect_equalities(); + return typed::union_map, Range2>(res); +} + +template +typed::union_set> typed::union_map, Range2>::domain() const +{ + auto res = isl::union_map::domain(); + return typed::union_set>(res); +} + +template +typed::union_map typed::union_map, Range2>::domain_factor_domain() const +{ + auto res = isl::union_map::domain_factor_domain(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map, Range2>::domain_factor_range() const +{ + auto res = isl::union_map::domain_factor_range(); + return typed::union_map(res); +} + +template +typed::union_map, Range2>, pair> typed::union_map, Range2>::domain_map() const +{ + auto res = isl::union_map::domain_map(); + return typed::union_map, Range2>, pair>(res); +} + +template +typed::union_pw_multi_aff, Range2>, pair> typed::union_map, Range2>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::union_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Range2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, Range2> typed::union_map, Range2>::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, Range2>(res); +} + +template +template +typed::union_map, Domain2>, Range2> typed::union_map, Range2>::domain_product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, Range2>(res); +} + +template +template +typed::union_map, Domain2>, Range2> typed::union_map, Range2>::domain_product(const typed::map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::domain_reverse() const +{ + auto res = isl::union_map::domain_reverse(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::drop_unused_params() const +{ + auto res = isl::union_map::drop_unused_params(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_map::empty(ctx); + return typed::union_map, Range2>(res); +} + +template +bool typed::union_map, Range2>::every_map(const std::function, Range2>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, Range2>(arg0)); + }; + return isl::union_map::every_map(lambda_test); +} + +template +typed::map, Range2> typed::union_map, Range2>::extract_map(const typed::space, Range2> &space) const +{ + auto res = isl::union_map::extract_map(space); + return typed::map, Range2>(res); +} + +template +void typed::union_map, Range2>::foreach_map(const std::function, Range2>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, Range2>(arg0)); + }; + return isl::union_map::foreach_map(lambda_fn); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist(const typed::union_map, Range2> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist(const typed::basic_map, Range2> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist(const typed::map, Range2> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_domain(const typed::basic_set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_domain(const typed::point> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_domain(const typed::set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect(const typed::basic_map, Range2> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect(const typed::map, Range2> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::union_map::intersect_domain(space); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_map::intersect_domain(uset); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_domain_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_domain_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_range(const typed::space &space) const +{ + auto res = isl::union_map::intersect_range(space); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::union_map::intersect_range(uset); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::lexmax() const +{ + auto res = isl::union_map::lexmax(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::lexmin() const +{ + auto res = isl::union_map::lexmin(); + return typed::union_map, Range2>(res); +} + +template +typed::map_list, Range2> typed::union_map, Range2>::map_list() const +{ + auto res = isl::union_map::map_list(); + return typed::map_list, Range2>(res); +} + +template +typed::set<> typed::union_map, Range2>::params() const +{ + auto res = isl::union_map::params(); + return typed::set<>(res); +} + +template +template +typed::union_map typed::union_map, Range2>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::union_map::preimage_domain(ma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map, Range2>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::union_map::preimage_domain(mpa); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map, Range2>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_map::preimage_domain(pma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map, Range2>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::union_map, Arg3> typed::union_map, Range2>::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::union_map::preimage_range(ma); + return typed::union_map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::union_map, Range2>::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_map::preimage_range(pma); + return typed::union_map, Arg3>(res); +} + +template +template +typed::union_map, Arg3> typed::union_map, Range2>::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_map::preimage_range(upma); + return typed::union_map, Arg3>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, Range2>::product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, Range2>::product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, Range2>::product(const typed::map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::project_out_all_params() const +{ + auto res = isl::union_map::project_out_all_params(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::project_out_param(const typed::id &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::project_out_param(const std::string &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::union_map::project_out_param(list); + return typed::union_map, Range2>(res); +} + +template +typed::union_set typed::union_map, Range2>::range() const +{ + auto res = isl::union_map::range(); + return typed::union_set(res); +} + +template +typed::union_map, Range2>, Range2> typed::union_map, Range2>::range_map() const +{ + auto res = isl::union_map::range_map(); + return typed::union_map, Range2>, Range2>(res); +} + +template +template +typed::union_map, pair> typed::union_map, Range2>::range_product(const typed::union_map, Arg3> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map, Range2>::range_product(const typed::basic_map, Arg3> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map, Range2>::range_product(const typed::map, Arg3> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map> typed::union_map, Range2>::reverse() const +{ + auto res = isl::union_map::reverse(); + return typed::union_map>(res); +} + +template +typed::space<> typed::union_map, Range2>::space() const +{ + auto res = isl::union_map::space(); + return typed::space<>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract(const typed::basic_map, Range2> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract(const typed::map, Range2> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_domain(const typed::basic_set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_domain(const typed::point> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_domain(const typed::set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_range(const typed::basic_set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_range(const typed::point &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::subtract_range(const typed::set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::unite(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::unite(const typed::basic_map, Range2> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::unite(const typed::map, Range2> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, Range2> typed::union_map, Range2>::universe() const +{ + auto res = isl::union_map::universe(); + return typed::union_map, Range2>(res); +} + +template +typed::union_set, Range2>> typed::union_map, Range2>::wrap() const +{ + auto res = isl::union_map::wrap(); + return typed::union_set, Range2>>(res); +} + +template +typed::union_map::union_map(const typed::basic_map &bmap) + : isl::union_map(bmap) +{ +} + +template +typed::union_map::union_map(const typed::map &map) + : isl::union_map(map) +{ +} + +template +typed::union_map::union_map(const isl::ctx &ctx, const std::string &str) + : isl::union_map(ctx, str) +{ +} + +template +template +typed::union_map typed::union_map::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_domain(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_domain(const typed::map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_range(const typed::union_map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_range(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::apply_range(const typed::map &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +typed::map typed::union_map::as_map() const +{ + auto res = isl::union_map::as_map(); + return typed::map(res); +} + +template +typed::multi_union_pw_aff typed::union_map::as_multi_union_pw_aff() const +{ + auto res = isl::union_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_map::as_union_pw_multi_aff() const +{ + auto res = isl::union_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_set typed::union_map::bind_range(const typed::multi_id &tuple) const +{ + auto res = isl::union_map::bind_range(tuple); + return typed::union_set(res); +} + +template +typed::union_map typed::union_map::coalesce() const +{ + auto res = isl::union_map::coalesce(); + return typed::union_map(res); +} + +template +typed::union_set typed::union_map::deltas() const +{ + auto res = isl::union_map::deltas(); + return typed::union_set(res); +} + +template +typed::union_map typed::union_map::detect_equalities() const +{ + auto res = isl::union_map::detect_equalities(); + return typed::union_map(res); +} + +template +typed::union_set typed::union_map::domain() const +{ + auto res = isl::union_map::domain(); + return typed::union_set(res); +} + +template +typed::union_map, Domain> typed::union_map::domain_map() const +{ + auto res = isl::union_map::domain_map(); + return typed::union_map, Domain>(res); +} + +template +typed::union_pw_multi_aff, Domain> typed::union_map::domain_map_union_pw_multi_aff() const +{ + auto res = isl::union_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, Domain>(res); +} + +template +template +typed::union_map, Domain> typed::union_map::domain_product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain>(res); +} + +template +template +typed::union_map, Domain> typed::union_map::domain_product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain>(res); +} + +template +template +typed::union_map, Domain> typed::union_map::domain_product(const typed::map &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain>(res); +} + +template +typed::union_map typed::union_map::drop_unused_params() const +{ + auto res = isl::union_map::drop_unused_params(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::empty(const isl::ctx &ctx) +{ + auto res = isl::union_map::empty(ctx); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::eq_at(const typed::multi_union_pw_aff &mupa) const +{ + auto res = isl::union_map::eq_at(mupa); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::eq_at(const typed::multi_pw_aff &mupa) const +{ + auto res = isl::union_map::eq_at(mupa); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::eq_at(const typed::union_pw_aff &mupa) const +{ + auto res = isl::union_map::eq_at(mupa); + return typed::union_map(res); +} + +template +bool typed::union_map::every_map(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map(arg0)); + }; + return isl::union_map::every_map(lambda_test); +} + +template +typed::map typed::union_map::extract_map(const typed::space &space) const +{ + auto res = isl::union_map::extract_map(space); + return typed::map(res); +} + +template +void typed::union_map::foreach_map(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map(arg0)); + }; + return isl::union_map::foreach_map(lambda_fn); +} + +template +typed::union_map typed::union_map::gist(const typed::union_map &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist(const typed::basic_map &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist(const typed::map &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::basic_set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::point &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_domain(const typed::set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect(const typed::union_map &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect(const typed::map &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_domain(const typed::space &space) const +{ + auto res = isl::union_map::intersect_domain(space); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::union_map::intersect_domain(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_range(const typed::space &space) const +{ + auto res = isl::union_map::intersect_range(space); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::intersect_range(const typed::union_set &uset) const +{ + auto res = isl::union_map::intersect_range(uset); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::lexmax() const +{ + auto res = isl::union_map::lexmax(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::lexmin() const +{ + auto res = isl::union_map::lexmin(); + return typed::union_map(res); +} + +template +typed::map_list typed::union_map::map_list() const +{ + auto res = isl::union_map::map_list(); + return typed::map_list(res); +} + +template +typed::set<> typed::union_map::params() const +{ + auto res = isl::union_map::params(); + return typed::set<>(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::union_map::preimage_domain(ma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::union_map::preimage_domain(mpa); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_map::preimage_domain(pma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_map::preimage_domain(upma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_range(const typed::multi_aff &ma) const +{ + auto res = isl::union_map::preimage_range(ma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_range(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_map::preimage_range(pma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map::preimage_range(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::union_map, pair> typed::union_map::product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map::product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map::product(const typed::map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map typed::union_map::project_out_all_params() const +{ + auto res = isl::union_map::project_out_all_params(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::project_out_param(const typed::id &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::project_out_param(const std::string &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::project_out_param(const typed::id_list &list) const +{ + auto res = isl::union_map::project_out_param(list); + return typed::union_map(res); +} + +template +typed::union_set typed::union_map::range() const +{ + auto res = isl::union_map::range(); + return typed::union_set(res); +} + +template +typed::union_map, Domain> typed::union_map::range_map() const +{ + auto res = isl::union_map::range_map(); + return typed::union_map, Domain>(res); +} + +template +template +typed::union_map> typed::union_map::range_product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map::range_product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map::range_product(const typed::map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map>(res); +} + +template +typed::union_map typed::union_map::reverse() const +{ + auto res = isl::union_map::reverse(); + return typed::union_map(res); +} + +template +typed::space<> typed::union_map::space() const +{ + auto res = isl::union_map::space(); + return typed::space<>(res); +} + +template +typed::union_map typed::union_map::subtract(const typed::union_map &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract(const typed::map &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::basic_set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::point &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_domain(const typed::set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::union_set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::basic_set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::point &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::subtract_range(const typed::set &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::unite(const typed::union_map &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::unite(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::unite(const typed::map &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map::universe() const +{ + auto res = isl::union_map::universe(); + return typed::union_map(res); +} + +template +typed::union_set> typed::union_map::wrap() const +{ + auto res = isl::union_map::wrap(); + return typed::union_set>(res); +} + +template +typed::union_map>::union_map(const typed::basic_map> &bmap) + : isl::union_map(bmap) +{ +} + +template +typed::union_map>::union_map(const typed::map> &map) + : isl::union_map(map) +{ +} + +template +typed::union_map>::union_map(const isl::ctx &ctx, const std::string &str) + : isl::union_map(ctx, str) +{ +} + +template +template +typed::union_map> typed::union_map>::apply_domain(const typed::union_map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map>::apply_domain(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map>::apply_domain(const typed::map &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map typed::union_map>::apply_range(const typed::union_map, Arg3> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map>::apply_range(const typed::basic_map, Arg3> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map>::apply_range(const typed::map, Arg3> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map(res); +} + +template +typed::map> typed::union_map>::as_map() const +{ + auto res = isl::union_map::as_map(); + return typed::map>(res); +} + +template +typed::multi_union_pw_aff> typed::union_map>::as_multi_union_pw_aff() const +{ + auto res = isl::union_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_map>::as_union_pw_multi_aff() const +{ + auto res = isl::union_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_set typed::union_map>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::union_map::bind_range(tuple); + return typed::union_set(res); +} + +template +typed::union_map> typed::union_map>::coalesce() const +{ + auto res = isl::union_map::coalesce(); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::detect_equalities() const +{ + auto res = isl::union_map::detect_equalities(); + return typed::union_map>(res); +} + +template +typed::union_set typed::union_map>::domain() const +{ + auto res = isl::union_map::domain(); + return typed::union_set(res); +} + +template +typed::union_map>, Domain> typed::union_map>::domain_map() const +{ + auto res = isl::union_map::domain_map(); + return typed::union_map>, Domain>(res); +} + +template +typed::union_pw_multi_aff>, Domain> typed::union_map>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::union_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff>, Domain>(res); +} + +template +template +typed::union_map, pair> typed::union_map>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map>::domain_product(const typed::basic_map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map>::domain_product(const typed::map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map> typed::union_map>::drop_unused_params() const +{ + auto res = isl::union_map::drop_unused_params(); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_map::empty(ctx); + return typed::union_map>(res); +} + +template +bool typed::union_map>::every_map(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map>(arg0)); + }; + return isl::union_map::every_map(lambda_test); +} + +template +typed::map> typed::union_map>::extract_map(const typed::space> &space) const +{ + auto res = isl::union_map::extract_map(space); + return typed::map>(res); +} + +template +void typed::union_map>::foreach_map(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map>(arg0)); + }; + return isl::union_map::foreach_map(lambda_fn); +} + +template +typed::union_map> typed::union_map>::gist(const typed::union_map> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist(const typed::basic_map> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist(const typed::map> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_domain(const typed::union_set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_domain(const typed::basic_set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_domain(const typed::point &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_domain(const typed::set &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect(const typed::union_map> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect(const typed::basic_map> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect(const typed::map> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_domain(const typed::space &space) const +{ + auto res = isl::union_map::intersect_domain(space); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::union_map::intersect_domain(uset); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_range(const typed::space> &space) const +{ + auto res = isl::union_map::intersect_range(space); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::union_map::intersect_range(uset); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_range_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_range_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::lexmax() const +{ + auto res = isl::union_map::lexmax(); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::lexmin() const +{ + auto res = isl::union_map::lexmin(); + return typed::union_map>(res); +} + +template +typed::map_list> typed::union_map>::map_list() const +{ + auto res = isl::union_map::map_list(); + return typed::map_list>(res); +} + +template +typed::set<> typed::union_map>::params() const +{ + auto res = isl::union_map::params(); + return typed::set<>(res); +} + +template +template +typed::union_map> typed::union_map>::preimage_domain(const typed::multi_aff &ma) const +{ + auto res = isl::union_map::preimage_domain(ma); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map>::preimage_domain(const typed::multi_pw_aff &mpa) const +{ + auto res = isl::union_map::preimage_domain(mpa); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map>::preimage_domain(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_map::preimage_domain(pma); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map>::preimage_domain(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::union_map typed::union_map>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::union_map::preimage_range(ma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_map::preimage_range(pma); + return typed::union_map(res); +} + +template +template +typed::union_map typed::union_map>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_map::preimage_range(upma); + return typed::union_map(res); +} + +template +template +typed::union_map, pair, Arg3>> typed::union_map>::product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair, Arg3>>(res); +} + +template +template +typed::union_map, pair, Arg3>> typed::union_map>::product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair, Arg3>>(res); +} + +template +template +typed::union_map, pair, Arg3>> typed::union_map>::product(const typed::map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, pair, Arg3>>(res); +} + +template +typed::union_map> typed::union_map>::project_out_all_params() const +{ + auto res = isl::union_map::project_out_all_params(); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::project_out_param(const typed::id &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::project_out_param(const std::string &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::union_map::project_out_param(list); + return typed::union_map>(res); +} + +template +typed::union_set> typed::union_map>::range() const +{ + auto res = isl::union_map::range(); + return typed::union_set>(res); +} + +template +typed::union_map typed::union_map>::range_factor_domain() const +{ + auto res = isl::union_map::range_factor_domain(); + return typed::union_map(res); +} + +template +typed::union_map typed::union_map>::range_factor_range() const +{ + auto res = isl::union_map::range_factor_range(); + return typed::union_map(res); +} + +template +typed::union_map>, pair> typed::union_map>::range_map() const +{ + auto res = isl::union_map::range_map(); + return typed::union_map>, pair>(res); +} + +template +template +typed::union_map, Arg3>> typed::union_map>::range_product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, Arg3>>(res); +} + +template +template +typed::union_map, Arg3>> typed::union_map>::range_product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, Arg3>>(res); +} + +template +template +typed::union_map, Arg3>> typed::union_map>::range_product(const typed::map &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, Arg3>>(res); +} + +template +typed::union_map> typed::union_map>::range_reverse() const +{ + auto res = isl::union_map::range_reverse(); + return typed::union_map>(res); +} + +template +typed::union_map, Domain> typed::union_map>::reverse() const +{ + auto res = isl::union_map::reverse(); + return typed::union_map, Domain>(res); +} + +template +typed::space<> typed::union_map>::space() const +{ + auto res = isl::union_map::space(); + return typed::space<>(res); +} + +template +typed::union_map> typed::union_map>::subtract(const typed::union_map> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract(const typed::basic_map> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract(const typed::map> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_domain(const typed::union_set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_domain(const typed::basic_set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_domain(const typed::point &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_domain(const typed::set &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_range(const typed::basic_set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_range(const typed::point> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::subtract_range(const typed::set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map>(res); +} + +template +typed::union_map, Range2> typed::union_map>::uncurry() const +{ + auto res = isl::union_map::uncurry(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map> typed::union_map>::unite(const typed::union_map> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::unite(const typed::basic_map> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::unite(const typed::map> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map>::universe() const +{ + auto res = isl::union_map::universe(); + return typed::union_map>(res); +} + +template +typed::union_set>> typed::union_map>::wrap() const +{ + auto res = isl::union_map::wrap(); + return typed::union_set>>(res); +} + +template +typed::union_map, pair>::union_map(const typed::basic_map, pair> &bmap) + : isl::union_map(bmap) +{ +} + +template +typed::union_map, pair>::union_map(const typed::map, pair> &map) + : isl::union_map(map) +{ +} + +template +typed::union_map, pair>::union_map(const isl::ctx &ctx, const std::string &str) + : isl::union_map(ctx, str) +{ +} + +template +template +typed::union_map> typed::union_map, pair>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::apply_domain(const typed::basic_map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::apply_domain(const typed::map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map, Range2> typed::union_map, pair>::apply_range(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::union_map, pair>::apply_range(const typed::basic_map, Range2> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::union_map, pair>::apply_range(const typed::map, Range2> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Range2>(res); +} + +template +typed::map, pair> typed::union_map, pair>::as_map() const +{ + auto res = isl::union_map::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::union_map, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::union_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_map, pair>::as_union_pw_multi_aff() const +{ + auto res = isl::union_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_set> typed::union_map, pair>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::union_map::bind_range(tuple); + return typed::union_set>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::coalesce() const +{ + auto res = isl::union_map::coalesce(); + return typed::union_map, pair>(res); +} + +template +typed::union_map>> typed::union_map, pair>::curry() const +{ + auto res = isl::union_map::curry(); + return typed::union_map>>(res); +} + +template +typed::union_set> typed::union_map, pair>::deltas() const +{ + auto res = isl::union_map::deltas(); + return typed::union_set>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::detect_equalities() const +{ + auto res = isl::union_map::detect_equalities(); + return typed::union_map, pair>(res); +} + +template +typed::union_set> typed::union_map, pair>::domain() const +{ + auto res = isl::union_map::domain(); + return typed::union_set>(res); +} + +template +typed::union_map> typed::union_map, pair>::domain_factor_domain() const +{ + auto res = isl::union_map::domain_factor_domain(); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map, pair>::domain_factor_range() const +{ + auto res = isl::union_map::domain_factor_range(); + return typed::union_map>(res); +} + +template +typed::union_map, pair>, pair> typed::union_map, pair>::domain_map() const +{ + auto res = isl::union_map::domain_map(); + return typed::union_map, pair>, pair>(res); +} + +template +typed::union_pw_multi_aff, pair>, pair> typed::union_map, pair>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::union_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, pair>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, pair>::domain_product(const typed::basic_map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, pair>::domain_product(const typed::map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::domain_reverse() const +{ + auto res = isl::union_map::domain_reverse(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::drop_unused_params() const +{ + auto res = isl::union_map::drop_unused_params(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_map::empty(ctx); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map, pair>::eq_at(const typed::multi_union_pw_aff, Range> &mupa) const +{ + auto res = isl::union_map::eq_at(mupa); + return typed::union_map, pair>(res); +} + +template +template +typed::union_map, pair> typed::union_map, pair>::eq_at(const typed::multi_pw_aff, Range> &mupa) const +{ + auto res = isl::union_map::eq_at(mupa); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::eq_at(const typed::union_pw_aff, Anonymous> &mupa) const +{ + auto res = isl::union_map::eq_at(mupa); + return typed::union_map, pair>(res); +} + +template +bool typed::union_map, pair>::every_map(const std::function, pair>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, pair>(arg0)); + }; + return isl::union_map::every_map(lambda_test); +} + +template +typed::map, pair> typed::union_map, pair>::extract_map(const typed::space, pair> &space) const +{ + auto res = isl::union_map::extract_map(space); + return typed::map, pair>(res); +} + +template +void typed::union_map, pair>::foreach_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, pair>(arg0)); + }; + return isl::union_map::foreach_map(lambda_fn); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist(const typed::union_map, pair> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist(const typed::basic_map, pair> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist(const typed::map, pair> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::basic_set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::point> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect(const typed::union_map, pair> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect(const typed::basic_map, pair> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect(const typed::map, pair> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::union_map::intersect_domain(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_map::intersect_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range(const typed::space> &space) const +{ + auto res = isl::union_map::intersect_range(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::union_map::intersect_range(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::lexmax() const +{ + auto res = isl::union_map::lexmax(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::lexmin() const +{ + auto res = isl::union_map::lexmin(); + return typed::union_map, pair>(res); +} + +template +typed::map_list, pair> typed::union_map, pair>::map_list() const +{ + auto res = isl::union_map::map_list(); + return typed::map_list, pair>(res); +} + +template +typed::set<> typed::union_map, pair>::params() const +{ + auto res = isl::union_map::params(); + return typed::set<>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::union_map::preimage_domain(ma); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::union_map::preimage_domain(mpa); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_map::preimage_domain(pma); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::union_map, Range2> typed::union_map, pair>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::union_map::preimage_range(ma); + return typed::union_map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::union_map, pair>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_map::preimage_range(pma); + return typed::union_map, Range2>(res); +} + +template +template +typed::union_map, Range2> typed::union_map, pair>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_map::preimage_range(upma); + return typed::union_map, Range2>(res); +} + +template +template +typed::union_map, Domain2>, pair, Range2>> typed::union_map, pair>::product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair, Range2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Range2>> typed::union_map, pair>::product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair, Range2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Range2>> typed::union_map, pair>::product(const typed::map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair, Range2>>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_all_params() const +{ + auto res = isl::union_map::project_out_all_params(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_param(const typed::id &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_param(const std::string &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::union_map::project_out_param(list); + return typed::union_map, pair>(res); +} + +template +typed::union_set> typed::union_map, pair>::range() const +{ + auto res = isl::union_map::range(); + return typed::union_set>(res); +} + +template +typed::union_map, T1> typed::union_map, pair>::range_factor_domain() const +{ + auto res = isl::union_map::range_factor_domain(); + return typed::union_map, T1>(res); +} + +template +typed::union_map, T2> typed::union_map, pair>::range_factor_range() const +{ + auto res = isl::union_map::range_factor_range(); + return typed::union_map, T2>(res); +} + +template +typed::union_map, pair>, pair> typed::union_map, pair>::range_map() const +{ + auto res = isl::union_map::range_map(); + return typed::union_map, pair>, pair>(res); +} + +template +template +typed::union_map, pair, Range2>> typed::union_map, pair>::range_product(const typed::union_map, Range2> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair, Range2>>(res); +} + +template +template +typed::union_map, pair, Range2>> typed::union_map, pair>::range_product(const typed::basic_map, Range2> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair, Range2>>(res); +} + +template +template +typed::union_map, pair, Range2>> typed::union_map, pair>::range_product(const typed::map, Range2> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair, Range2>>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::range_reverse() const +{ + auto res = isl::union_map::range_reverse(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::reverse() const +{ + auto res = isl::union_map::reverse(); + return typed::union_map, pair>(res); +} + +template +typed::space<> typed::union_map, pair>::space() const +{ + auto res = isl::union_map::space(); + return typed::space<>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract(const typed::union_map, pair> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract(const typed::basic_map, pair> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract(const typed::map, pair> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::basic_set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::point> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::basic_set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::point> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, T1>, T2> typed::union_map, pair>::uncurry() const +{ + auto res = isl::union_map::uncurry(); + return typed::union_map, T1>, T2>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::unite(const typed::union_map, pair> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::unite(const typed::basic_map, pair> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::unite(const typed::map, pair> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::universe() const +{ + auto res = isl::union_map::universe(); + return typed::union_map, pair>(res); +} + +template +typed::union_set, pair>> typed::union_map, pair>::wrap() const +{ + auto res = isl::union_map::wrap(); + return typed::union_set, pair>>(res); +} + +template +typed::union_map, pair>::union_map(const typed::basic_map, pair> &bmap) + : isl::union_map(bmap) +{ +} + +template +typed::union_map, pair>::union_map(const typed::map, pair> &map) + : isl::union_map(map) +{ +} + +template +typed::union_map, pair>::union_map(const isl::ctx &ctx, const std::string &str) + : isl::union_map(ctx, str) +{ +} + +template +template +typed::union_map> typed::union_map, pair>::apply_domain(const typed::union_map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::apply_domain(const typed::basic_map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::apply_domain(const typed::map, Domain2> &umap2) const +{ + auto res = isl::union_map::apply_domain(umap2); + return typed::union_map>(res); +} + +template +template +typed::union_map, Arg2> typed::union_map, pair>::apply_range(const typed::union_map, Arg2> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::union_map, pair>::apply_range(const typed::basic_map, Arg2> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::union_map, pair>::apply_range(const typed::map, Arg2> &umap2) const +{ + auto res = isl::union_map::apply_range(umap2); + return typed::union_map, Arg2>(res); +} + +template +typed::map, pair> typed::union_map, pair>::as_map() const +{ + auto res = isl::union_map::as_map(); + return typed::map, pair>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::union_map, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::union_map::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_map, pair>::as_union_pw_multi_aff() const +{ + auto res = isl::union_map::as_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_set> typed::union_map, pair>::bind_range(const typed::multi_id> &tuple) const +{ + auto res = isl::union_map::bind_range(tuple); + return typed::union_set>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::coalesce() const +{ + auto res = isl::union_map::coalesce(); + return typed::union_map, pair>(res); +} + +template +typed::union_map>> typed::union_map, pair>::curry() const +{ + auto res = isl::union_map::curry(); + return typed::union_map>>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::detect_equalities() const +{ + auto res = isl::union_map::detect_equalities(); + return typed::union_map, pair>(res); +} + +template +typed::union_set> typed::union_map, pair>::domain() const +{ + auto res = isl::union_map::domain(); + return typed::union_set>(res); +} + +template +typed::union_map> typed::union_map, pair>::domain_factor_domain() const +{ + auto res = isl::union_map::domain_factor_domain(); + return typed::union_map>(res); +} + +template +typed::union_map> typed::union_map, pair>::domain_factor_range() const +{ + auto res = isl::union_map::domain_factor_range(); + return typed::union_map>(res); +} + +template +typed::union_map, pair>, pair> typed::union_map, pair>::domain_map() const +{ + auto res = isl::union_map::domain_map(); + return typed::union_map, pair>, pair>(res); +} + +template +typed::union_pw_multi_aff, pair>, pair> typed::union_map, pair>::domain_map_union_pw_multi_aff() const +{ + auto res = isl::union_map::domain_map_union_pw_multi_aff(); + return typed::union_pw_multi_aff, pair>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, pair>::domain_product(const typed::union_map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, pair>::domain_product(const typed::basic_map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +template +typed::union_map, Domain2>, pair> typed::union_map, pair>::domain_product(const typed::map> &umap2) const +{ + auto res = isl::union_map::domain_product(umap2); + return typed::union_map, Domain2>, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::domain_reverse() const +{ + auto res = isl::union_map::domain_reverse(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::drop_unused_params() const +{ + auto res = isl::union_map::drop_unused_params(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_map::empty(ctx); + return typed::union_map, pair>(res); +} + +template +bool typed::union_map, pair>::every_map(const std::function, pair>)> &test) const +{ + auto lambda_test = [&] (isl::map arg0) { + return test(typed::map, pair>(arg0)); + }; + return isl::union_map::every_map(lambda_test); +} + +template +typed::map, pair> typed::union_map, pair>::extract_map(const typed::space, pair> &space) const +{ + auto res = isl::union_map::extract_map(space); + return typed::map, pair>(res); +} + +template +void typed::union_map, pair>::foreach_map(const std::function, pair>)> &fn) const +{ + auto lambda_fn = [&] (isl::map arg0) { + return fn(typed::map, pair>(arg0)); + }; + return isl::union_map::foreach_map(lambda_fn); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist(const typed::union_map, pair> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist(const typed::basic_map, pair> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist(const typed::map, pair> &context) const +{ + auto res = isl::union_map::gist(context); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::basic_set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::point> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_domain(const typed::set> &uset) const +{ + auto res = isl::union_map::gist_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_map::gist_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect(const typed::union_map, pair> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect(const typed::basic_map, pair> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect(const typed::map, pair> &umap2) const +{ + auto res = isl::union_map::intersect(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::union_map::intersect_domain(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_map::intersect_domain(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_domain_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::union_map::intersect_domain_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_map::intersect_params(set); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range(const typed::space> &space) const +{ + auto res = isl::union_map::intersect_range(space); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range(const typed::union_set> &uset) const +{ + auto res = isl::union_map::intersect_range(uset); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::union_set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::basic_set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::point &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::intersect_range_wrapped_domain(const typed::set &domain) const +{ + auto res = isl::union_map::intersect_range_wrapped_domain(domain); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::lexmax() const +{ + auto res = isl::union_map::lexmax(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::lexmin() const +{ + auto res = isl::union_map::lexmin(); + return typed::union_map, pair>(res); +} + +template +typed::map_list, pair> typed::union_map, pair>::map_list() const +{ + auto res = isl::union_map::map_list(); + return typed::map_list, pair>(res); +} + +template +typed::set<> typed::union_map, pair>::params() const +{ + auto res = isl::union_map::params(); + return typed::set<>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::multi_aff> &ma) const +{ + auto res = isl::union_map::preimage_domain(ma); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::multi_pw_aff> &mpa) const +{ + auto res = isl::union_map::preimage_domain(mpa); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_map::preimage_domain(pma); + return typed::union_map>(res); +} + +template +template +typed::union_map> typed::union_map, pair>::preimage_domain(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_map::preimage_domain(upma); + return typed::union_map>(res); +} + +template +template +typed::union_map, Arg2> typed::union_map, pair>::preimage_range(const typed::multi_aff> &ma) const +{ + auto res = isl::union_map::preimage_range(ma); + return typed::union_map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::union_map, pair>::preimage_range(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_map::preimage_range(pma); + return typed::union_map, Arg2>(res); +} + +template +template +typed::union_map, Arg2> typed::union_map, pair>::preimage_range(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_map::preimage_range(upma); + return typed::union_map, Arg2>(res); +} + +template +template +typed::union_map, Domain2>, pair, Arg2>> typed::union_map, pair>::product(const typed::union_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Arg2>> typed::union_map, pair>::product(const typed::basic_map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair, Arg2>>(res); +} + +template +template +typed::union_map, Domain2>, pair, Arg2>> typed::union_map, pair>::product(const typed::map &umap2) const +{ + auto res = isl::union_map::product(umap2); + return typed::union_map, Domain2>, pair, Arg2>>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_all_params() const +{ + auto res = isl::union_map::project_out_all_params(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_param(const typed::id &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_param(const std::string &id) const +{ + auto res = isl::union_map::project_out_param(id); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::project_out_param(const typed::id_list &list) const +{ + auto res = isl::union_map::project_out_param(list); + return typed::union_map, pair>(res); +} + +template +typed::union_set> typed::union_map, pair>::range() const +{ + auto res = isl::union_map::range(); + return typed::union_set>(res); +} + +template +typed::union_map, Range> typed::union_map, pair>::range_factor_domain() const +{ + auto res = isl::union_map::range_factor_domain(); + return typed::union_map, Range>(res); +} + +template +typed::union_map, Range2> typed::union_map, pair>::range_factor_range() const +{ + auto res = isl::union_map::range_factor_range(); + return typed::union_map, Range2>(res); +} + +template +typed::union_map, pair>, pair> typed::union_map, pair>::range_map() const +{ + auto res = isl::union_map::range_map(); + return typed::union_map, pair>, pair>(res); +} + +template +template +typed::union_map, pair, Arg2>> typed::union_map, pair>::range_product(const typed::union_map, Arg2> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair, Arg2>>(res); +} + +template +template +typed::union_map, pair, Arg2>> typed::union_map, pair>::range_product(const typed::basic_map, Arg2> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair, Arg2>>(res); +} + +template +template +typed::union_map, pair, Arg2>> typed::union_map, pair>::range_product(const typed::map, Arg2> &umap2) const +{ + auto res = isl::union_map::range_product(umap2); + return typed::union_map, pair, Arg2>>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::range_reverse() const +{ + auto res = isl::union_map::range_reverse(); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::reverse() const +{ + auto res = isl::union_map::reverse(); + return typed::union_map, pair>(res); +} + +template +typed::space<> typed::union_map, pair>::space() const +{ + auto res = isl::union_map::space(); + return typed::space<>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract(const typed::union_map, pair> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract(const typed::basic_map, pair> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract(const typed::map, pair> &umap2) const +{ + auto res = isl::union_map::subtract(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::union_set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::basic_set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::point> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_domain(const typed::set> &dom) const +{ + auto res = isl::union_map::subtract_domain(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::union_set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::basic_set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::point> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::subtract_range(const typed::set> &dom) const +{ + auto res = isl::union_map::subtract_range(dom); + return typed::union_map, pair>(res); +} + +template +typed::union_map, Range>, Range2> typed::union_map, pair>::uncurry() const +{ + auto res = isl::union_map::uncurry(); + return typed::union_map, Range>, Range2>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::unite(const typed::union_map, pair> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::unite(const typed::basic_map, pair> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::unite(const typed::map, pair> &umap2) const +{ + auto res = isl::union_map::unite(umap2); + return typed::union_map, pair>(res); +} + +template +typed::union_map, pair> typed::union_map, pair>::universe() const +{ + auto res = isl::union_map::universe(); + return typed::union_map, pair>(res); +} + +template +typed::union_set, pair>> typed::union_map, pair>::wrap() const +{ + auto res = isl::union_map::wrap(); + return typed::union_set, pair>>(res); +} + +typed::union_pw_aff::union_pw_aff(const typed::aff &aff) + : isl::union_pw_aff(aff) +{ +} + +typed::union_pw_aff::union_pw_aff(const typed::pw_aff &pa) + : isl::union_pw_aff(pa) +{ +} + +typed::union_pw_aff::union_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_aff(ctx, str) +{ +} + +typed::multi_union_pw_aff typed::union_pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::union_pw_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::add(const typed::aff &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::add(const typed::pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +typed::pw_multi_aff typed::union_pw_aff::as_pw_multi_aff() const +{ + auto res = isl::union_pw_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::at(int pos) const +{ + auto res = isl::union_pw_aff::at(pos); + return typed::union_pw_aff(res); +} + +typed::union_set<> typed::union_pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::union_pw_aff::bind(tuple); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_pw_aff::bind(const typed::id &id) const +{ + auto res = isl::union_pw_aff::bind(id); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_pw_aff::bind(const std::string &id) const +{ + auto res = isl::union_pw_aff::bind(id); + return typed::union_set<>(res); +} + +typed::union_pw_aff typed::union_pw_aff::coalesce() const +{ + auto res = isl::union_pw_aff::coalesce(); + return typed::union_pw_aff(res); +} + +typed::union_set<> typed::union_pw_aff::domain() const +{ + auto res = isl::union_pw_aff::domain(); + return typed::union_set<>(res); +} + +typed::union_pw_aff typed::union_pw_aff::drop_unused_params() const +{ + auto res = isl::union_pw_aff::drop_unused_params(); + return typed::union_pw_aff(res); +} + +typed::pw_multi_aff typed::union_pw_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::union_pw_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::gist(const typed::basic_set<> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::gist(const typed::point<> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::gist(const typed::set<> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff_list typed::union_pw_aff::list() const +{ + auto res = isl::union_pw_aff::list(); + return typed::union_pw_aff_list(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::neg() const +{ + auto res = isl::union_pw_aff::neg(); + return typed::multi_union_pw_aff(res); +} + +typed::pw_multi_aff_list typed::union_pw_aff::pw_multi_aff_list() const +{ + auto res = isl::union_pw_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::union_pw_aff::scale(mv); + return typed::multi_union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::scale(const typed::val &v) const +{ + auto res = isl::union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::scale(long v) const +{ + auto res = isl::union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::union_pw_aff::scale_down(mv); + return typed::multi_union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::scale_down(const typed::val &v) const +{ + auto res = isl::union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::scale_down(long v) const +{ + auto res = isl::union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::union_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +typed::space<> typed::union_pw_aff::space() const +{ + auto res = isl::union_pw_aff::space(); + return typed::space<>(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::sub(const typed::union_pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::union_pw_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::sub(const typed::aff &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::sub(const typed::pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +typed::multi_union_pw_aff typed::union_pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::union_add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_multi_aff typed::union_pw_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::union_add(const typed::aff &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff typed::union_pw_aff::union_add(const typed::pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff::union_pw_aff(const typed::aff &aff) + : isl::union_pw_aff(aff) +{ +} + +template +typed::union_pw_aff::union_pw_aff(const typed::pw_aff &pa) + : isl::union_pw_aff(pa) +{ +} + +template +typed::union_pw_aff::union_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_aff(ctx, str) +{ +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::add(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::union_pw_aff::add(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::add(const typed::aff &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::add(const typed::pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::union_pw_aff::as_pw_multi_aff() const +{ + auto res = isl::union_pw_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_map typed::union_pw_aff::as_union_map() const +{ + auto res = isl::union_pw_aff::as_union_map(); + return typed::union_map(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::at(int pos) const +{ + auto res = isl::union_pw_aff::at(pos); + return typed::union_pw_aff(res); +} + +template +typed::union_set typed::union_pw_aff::bind(const typed::multi_id &tuple) const +{ + auto res = isl::union_pw_aff::bind(tuple); + return typed::union_set(res); +} + +template +typed::union_set typed::union_pw_aff::bind(const typed::id &id) const +{ + auto res = isl::union_pw_aff::bind(id); + return typed::union_set(res); +} + +template +typed::union_set typed::union_pw_aff::bind(const std::string &id) const +{ + auto res = isl::union_pw_aff::bind(id); + return typed::union_set(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::coalesce() const +{ + auto res = isl::union_pw_aff::coalesce(); + return typed::union_pw_aff(res); +} + +template +typed::union_set typed::union_pw_aff::domain() const +{ + auto res = isl::union_pw_aff::domain(); + return typed::union_set(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::drop_unused_params() const +{ + auto res = isl::union_pw_aff::drop_unused_params(); + return typed::union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::union_pw_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::union_pw_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::gist(const typed::union_set &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::gist(const typed::basic_set &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::gist(const typed::point &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::gist(const typed::set &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::gist_params(const typed::set<> &context) const +{ + auto res = isl::union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::intersect_domain(const typed::space &space) const +{ + auto res = isl::union_pw_aff::intersect_domain(space); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_aff::intersect_domain(uset); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff_list typed::union_pw_aff::list() const +{ + auto res = isl::union_pw_aff::list(); + return typed::union_pw_aff_list(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::neg() const +{ + auto res = isl::union_pw_aff::neg(); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::multi_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::multi_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::pw_multi_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::pw_multi_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::union_pw_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::pullback(const typed::union_pw_aff &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::pw_multi_aff_list typed::union_pw_aff::pw_multi_aff_list() const +{ + auto res = isl::union_pw_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +template +typed::multi_union_pw_aff> typed::union_pw_aff::range_product(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::union_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_aff::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::scale(const typed::multi_val &mv) const +{ + auto res = isl::union_pw_aff::scale(mv); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::scale(const typed::val &v) const +{ + auto res = isl::union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::scale(long v) const +{ + auto res = isl::union_pw_aff::scale(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::union_pw_aff::scale_down(mv); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::scale_down(const typed::val &v) const +{ + auto res = isl::union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::scale_down(long v) const +{ + auto res = isl::union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::set_at(int pos, const typed::union_pw_aff &el) const +{ + auto res = isl::union_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::union_pw_aff::set_range_tuple(const typed::id &id) const +{ + auto res = isl::union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +template +typed::multi_union_pw_aff typed::union_pw_aff::set_range_tuple(const std::string &id) const +{ + auto res = isl::union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff(res); +} + +template +typed::space<> typed::union_pw_aff::space() const +{ + auto res = isl::union_pw_aff::space(); + return typed::space<>(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::sub(const typed::multi_union_pw_aff &multi2) const +{ + auto res = isl::union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::sub(const typed::union_pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::sub(const typed::aff &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::sub(const typed::pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::subtract_domain(const typed::space &space) const +{ + auto res = isl::union_pw_aff::subtract_domain(space); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_aff::subtract_domain(uset); + return typed::union_pw_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_aff::union_add(const typed::multi_union_pw_aff &mupa2) const +{ + auto res = isl::union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::union_add(const typed::union_pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::union_add(const typed::aff &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff::union_add(const typed::pw_aff &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff, Anonymous>::union_pw_aff(const typed::aff, Anonymous> &aff) + : isl::union_pw_aff(aff) +{ +} + +template +typed::union_pw_aff, Anonymous>::union_pw_aff(const typed::pw_aff, Anonymous> &pa) + : isl::union_pw_aff(pa) +{ +} + +template +typed::union_pw_aff, Anonymous>::union_pw_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_aff(ctx, str) +{ +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::add(const typed::multi_union_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::union_pw_aff::add(multi2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::add(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::union_pw_aff, Anonymous>::add(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_aff::add(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::add(const typed::aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::add(const typed::pw_aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +template +typed::union_pw_multi_aff, Range2> typed::union_pw_aff, Anonymous>::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::apply(upma2); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::union_pw_aff, Anonymous>::as_pw_multi_aff() const +{ + auto res = isl::union_pw_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_map, Anonymous> typed::union_pw_aff, Anonymous>::as_union_map() const +{ + auto res = isl::union_pw_aff::as_union_map(); + return typed::union_map, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::at(int pos) const +{ + auto res = isl::union_pw_aff::at(pos); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_set> typed::union_pw_aff, Anonymous>::bind(const typed::multi_id &tuple) const +{ + auto res = isl::union_pw_aff::bind(tuple); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_pw_aff, Anonymous>::bind(const typed::id &id) const +{ + auto res = isl::union_pw_aff::bind(id); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_pw_aff, Anonymous>::bind(const std::string &id) const +{ + auto res = isl::union_pw_aff::bind(id); + return typed::union_set>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::coalesce() const +{ + auto res = isl::union_pw_aff::coalesce(); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_set> typed::union_pw_aff, Anonymous>::domain() const +{ + auto res = isl::union_pw_aff::domain(); + return typed::union_set>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::drop_unused_params() const +{ + auto res = isl::union_pw_aff::drop_unused_params(); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::pw_multi_aff, Anonymous> typed::union_pw_aff, Anonymous>::extract_pw_multi_aff(const typed::space, Anonymous> &space) const +{ + auto res = isl::union_pw_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::gist(const typed::union_set> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::gist(const typed::basic_set> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::gist(const typed::point> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::gist(const typed::set> &context) const +{ + auto res = isl::union_pw_aff::gist(context); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::gist_params(const typed::set<> &context) const +{ + auto res = isl::union_pw_aff::gist_params(context); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::union_pw_aff::intersect_domain(space); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_pw_aff::intersect_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_domain_wrapped_domain(const typed::basic_set &uset) const +{ + auto res = isl::union_pw_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_domain_wrapped_domain(const typed::point &uset) const +{ + auto res = isl::union_pw_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_domain_wrapped_domain(const typed::set &uset) const +{ + auto res = isl::union_pw_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_aff::intersect_params(set); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff_list, Anonymous> typed::union_pw_aff, Anonymous>::list() const +{ + auto res = isl::union_pw_aff::list(); + return typed::union_pw_aff_list, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::neg() const +{ + auto res = isl::union_pw_aff::neg(); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +template +typed::union_pw_multi_aff, Anonymous> typed::union_pw_aff, Anonymous>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::multi_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::multi_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::pw_multi_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::pw_multi_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::union_pw_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff typed::union_pw_aff, Anonymous>::pullback(const typed::union_pw_aff> &upma) const +{ + auto res = isl::union_pw_aff::pullback(upma); + return typed::union_pw_aff(res); +} + +template +typed::pw_multi_aff_list, Anonymous> typed::union_pw_aff, Anonymous>::pw_multi_aff_list() const +{ + auto res = isl::union_pw_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, Anonymous>(res); +} + +template +template +typed::multi_union_pw_aff, pair> typed::union_pw_aff, Anonymous>::range_product(const typed::multi_union_pw_aff, Range2> &multi2) const +{ + auto res = isl::union_pw_aff::range_product(multi2); + return typed::multi_union_pw_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_aff, Anonymous>::range_product(const typed::union_pw_multi_aff, Range2> &upma2) const +{ + auto res = isl::union_pw_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::scale(const typed::multi_val &mv) const +{ + auto res = isl::union_pw_aff::scale(mv); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::scale(const typed::val &v) const +{ + auto res = isl::union_pw_aff::scale(v); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::scale(long v) const +{ + auto res = isl::union_pw_aff::scale(v); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::scale_down(const typed::multi_val &mv) const +{ + auto res = isl::union_pw_aff::scale_down(mv); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::scale_down(const typed::val &v) const +{ + auto res = isl::union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::scale_down(long v) const +{ + auto res = isl::union_pw_aff::scale_down(v); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::set_at(int pos, const typed::union_pw_aff, Anonymous> &el) const +{ + auto res = isl::union_pw_aff::set_at(pos, el); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +template +typed::multi_union_pw_aff, Range2> typed::union_pw_aff, Anonymous>::set_range_tuple(const typed::id &id) const +{ + auto res = isl::union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff, Range2>(res); +} + +template +template +typed::multi_union_pw_aff, Range2> typed::union_pw_aff, Anonymous>::set_range_tuple(const std::string &id) const +{ + auto res = isl::union_pw_aff::set_range_tuple(id); + return typed::multi_union_pw_aff, Range2>(res); +} + +template +typed::space<> typed::union_pw_aff, Anonymous>::space() const +{ + auto res = isl::union_pw_aff::space(); + return typed::space<>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::sub(const typed::multi_union_pw_aff, Anonymous> &multi2) const +{ + auto res = isl::union_pw_aff::sub(multi2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::sub(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::union_pw_aff, Anonymous>::sub(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_aff::sub(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::sub(const typed::aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::sub(const typed::pw_aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::sub(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::union_pw_aff::subtract_domain(space); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_pw_aff::subtract_domain(uset); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::union_add(const typed::multi_union_pw_aff, Anonymous> &mupa2) const +{ + auto res = isl::union_pw_aff::union_add(mupa2); + return typed::multi_union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::union_add(const typed::union_pw_aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::union_pw_aff, Anonymous>::union_add(const typed::union_pw_multi_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_aff::union_add(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::union_add(const typed::aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +template +typed::union_pw_aff, Anonymous> typed::union_pw_aff, Anonymous>::union_add(const typed::pw_aff, Anonymous> &upa2) const +{ + auto res = isl::union_pw_aff::union_add(upa2); + return typed::union_pw_aff, Anonymous>(res); +} + +typed::union_pw_aff_list::union_pw_aff_list(const isl::ctx &ctx, int n) + : isl::union_pw_aff_list(ctx, n) +{ +} + +typed::union_pw_aff_list::union_pw_aff_list(const typed::union_pw_aff &el) + : isl::union_pw_aff_list(el) +{ +} + +typed::union_pw_aff_list::union_pw_aff_list(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_aff_list(ctx, str) +{ +} + +typed::union_pw_aff_list typed::union_pw_aff_list::add(const typed::union_pw_aff &el) const +{ + auto res = isl::union_pw_aff_list::add(el); + return typed::union_pw_aff_list(res); +} + +typed::union_pw_aff_list typed::union_pw_aff_list::add(const typed::aff &el) const +{ + auto res = isl::union_pw_aff_list::add(el); + return typed::union_pw_aff_list(res); +} + +typed::union_pw_aff_list typed::union_pw_aff_list::add(const typed::pw_aff &el) const +{ + auto res = isl::union_pw_aff_list::add(el); + return typed::union_pw_aff_list(res); +} + +typed::union_pw_aff typed::union_pw_aff_list::at(int index) const +{ + auto res = isl::union_pw_aff_list::at(index); + return typed::union_pw_aff(res); +} + +typed::union_pw_aff_list typed::union_pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::union_pw_aff_list::drop(first, n); + return typed::union_pw_aff_list(res); +} + +void typed::union_pw_aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::union_pw_aff arg0) { + return fn(typed::union_pw_aff(arg0)); + }; + return isl::union_pw_aff_list::foreach(lambda_fn); +} + +void typed::union_pw_aff_list::foreach_scc(const std::function, typed::union_pw_aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::union_pw_aff arg0, isl::union_pw_aff arg1) { + return follows(typed::union_pw_aff(arg0), typed::union_pw_aff(arg1)); + }; + auto lambda_fn = [&] (isl::union_pw_aff_list arg0) { + return fn(typed::union_pw_aff_list(arg0)); + }; + return isl::union_pw_aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +typed::union_pw_aff_list typed::union_pw_aff_list::set_at(int index, const typed::union_pw_aff &el) const +{ + auto res = isl::union_pw_aff_list::set_at(index, el); + return typed::union_pw_aff_list(res); +} + +template +typed::union_pw_aff_list::union_pw_aff_list(const isl::ctx &ctx, int n) + : isl::union_pw_aff_list(ctx, n) +{ +} + +template +typed::union_pw_aff_list::union_pw_aff_list(const typed::union_pw_aff &el) + : isl::union_pw_aff_list(el) +{ +} + +template +typed::union_pw_aff_list::union_pw_aff_list(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_aff_list(ctx, str) +{ +} + +template +typed::union_pw_aff_list typed::union_pw_aff_list::add(const typed::union_pw_aff &el) const +{ + auto res = isl::union_pw_aff_list::add(el); + return typed::union_pw_aff_list(res); +} + +template +typed::union_pw_aff_list typed::union_pw_aff_list::add(const typed::aff &el) const +{ + auto res = isl::union_pw_aff_list::add(el); + return typed::union_pw_aff_list(res); +} + +template +typed::union_pw_aff_list typed::union_pw_aff_list::add(const typed::pw_aff &el) const +{ + auto res = isl::union_pw_aff_list::add(el); + return typed::union_pw_aff_list(res); +} + +template +typed::union_pw_aff typed::union_pw_aff_list::at(int index) const +{ + auto res = isl::union_pw_aff_list::at(index); + return typed::union_pw_aff(res); +} + +template +typed::union_pw_aff_list typed::union_pw_aff_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::union_pw_aff_list::drop(first, n); + return typed::union_pw_aff_list(res); +} + +template +void typed::union_pw_aff_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::union_pw_aff arg0) { + return fn(typed::union_pw_aff(arg0)); + }; + return isl::union_pw_aff_list::foreach(lambda_fn); +} + +template +void typed::union_pw_aff_list::foreach_scc(const std::function, typed::union_pw_aff)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::union_pw_aff arg0, isl::union_pw_aff arg1) { + return follows(typed::union_pw_aff(arg0), typed::union_pw_aff(arg1)); + }; + auto lambda_fn = [&] (isl::union_pw_aff_list arg0) { + return fn(typed::union_pw_aff_list(arg0)); + }; + return isl::union_pw_aff_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::union_pw_aff_list typed::union_pw_aff_list::set_at(int index, const typed::union_pw_aff &el) const +{ + auto res = isl::union_pw_aff_list::set_at(index, el); + return typed::union_pw_aff_list(res); +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const typed::multi_aff &ma) + : isl::union_pw_multi_aff(ma) +{ +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const typed::pw_multi_aff &pma) + : isl::union_pw_multi_aff(pma) +{ +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const typed::union_pw_aff &upa) + : isl::union_pw_multi_aff(upa) +{ +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_multi_aff(ctx, str) +{ +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::union_pw_multi_aff::as_pw_multi_aff() const +{ + auto res = isl::union_pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::coalesce() const +{ + auto res = isl::union_pw_multi_aff::coalesce(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_set<> typed::union_pw_multi_aff::domain() const +{ + auto res = isl::union_pw_multi_aff::domain(); + return typed::union_set<>(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::drop_unused_params() const +{ + auto res = isl::union_pw_multi_aff::drop_unused_params(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::empty(const isl::ctx &ctx) +{ + auto res = isl::union_pw_multi_aff::empty(ctx); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::union_pw_multi_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::union_set<> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::basic_set<> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::point<> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::set<> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list typed::union_pw_multi_aff::pw_multi_aff_list() const +{ + auto res = isl::union_pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +typed::space<> typed::union_pw_multi_aff::space() const +{ + auto res = isl::union_pw_multi_aff::space(); + return typed::space<>(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const typed::multi_aff &ma) + : isl::union_pw_multi_aff(ma) +{ +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const typed::pw_multi_aff &pma) + : isl::union_pw_multi_aff(pma) +{ +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const typed::union_pw_aff &upa) + : isl::union_pw_multi_aff(upa) +{ +} + +template +typed::union_pw_multi_aff::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_multi_aff(ctx, str) +{ +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::add(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::apply(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_union_pw_aff typed::union_pw_multi_aff::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff(res); +} + +template +typed::pw_multi_aff typed::union_pw_multi_aff::as_pw_multi_aff() const +{ + auto res = isl::union_pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff(res); +} + +template +typed::union_map typed::union_pw_multi_aff::as_union_map() const +{ + auto res = isl::union_pw_multi_aff::as_union_map(); + return typed::union_map(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::coalesce() const +{ + auto res = isl::union_pw_multi_aff::coalesce(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_set typed::union_pw_multi_aff::domain() const +{ + auto res = isl::union_pw_multi_aff::domain(); + return typed::union_set(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::drop_unused_params() const +{ + auto res = isl::union_pw_multi_aff::drop_unused_params(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::empty(const isl::ctx &ctx) +{ + auto res = isl::union_pw_multi_aff::empty(ctx); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff typed::union_pw_multi_aff::extract_pw_multi_aff(const typed::space &space) const +{ + auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::union_set &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::basic_set &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::point &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::gist(const typed::set &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_domain(const typed::space &space) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::pullback(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list typed::union_pw_multi_aff::pw_multi_aff_list() const +{ + auto res = isl::union_pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff::range_product(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff::range_product(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff::range_product(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::space<> typed::union_pw_multi_aff::space() const +{ + auto res = isl::union_pw_multi_aff::space(); + return typed::space<>(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::sub(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::subtract_domain(const typed::space &space) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff::union_add(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff, Range>::union_pw_multi_aff(const typed::multi_aff, Range> &ma) + : isl::union_pw_multi_aff(ma) +{ +} + +template +typed::union_pw_multi_aff, Range>::union_pw_multi_aff(const typed::pw_multi_aff, Range> &pma) + : isl::union_pw_multi_aff(pma) +{ +} + +template +typed::union_pw_multi_aff, Range>::union_pw_multi_aff(const typed::union_pw_aff, Range> &upa) + : isl::union_pw_multi_aff(upa) +{ +} + +template +typed::union_pw_multi_aff, Range>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_multi_aff(ctx, str) +{ +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::add(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::add(const typed::multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::add(const typed::pw_multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::add(const typed::union_pw_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range2> typed::union_pw_multi_aff, Range>::apply(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +template +typed::union_pw_multi_aff, Range2> typed::union_pw_multi_aff, Range>::apply(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +template +typed::union_pw_multi_aff, Range2> typed::union_pw_multi_aff, Range>::apply(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::union_pw_multi_aff, Range>::apply(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, Range> typed::union_pw_multi_aff, Range>::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::as_pw_multi_aff() const +{ + auto res = isl::union_pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_map, Range> typed::union_pw_multi_aff, Range>::as_union_map() const +{ + auto res = isl::union_pw_multi_aff::as_union_map(); + return typed::union_map, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::coalesce() const +{ + auto res = isl::union_pw_multi_aff::coalesce(); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_set> typed::union_pw_multi_aff, Range>::domain() const +{ + auto res = isl::union_pw_multi_aff::domain(); + return typed::union_set>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::drop_unused_params() const +{ + auto res = isl::union_pw_multi_aff::drop_unused_params(); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_pw_multi_aff::empty(ctx); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::extract_pw_multi_aff(const typed::space, Range> &space) const +{ + auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::gist(const typed::union_set> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::gist(const typed::basic_set> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::gist(const typed::point> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::gist(const typed::set> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_domain_wrapped_domain(const typed::basic_set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_domain_wrapped_domain(const typed::point &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_domain_wrapped_domain(const typed::set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::preimage_domain_wrapped_domain(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff, Range>::pullback(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::pw_multi_aff_list, Range> typed::union_pw_multi_aff, Range>::pw_multi_aff_list() const +{ + auto res = isl::union_pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, Range>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, Range>::range_product(const typed::union_pw_multi_aff, Range2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, Range>::range_product(const typed::multi_aff, Range2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, Range>::range_product(const typed::pw_multi_aff, Range2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, Range>::range_product(const typed::union_pw_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::space<> typed::union_pw_multi_aff, Range>::space() const +{ + auto res = isl::union_pw_multi_aff::space(); + return typed::space<>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::sub(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::sub(const typed::multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::sub(const typed::pw_multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::sub(const typed::union_pw_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::union_add(const typed::union_pw_multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::union_add(const typed::multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::union_add(const typed::pw_multi_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, Range>::union_add(const typed::union_pw_aff, Range> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff>::union_pw_multi_aff(const typed::multi_aff> &ma) + : isl::union_pw_multi_aff(ma) +{ +} + +template +typed::union_pw_multi_aff>::union_pw_multi_aff(const typed::pw_multi_aff> &pma) + : isl::union_pw_multi_aff(pma) +{ +} + +template +typed::union_pw_multi_aff>::union_pw_multi_aff(const typed::union_pw_aff> &upa) + : isl::union_pw_multi_aff(upa) +{ +} + +template +typed::union_pw_multi_aff>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_multi_aff(ctx, str) +{ +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::add(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::add(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::add(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::add(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff>::apply(const typed::union_pw_multi_aff, Arg3> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff>::apply(const typed::multi_aff, Arg3> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff typed::union_pw_multi_aff>::apply(const typed::pw_multi_aff, Arg3> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff>::apply(const typed::union_pw_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff(res); +} + +template +typed::multi_union_pw_aff> typed::union_pw_multi_aff>::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff>(res); +} + +template +typed::pw_multi_aff> typed::union_pw_multi_aff>::as_pw_multi_aff() const +{ + auto res = isl::union_pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff>(res); +} + +template +typed::union_map> typed::union_pw_multi_aff>::as_union_map() const +{ + auto res = isl::union_pw_multi_aff::as_union_map(); + return typed::union_map>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::coalesce() const +{ + auto res = isl::union_pw_multi_aff::coalesce(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_set typed::union_pw_multi_aff>::domain() const +{ + auto res = isl::union_pw_multi_aff::domain(); + return typed::union_set(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::drop_unused_params() const +{ + auto res = isl::union_pw_multi_aff::drop_unused_params(); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_pw_multi_aff::empty(ctx); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff> typed::union_pw_multi_aff>::extract_pw_multi_aff(const typed::space> &space) const +{ + auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::gist(const typed::union_set &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::gist(const typed::basic_set &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::gist(const typed::point &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::gist(const typed::set &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::intersect_domain(const typed::space &space) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::intersect_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::pullback(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff_list> typed::union_pw_multi_aff>::pw_multi_aff_list() const +{ + auto res = isl::union_pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list>(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff>::range_factor_domain() const +{ + auto res = isl::union_pw_multi_aff::range_factor_domain(); + return typed::union_pw_multi_aff(res); +} + +template +typed::union_pw_multi_aff typed::union_pw_multi_aff>::range_factor_range() const +{ + auto res = isl::union_pw_multi_aff::range_factor_range(); + return typed::union_pw_multi_aff(res); +} + +template +template +typed::union_pw_multi_aff, Arg3>> typed::union_pw_multi_aff>::range_product(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, Arg3>>(res); +} + +template +template +typed::union_pw_multi_aff, Arg3>> typed::union_pw_multi_aff>::range_product(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, Arg3>>(res); +} + +template +template +typed::union_pw_multi_aff, Arg3>> typed::union_pw_multi_aff>::range_product(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, Arg3>>(res); +} + +template +typed::union_pw_multi_aff, Anonymous>> typed::union_pw_multi_aff>::range_product(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, Anonymous>>(res); +} + +template +typed::space<> typed::union_pw_multi_aff>::space() const +{ + auto res = isl::union_pw_multi_aff::space(); + return typed::space<>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::sub(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::sub(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::sub(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::sub(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::subtract_domain(const typed::space &space) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::subtract_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::union_add(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::union_add(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::union_add(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff>::union_add(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff, pair>::union_pw_multi_aff(const typed::multi_aff, pair> &ma) + : isl::union_pw_multi_aff(ma) +{ +} + +template +typed::union_pw_multi_aff, pair>::union_pw_multi_aff(const typed::pw_multi_aff, pair> &pma) + : isl::union_pw_multi_aff(pma) +{ +} + +template +typed::union_pw_multi_aff, pair>::union_pw_multi_aff(const typed::union_pw_aff, pair> &upa) + : isl::union_pw_multi_aff(upa) +{ +} + +template +typed::union_pw_multi_aff, pair>::union_pw_multi_aff(const isl::ctx &ctx, const std::string &str) + : isl::union_pw_multi_aff(ctx, str) +{ +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::add(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::add(const typed::multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::add(const typed::pw_multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::add(const typed::union_pw_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::union_pw_multi_aff, pair>::apply(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::union_pw_multi_aff, pair>::apply(const typed::multi_aff, Arg2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +template +typed::union_pw_multi_aff, Arg2> typed::union_pw_multi_aff, pair>::apply(const typed::pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Arg2>(res); +} + +template +typed::union_pw_multi_aff, Anonymous> typed::union_pw_multi_aff, pair>::apply(const typed::union_pw_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_multi_aff::apply(upma2); + return typed::union_pw_multi_aff, Anonymous>(res); +} + +template +typed::multi_union_pw_aff, pair> typed::union_pw_multi_aff, pair>::as_multi_union_pw_aff() const +{ + auto res = isl::union_pw_multi_aff::as_multi_union_pw_aff(); + return typed::multi_union_pw_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::as_pw_multi_aff() const +{ + auto res = isl::union_pw_multi_aff::as_pw_multi_aff(); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_map, pair> typed::union_pw_multi_aff, pair>::as_union_map() const +{ + auto res = isl::union_pw_multi_aff::as_union_map(); + return typed::union_map, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::coalesce() const +{ + auto res = isl::union_pw_multi_aff::coalesce(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_set> typed::union_pw_multi_aff, pair>::domain() const +{ + auto res = isl::union_pw_multi_aff::domain(); + return typed::union_set>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::drop_unused_params() const +{ + auto res = isl::union_pw_multi_aff::drop_unused_params(); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_pw_multi_aff::empty(ctx); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::extract_pw_multi_aff(const typed::space, pair> &space) const +{ + auto res = isl::union_pw_multi_aff::extract_pw_multi_aff(space); + return typed::pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::gist(const typed::union_set> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::gist(const typed::basic_set> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::gist(const typed::point> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::gist(const typed::set> &context) const +{ + auto res = isl::union_pw_multi_aff::gist(context); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_domain(const typed::space> &space) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(space); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_domain_wrapped_domain(const typed::union_set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_domain_wrapped_domain(const typed::basic_set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_domain_wrapped_domain(const typed::point &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_domain_wrapped_domain(const typed::set &uset) const +{ + auto res = isl::union_pw_multi_aff::intersect_domain_wrapped_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_pw_multi_aff::intersect_params(set); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::union_pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::pw_multi_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::preimage_domain_wrapped_domain(const typed::union_pw_aff &upma2) const +{ + auto res = isl::union_pw_multi_aff::preimage_domain_wrapped_domain(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::union_pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::pw_multi_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::union_pw_multi_aff> typed::union_pw_multi_aff, pair>::pullback(const typed::union_pw_aff> &upma2) const +{ + auto res = isl::union_pw_multi_aff::pullback(upma2); + return typed::union_pw_multi_aff>(res); +} + +template +typed::pw_multi_aff_list, pair> typed::union_pw_multi_aff, pair>::pw_multi_aff_list() const +{ + auto res = isl::union_pw_multi_aff::pw_multi_aff_list(); + return typed::pw_multi_aff_list, pair>(res); +} + +template +typed::union_pw_multi_aff, Range> typed::union_pw_multi_aff, pair>::range_factor_domain() const +{ + auto res = isl::union_pw_multi_aff::range_factor_domain(); + return typed::union_pw_multi_aff, Range>(res); +} + +template +typed::union_pw_multi_aff, Range2> typed::union_pw_multi_aff, pair>::range_factor_range() const +{ + auto res = isl::union_pw_multi_aff::range_factor_range(); + return typed::union_pw_multi_aff, Range2>(res); +} + +template +template +typed::union_pw_multi_aff, pair, Arg2>> typed::union_pw_multi_aff, pair>::range_product(const typed::union_pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair, Arg2>>(res); +} + +template +template +typed::union_pw_multi_aff, pair, Arg2>> typed::union_pw_multi_aff, pair>::range_product(const typed::multi_aff, Arg2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair, Arg2>>(res); +} + +template +template +typed::union_pw_multi_aff, pair, Arg2>> typed::union_pw_multi_aff, pair>::range_product(const typed::pw_multi_aff, Arg2> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair, Arg2>>(res); +} + +template +typed::union_pw_multi_aff, pair, Anonymous>> typed::union_pw_multi_aff, pair>::range_product(const typed::union_pw_aff, Anonymous> &upma2) const +{ + auto res = isl::union_pw_multi_aff::range_product(upma2); + return typed::union_pw_multi_aff, pair, Anonymous>>(res); +} + +template +typed::space<> typed::union_pw_multi_aff, pair>::space() const +{ + auto res = isl::union_pw_multi_aff::space(); + return typed::space<>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::sub(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::sub(const typed::multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::sub(const typed::pw_multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::sub(const typed::union_pw_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::sub(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::subtract_domain(const typed::space> &space) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(space); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::subtract_domain(const typed::union_set> &uset) const +{ + auto res = isl::union_pw_multi_aff::subtract_domain(uset); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::union_add(const typed::union_pw_multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::union_add(const typed::multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::union_add(const typed::pw_multi_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +template +typed::union_pw_multi_aff, pair> typed::union_pw_multi_aff, pair>::union_add(const typed::union_pw_aff, pair> &upma2) const +{ + auto res = isl::union_pw_multi_aff::union_add(upma2); + return typed::union_pw_multi_aff, pair>(res); +} + +typed::union_set<>::union_set(const typed::basic_set<> &bset) + : isl::union_set(bset) +{ +} + +typed::union_set<>::union_set(const typed::point<> &pnt) + : isl::union_set(pnt) +{ +} + +typed::union_set<>::union_set(const typed::set<> &set) + : isl::union_set(set) +{ +} + +typed::union_set<>::union_set(const isl::ctx &ctx, const std::string &str) + : isl::union_set(ctx, str) +{ +} + +typed::union_set<> typed::union_set<>::coalesce() const +{ + auto res = isl::union_set::coalesce(); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::detect_equalities() const +{ + auto res = isl::union_set::detect_equalities(); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::drop_unused_params() const +{ + auto res = isl::union_set::drop_unused_params(); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_set::empty(ctx); + return typed::union_set<>(res); +} + +bool typed::union_set<>::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set<>(arg0)); + }; + return isl::union_set::every_set(lambda_test); +} + +typed::set<> typed::union_set<>::extract_set(const typed::space<> &space) const +{ + auto res = isl::union_set::extract_set(space); + return typed::set<>(res); +} + +void typed::union_set<>::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point<>(arg0)); + }; + return isl::union_set::foreach_point(lambda_fn); +} + +void typed::union_set<>::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set<>(arg0)); + }; + return isl::union_set::foreach_set(lambda_fn); +} + +typed::union_set<> typed::union_set<>::gist(const typed::union_set<> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::gist(const typed::basic_set<> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::gist(const typed::point<> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::gist(const typed::set<> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::intersect(const typed::union_set<> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::intersect(const typed::basic_set<> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::intersect(const typed::point<> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::intersect(const typed::set<> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::project_out_all_params() const +{ + auto res = isl::union_set::project_out_all_params(); + return typed::union_set<>(res); +} + +typed::set_list<> typed::union_set<>::set_list() const +{ + auto res = isl::union_set::set_list(); + return typed::set_list<>(res); +} + +typed::space<> typed::union_set<>::space() const +{ + auto res = isl::union_set::space(); + return typed::space<>(res); +} + +typed::union_set<> typed::union_set<>::subtract(const typed::union_set<> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::subtract(const typed::basic_set<> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::subtract(const typed::point<> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::subtract(const typed::set<> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::unite(const typed::union_set<> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::unite(const typed::basic_set<> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::unite(const typed::point<> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::unite(const typed::set<> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set<>(res); +} + +typed::union_set<> typed::union_set<>::universe() const +{ + auto res = isl::union_set::universe(); + return typed::union_set<>(res); +} + +template +typed::union_set::union_set(const typed::basic_set &bset) + : isl::union_set(bset) +{ +} + +template +typed::union_set::union_set(const typed::point &pnt) + : isl::union_set(pnt) +{ +} + +template +typed::union_set::union_set(const typed::set &set) + : isl::union_set(set) +{ +} + +template +typed::union_set::union_set(const isl::ctx &ctx, const std::string &str) + : isl::union_set(ctx, str) +{ +} + +template +template +typed::union_set typed::union_set::apply(const typed::union_map &umap) const +{ + auto res = isl::union_set::apply(umap); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set::apply(const typed::basic_map &umap) const +{ + auto res = isl::union_set::apply(umap); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set::apply(const typed::map &umap) const +{ + auto res = isl::union_set::apply(umap); + return typed::union_set(res); +} + +template +typed::set typed::union_set::as_set() const +{ + auto res = isl::union_set::as_set(); + return typed::set(res); +} + +template +typed::union_set typed::union_set::coalesce() const +{ + auto res = isl::union_set::coalesce(); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::detect_equalities() const +{ + auto res = isl::union_set::detect_equalities(); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::drop_unused_params() const +{ + auto res = isl::union_set::drop_unused_params(); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::empty(const isl::ctx &ctx) +{ + auto res = isl::union_set::empty(ctx); + return typed::union_set(res); +} + +template +bool typed::union_set::every_set(const std::function)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set(arg0)); + }; + return isl::union_set::every_set(lambda_test); +} + +template +typed::set typed::union_set::extract_set(const typed::space &space) const +{ + auto res = isl::union_set::extract_set(space); + return typed::set(res); +} + +template +void typed::union_set::foreach_point(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point(arg0)); + }; + return isl::union_set::foreach_point(lambda_fn); +} + +template +void typed::union_set::foreach_set(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set(arg0)); + }; + return isl::union_set::foreach_set(lambda_fn); +} + +template +typed::union_set typed::union_set::gist(const typed::union_set &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::gist(const typed::basic_set &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::gist(const typed::point &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::gist(const typed::set &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_set::gist_params(set); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_set::gist_params(set); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_set::gist_params(set); + return typed::union_set(res); +} + +template +typed::union_map typed::union_set::identity() const +{ + auto res = isl::union_set::identity(); + return typed::union_map(res); +} + +template +typed::union_set typed::union_set::intersect(const typed::union_set &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::intersect(const typed::basic_set &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::intersect(const typed::point &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::intersect(const typed::set &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_set::intersect_params(set); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_set::intersect_params(set); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_set::intersect_params(set); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::lexmax() const +{ + auto res = isl::union_set::lexmax(); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::lexmin() const +{ + auto res = isl::union_set::lexmin(); + return typed::union_set(res); +} + +template +typed::set<> typed::union_set::params() const +{ + auto res = isl::union_set::params(); + return typed::set<>(res); +} + +template +template +typed::union_set typed::union_set::preimage(const typed::multi_aff &ma) const +{ + auto res = isl::union_set::preimage(ma); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set::preimage(const typed::pw_multi_aff &pma) const +{ + auto res = isl::union_set::preimage(pma); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set::preimage(const typed::union_pw_multi_aff &upma) const +{ + auto res = isl::union_set::preimage(upma); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::project_out_all_params() const +{ + auto res = isl::union_set::project_out_all_params(); + return typed::union_set(res); +} + +template +typed::set_list typed::union_set::set_list() const +{ + auto res = isl::union_set::set_list(); + return typed::set_list(res); +} + +template +typed::space<> typed::union_set::space() const +{ + auto res = isl::union_set::space(); + return typed::space<>(res); +} + +template +typed::union_set typed::union_set::subtract(const typed::union_set &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::subtract(const typed::basic_set &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::subtract(const typed::point &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::subtract(const typed::set &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::unite(const typed::union_set &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::unite(const typed::basic_set &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::unite(const typed::point &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::unite(const typed::set &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set(res); +} + +template +typed::union_set typed::union_set::universe() const +{ + auto res = isl::union_set::universe(); + return typed::union_set(res); +} + +template +typed::union_set>::union_set(const typed::basic_set> &bset) + : isl::union_set(bset) +{ +} + +template +typed::union_set>::union_set(const typed::point> &pnt) + : isl::union_set(pnt) +{ +} + +template +typed::union_set>::union_set(const typed::set> &set) + : isl::union_set(set) +{ +} + +template +typed::union_set>::union_set(const isl::ctx &ctx, const std::string &str) + : isl::union_set(ctx, str) +{ +} + +template +template +typed::union_set typed::union_set>::apply(const typed::union_map, Arg2> &umap) const +{ + auto res = isl::union_set::apply(umap); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set>::apply(const typed::basic_map, Arg2> &umap) const +{ + auto res = isl::union_set::apply(umap); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set>::apply(const typed::map, Arg2> &umap) const +{ + auto res = isl::union_set::apply(umap); + return typed::union_set(res); +} + +template +typed::set> typed::union_set>::as_set() const +{ + auto res = isl::union_set::as_set(); + return typed::set>(res); +} + +template +typed::union_set> typed::union_set>::coalesce() const +{ + auto res = isl::union_set::coalesce(); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::detect_equalities() const +{ + auto res = isl::union_set::detect_equalities(); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::drop_unused_params() const +{ + auto res = isl::union_set::drop_unused_params(); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::empty(const isl::ctx &ctx) +{ + auto res = isl::union_set::empty(ctx); + return typed::union_set>(res); +} + +template +bool typed::union_set>::every_set(const std::function>)> &test) const +{ + auto lambda_test = [&] (isl::set arg0) { + return test(typed::set>(arg0)); + }; + return isl::union_set::every_set(lambda_test); +} + +template +typed::set> typed::union_set>::extract_set(const typed::space> &space) const +{ + auto res = isl::union_set::extract_set(space); + return typed::set>(res); +} + +template +void typed::union_set>::foreach_point(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::point arg0) { + return fn(typed::point>(arg0)); + }; + return isl::union_set::foreach_point(lambda_fn); +} + +template +void typed::union_set>::foreach_set(const std::function>)> &fn) const +{ + auto lambda_fn = [&] (isl::set arg0) { + return fn(typed::set>(arg0)); + }; + return isl::union_set::foreach_set(lambda_fn); +} + +template +typed::union_set> typed::union_set>::gist(const typed::union_set> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::gist(const typed::basic_set> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::gist(const typed::point> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::gist(const typed::set> &context) const +{ + auto res = isl::union_set::gist(context); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::gist_params(const typed::set<> &set) const +{ + auto res = isl::union_set::gist_params(set); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::gist_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_set::gist_params(set); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::gist_params(const typed::point<> &set) const +{ + auto res = isl::union_set::gist_params(set); + return typed::union_set>(res); +} + +template +typed::union_map, pair> typed::union_set>::identity() const +{ + auto res = isl::union_set::identity(); + return typed::union_map, pair>(res); +} + +template +typed::union_set> typed::union_set>::intersect(const typed::union_set> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::intersect(const typed::basic_set> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::intersect(const typed::point> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::intersect(const typed::set> &uset2) const +{ + auto res = isl::union_set::intersect(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::intersect_params(const typed::set<> &set) const +{ + auto res = isl::union_set::intersect_params(set); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::intersect_params(const typed::basic_set<> &set) const +{ + auto res = isl::union_set::intersect_params(set); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::intersect_params(const typed::point<> &set) const +{ + auto res = isl::union_set::intersect_params(set); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::lexmax() const +{ + auto res = isl::union_set::lexmax(); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::lexmin() const +{ + auto res = isl::union_set::lexmin(); + return typed::union_set>(res); +} + +template +typed::set<> typed::union_set>::params() const +{ + auto res = isl::union_set::params(); + return typed::set<>(res); +} + +template +template +typed::union_set typed::union_set>::preimage(const typed::multi_aff> &ma) const +{ + auto res = isl::union_set::preimage(ma); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set>::preimage(const typed::pw_multi_aff> &pma) const +{ + auto res = isl::union_set::preimage(pma); + return typed::union_set(res); +} + +template +template +typed::union_set typed::union_set>::preimage(const typed::union_pw_multi_aff> &upma) const +{ + auto res = isl::union_set::preimage(upma); + return typed::union_set(res); +} + +template +typed::union_set> typed::union_set>::project_out_all_params() const +{ + auto res = isl::union_set::project_out_all_params(); + return typed::union_set>(res); +} + +template +typed::set_list> typed::union_set>::set_list() const +{ + auto res = isl::union_set::set_list(); + return typed::set_list>(res); +} + +template +typed::space<> typed::union_set>::space() const +{ + auto res = isl::union_set::space(); + return typed::space<>(res); +} + +template +typed::union_set> typed::union_set>::subtract(const typed::union_set> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::subtract(const typed::basic_set> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::subtract(const typed::point> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::subtract(const typed::set> &uset2) const +{ + auto res = isl::union_set::subtract(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::unite(const typed::union_set> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::unite(const typed::basic_set> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::unite(const typed::point> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::unite(const typed::set> &uset2) const +{ + auto res = isl::union_set::unite(uset2); + return typed::union_set>(res); +} + +template +typed::union_set> typed::union_set>::universe() const +{ + auto res = isl::union_set::universe(); + return typed::union_set>(res); +} + +template +typed::union_map typed::union_set>::unwrap() const +{ + auto res = isl::union_set::unwrap(); + return typed::union_map(res); +} + +typed::union_set_list<>::union_set_list(const isl::ctx &ctx, int n) + : isl::union_set_list(ctx, n) +{ +} + +typed::union_set_list<>::union_set_list(const typed::union_set<> &el) + : isl::union_set_list(el) +{ +} + +typed::union_set_list<>::union_set_list(const isl::ctx &ctx, const std::string &str) + : isl::union_set_list(ctx, str) +{ +} + +typed::union_set_list<> typed::union_set_list<>::add(const typed::union_set<> &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list<>(res); +} + +typed::union_set_list<> typed::union_set_list<>::add(const typed::basic_set<> &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list<>(res); +} + +typed::union_set_list<> typed::union_set_list<>::add(const typed::point<> &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list<>(res); +} + +typed::union_set_list<> typed::union_set_list<>::add(const typed::set<> &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list<>(res); +} + +typed::union_set_list<> typed::union_set_list<>::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::union_set_list::drop(first, n); + return typed::union_set_list<>(res); +} + +void typed::union_set_list<>::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::union_set arg0) { + return fn(typed::union_set<>(arg0)); + }; + return isl::union_set_list::foreach(lambda_fn); +} + +void typed::union_set_list<>::foreach_scc(const std::function, typed::union_set<>)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::union_set arg0, isl::union_set arg1) { + return follows(typed::union_set<>(arg0), typed::union_set<>(arg1)); + }; + auto lambda_fn = [&] (isl::union_set_list arg0) { + return fn(typed::union_set_list<>(arg0)); + }; + return isl::union_set_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::union_set_list::union_set_list(const isl::ctx &ctx, int n) + : isl::union_set_list(ctx, n) +{ +} + +template +typed::union_set_list::union_set_list(const typed::union_set &el) + : isl::union_set_list(el) +{ +} + +template +typed::union_set_list::union_set_list(const isl::ctx &ctx, const std::string &str) + : isl::union_set_list(ctx, str) +{ +} + +template +typed::union_set_list typed::union_set_list::add(const typed::union_set &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list(res); +} + +template +typed::union_set_list typed::union_set_list::add(const typed::basic_set &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list(res); +} + +template +typed::union_set_list typed::union_set_list::add(const typed::point &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list(res); +} + +template +typed::union_set_list typed::union_set_list::add(const typed::set &el) const +{ + auto res = isl::union_set_list::add(el); + return typed::union_set_list(res); +} + +template +typed::union_set typed::union_set_list::at(int index) const +{ + auto res = isl::union_set_list::at(index); + return typed::union_set(res); +} + +template +typed::union_set_list typed::union_set_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::union_set_list::drop(first, n); + return typed::union_set_list(res); +} + +template +void typed::union_set_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::union_set arg0) { + return fn(typed::union_set(arg0)); + }; + return isl::union_set_list::foreach(lambda_fn); +} + +template +void typed::union_set_list::foreach_scc(const std::function, typed::union_set)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::union_set arg0, isl::union_set arg1) { + return follows(typed::union_set(arg0), typed::union_set(arg1)); + }; + auto lambda_fn = [&] (isl::union_set_list arg0) { + return fn(typed::union_set_list(arg0)); + }; + return isl::union_set_list::foreach_scc(lambda_follows, lambda_fn); +} + +template +typed::union_set_list typed::union_set_list::set_at(int index, const typed::union_set &el) const +{ + auto res = isl::union_set_list::set_at(index, el); + return typed::union_set_list(res); +} + +typed::val::val(const isl::ctx &ctx, long i) + : isl::val(ctx, i) +{ +} + +typed::val::val(const isl::ctx &ctx, const std::string &str) + : isl::val(ctx, str) +{ +} + +typed::val typed::val::add(const typed::val &v2) const +{ + auto res = isl::val::add(v2); + return typed::val(res); +} + +typed::val typed::val::add(long v2) const +{ + auto res = isl::val::add(v2); + return typed::val(res); +} + +typed::val typed::val::ceil() const +{ + auto res = isl::val::ceil(); + return typed::val(res); +} + +typed::val typed::val::floor() const +{ + auto res = isl::val::floor(); + return typed::val(res); +} + +typed::val typed::val::max(const typed::val &v2) const +{ + auto res = isl::val::max(v2); + return typed::val(res); +} + +typed::val typed::val::max(long v2) const +{ + auto res = isl::val::max(v2); + return typed::val(res); +} + +typed::val typed::val::min(const typed::val &v2) const +{ + auto res = isl::val::min(v2); + return typed::val(res); +} + +typed::val typed::val::min(long v2) const +{ + auto res = isl::val::min(v2); + return typed::val(res); +} + +typed::val typed::val::mod(const typed::val &v2) const +{ + auto res = isl::val::mod(v2); + return typed::val(res); +} + +typed::val typed::val::mod(long v2) const +{ + auto res = isl::val::mod(v2); + return typed::val(res); +} + +typed::val typed::val::neg() const +{ + auto res = isl::val::neg(); + return typed::val(res); +} + +typed::val typed::val::sub(const typed::val &v2) const +{ + auto res = isl::val::sub(v2); + return typed::val(res); +} + +typed::val typed::val::sub(long v2) const +{ + auto res = isl::val::sub(v2); + return typed::val(res); +} + +typed::val_list::val_list(const isl::ctx &ctx, int n) + : isl::val_list(ctx, n) +{ +} + +typed::val_list::val_list(const typed::val &el) + : isl::val_list(el) +{ +} + +typed::val_list::val_list(const isl::ctx &ctx, const std::string &str) + : isl::val_list(ctx, str) +{ +} + +typed::val_list typed::val_list::add(const typed::val &el) const +{ + auto res = isl::val_list::add(el); + return typed::val_list(res); +} + +typed::val_list typed::val_list::add(long el) const +{ + auto res = isl::val_list::add(el); + return typed::val_list(res); +} + +typed::val typed::val_list::at(int index) const +{ + auto res = isl::val_list::at(index); + return typed::val(res); +} + +typed::val_list typed::val_list::drop(unsigned int first, unsigned int n) const +{ + auto res = isl::val_list::drop(first, n); + return typed::val_list(res); +} + +void typed::val_list::foreach(const std::function)> &fn) const +{ + auto lambda_fn = [&] (isl::val arg0) { + return fn(typed::val(arg0)); + }; + return isl::val_list::foreach(lambda_fn); +} + +void typed::val_list::foreach_scc(const std::function, typed::val)> &follows, const std::function)> &fn) const +{ + auto lambda_follows = [&] (isl::val arg0, isl::val arg1) { + return follows(typed::val(arg0), typed::val(arg1)); + }; + auto lambda_fn = [&] (isl::val_list arg0) { + return fn(typed::val_list(arg0)); + }; + return isl::val_list::foreach_scc(lambda_follows, lambda_fn); +} + +typed::val_list typed::val_list::set_at(int index, const typed::val &el) const +{ + auto res = isl::val_list::set_at(index, el); + return typed::val_list(res); +} + +typed::val_list typed::val_list::set_at(int index, long el) const +{ + auto res = isl::val_list::set_at(index, el); + return typed::val_list(res); +} + +} // namespace typed +} // namespace isl + +#endif /* ISL_TYPED_CPP */ diff --git a/interface/isl.py.core b/interface/isl.py.core new file mode 100644 index 00000000..b441c533 --- /dev/null +++ b/interface/isl.py.core @@ -0,0 +1,19080 @@ + +class union_pw_multi_aff(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is multi_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_multi_aff_from_multi_aff(isl.isl_multi_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is pw_multi_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_multi_aff_from_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is union_pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_multi_aff_from_union_pw_aff(isl.isl_union_pw_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_multi_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_pw_multi_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ptr = isl.isl_union_pw_multi_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_pw_multi_aff("""%s""")' % s + else: + return 'isl.union_pw_multi_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_multi_aff: + arg1 = union_pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_add(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def apply(*args): + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_apply_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def as_multi_union_pw_aff(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_as_multi_union_pw_aff(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def as_pw_multi_aff(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_as_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def as_union_map(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_as_union_map(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_coalesce(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_domain(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_drop_unused_params(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def empty(*args): + if len(args) == 0: + ctx = Context.getDefaultInstance() + res = isl.isl_union_pw_multi_aff_empty_ctx(ctx) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def extract_pw_multi_aff(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_extract_pw_multi_aff(arg0.ptr, isl.isl_space_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_multi_aff: + arg1 = union_pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_flat_range_product(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_gist(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain(*args): + if len(args) == 2 and args[1].__class__ is space: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_intersect_domain_space(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_intersect_domain_union_set(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def intersect_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_intersect_domain_wrapped_domain(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain_wrapped_range(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_intersect_domain_wrapped_range(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_intersect_params(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def involves_locals(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_involves_locals(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def isa_pw_multi_aff(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_isa_pw_multi_aff(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def plain_is_empty(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_plain_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_multi_aff: + arg1 = union_pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def preimage_domain_wrapped_domain(*args): + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def pullback(*args): + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_pullback_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def pw_multi_aff_list(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_get_pw_multi_aff_list(arg0.ptr) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def get_pw_multi_aff_list(arg0): + return arg0.pw_multi_aff_list() + def range_factor_domain(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_range_factor_domain(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def range_factor_range(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_range_factor_range(isl.isl_union_pw_multi_aff_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def range_product(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_multi_aff: + arg1 = union_pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_range_product(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def space(arg0): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_multi_aff: + arg1 = union_pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_sub(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def subtract_domain(*args): + if len(args) == 2 and args[1].__class__ is space: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_subtract_domain_space(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_pw_multi_aff: + args[0] = union_pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_multi_aff_subtract_domain_union_set(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def union_add(arg0, arg1): + try: + if not arg0.__class__ is union_pw_multi_aff: + arg0 = union_pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_multi_aff: + arg1 = union_pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_multi_aff_union_add(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_union_pw_multi_aff_from_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_from_multi_aff.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_from_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_from_pw_multi_aff.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_from_union_pw_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_from_union_pw_aff.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_read_from_str.restype = c_void_p +isl.isl_union_pw_multi_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_union_pw_multi_aff_add.restype = c_void_p +isl.isl_union_pw_multi_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_apply_union_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_apply_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_as_multi_union_pw_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_as_multi_union_pw_aff.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_as_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_as_pw_multi_aff.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_as_union_map.restype = c_void_p +isl.isl_union_pw_multi_aff_as_union_map.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_coalesce.restype = c_void_p +isl.isl_union_pw_multi_aff_coalesce.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_domain.restype = c_void_p +isl.isl_union_pw_multi_aff_domain.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_drop_unused_params.restype = c_void_p +isl.isl_union_pw_multi_aff_drop_unused_params.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_empty_ctx.restype = c_void_p +isl.isl_union_pw_multi_aff_empty_ctx.argtypes = [Context] +isl.isl_union_pw_multi_aff_extract_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_extract_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_flat_range_product.restype = c_void_p +isl.isl_union_pw_multi_aff_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_gist.restype = c_void_p +isl.isl_union_pw_multi_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_intersect_domain_space.restype = c_void_p +isl.isl_union_pw_multi_aff_intersect_domain_space.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_intersect_domain_union_set.restype = c_void_p +isl.isl_union_pw_multi_aff_intersect_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_intersect_domain_wrapped_domain.restype = c_void_p +isl.isl_union_pw_multi_aff_intersect_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_intersect_domain_wrapped_range.restype = c_void_p +isl.isl_union_pw_multi_aff_intersect_domain_wrapped_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_intersect_params.restype = c_void_p +isl.isl_union_pw_multi_aff_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_involves_locals.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_isa_pw_multi_aff.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_plain_is_empty.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_pullback_union_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_multi_aff_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_get_pw_multi_aff_list.restype = c_void_p +isl.isl_union_pw_multi_aff_get_pw_multi_aff_list.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_range_factor_domain.restype = c_void_p +isl.isl_union_pw_multi_aff_range_factor_domain.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_range_factor_range.restype = c_void_p +isl.isl_union_pw_multi_aff_range_factor_range.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_range_product.restype = c_void_p +isl.isl_union_pw_multi_aff_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_get_space.restype = c_void_p +isl.isl_union_pw_multi_aff_get_space.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_sub.restype = c_void_p +isl.isl_union_pw_multi_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_subtract_domain_space.restype = c_void_p +isl.isl_union_pw_multi_aff_subtract_domain_space.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_subtract_domain_union_set.restype = c_void_p +isl.isl_union_pw_multi_aff_subtract_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_union_add.restype = c_void_p +isl.isl_union_pw_multi_aff_union_add.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_multi_aff_copy.restype = c_void_p +isl.isl_union_pw_multi_aff_copy.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_free.restype = c_void_p +isl.isl_union_pw_multi_aff_free.argtypes = [c_void_p] +isl.isl_union_pw_multi_aff_to_str.restype = POINTER(c_char) +isl.isl_union_pw_multi_aff_to_str.argtypes = [c_void_p] + +class multi_union_pw_aff(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is multi_pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_union_pw_aff_from_multi_pw_aff(isl.isl_multi_pw_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is union_pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_union_pw_aff_from_union_pw_aff(isl.isl_union_pw_aff_copy(args[0].ptr)) + return + if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is union_pw_aff_list: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_union_pw_aff_from_union_pw_aff_list(isl.isl_space_copy(args[0].ptr), isl.isl_union_pw_aff_list_copy(args[1].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_union_pw_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_multi_union_pw_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ptr = isl.isl_multi_union_pw_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.multi_union_pw_aff("""%s""")' % s + else: + return 'isl.multi_union_pw_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_add(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_get_at(arg0.ptr, arg1) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def bind(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_bind(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_coalesce(isl.isl_multi_union_pw_aff_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_domain(isl.isl_multi_union_pw_aff_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_flat_range_product(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_gist(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_gist_params(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def intersect_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_intersect_domain(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_intersect_params(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def involves_nan(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_involves_nan(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def list(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_get_list(arg0.ptr) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def get_list(arg0): + return arg0.list() + def neg(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_neg(isl.isl_multi_union_pw_aff_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def pullback(*args): + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is multi_union_pw_aff: + args[0] = multi_union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_union_pw_aff_pullback_union_pw_multi_aff(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_range_product(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def reset_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_reset_range_tuple_id(isl.isl_multi_union_pw_aff_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def scale(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_union_pw_aff: + args[0] = multi_union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_union_pw_aff_scale_multi_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_union_pw_aff: + args[0] = multi_union_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_union_pw_aff_scale_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_union_pw_aff: + args[0] = multi_union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_union_pw_aff_scale_down_multi_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_union_pw_aff: + args[0] = multi_union_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_union_pw_aff_scale_down_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg2.__class__ is union_pw_aff: + arg2 = union_pw_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_set_at(isl.isl_multi_union_pw_aff_copy(arg0.ptr), arg1, isl.isl_union_pw_aff_copy(arg2.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is multi_union_pw_aff: + args[0] = multi_union_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_union_pw_aff_set_range_tuple_id(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def size(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + def space(arg0): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_sub(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def union_add(arg0, arg1): + try: + if not arg0.__class__ is multi_union_pw_aff: + arg0 = multi_union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_union_add(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_union_pw_aff_zero(isl.isl_space_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_multi_union_pw_aff_from_multi_pw_aff.restype = c_void_p +isl.isl_multi_union_pw_aff_from_multi_pw_aff.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_from_union_pw_aff.restype = c_void_p +isl.isl_multi_union_pw_aff_from_union_pw_aff.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_from_union_pw_aff_list.restype = c_void_p +isl.isl_multi_union_pw_aff_from_union_pw_aff_list.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_read_from_str.restype = c_void_p +isl.isl_multi_union_pw_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_multi_union_pw_aff_add.restype = c_void_p +isl.isl_multi_union_pw_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_get_at.restype = c_void_p +isl.isl_multi_union_pw_aff_get_at.argtypes = [c_void_p, c_int] +isl.isl_multi_union_pw_aff_bind.restype = c_void_p +isl.isl_multi_union_pw_aff_bind.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_coalesce.restype = c_void_p +isl.isl_multi_union_pw_aff_coalesce.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_domain.restype = c_void_p +isl.isl_multi_union_pw_aff_domain.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_flat_range_product.restype = c_void_p +isl.isl_multi_union_pw_aff_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_gist.restype = c_void_p +isl.isl_multi_union_pw_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_gist_params.restype = c_void_p +isl.isl_multi_union_pw_aff_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_intersect_domain.restype = c_void_p +isl.isl_multi_union_pw_aff_intersect_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_intersect_params.restype = c_void_p +isl.isl_multi_union_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_involves_nan.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_get_list.restype = c_void_p +isl.isl_multi_union_pw_aff_get_list.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_neg.restype = c_void_p +isl.isl_multi_union_pw_aff_neg.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_pullback_union_pw_multi_aff.restype = c_void_p +isl.isl_multi_union_pw_aff_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_range_product.restype = c_void_p +isl.isl_multi_union_pw_aff_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_get_range_tuple_id.restype = c_void_p +isl.isl_multi_union_pw_aff_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_reset_range_tuple_id.restype = c_void_p +isl.isl_multi_union_pw_aff_reset_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_scale_multi_val.restype = c_void_p +isl.isl_multi_union_pw_aff_scale_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_scale_val.restype = c_void_p +isl.isl_multi_union_pw_aff_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_scale_down_multi_val.restype = c_void_p +isl.isl_multi_union_pw_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_scale_down_val.restype = c_void_p +isl.isl_multi_union_pw_aff_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_set_at.restype = c_void_p +isl.isl_multi_union_pw_aff_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_multi_union_pw_aff_set_range_tuple_id.restype = c_void_p +isl.isl_multi_union_pw_aff_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_size.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_get_space.restype = c_void_p +isl.isl_multi_union_pw_aff_get_space.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_sub.restype = c_void_p +isl.isl_multi_union_pw_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_union_add.restype = c_void_p +isl.isl_multi_union_pw_aff_union_add.argtypes = [c_void_p, c_void_p] +isl.isl_multi_union_pw_aff_zero.restype = c_void_p +isl.isl_multi_union_pw_aff_zero.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_copy.restype = c_void_p +isl.isl_multi_union_pw_aff_copy.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_free.restype = c_void_p +isl.isl_multi_union_pw_aff_free.argtypes = [c_void_p] +isl.isl_multi_union_pw_aff_to_str.restype = POINTER(c_char) +isl.isl_multi_union_pw_aff_to_str.argtypes = [c_void_p] + +class union_pw_aff(union_pw_multi_aff, multi_union_pw_aff): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_aff_from_aff(isl.isl_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_aff_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_pw_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + ptr = isl.isl_union_pw_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_pw_aff("""%s""")' % s + else: + return 'isl.union_pw_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff: + arg1 = union_pw_aff(arg1) + except: + return union_pw_multi_aff(arg0).add(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_add(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def bind(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is union_pw_aff: + args[0] = union_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_aff_bind_id(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + raise Error + def coalesce(arg0): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_coalesce(isl.isl_union_pw_aff_copy(arg0.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_domain(isl.isl_union_pw_aff_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_drop_unused_params(isl.isl_union_pw_aff_copy(arg0.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + return union_pw_multi_aff(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_gist(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain(*args): + if len(args) == 2 and args[1].__class__ is space: + args = list(args) + try: + if not args[0].__class__ is union_pw_aff: + args[0] = union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_aff_intersect_domain_space(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_pw_aff: + args[0] = union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_aff_intersect_domain_union_set(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def intersect_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + return union_pw_multi_aff(arg0).intersect_domain_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_intersect_domain_wrapped_domain(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain_wrapped_range(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + return union_pw_multi_aff(arg0).intersect_domain_wrapped_range(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_intersect_domain_wrapped_range(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_multi_aff(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_intersect_params(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff: + arg1 = union_pw_aff(arg1) + except: + return union_pw_multi_aff(arg0).plain_is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def pullback(*args): + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_pw_aff: + args[0] = union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_aff_pullback_union_pw_multi_aff(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def space(arg0): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff: + arg1 = union_pw_aff(arg1) + except: + return union_pw_multi_aff(arg0).sub(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_sub(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def subtract_domain(*args): + if len(args) == 2 and args[1].__class__ is space: + args = list(args) + try: + if not args[0].__class__ is union_pw_aff: + args[0] = union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_aff_subtract_domain_space(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_pw_aff: + args[0] = union_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_pw_aff_subtract_domain_union_set(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def to_list(arg0): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_to_list(isl.isl_union_pw_aff_copy(arg0.ptr)) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def union_add(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff: + arg0 = union_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff: + arg1 = union_pw_aff(arg1) + except: + return union_pw_multi_aff(arg0).union_add(arg1) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_union_add(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_union_pw_aff_from_aff.restype = c_void_p +isl.isl_union_pw_aff_from_aff.argtypes = [c_void_p] +isl.isl_union_pw_aff_from_pw_aff.restype = c_void_p +isl.isl_union_pw_aff_from_pw_aff.argtypes = [c_void_p] +isl.isl_union_pw_aff_read_from_str.restype = c_void_p +isl.isl_union_pw_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_union_pw_aff_add.restype = c_void_p +isl.isl_union_pw_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_bind_id.restype = c_void_p +isl.isl_union_pw_aff_bind_id.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_coalesce.restype = c_void_p +isl.isl_union_pw_aff_coalesce.argtypes = [c_void_p] +isl.isl_union_pw_aff_domain.restype = c_void_p +isl.isl_union_pw_aff_domain.argtypes = [c_void_p] +isl.isl_union_pw_aff_drop_unused_params.restype = c_void_p +isl.isl_union_pw_aff_drop_unused_params.argtypes = [c_void_p] +isl.isl_union_pw_aff_gist.restype = c_void_p +isl.isl_union_pw_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_intersect_domain_space.restype = c_void_p +isl.isl_union_pw_aff_intersect_domain_space.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_intersect_domain_union_set.restype = c_void_p +isl.isl_union_pw_aff_intersect_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_intersect_domain_wrapped_domain.restype = c_void_p +isl.isl_union_pw_aff_intersect_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_intersect_domain_wrapped_range.restype = c_void_p +isl.isl_union_pw_aff_intersect_domain_wrapped_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_intersect_params.restype = c_void_p +isl.isl_union_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_pullback_union_pw_multi_aff.restype = c_void_p +isl.isl_union_pw_aff_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_get_space.restype = c_void_p +isl.isl_union_pw_aff_get_space.argtypes = [c_void_p] +isl.isl_union_pw_aff_sub.restype = c_void_p +isl.isl_union_pw_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_subtract_domain_space.restype = c_void_p +isl.isl_union_pw_aff_subtract_domain_space.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_subtract_domain_union_set.restype = c_void_p +isl.isl_union_pw_aff_subtract_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_to_list.restype = c_void_p +isl.isl_union_pw_aff_to_list.argtypes = [c_void_p] +isl.isl_union_pw_aff_union_add.restype = c_void_p +isl.isl_union_pw_aff_union_add.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_copy.restype = c_void_p +isl.isl_union_pw_aff_copy.argtypes = [c_void_p] +isl.isl_union_pw_aff_free.restype = c_void_p +isl.isl_union_pw_aff_free.argtypes = [c_void_p] +isl.isl_union_pw_aff_to_str.restype = POINTER(c_char) +isl.isl_union_pw_aff_to_str.argtypes = [c_void_p] + +class multi_pw_aff(multi_union_pw_aff): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_pw_aff_from_aff(isl.isl_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is multi_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_pw_aff_from_multi_aff(isl.isl_multi_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_pw_aff_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr)) + return + if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is pw_aff_list: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_pw_aff_from_pw_aff_list(isl.isl_space_copy(args[0].ptr), isl.isl_pw_aff_list_copy(args[1].ptr)) + return + if len(args) == 1 and args[0].__class__ is pw_multi_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_pw_aff_from_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_pw_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_multi_pw_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ptr = isl.isl_multi_pw_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.multi_pw_aff("""%s""")' % s + else: + return 'isl.multi_pw_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).add(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_add(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def add_constant(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_add_constant_multi_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_add_constant_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def as_map(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_as_map(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def as_multi_aff(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_as_multi_aff(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def as_set(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_as_set(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_get_at(arg0.ptr, arg1) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def bind(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return multi_union_pw_aff(arg0).bind(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_bind(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def bind_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return multi_union_pw_aff(arg0).bind_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_bind_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def bind_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return multi_union_pw_aff(arg0).bind_domain_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_bind_domain_wrapped_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_coalesce(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_domain(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_domain_reverse(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).flat_range_product(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_flat_range_product(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return multi_union_pw_aff(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_gist(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return multi_union_pw_aff(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_gist_params(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def identity(*args): + if len(args) == 1: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_identity_multi_pw_aff(isl.isl_multi_pw_aff_copy(args[0].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + @staticmethod + def identity_on_domain(*args): + if len(args) == 1 and args[0].__class__ is space: + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_identity_on_domain_space(isl.isl_space_copy(args[0].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def insert_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + return multi_union_pw_aff(arg0).insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_insert_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return multi_union_pw_aff(arg0).intersect_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_intersect_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return multi_union_pw_aff(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_intersect_params(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def involves_nan(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_involves_nan(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def involves_param(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_involves_param_id(args[0].ptr, args[1].ptr) + if res < 0: + raise Error + return bool(res) + if len(args) == 2 and args[1].__class__ is id_list: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_involves_param_id_list(args[0].ptr, args[1].ptr) + if res < 0: + raise Error + return bool(res) + raise Error + def isa_multi_aff(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_isa_multi_aff(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def list(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_get_list(arg0.ptr) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def get_list(arg0): + return arg0.list() + def max(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).max(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_max(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def max_multi_val(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_max_multi_val(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def min(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).min(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_min(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def min_multi_val(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_min_multi_val(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def neg(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_neg(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).plain_is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def product(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).product(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_product(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def pullback(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_pullback_multi_aff(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_pullback_multi_pw_aff(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_pullback_pw_multi_aff(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).range_product(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_range_product(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def reset_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_reset_range_tuple_id(isl.isl_multi_pw_aff_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def scale(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_scale_multi_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_scale_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_scale_down_multi_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_scale_down_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg2.__class__ is pw_aff: + arg2 = pw_aff(arg2) + except: + return multi_union_pw_aff(arg0).set_at(arg1, arg2) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_set_at(isl.isl_multi_pw_aff_copy(arg0.ptr), arg1, isl.isl_pw_aff_copy(arg2.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is multi_pw_aff: + args[0] = multi_pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_pw_aff_set_range_tuple_id(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def size(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + def space(arg0): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).sub(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_sub(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def unbind_params_insert_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return multi_union_pw_aff(arg0).unbind_params_insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_unbind_params_insert_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def union_add(arg0, arg1): + try: + if not arg0.__class__ is multi_pw_aff: + arg0 = multi_pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_pw_aff: + arg1 = multi_pw_aff(arg1) + except: + return multi_union_pw_aff(arg0).union_add(arg1) + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_union_add(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_pw_aff_zero(isl.isl_space_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_multi_pw_aff_from_aff.restype = c_void_p +isl.isl_multi_pw_aff_from_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_from_multi_aff.restype = c_void_p +isl.isl_multi_pw_aff_from_multi_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_from_pw_aff.restype = c_void_p +isl.isl_multi_pw_aff_from_pw_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_from_pw_aff_list.restype = c_void_p +isl.isl_multi_pw_aff_from_pw_aff_list.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_from_pw_multi_aff.restype = c_void_p +isl.isl_multi_pw_aff_from_pw_multi_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_read_from_str.restype = c_void_p +isl.isl_multi_pw_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_multi_pw_aff_add.restype = c_void_p +isl.isl_multi_pw_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_add_constant_multi_val.restype = c_void_p +isl.isl_multi_pw_aff_add_constant_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_add_constant_val.restype = c_void_p +isl.isl_multi_pw_aff_add_constant_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_as_map.restype = c_void_p +isl.isl_multi_pw_aff_as_map.argtypes = [c_void_p] +isl.isl_multi_pw_aff_as_multi_aff.restype = c_void_p +isl.isl_multi_pw_aff_as_multi_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_as_set.restype = c_void_p +isl.isl_multi_pw_aff_as_set.argtypes = [c_void_p] +isl.isl_multi_pw_aff_get_at.restype = c_void_p +isl.isl_multi_pw_aff_get_at.argtypes = [c_void_p, c_int] +isl.isl_multi_pw_aff_bind.restype = c_void_p +isl.isl_multi_pw_aff_bind.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_bind_domain.restype = c_void_p +isl.isl_multi_pw_aff_bind_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_bind_domain_wrapped_domain.restype = c_void_p +isl.isl_multi_pw_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_coalesce.restype = c_void_p +isl.isl_multi_pw_aff_coalesce.argtypes = [c_void_p] +isl.isl_multi_pw_aff_domain.restype = c_void_p +isl.isl_multi_pw_aff_domain.argtypes = [c_void_p] +isl.isl_multi_pw_aff_domain_reverse.restype = c_void_p +isl.isl_multi_pw_aff_domain_reverse.argtypes = [c_void_p] +isl.isl_multi_pw_aff_flat_range_product.restype = c_void_p +isl.isl_multi_pw_aff_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_gist.restype = c_void_p +isl.isl_multi_pw_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_gist_params.restype = c_void_p +isl.isl_multi_pw_aff_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_pw_aff_identity_multi_pw_aff.restype = c_void_p +isl.isl_multi_pw_aff_identity_multi_pw_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_identity_on_domain_space.restype = c_void_p +isl.isl_multi_pw_aff_identity_on_domain_space.argtypes = [c_void_p] +isl.isl_multi_pw_aff_insert_domain.restype = c_void_p +isl.isl_multi_pw_aff_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_intersect_domain.restype = c_void_p +isl.isl_multi_pw_aff_intersect_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_intersect_params.restype = c_void_p +isl.isl_multi_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_involves_nan.argtypes = [c_void_p] +isl.isl_multi_pw_aff_involves_param_id.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_involves_param_id_list.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_isa_multi_aff.argtypes = [c_void_p] +isl.isl_multi_pw_aff_get_list.restype = c_void_p +isl.isl_multi_pw_aff_get_list.argtypes = [c_void_p] +isl.isl_multi_pw_aff_max.restype = c_void_p +isl.isl_multi_pw_aff_max.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_max_multi_val.restype = c_void_p +isl.isl_multi_pw_aff_max_multi_val.argtypes = [c_void_p] +isl.isl_multi_pw_aff_min.restype = c_void_p +isl.isl_multi_pw_aff_min.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_min_multi_val.restype = c_void_p +isl.isl_multi_pw_aff_min_multi_val.argtypes = [c_void_p] +isl.isl_multi_pw_aff_neg.restype = c_void_p +isl.isl_multi_pw_aff_neg.argtypes = [c_void_p] +isl.isl_multi_pw_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_product.restype = c_void_p +isl.isl_multi_pw_aff_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_pullback_multi_aff.restype = c_void_p +isl.isl_multi_pw_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_pullback_multi_pw_aff.restype = c_void_p +isl.isl_multi_pw_aff_pullback_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_pullback_pw_multi_aff.restype = c_void_p +isl.isl_multi_pw_aff_pullback_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_range_product.restype = c_void_p +isl.isl_multi_pw_aff_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_get_range_tuple_id.restype = c_void_p +isl.isl_multi_pw_aff_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_pw_aff_reset_range_tuple_id.restype = c_void_p +isl.isl_multi_pw_aff_reset_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_pw_aff_scale_multi_val.restype = c_void_p +isl.isl_multi_pw_aff_scale_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_scale_val.restype = c_void_p +isl.isl_multi_pw_aff_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_scale_down_multi_val.restype = c_void_p +isl.isl_multi_pw_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_scale_down_val.restype = c_void_p +isl.isl_multi_pw_aff_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_set_at.restype = c_void_p +isl.isl_multi_pw_aff_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_multi_pw_aff_set_range_tuple_id.restype = c_void_p +isl.isl_multi_pw_aff_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_size.argtypes = [c_void_p] +isl.isl_multi_pw_aff_get_space.restype = c_void_p +isl.isl_multi_pw_aff_get_space.argtypes = [c_void_p] +isl.isl_multi_pw_aff_sub.restype = c_void_p +isl.isl_multi_pw_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_unbind_params_insert_domain.restype = c_void_p +isl.isl_multi_pw_aff_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_union_add.restype = c_void_p +isl.isl_multi_pw_aff_union_add.argtypes = [c_void_p, c_void_p] +isl.isl_multi_pw_aff_zero.restype = c_void_p +isl.isl_multi_pw_aff_zero.argtypes = [c_void_p] +isl.isl_multi_pw_aff_copy.restype = c_void_p +isl.isl_multi_pw_aff_copy.argtypes = [c_void_p] +isl.isl_multi_pw_aff_free.restype = c_void_p +isl.isl_multi_pw_aff_free.argtypes = [c_void_p] +isl.isl_multi_pw_aff_to_str.restype = POINTER(c_char) +isl.isl_multi_pw_aff_to_str.argtypes = [c_void_p] + +class pw_multi_aff(union_pw_multi_aff, multi_pw_aff): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is multi_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_multi_aff_from_multi_aff(isl.isl_multi_aff_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_multi_aff_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_multi_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_pw_multi_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ptr = isl.isl_pw_multi_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.pw_multi_aff("""%s""")' % s + else: + return 'isl.pw_multi_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).add(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_add(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def add_constant(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_add_constant_multi_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_add_constant_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def as_map(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_as_map(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def as_multi_aff(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_as_multi_aff(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def as_set(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_as_set(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_get_at(arg0.ptr, arg1) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def bind_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_pw_multi_aff(arg0).bind_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_bind_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def bind_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_pw_multi_aff(arg0).bind_domain_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_bind_domain_wrapped_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_coalesce(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_domain(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + @staticmethod + def domain_map(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_domain_map(isl.isl_space_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_domain_reverse(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_drop_unused_params(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).flat_range_product(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_flat_range_product(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def foreach_piece(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = set(ctx=arg0.ctx, ptr=(cb_arg0)) + cb_arg1 = multi_aff(ctx=arg0.ctx, ptr=(cb_arg1)) + try: + arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_foreach_piece(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def gist(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_multi_aff(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_gist(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_multi_aff(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_gist_params(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + @staticmethod + def identity_on_domain(*args): + if len(args) == 1 and args[0].__class__ is space: + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_identity_on_domain_space(isl.isl_space_copy(args[0].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def insert_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + return union_pw_multi_aff(arg0).insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_insert_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_multi_aff(arg0).intersect_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_intersect_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_multi_aff(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_intersect_params(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def involves_locals(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_involves_locals(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def isa_multi_aff(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_isa_multi_aff(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def max_multi_val(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_max_multi_val(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def min_multi_val(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_min_multi_val(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + @staticmethod + def multi_val_on_domain(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + return union_pw_multi_aff(arg0).multi_val_on_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_multi_val_on_domain(isl.isl_set_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def n_piece(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_n_piece(arg0.ptr) + if res < 0: + raise Error + return int(res) + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).plain_is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def preimage_domain_wrapped_domain(*args): + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def product(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).product(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_product(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def pullback(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_pullback_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_pullback_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def range_factor_domain(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_range_factor_domain(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def range_factor_range(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_range_factor_range(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def range_map(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_range_map(isl.isl_space_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def range_product(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).range_product(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_range_product(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def range_tuple_id(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def scale(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_scale_multi_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_scale_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_scale_down_multi_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_scale_down_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is pw_multi_aff: + args[0] = pw_multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_multi_aff_set_range_tuple_id(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def space(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).sub(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_sub(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def subtract_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_multi_aff(arg0).subtract_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_subtract_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_to_list(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def to_multi_pw_aff(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_to_multi_pw_aff(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def to_union_pw_multi_aff(arg0): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_to_union_pw_multi_aff(isl.isl_pw_multi_aff_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def union_add(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff: + arg0 = pw_multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + return union_pw_multi_aff(arg0).union_add(arg1) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_union_add(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_zero(isl.isl_space_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_pw_multi_aff_from_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_from_multi_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_from_pw_aff.restype = c_void_p +isl.isl_pw_multi_aff_from_pw_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_read_from_str.restype = c_void_p +isl.isl_pw_multi_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_pw_multi_aff_add.restype = c_void_p +isl.isl_pw_multi_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_add_constant_multi_val.restype = c_void_p +isl.isl_pw_multi_aff_add_constant_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_add_constant_val.restype = c_void_p +isl.isl_pw_multi_aff_add_constant_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_as_map.restype = c_void_p +isl.isl_pw_multi_aff_as_map.argtypes = [c_void_p] +isl.isl_pw_multi_aff_as_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_as_multi_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_as_set.restype = c_void_p +isl.isl_pw_multi_aff_as_set.argtypes = [c_void_p] +isl.isl_pw_multi_aff_get_at.restype = c_void_p +isl.isl_pw_multi_aff_get_at.argtypes = [c_void_p, c_int] +isl.isl_pw_multi_aff_bind_domain.restype = c_void_p +isl.isl_pw_multi_aff_bind_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_bind_domain_wrapped_domain.restype = c_void_p +isl.isl_pw_multi_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_coalesce.restype = c_void_p +isl.isl_pw_multi_aff_coalesce.argtypes = [c_void_p] +isl.isl_pw_multi_aff_domain.restype = c_void_p +isl.isl_pw_multi_aff_domain.argtypes = [c_void_p] +isl.isl_pw_multi_aff_domain_map.restype = c_void_p +isl.isl_pw_multi_aff_domain_map.argtypes = [c_void_p] +isl.isl_pw_multi_aff_domain_reverse.restype = c_void_p +isl.isl_pw_multi_aff_domain_reverse.argtypes = [c_void_p] +isl.isl_pw_multi_aff_drop_unused_params.restype = c_void_p +isl.isl_pw_multi_aff_drop_unused_params.argtypes = [c_void_p] +isl.isl_pw_multi_aff_flat_range_product.restype = c_void_p +isl.isl_pw_multi_aff_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_foreach_piece.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_pw_multi_aff_gist.restype = c_void_p +isl.isl_pw_multi_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_gist_params.restype = c_void_p +isl.isl_pw_multi_aff_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_pw_multi_aff_identity_on_domain_space.restype = c_void_p +isl.isl_pw_multi_aff_identity_on_domain_space.argtypes = [c_void_p] +isl.isl_pw_multi_aff_insert_domain.restype = c_void_p +isl.isl_pw_multi_aff_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_intersect_domain.restype = c_void_p +isl.isl_pw_multi_aff_intersect_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_intersect_params.restype = c_void_p +isl.isl_pw_multi_aff_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_involves_locals.argtypes = [c_void_p] +isl.isl_pw_multi_aff_isa_multi_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_max_multi_val.restype = c_void_p +isl.isl_pw_multi_aff_max_multi_val.argtypes = [c_void_p] +isl.isl_pw_multi_aff_min_multi_val.restype = c_void_p +isl.isl_pw_multi_aff_min_multi_val.argtypes = [c_void_p] +isl.isl_pw_multi_aff_multi_val_on_domain.restype = c_void_p +isl.isl_pw_multi_aff_multi_val_on_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_n_piece.argtypes = [c_void_p] +isl.isl_pw_multi_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_product.restype = c_void_p +isl.isl_pw_multi_aff_product.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_pullback_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_pullback_pw_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_pullback_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_range_factor_domain.restype = c_void_p +isl.isl_pw_multi_aff_range_factor_domain.argtypes = [c_void_p] +isl.isl_pw_multi_aff_range_factor_range.restype = c_void_p +isl.isl_pw_multi_aff_range_factor_range.argtypes = [c_void_p] +isl.isl_pw_multi_aff_range_map.restype = c_void_p +isl.isl_pw_multi_aff_range_map.argtypes = [c_void_p] +isl.isl_pw_multi_aff_range_product.restype = c_void_p +isl.isl_pw_multi_aff_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_get_range_tuple_id.restype = c_void_p +isl.isl_pw_multi_aff_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_pw_multi_aff_scale_multi_val.restype = c_void_p +isl.isl_pw_multi_aff_scale_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_scale_val.restype = c_void_p +isl.isl_pw_multi_aff_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_scale_down_multi_val.restype = c_void_p +isl.isl_pw_multi_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_scale_down_val.restype = c_void_p +isl.isl_pw_multi_aff_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_set_range_tuple_id.restype = c_void_p +isl.isl_pw_multi_aff_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_get_space.restype = c_void_p +isl.isl_pw_multi_aff_get_space.argtypes = [c_void_p] +isl.isl_pw_multi_aff_sub.restype = c_void_p +isl.isl_pw_multi_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_subtract_domain.restype = c_void_p +isl.isl_pw_multi_aff_subtract_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_to_list.restype = c_void_p +isl.isl_pw_multi_aff_to_list.argtypes = [c_void_p] +isl.isl_pw_multi_aff_to_multi_pw_aff.restype = c_void_p +isl.isl_pw_multi_aff_to_multi_pw_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_to_union_pw_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_to_union_pw_multi_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_union_add.restype = c_void_p +isl.isl_pw_multi_aff_union_add.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_zero.restype = c_void_p +isl.isl_pw_multi_aff_zero.argtypes = [c_void_p] +isl.isl_pw_multi_aff_copy.restype = c_void_p +isl.isl_pw_multi_aff_copy.argtypes = [c_void_p] +isl.isl_pw_multi_aff_free.restype = c_void_p +isl.isl_pw_multi_aff_free.argtypes = [c_void_p] +isl.isl_pw_multi_aff_to_str.restype = POINTER(c_char) +isl.isl_pw_multi_aff_to_str.argtypes = [c_void_p] + +class pw_aff(union_pw_aff, pw_multi_aff, multi_pw_aff): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_aff_from_aff(isl.isl_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_pw_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ptr = isl.isl_pw_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.pw_aff("""%s""")' % s + else: + return 'isl.pw_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).add(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_add(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def add_constant(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_add_constant_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def as_aff(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_as_aff(isl.isl_pw_aff_copy(arg0.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def as_map(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_as_map(isl.isl_pw_aff_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def bind(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_bind_id(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + raise Error + def bind_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_pw_aff(arg0).bind_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_bind_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def bind_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_pw_aff(arg0).bind_domain_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_bind_domain_wrapped_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def ceil(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_ceil(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_coalesce(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def cond(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).cond(arg1, arg2) + try: + if not arg2.__class__ is pw_aff: + arg2 = pw_aff(arg2) + except: + return union_pw_aff(arg0).cond(arg1, arg2) + ctx = arg0.ctx + res = isl.isl_pw_aff_cond(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr), isl.isl_pw_aff_copy(arg2.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def div(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).div(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_div(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_domain(isl.isl_pw_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_domain_reverse(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_drop_unused_params(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def eq_set(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).eq_set(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_eq_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def eval(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is point: + arg1 = point(arg1) + except: + return union_pw_aff(arg0).eval(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_eval(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_point_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def floor(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_floor(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def ge_set(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).ge_set(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_ge_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_aff(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_gist(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_aff(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_gist_params(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def gt_set(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).gt_set(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_gt_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def insert_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + return union_pw_aff(arg0).insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_insert_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_aff(arg0).intersect_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_intersect_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_aff(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_intersect_params(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def isa_aff(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_isa_aff(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def le_set(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).le_set(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_le_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def lt_set(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).lt_set(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_lt_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def max(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).max(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_max(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def max_val(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_max_val(isl.isl_pw_aff_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def min(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).min(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_min(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def min_val(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_min_val(isl.isl_pw_aff_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def mod(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_mod_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def mul(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).mul(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_mul(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def ne_set(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).ne_set(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_ne_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def neg(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_neg(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def param_on_domain(*args): + if len(args) == 2 and args[0].__class__ is set and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_param_on_domain_id(isl.isl_set_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def params(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_params(isl.isl_pw_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).plain_is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def pullback(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_pullback_multi_aff(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_pullback_multi_pw_aff(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_pullback_pw_multi_aff(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_scale_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is pw_aff: + args[0] = pw_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_pw_aff_scale_down_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def space(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).sub(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_sub(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def subtract_domain(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_pw_aff(arg0).subtract_domain(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_subtract_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def tdiv_q(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).tdiv_q(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_tdiv_q(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def tdiv_r(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).tdiv_r(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_tdiv_r(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_to_list(isl.isl_pw_aff_copy(arg0.ptr)) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def to_union_pw_aff(arg0): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_to_union_pw_aff(isl.isl_pw_aff_copy(arg0.ptr)) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def union_add(arg0, arg1): + try: + if not arg0.__class__ is pw_aff: + arg0 = pw_aff(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + return union_pw_aff(arg0).union_add(arg1) + ctx = arg0.ctx + res = isl.isl_pw_aff_union_add(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_pw_aff_from_aff.restype = c_void_p +isl.isl_pw_aff_from_aff.argtypes = [c_void_p] +isl.isl_pw_aff_read_from_str.restype = c_void_p +isl.isl_pw_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_pw_aff_add.restype = c_void_p +isl.isl_pw_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_add_constant_val.restype = c_void_p +isl.isl_pw_aff_add_constant_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_as_aff.restype = c_void_p +isl.isl_pw_aff_as_aff.argtypes = [c_void_p] +isl.isl_pw_aff_as_map.restype = c_void_p +isl.isl_pw_aff_as_map.argtypes = [c_void_p] +isl.isl_pw_aff_bind_id.restype = c_void_p +isl.isl_pw_aff_bind_id.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_bind_domain.restype = c_void_p +isl.isl_pw_aff_bind_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_bind_domain_wrapped_domain.restype = c_void_p +isl.isl_pw_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_ceil.restype = c_void_p +isl.isl_pw_aff_ceil.argtypes = [c_void_p] +isl.isl_pw_aff_coalesce.restype = c_void_p +isl.isl_pw_aff_coalesce.argtypes = [c_void_p] +isl.isl_pw_aff_cond.restype = c_void_p +isl.isl_pw_aff_cond.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_pw_aff_div.restype = c_void_p +isl.isl_pw_aff_div.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_domain.restype = c_void_p +isl.isl_pw_aff_domain.argtypes = [c_void_p] +isl.isl_pw_aff_domain_reverse.restype = c_void_p +isl.isl_pw_aff_domain_reverse.argtypes = [c_void_p] +isl.isl_pw_aff_drop_unused_params.restype = c_void_p +isl.isl_pw_aff_drop_unused_params.argtypes = [c_void_p] +isl.isl_pw_aff_eq_set.restype = c_void_p +isl.isl_pw_aff_eq_set.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_eval.restype = c_void_p +isl.isl_pw_aff_eval.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_floor.restype = c_void_p +isl.isl_pw_aff_floor.argtypes = [c_void_p] +isl.isl_pw_aff_ge_set.restype = c_void_p +isl.isl_pw_aff_ge_set.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_gist.restype = c_void_p +isl.isl_pw_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_gist_params.restype = c_void_p +isl.isl_pw_aff_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_gt_set.restype = c_void_p +isl.isl_pw_aff_gt_set.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_insert_domain.restype = c_void_p +isl.isl_pw_aff_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_intersect_domain.restype = c_void_p +isl.isl_pw_aff_intersect_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_intersect_params.restype = c_void_p +isl.isl_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_isa_aff.argtypes = [c_void_p] +isl.isl_pw_aff_le_set.restype = c_void_p +isl.isl_pw_aff_le_set.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_lt_set.restype = c_void_p +isl.isl_pw_aff_lt_set.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_max.restype = c_void_p +isl.isl_pw_aff_max.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_max_val.restype = c_void_p +isl.isl_pw_aff_max_val.argtypes = [c_void_p] +isl.isl_pw_aff_min.restype = c_void_p +isl.isl_pw_aff_min.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_min_val.restype = c_void_p +isl.isl_pw_aff_min_val.argtypes = [c_void_p] +isl.isl_pw_aff_mod_val.restype = c_void_p +isl.isl_pw_aff_mod_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_mul.restype = c_void_p +isl.isl_pw_aff_mul.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_ne_set.restype = c_void_p +isl.isl_pw_aff_ne_set.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_neg.restype = c_void_p +isl.isl_pw_aff_neg.argtypes = [c_void_p] +isl.isl_pw_aff_param_on_domain_id.restype = c_void_p +isl.isl_pw_aff_param_on_domain_id.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_params.restype = c_void_p +isl.isl_pw_aff_params.argtypes = [c_void_p] +isl.isl_pw_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_pullback_multi_aff.restype = c_void_p +isl.isl_pw_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_pullback_multi_pw_aff.restype = c_void_p +isl.isl_pw_aff_pullback_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_pullback_pw_multi_aff.restype = c_void_p +isl.isl_pw_aff_pullback_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_scale_val.restype = c_void_p +isl.isl_pw_aff_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_scale_down_val.restype = c_void_p +isl.isl_pw_aff_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_get_space.restype = c_void_p +isl.isl_pw_aff_get_space.argtypes = [c_void_p] +isl.isl_pw_aff_sub.restype = c_void_p +isl.isl_pw_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_subtract_domain.restype = c_void_p +isl.isl_pw_aff_subtract_domain.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_tdiv_q.restype = c_void_p +isl.isl_pw_aff_tdiv_q.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_tdiv_r.restype = c_void_p +isl.isl_pw_aff_tdiv_r.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_to_list.restype = c_void_p +isl.isl_pw_aff_to_list.argtypes = [c_void_p] +isl.isl_pw_aff_to_union_pw_aff.restype = c_void_p +isl.isl_pw_aff_to_union_pw_aff.argtypes = [c_void_p] +isl.isl_pw_aff_union_add.restype = c_void_p +isl.isl_pw_aff_union_add.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_copy.restype = c_void_p +isl.isl_pw_aff_copy.argtypes = [c_void_p] +isl.isl_pw_aff_free.restype = c_void_p +isl.isl_pw_aff_free.argtypes = [c_void_p] +isl.isl_pw_aff_to_str.restype = POINTER(c_char) +isl.isl_pw_aff_to_str.argtypes = [c_void_p] + +class multi_aff(pw_multi_aff, multi_pw_aff): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_aff_from_aff(isl.isl_aff_copy(args[0].ptr)) + return + if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is aff_list: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_aff_from_aff_list(isl.isl_space_copy(args[0].ptr), isl.isl_aff_list_copy(args[1].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_multi_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ptr = isl.isl_multi_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.multi_aff("""%s""")' % s + else: + return 'isl.multi_aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_aff: + arg1 = multi_aff(arg1) + except: + return pw_multi_aff(arg0).add(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_add(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def add_constant(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_add_constant_multi_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_add_constant_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def as_map(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_as_map(isl.isl_multi_aff_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def as_set(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_as_set(isl.isl_multi_aff_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_get_at(arg0.ptr, arg1) + obj = aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def bind(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return pw_multi_aff(arg0).bind(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_bind(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def bind_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return pw_multi_aff(arg0).bind_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_bind_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def bind_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return pw_multi_aff(arg0).bind_domain_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_bind_domain_wrapped_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def constant_multi_val(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_get_constant_multi_val(arg0.ptr) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def get_constant_multi_val(arg0): + return arg0.constant_multi_val() + @staticmethod + def domain_map(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_domain_map(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_domain_reverse(isl.isl_multi_aff_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_aff: + arg1 = multi_aff(arg1) + except: + return pw_multi_aff(arg0).flat_range_product(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_flat_range_product(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def floor(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_floor(isl.isl_multi_aff_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return pw_multi_aff(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_gist(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return pw_multi_aff(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_gist_params(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def identity(*args): + if len(args) == 1: + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_identity_multi_aff(isl.isl_multi_aff_copy(args[0].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + @staticmethod + def identity_on_domain(*args): + if len(args) == 1 and args[0].__class__ is space: + ctx = args[0].ctx + res = isl.isl_multi_aff_identity_on_domain_space(isl.isl_space_copy(args[0].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def insert_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + return pw_multi_aff(arg0).insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_insert_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def involves_locals(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_involves_locals(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def involves_nan(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_involves_nan(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def list(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_get_list(arg0.ptr) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def get_list(arg0): + return arg0.list() + @staticmethod + def multi_val_on_domain(*args): + if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is multi_val: + ctx = args[0].ctx + res = isl.isl_multi_aff_multi_val_on_domain_space(isl.isl_space_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def neg(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_neg(isl.isl_multi_aff_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_aff: + arg1 = multi_aff(arg1) + except: + return pw_multi_aff(arg0).plain_is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def product(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_aff: + arg1 = multi_aff(arg1) + except: + return pw_multi_aff(arg0).product(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_product(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def pullback(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_pullback_multi_aff(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + @staticmethod + def range_map(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_range_map(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_aff: + arg1 = multi_aff(arg1) + except: + return pw_multi_aff(arg0).range_product(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_range_product(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def reset_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_reset_range_tuple_id(isl.isl_multi_aff_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def scale(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_scale_multi_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_scale_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_scale_down_multi_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_scale_down_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg2.__class__ is aff: + arg2 = aff(arg2) + except: + return pw_multi_aff(arg0).set_at(arg1, arg2) + ctx = arg0.ctx + res = isl.isl_multi_aff_set_at(isl.isl_multi_aff_copy(arg0.ptr), arg1, isl.isl_aff_copy(arg2.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is multi_aff: + args[0] = multi_aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_aff_set_range_tuple_id(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def size(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + def space(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_aff: + arg1 = multi_aff(arg1) + except: + return pw_multi_aff(arg0).sub(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_sub(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def to_multi_pw_aff(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_to_multi_pw_aff(isl.isl_multi_aff_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def to_multi_union_pw_aff(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_to_multi_union_pw_aff(isl.isl_multi_aff_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def to_pw_multi_aff(arg0): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_to_pw_multi_aff(isl.isl_multi_aff_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def unbind_params_insert_domain(arg0, arg1): + try: + if not arg0.__class__ is multi_aff: + arg0 = multi_aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return pw_multi_aff(arg0).unbind_params_insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_multi_aff_unbind_params_insert_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_aff_zero(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + +isl.isl_multi_aff_from_aff.restype = c_void_p +isl.isl_multi_aff_from_aff.argtypes = [c_void_p] +isl.isl_multi_aff_from_aff_list.restype = c_void_p +isl.isl_multi_aff_from_aff_list.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_read_from_str.restype = c_void_p +isl.isl_multi_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_multi_aff_add.restype = c_void_p +isl.isl_multi_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_add_constant_multi_val.restype = c_void_p +isl.isl_multi_aff_add_constant_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_add_constant_val.restype = c_void_p +isl.isl_multi_aff_add_constant_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_as_map.restype = c_void_p +isl.isl_multi_aff_as_map.argtypes = [c_void_p] +isl.isl_multi_aff_as_set.restype = c_void_p +isl.isl_multi_aff_as_set.argtypes = [c_void_p] +isl.isl_multi_aff_get_at.restype = c_void_p +isl.isl_multi_aff_get_at.argtypes = [c_void_p, c_int] +isl.isl_multi_aff_bind.restype = c_void_p +isl.isl_multi_aff_bind.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_bind_domain.restype = c_void_p +isl.isl_multi_aff_bind_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_bind_domain_wrapped_domain.restype = c_void_p +isl.isl_multi_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_get_constant_multi_val.restype = c_void_p +isl.isl_multi_aff_get_constant_multi_val.argtypes = [c_void_p] +isl.isl_multi_aff_domain_map.restype = c_void_p +isl.isl_multi_aff_domain_map.argtypes = [c_void_p] +isl.isl_multi_aff_domain_reverse.restype = c_void_p +isl.isl_multi_aff_domain_reverse.argtypes = [c_void_p] +isl.isl_multi_aff_flat_range_product.restype = c_void_p +isl.isl_multi_aff_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_floor.restype = c_void_p +isl.isl_multi_aff_floor.argtypes = [c_void_p] +isl.isl_multi_aff_gist.restype = c_void_p +isl.isl_multi_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_gist_params.restype = c_void_p +isl.isl_multi_aff_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_aff_identity_multi_aff.restype = c_void_p +isl.isl_multi_aff_identity_multi_aff.argtypes = [c_void_p] +isl.isl_multi_aff_identity_on_domain_space.restype = c_void_p +isl.isl_multi_aff_identity_on_domain_space.argtypes = [c_void_p] +isl.isl_multi_aff_insert_domain.restype = c_void_p +isl.isl_multi_aff_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_involves_locals.argtypes = [c_void_p] +isl.isl_multi_aff_involves_nan.argtypes = [c_void_p] +isl.isl_multi_aff_get_list.restype = c_void_p +isl.isl_multi_aff_get_list.argtypes = [c_void_p] +isl.isl_multi_aff_multi_val_on_domain_space.restype = c_void_p +isl.isl_multi_aff_multi_val_on_domain_space.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_neg.restype = c_void_p +isl.isl_multi_aff_neg.argtypes = [c_void_p] +isl.isl_multi_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_product.restype = c_void_p +isl.isl_multi_aff_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_pullback_multi_aff.restype = c_void_p +isl.isl_multi_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_range_map.restype = c_void_p +isl.isl_multi_aff_range_map.argtypes = [c_void_p] +isl.isl_multi_aff_range_product.restype = c_void_p +isl.isl_multi_aff_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_get_range_tuple_id.restype = c_void_p +isl.isl_multi_aff_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_aff_reset_range_tuple_id.restype = c_void_p +isl.isl_multi_aff_reset_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_aff_scale_multi_val.restype = c_void_p +isl.isl_multi_aff_scale_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_scale_val.restype = c_void_p +isl.isl_multi_aff_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_scale_down_multi_val.restype = c_void_p +isl.isl_multi_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_scale_down_val.restype = c_void_p +isl.isl_multi_aff_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_set_at.restype = c_void_p +isl.isl_multi_aff_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_multi_aff_set_range_tuple_id.restype = c_void_p +isl.isl_multi_aff_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_size.argtypes = [c_void_p] +isl.isl_multi_aff_get_space.restype = c_void_p +isl.isl_multi_aff_get_space.argtypes = [c_void_p] +isl.isl_multi_aff_sub.restype = c_void_p +isl.isl_multi_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_to_multi_pw_aff.restype = c_void_p +isl.isl_multi_aff_to_multi_pw_aff.argtypes = [c_void_p] +isl.isl_multi_aff_to_multi_union_pw_aff.restype = c_void_p +isl.isl_multi_aff_to_multi_union_pw_aff.argtypes = [c_void_p] +isl.isl_multi_aff_to_pw_multi_aff.restype = c_void_p +isl.isl_multi_aff_to_pw_multi_aff.argtypes = [c_void_p] +isl.isl_multi_aff_unbind_params_insert_domain.restype = c_void_p +isl.isl_multi_aff_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_multi_aff_zero.restype = c_void_p +isl.isl_multi_aff_zero.argtypes = [c_void_p] +isl.isl_multi_aff_copy.restype = c_void_p +isl.isl_multi_aff_copy.argtypes = [c_void_p] +isl.isl_multi_aff_free.restype = c_void_p +isl.isl_multi_aff_free.argtypes = [c_void_p] +isl.isl_multi_aff_to_str.restype = POINTER(c_char) +isl.isl_multi_aff_to_str.argtypes = [c_void_p] + +class aff(pw_aff, multi_aff): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_aff_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_aff_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ptr = isl.isl_aff_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.aff("""%s""")' % s + else: + return 'isl.aff("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).add(arg1) + ctx = arg0.ctx + res = isl.isl_aff_add(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def add_constant(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is aff: + args[0] = aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_aff_add_constant_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + def bind(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is aff: + args[0] = aff(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_aff_bind_id(isl.isl_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + raise Error + def ceil(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_ceil(isl.isl_aff_copy(arg0.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def constant_val(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_get_constant_val(arg0.ptr) + obj = val(ctx=ctx, ptr=res) + return obj + def get_constant_val(arg0): + return arg0.constant_val() + def div(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).div(arg1) + ctx = arg0.ctx + res = isl.isl_aff_div(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_domain_reverse(isl.isl_aff_copy(arg0.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def eq_set(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).eq_set(arg1) + ctx = arg0.ctx + res = isl.isl_aff_eq_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def eval(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is point: + arg1 = point(arg1) + except: + return pw_aff(arg0).eval(arg1) + ctx = arg0.ctx + res = isl.isl_aff_eval(isl.isl_aff_copy(arg0.ptr), isl.isl_point_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def floor(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_floor(isl.isl_aff_copy(arg0.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def ge_set(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).ge_set(arg1) + ctx = arg0.ctx + res = isl.isl_aff_ge_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return pw_aff(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_aff_gist(isl.isl_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return pw_aff(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_aff_gist_params(isl.isl_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def gt_set(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).gt_set(arg1) + ctx = arg0.ctx + res = isl.isl_aff_gt_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def is_cst(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_is_cst(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def le_set(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).le_set(arg1) + ctx = arg0.ctx + res = isl.isl_aff_le_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def lt_set(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).lt_set(arg1) + ctx = arg0.ctx + res = isl.isl_aff_lt_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def mod(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is aff: + args[0] = aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_aff_mod_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + def mul(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).mul(arg1) + ctx = arg0.ctx + res = isl.isl_aff_mul(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def ne_set(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).ne_set(arg1) + ctx = arg0.ctx + res = isl.isl_aff_ne_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def neg(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_neg(isl.isl_aff_copy(arg0.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).plain_is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_aff_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def pullback(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is aff: + args[0] = aff(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_aff_pullback_multi_aff(isl.isl_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is aff: + args[0] = aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_aff_scale_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is aff: + args[0] = aff(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_aff_scale_down_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + def sub(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return pw_aff(arg0).sub(arg1) + ctx = arg0.ctx + res = isl.isl_aff_sub(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_to_list(isl.isl_aff_copy(arg0.ptr)) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def unbind_params_insert_domain(arg0, arg1): + try: + if not arg0.__class__ is aff: + arg0 = aff(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return pw_aff(arg0).unbind_params_insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_aff_unbind_params_insert_domain(isl.isl_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero_on_domain(*args): + if len(args) == 1 and args[0].__class__ is space: + ctx = args[0].ctx + res = isl.isl_aff_zero_on_domain_space(isl.isl_space_copy(args[0].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + +isl.isl_aff_read_from_str.restype = c_void_p +isl.isl_aff_read_from_str.argtypes = [Context, c_char_p] +isl.isl_aff_add.restype = c_void_p +isl.isl_aff_add.argtypes = [c_void_p, c_void_p] +isl.isl_aff_add_constant_val.restype = c_void_p +isl.isl_aff_add_constant_val.argtypes = [c_void_p, c_void_p] +isl.isl_aff_bind_id.restype = c_void_p +isl.isl_aff_bind_id.argtypes = [c_void_p, c_void_p] +isl.isl_aff_ceil.restype = c_void_p +isl.isl_aff_ceil.argtypes = [c_void_p] +isl.isl_aff_get_constant_val.restype = c_void_p +isl.isl_aff_get_constant_val.argtypes = [c_void_p] +isl.isl_aff_div.restype = c_void_p +isl.isl_aff_div.argtypes = [c_void_p, c_void_p] +isl.isl_aff_domain_reverse.restype = c_void_p +isl.isl_aff_domain_reverse.argtypes = [c_void_p] +isl.isl_aff_eq_set.restype = c_void_p +isl.isl_aff_eq_set.argtypes = [c_void_p, c_void_p] +isl.isl_aff_eval.restype = c_void_p +isl.isl_aff_eval.argtypes = [c_void_p, c_void_p] +isl.isl_aff_floor.restype = c_void_p +isl.isl_aff_floor.argtypes = [c_void_p] +isl.isl_aff_ge_set.restype = c_void_p +isl.isl_aff_ge_set.argtypes = [c_void_p, c_void_p] +isl.isl_aff_gist.restype = c_void_p +isl.isl_aff_gist.argtypes = [c_void_p, c_void_p] +isl.isl_aff_gist_params.restype = c_void_p +isl.isl_aff_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_aff_gt_set.restype = c_void_p +isl.isl_aff_gt_set.argtypes = [c_void_p, c_void_p] +isl.isl_aff_is_cst.argtypes = [c_void_p] +isl.isl_aff_le_set.restype = c_void_p +isl.isl_aff_le_set.argtypes = [c_void_p, c_void_p] +isl.isl_aff_lt_set.restype = c_void_p +isl.isl_aff_lt_set.argtypes = [c_void_p, c_void_p] +isl.isl_aff_mod_val.restype = c_void_p +isl.isl_aff_mod_val.argtypes = [c_void_p, c_void_p] +isl.isl_aff_mul.restype = c_void_p +isl.isl_aff_mul.argtypes = [c_void_p, c_void_p] +isl.isl_aff_ne_set.restype = c_void_p +isl.isl_aff_ne_set.argtypes = [c_void_p, c_void_p] +isl.isl_aff_neg.restype = c_void_p +isl.isl_aff_neg.argtypes = [c_void_p] +isl.isl_aff_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_aff_pullback_multi_aff.restype = c_void_p +isl.isl_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_aff_scale_val.restype = c_void_p +isl.isl_aff_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_aff_scale_down_val.restype = c_void_p +isl.isl_aff_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_aff_sub.restype = c_void_p +isl.isl_aff_sub.argtypes = [c_void_p, c_void_p] +isl.isl_aff_to_list.restype = c_void_p +isl.isl_aff_to_list.argtypes = [c_void_p] +isl.isl_aff_unbind_params_insert_domain.restype = c_void_p +isl.isl_aff_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_aff_zero_on_domain_space.restype = c_void_p +isl.isl_aff_zero_on_domain_space.argtypes = [c_void_p] +isl.isl_aff_copy.restype = c_void_p +isl.isl_aff_copy.argtypes = [c_void_p] +isl.isl_aff_free.restype = c_void_p +isl.isl_aff_free.argtypes = [c_void_p] +isl.isl_aff_to_str.restype = POINTER(c_char) +isl.isl_aff_to_str.argtypes = [c_void_p] + +class aff_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_aff_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_aff_list_from_aff(isl.isl_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_aff_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_aff_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + ptr = isl.isl_aff_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.aff_list("""%s""")' % s + else: + return 'isl.aff_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_add(isl.isl_aff_list_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr)) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_get_at(arg0.ptr, arg1) + obj = aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_clear(isl.isl_aff_list_copy(arg0.ptr)) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is aff_list: + arg1 = aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_concat(isl.isl_aff_list_copy(arg0.ptr), isl.isl_aff_list_copy(arg1.ptr)) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_drop(isl.isl_aff_list_copy(arg0.ptr), arg1, arg2) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = aff(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_aff_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = aff(ctx=arg0.ctx, ptr=isl.isl_aff_copy(cb_arg0)) + cb_arg1 = aff(ctx=arg0.ctx, ptr=isl.isl_aff_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = aff_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_aff_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is aff: + arg2 = aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_insert(isl.isl_aff_list_copy(arg0.ptr), arg1, isl.isl_aff_copy(arg2.ptr)) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is aff: + arg2 = aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_set_at(isl.isl_aff_list_copy(arg0.ptr), arg1, isl.isl_aff_copy(arg2.ptr)) + obj = aff_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is aff_list: + arg0 = aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_aff_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_aff_list_alloc.restype = c_void_p +isl.isl_aff_list_alloc.argtypes = [Context, c_int] +isl.isl_aff_list_from_aff.restype = c_void_p +isl.isl_aff_list_from_aff.argtypes = [c_void_p] +isl.isl_aff_list_read_from_str.restype = c_void_p +isl.isl_aff_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_aff_list_add.restype = c_void_p +isl.isl_aff_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_aff_list_get_at.restype = c_void_p +isl.isl_aff_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_aff_list_clear.restype = c_void_p +isl.isl_aff_list_clear.argtypes = [c_void_p] +isl.isl_aff_list_concat.restype = c_void_p +isl.isl_aff_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_aff_list_drop.restype = c_void_p +isl.isl_aff_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_aff_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_aff_list_insert.restype = c_void_p +isl.isl_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_aff_list_set_at.restype = c_void_p +isl.isl_aff_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_aff_list_size.argtypes = [c_void_p] +isl.isl_aff_list_copy.restype = c_void_p +isl.isl_aff_list_copy.argtypes = [c_void_p] +isl.isl_aff_list_free.restype = c_void_p +isl.isl_aff_list_free.argtypes = [c_void_p] +isl.isl_aff_list_to_str.restype = POINTER(c_char) +isl.isl_aff_list_to_str.argtypes = [c_void_p] + +class ast_build(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 0: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_ast_build_alloc(self.ctx) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_build_free(self.ptr) + def copy_callbacks(self, obj): + if hasattr(obj, 'at_each_domain'): + self.at_each_domain = obj.at_each_domain + def set_at_each_domain(arg0, arg1): + try: + if not arg0.__class__ is ast_build: + arg0 = ast_build(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = ast_node(ctx=arg0.ctx, ptr=(cb_arg0)) + cb_arg1 = ast_build(ctx=arg0.ctx, ptr=isl.isl_ast_build_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return None + return isl.isl_ast_node_copy(res.ptr) + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_ast_build_set_at_each_domain(isl.isl_ast_build_copy(arg0.ptr), cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if hasattr(arg0, 'at_each_domain') and arg0.at_each_domain['exc_info'] != None: + exc_info = arg0.at_each_domain['exc_info'][0] + arg0.at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_build(ctx=ctx, ptr=res) + obj.copy_callbacks(arg0) + obj.at_each_domain = { 'func': cb1, 'exc_info': exc_info } + return obj + def access_from(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_access_from_multi_pw_aff(args[0].ptr, isl.isl_multi_pw_aff_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_expr(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_access_from_pw_multi_aff(args[0].ptr, isl.isl_pw_multi_aff_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_expr(ctx=ctx, ptr=res) + return obj + raise Error + def call_from(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_call_from_multi_pw_aff(args[0].ptr, isl.isl_multi_pw_aff_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_expr(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_call_from_pw_multi_aff(args[0].ptr, isl.isl_pw_multi_aff_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_expr(ctx=ctx, ptr=res) + return obj + raise Error + def expr_from(*args): + if len(args) == 2 and args[1].__class__ is pw_aff: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_expr_from_pw_aff(args[0].ptr, isl.isl_pw_aff_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_expr(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is set: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_expr_from_set(args[0].ptr, isl.isl_set_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_expr(ctx=ctx, ptr=res) + return obj + raise Error + @staticmethod + def from_context(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_build_from_context(isl.isl_set_copy(arg0.ptr)) + obj = ast_build(ctx=ctx, ptr=res) + return obj + def node_from(*args): + if len(args) == 2 and args[1].__class__ is schedule: + args = list(args) + try: + if not args[0].__class__ is ast_build: + args[0] = ast_build(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_ast_build_node_from_schedule(args[0].ptr, isl.isl_schedule_copy(args[1].ptr)) + if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None: + exc_info = args[0].at_each_domain['exc_info'][0] + args[0].at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_node(ctx=ctx, ptr=res) + return obj + raise Error + def node_from_schedule_map(arg0, arg1): + try: + if not arg0.__class__ is ast_build: + arg0 = ast_build(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_build_node_from_schedule_map(arg0.ptr, isl.isl_union_map_copy(arg1.ptr)) + if hasattr(arg0, 'at_each_domain') and arg0.at_each_domain['exc_info'] != None: + exc_info = arg0.at_each_domain['exc_info'][0] + arg0.at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = ast_node(ctx=ctx, ptr=res) + return obj + def schedule(arg0): + try: + if not arg0.__class__ is ast_build: + arg0 = ast_build(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_build_get_schedule(arg0.ptr) + if hasattr(arg0, 'at_each_domain') and arg0.at_each_domain['exc_info'] != None: + exc_info = arg0.at_each_domain['exc_info'][0] + arg0.at_each_domain['exc_info'][0] = None + if exc_info is not None: + raise exc_info + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_schedule(arg0): + return arg0.schedule() + +isl.isl_ast_build_alloc.restype = c_void_p +isl.isl_ast_build_alloc.argtypes = [Context] +isl.isl_ast_build_set_at_each_domain.restype = c_void_p +isl.isl_ast_build_set_at_each_domain.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_ast_build_access_from_multi_pw_aff.restype = c_void_p +isl.isl_ast_build_access_from_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_access_from_pw_multi_aff.restype = c_void_p +isl.isl_ast_build_access_from_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_call_from_multi_pw_aff.restype = c_void_p +isl.isl_ast_build_call_from_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_call_from_pw_multi_aff.restype = c_void_p +isl.isl_ast_build_call_from_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_expr_from_pw_aff.restype = c_void_p +isl.isl_ast_build_expr_from_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_expr_from_set.restype = c_void_p +isl.isl_ast_build_expr_from_set.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_from_context.restype = c_void_p +isl.isl_ast_build_from_context.argtypes = [c_void_p] +isl.isl_ast_build_node_from_schedule.restype = c_void_p +isl.isl_ast_build_node_from_schedule.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_node_from_schedule_map.restype = c_void_p +isl.isl_ast_build_node_from_schedule_map.argtypes = [c_void_p, c_void_p] +isl.isl_ast_build_get_schedule.restype = c_void_p +isl.isl_ast_build_get_schedule.argtypes = [c_void_p] +isl.isl_ast_build_copy.restype = c_void_p +isl.isl_ast_build_copy.argtypes = [c_void_p] +isl.isl_ast_build_free.restype = c_void_p +isl.isl_ast_build_free.argtypes = [c_void_p] + +class ast_expr(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and isinstance(args[0], ast_expr_op): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_id): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_int): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + if "ptr" in keywords: + type = isl.isl_ast_expr_get_type(keywords["ptr"]) + if type == 0: + return ast_expr_op(**keywords) + if type == 1: + return ast_expr_id(**keywords) + if type == 2: + return ast_expr_int(**keywords) + raise Error + return super(ast_expr, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr: + arg0 = ast_expr(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr("""%s""")' % s + else: + return 'isl.ast_expr("%s")' % s + def to_C_str(arg0): + try: + if not arg0.__class__ is ast_expr: + arg0 = ast_expr(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_expr_to_C_str(arg0.ptr) + if res == 0: + raise Error + string = cast(res, c_char_p).value.decode('ascii') + libc.free(res) + return string + +isl.isl_ast_expr_to_C_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_C_str.argtypes = [c_void_p] +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] +isl.isl_ast_expr_get_type.argtypes = [c_void_p] + +class ast_expr_id(ast_expr): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_id, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_id: + arg0 = ast_expr_id(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_id("""%s""")' % s + else: + return 'isl.ast_expr_id("%s")' % s + def id(arg0): + try: + if not arg0.__class__ is ast_expr: + arg0 = ast_expr(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_expr_id_get_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_id(arg0): + return arg0.id() + +isl.isl_ast_expr_id_get_id.restype = c_void_p +isl.isl_ast_expr_id_get_id.argtypes = [c_void_p] +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_int(ast_expr): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_int, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_int: + arg0 = ast_expr_int(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_int("""%s""")' % s + else: + return 'isl.ast_expr_int("%s")' % s + def val(arg0): + try: + if not arg0.__class__ is ast_expr: + arg0 = ast_expr(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_expr_int_get_val(arg0.ptr) + obj = val(ctx=ctx, ptr=res) + return obj + def get_val(arg0): + return arg0.val() + +isl.isl_ast_expr_int_get_val.restype = c_void_p +isl.isl_ast_expr_int_get_val.argtypes = [c_void_p] +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op(ast_expr): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_and): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_and_then): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_or): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_or_else): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_max): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_min): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_minus): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_add): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_sub): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_mul): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_div): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_fdiv_q): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_pdiv_q): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_pdiv_r): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_zdiv_r): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_cond): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_select): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_eq): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_le): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_lt): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_ge): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_gt): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_call): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_access): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_member): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_expr_op_address_of): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_expr_copy(args[0].ptr) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + if "ptr" in keywords: + type = isl.isl_ast_expr_op_get_type(keywords["ptr"]) + if type == 0: + return ast_expr_op_and(**keywords) + if type == 1: + return ast_expr_op_and_then(**keywords) + if type == 2: + return ast_expr_op_or(**keywords) + if type == 3: + return ast_expr_op_or_else(**keywords) + if type == 4: + return ast_expr_op_max(**keywords) + if type == 5: + return ast_expr_op_min(**keywords) + if type == 6: + return ast_expr_op_minus(**keywords) + if type == 7: + return ast_expr_op_add(**keywords) + if type == 8: + return ast_expr_op_sub(**keywords) + if type == 9: + return ast_expr_op_mul(**keywords) + if type == 10: + return ast_expr_op_div(**keywords) + if type == 11: + return ast_expr_op_fdiv_q(**keywords) + if type == 12: + return ast_expr_op_pdiv_q(**keywords) + if type == 13: + return ast_expr_op_pdiv_r(**keywords) + if type == 14: + return ast_expr_op_zdiv_r(**keywords) + if type == 15: + return ast_expr_op_cond(**keywords) + if type == 16: + return ast_expr_op_select(**keywords) + if type == 17: + return ast_expr_op_eq(**keywords) + if type == 18: + return ast_expr_op_le(**keywords) + if type == 19: + return ast_expr_op_lt(**keywords) + if type == 20: + return ast_expr_op_ge(**keywords) + if type == 21: + return ast_expr_op_gt(**keywords) + if type == 22: + return ast_expr_op_call(**keywords) + if type == 23: + return ast_expr_op_access(**keywords) + if type == 24: + return ast_expr_op_member(**keywords) + if type == 25: + return ast_expr_op_address_of(**keywords) + raise Error + return super(ast_expr_op, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op: + arg0 = ast_expr_op(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op("""%s""")' % s + else: + return 'isl.ast_expr_op("%s")' % s + def arg(arg0, arg1): + try: + if not arg0.__class__ is ast_expr: + arg0 = ast_expr(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_expr_op_get_arg(arg0.ptr, arg1) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_arg(arg0, arg1): + return arg0.arg(arg1) + def n_arg(arg0): + try: + if not arg0.__class__ is ast_expr: + arg0 = ast_expr(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_expr_op_get_n_arg(arg0.ptr) + if res < 0: + raise Error + return int(res) + def get_n_arg(arg0): + return arg0.n_arg() + +isl.isl_ast_expr_op_get_arg.restype = c_void_p +isl.isl_ast_expr_op_get_arg.argtypes = [c_void_p, c_int] +isl.isl_ast_expr_op_get_n_arg.argtypes = [c_void_p] +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] +isl.isl_ast_expr_op_get_type.argtypes = [c_void_p] + +class ast_expr_op_access(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_access, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_access: + arg0 = ast_expr_op_access(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_access("""%s""")' % s + else: + return 'isl.ast_expr_op_access("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_add(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_add, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_add: + arg0 = ast_expr_op_add(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_add("""%s""")' % s + else: + return 'isl.ast_expr_op_add("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_address_of(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_address_of, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_address_of: + arg0 = ast_expr_op_address_of(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_address_of("""%s""")' % s + else: + return 'isl.ast_expr_op_address_of("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_and(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_and, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_and: + arg0 = ast_expr_op_and(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_and("""%s""")' % s + else: + return 'isl.ast_expr_op_and("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_and_then(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_and_then, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_and_then: + arg0 = ast_expr_op_and_then(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_and_then("""%s""")' % s + else: + return 'isl.ast_expr_op_and_then("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_call(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_call, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_call: + arg0 = ast_expr_op_call(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_call("""%s""")' % s + else: + return 'isl.ast_expr_op_call("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_cond(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_cond, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_cond: + arg0 = ast_expr_op_cond(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_cond("""%s""")' % s + else: + return 'isl.ast_expr_op_cond("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_div(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_div, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_div: + arg0 = ast_expr_op_div(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_div("""%s""")' % s + else: + return 'isl.ast_expr_op_div("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_eq(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_eq, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_eq: + arg0 = ast_expr_op_eq(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_eq("""%s""")' % s + else: + return 'isl.ast_expr_op_eq("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_fdiv_q(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_fdiv_q, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_fdiv_q: + arg0 = ast_expr_op_fdiv_q(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_fdiv_q("""%s""")' % s + else: + return 'isl.ast_expr_op_fdiv_q("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_ge(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_ge, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_ge: + arg0 = ast_expr_op_ge(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_ge("""%s""")' % s + else: + return 'isl.ast_expr_op_ge("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_gt(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_gt, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_gt: + arg0 = ast_expr_op_gt(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_gt("""%s""")' % s + else: + return 'isl.ast_expr_op_gt("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_le(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_le, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_le: + arg0 = ast_expr_op_le(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_le("""%s""")' % s + else: + return 'isl.ast_expr_op_le("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_lt(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_lt, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_lt: + arg0 = ast_expr_op_lt(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_lt("""%s""")' % s + else: + return 'isl.ast_expr_op_lt("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_max(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_max, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_max: + arg0 = ast_expr_op_max(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_max("""%s""")' % s + else: + return 'isl.ast_expr_op_max("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_member(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_member, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_member: + arg0 = ast_expr_op_member(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_member("""%s""")' % s + else: + return 'isl.ast_expr_op_member("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_min(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_min, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_min: + arg0 = ast_expr_op_min(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_min("""%s""")' % s + else: + return 'isl.ast_expr_op_min("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_minus(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_minus, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_minus: + arg0 = ast_expr_op_minus(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_minus("""%s""")' % s + else: + return 'isl.ast_expr_op_minus("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_mul(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_mul, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_mul: + arg0 = ast_expr_op_mul(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_mul("""%s""")' % s + else: + return 'isl.ast_expr_op_mul("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_or(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_or, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_or: + arg0 = ast_expr_op_or(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_or("""%s""")' % s + else: + return 'isl.ast_expr_op_or("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_or_else(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_or_else, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_or_else: + arg0 = ast_expr_op_or_else(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_or_else("""%s""")' % s + else: + return 'isl.ast_expr_op_or_else("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_pdiv_q(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_pdiv_q, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_pdiv_q: + arg0 = ast_expr_op_pdiv_q(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_pdiv_q("""%s""")' % s + else: + return 'isl.ast_expr_op_pdiv_q("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_pdiv_r(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_pdiv_r, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_pdiv_r: + arg0 = ast_expr_op_pdiv_r(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_pdiv_r("""%s""")' % s + else: + return 'isl.ast_expr_op_pdiv_r("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_select(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_select, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_select: + arg0 = ast_expr_op_select(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_select("""%s""")' % s + else: + return 'isl.ast_expr_op_select("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_sub(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_sub, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_sub: + arg0 = ast_expr_op_sub(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_sub("""%s""")' % s + else: + return 'isl.ast_expr_op_sub("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_expr_op_zdiv_r(ast_expr_op): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_expr_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_expr_op_zdiv_r, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_expr_op_zdiv_r: + arg0 = ast_expr_op_zdiv_r(arg0) + except: + raise + ptr = isl.isl_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_expr_op_zdiv_r("""%s""")' % s + else: + return 'isl.ast_expr_op_zdiv_r("%s")' % s + +isl.isl_ast_expr_copy.restype = c_void_p +isl.isl_ast_expr_copy.argtypes = [c_void_p] +isl.isl_ast_expr_free.restype = c_void_p +isl.isl_ast_expr_free.argtypes = [c_void_p] +isl.isl_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_ast_expr_to_str.argtypes = [c_void_p] + +class ast_node(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and isinstance(args[0], ast_node_for): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_node_if): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_node_block): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_node_mark): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], ast_node_user): + self.ctx = args[0].ctx + self.ptr = isl.isl_ast_node_copy(args[0].ptr) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_free(self.ptr) + def __new__(cls, *args, **keywords): + if "ptr" in keywords: + type = isl.isl_ast_node_get_type(keywords["ptr"]) + if type == 1: + return ast_node_for(**keywords) + if type == 2: + return ast_node_if(**keywords) + if type == 3: + return ast_node_block(**keywords) + if type == 4: + return ast_node_mark(**keywords) + if type == 5: + return ast_node_user(**keywords) + raise Error + return super(ast_node, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ptr = isl.isl_ast_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node("""%s""")' % s + else: + return 'isl.ast_node("%s")' % s + def map_descendant_bottom_up(arg0, arg1): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = ast_node(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + res = arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return None + return isl.isl_ast_node_copy(res.ptr) + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_ast_node_map_descendant_bottom_up(isl.isl_ast_node_copy(arg0.ptr), cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + obj = ast_node(ctx=ctx, ptr=res) + return obj + def to_C_str(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_to_C_str(arg0.ptr) + if res == 0: + raise Error + string = cast(res, c_char_p).value.decode('ascii') + libc.free(res) + return string + def to_list(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_to_list(isl.isl_ast_node_copy(arg0.ptr)) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + +isl.isl_ast_node_map_descendant_bottom_up.restype = c_void_p +isl.isl_ast_node_map_descendant_bottom_up.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_ast_node_to_C_str.restype = POINTER(c_char) +isl.isl_ast_node_to_C_str.argtypes = [c_void_p] +isl.isl_ast_node_to_list.restype = c_void_p +isl.isl_ast_node_to_list.argtypes = [c_void_p] +isl.isl_ast_node_copy.restype = c_void_p +isl.isl_ast_node_copy.argtypes = [c_void_p] +isl.isl_ast_node_free.restype = c_void_p +isl.isl_ast_node_free.argtypes = [c_void_p] +isl.isl_ast_node_to_str.restype = POINTER(c_char) +isl.isl_ast_node_to_str.argtypes = [c_void_p] +isl.isl_ast_node_get_type.argtypes = [c_void_p] + +class ast_node_block(ast_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is ast_node_list: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_ast_node_block_from_children(isl.isl_ast_node_list_copy(args[0].ptr)) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_node_block, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node_block: + arg0 = ast_node_block(arg0) + except: + raise + ptr = isl.isl_ast_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node_block("""%s""")' % s + else: + return 'isl.ast_node_block("%s")' % s + def children(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_block_get_children(arg0.ptr) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def get_children(arg0): + return arg0.children() + +isl.isl_ast_node_block_from_children.restype = c_void_p +isl.isl_ast_node_block_from_children.argtypes = [c_void_p] +isl.isl_ast_node_block_get_children.restype = c_void_p +isl.isl_ast_node_block_get_children.argtypes = [c_void_p] +isl.isl_ast_node_copy.restype = c_void_p +isl.isl_ast_node_copy.argtypes = [c_void_p] +isl.isl_ast_node_free.restype = c_void_p +isl.isl_ast_node_free.argtypes = [c_void_p] +isl.isl_ast_node_to_str.restype = POINTER(c_char) +isl.isl_ast_node_to_str.argtypes = [c_void_p] + +class ast_node_for(ast_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_node_for, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node_for: + arg0 = ast_node_for(arg0) + except: + raise + ptr = isl.isl_ast_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node_for("""%s""")' % s + else: + return 'isl.ast_node_for("%s")' % s + def body(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_for_get_body(arg0.ptr) + obj = ast_node(ctx=ctx, ptr=res) + return obj + def get_body(arg0): + return arg0.body() + def cond(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_for_get_cond(arg0.ptr) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_cond(arg0): + return arg0.cond() + def inc(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_for_get_inc(arg0.ptr) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_inc(arg0): + return arg0.inc() + def init(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_for_get_init(arg0.ptr) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_init(arg0): + return arg0.init() + def is_degenerate(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_for_is_degenerate(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def iterator(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_for_get_iterator(arg0.ptr) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_iterator(arg0): + return arg0.iterator() + +isl.isl_ast_node_for_get_body.restype = c_void_p +isl.isl_ast_node_for_get_body.argtypes = [c_void_p] +isl.isl_ast_node_for_get_cond.restype = c_void_p +isl.isl_ast_node_for_get_cond.argtypes = [c_void_p] +isl.isl_ast_node_for_get_inc.restype = c_void_p +isl.isl_ast_node_for_get_inc.argtypes = [c_void_p] +isl.isl_ast_node_for_get_init.restype = c_void_p +isl.isl_ast_node_for_get_init.argtypes = [c_void_p] +isl.isl_ast_node_for_is_degenerate.argtypes = [c_void_p] +isl.isl_ast_node_for_get_iterator.restype = c_void_p +isl.isl_ast_node_for_get_iterator.argtypes = [c_void_p] +isl.isl_ast_node_copy.restype = c_void_p +isl.isl_ast_node_copy.argtypes = [c_void_p] +isl.isl_ast_node_free.restype = c_void_p +isl.isl_ast_node_free.argtypes = [c_void_p] +isl.isl_ast_node_to_str.restype = POINTER(c_char) +isl.isl_ast_node_to_str.argtypes = [c_void_p] + +class ast_node_if(ast_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_node_if, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node_if: + arg0 = ast_node_if(arg0) + except: + raise + ptr = isl.isl_ast_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node_if("""%s""")' % s + else: + return 'isl.ast_node_if("%s")' % s + def cond(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_if_get_cond(arg0.ptr) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_cond(arg0): + return arg0.cond() + def else_node(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_if_get_else_node(arg0.ptr) + obj = ast_node(ctx=ctx, ptr=res) + return obj + def get_else_node(arg0): + return arg0.else_node() + def has_else_node(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_if_has_else_node(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def then_node(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_if_get_then_node(arg0.ptr) + obj = ast_node(ctx=ctx, ptr=res) + return obj + def get_then_node(arg0): + return arg0.then_node() + +isl.isl_ast_node_if_get_cond.restype = c_void_p +isl.isl_ast_node_if_get_cond.argtypes = [c_void_p] +isl.isl_ast_node_if_get_else_node.restype = c_void_p +isl.isl_ast_node_if_get_else_node.argtypes = [c_void_p] +isl.isl_ast_node_if_has_else_node.argtypes = [c_void_p] +isl.isl_ast_node_if_get_then_node.restype = c_void_p +isl.isl_ast_node_if_get_then_node.argtypes = [c_void_p] +isl.isl_ast_node_copy.restype = c_void_p +isl.isl_ast_node_copy.argtypes = [c_void_p] +isl.isl_ast_node_free.restype = c_void_p +isl.isl_ast_node_free.argtypes = [c_void_p] +isl.isl_ast_node_to_str.restype = POINTER(c_char) +isl.isl_ast_node_to_str.argtypes = [c_void_p] + +class ast_node_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_ast_node_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is ast_node: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_ast_node_list_from_ast_node(isl.isl_ast_node_copy(args[0].ptr)) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + ptr = isl.isl_ast_node_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node_list("""%s""")' % s + else: + return 'isl.ast_node_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + try: + if not arg1.__class__ is ast_node: + arg1 = ast_node(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_add(isl.isl_ast_node_list_copy(arg0.ptr), isl.isl_ast_node_copy(arg1.ptr)) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_get_at(arg0.ptr, arg1) + obj = ast_node(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_clear(isl.isl_ast_node_list_copy(arg0.ptr)) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + try: + if not arg1.__class__ is ast_node_list: + arg1 = ast_node_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_concat(isl.isl_ast_node_list_copy(arg0.ptr), isl.isl_ast_node_list_copy(arg1.ptr)) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_drop(isl.isl_ast_node_list_copy(arg0.ptr), arg1, arg2) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = ast_node(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_ast_node_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = ast_node(ctx=arg0.ctx, ptr=isl.isl_ast_node_copy(cb_arg0)) + cb_arg1 = ast_node(ctx=arg0.ctx, ptr=isl.isl_ast_node_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = ast_node_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_ast_node_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + try: + if not arg2.__class__ is ast_node: + arg2 = ast_node(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_insert(isl.isl_ast_node_list_copy(arg0.ptr), arg1, isl.isl_ast_node_copy(arg2.ptr)) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + try: + if not arg2.__class__ is ast_node: + arg2 = ast_node(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_set_at(isl.isl_ast_node_list_copy(arg0.ptr), arg1, isl.isl_ast_node_copy(arg2.ptr)) + obj = ast_node_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is ast_node_list: + arg0 = ast_node_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_ast_node_list_alloc.restype = c_void_p +isl.isl_ast_node_list_alloc.argtypes = [Context, c_int] +isl.isl_ast_node_list_from_ast_node.restype = c_void_p +isl.isl_ast_node_list_from_ast_node.argtypes = [c_void_p] +isl.isl_ast_node_list_add.restype = c_void_p +isl.isl_ast_node_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_ast_node_list_get_at.restype = c_void_p +isl.isl_ast_node_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_ast_node_list_clear.restype = c_void_p +isl.isl_ast_node_list_clear.argtypes = [c_void_p] +isl.isl_ast_node_list_concat.restype = c_void_p +isl.isl_ast_node_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_ast_node_list_drop.restype = c_void_p +isl.isl_ast_node_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_ast_node_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_ast_node_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_ast_node_list_insert.restype = c_void_p +isl.isl_ast_node_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_ast_node_list_set_at.restype = c_void_p +isl.isl_ast_node_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_ast_node_list_size.argtypes = [c_void_p] +isl.isl_ast_node_list_copy.restype = c_void_p +isl.isl_ast_node_list_copy.argtypes = [c_void_p] +isl.isl_ast_node_list_free.restype = c_void_p +isl.isl_ast_node_list_free.argtypes = [c_void_p] +isl.isl_ast_node_list_to_str.restype = POINTER(c_char) +isl.isl_ast_node_list_to_str.argtypes = [c_void_p] + +class ast_node_mark(ast_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_node_mark, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node_mark: + arg0 = ast_node_mark(arg0) + except: + raise + ptr = isl.isl_ast_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node_mark("""%s""")' % s + else: + return 'isl.ast_node_mark("%s")' % s + def id(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_mark_get_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_id(arg0): + return arg0.id() + def node(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_mark_get_node(arg0.ptr) + obj = ast_node(ctx=ctx, ptr=res) + return obj + def get_node(arg0): + return arg0.node() + +isl.isl_ast_node_mark_get_id.restype = c_void_p +isl.isl_ast_node_mark_get_id.argtypes = [c_void_p] +isl.isl_ast_node_mark_get_node.restype = c_void_p +isl.isl_ast_node_mark_get_node.argtypes = [c_void_p] +isl.isl_ast_node_copy.restype = c_void_p +isl.isl_ast_node_copy.argtypes = [c_void_p] +isl.isl_ast_node_free.restype = c_void_p +isl.isl_ast_node_free.argtypes = [c_void_p] +isl.isl_ast_node_to_str.restype = POINTER(c_char) +isl.isl_ast_node_to_str.argtypes = [c_void_p] + +class ast_node_user(ast_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is ast_expr: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_ast_node_user_from_expr(isl.isl_ast_expr_copy(args[0].ptr)) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_ast_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(ast_node_user, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is ast_node_user: + arg0 = ast_node_user(arg0) + except: + raise + ptr = isl.isl_ast_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.ast_node_user("""%s""")' % s + else: + return 'isl.ast_node_user("%s")' % s + def expr(arg0): + try: + if not arg0.__class__ is ast_node: + arg0 = ast_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_ast_node_user_get_expr(arg0.ptr) + obj = ast_expr(ctx=ctx, ptr=res) + return obj + def get_expr(arg0): + return arg0.expr() + +isl.isl_ast_node_user_from_expr.restype = c_void_p +isl.isl_ast_node_user_from_expr.argtypes = [c_void_p] +isl.isl_ast_node_user_get_expr.restype = c_void_p +isl.isl_ast_node_user_get_expr.argtypes = [c_void_p] +isl.isl_ast_node_copy.restype = c_void_p +isl.isl_ast_node_copy.argtypes = [c_void_p] +isl.isl_ast_node_free.restype = c_void_p +isl.isl_ast_node_free.argtypes = [c_void_p] +isl.isl_ast_node_to_str.restype = POINTER(c_char) +isl.isl_ast_node_to_str.argtypes = [c_void_p] + +class union_map(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is basic_map: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_map_from_basic_map(isl.isl_basic_map_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is map: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_map_from_map(isl.isl_map_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_map_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_map_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ptr = isl.isl_union_map_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_map("""%s""")' % s + else: + return 'isl.union_map("%s")' % s + def affine_hull(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_affine_hull(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def apply_domain(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_apply_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def apply_range(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_apply_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def as_map(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_as_map(isl.isl_union_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def as_multi_union_pw_aff(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_as_multi_union_pw_aff(isl.isl_union_map_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def as_union_pw_multi_aff(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_as_union_pw_multi_aff(isl.isl_union_map_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def bind_range(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_bind_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_coalesce(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def compute_divs(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_compute_divs(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def curry(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_curry(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def deltas(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_deltas(isl.isl_union_map_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def detect_equalities(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_detect_equalities(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain(isl.isl_union_map_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def domain_factor_domain(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain_factor_domain(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def domain_factor_range(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain_factor_range(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def domain_map(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain_map(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def domain_map_union_pw_multi_aff(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain_map_union_pw_multi_aff(isl.isl_union_map_copy(arg0.ptr)) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def domain_product(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain_product(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_domain_reverse(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_drop_unused_params(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + @staticmethod + def empty(*args): + if len(args) == 0: + ctx = Context.getDefaultInstance() + res = isl.isl_union_map_empty_ctx(ctx) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def eq_at(*args): + if len(args) == 2 and args[1].__class__ is multi_union_pw_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_eq_at_multi_union_pw_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_union_pw_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def every_map(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = map(ctx=arg0.ctx, ptr=isl.isl_map_copy(cb_arg0)) + try: + res = arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_map_every_map(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + return bool(res) + def extract_map(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_extract_map(arg0.ptr, isl.isl_space_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def factor_domain(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_factor_domain(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def factor_range(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_factor_range(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def fixed_power(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_fixed_power_val(isl.isl_union_map_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def foreach_map(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = map(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_map_foreach_map(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + @staticmethod + def convert_from(*args): + if len(args) == 1 and args[0].__class__ is multi_union_pw_aff: + ctx = args[0].ctx + res = isl.isl_union_map_from_multi_union_pw_aff(isl.isl_multi_union_pw_aff_copy(args[0].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 1 and args[0].__class__ is union_pw_multi_aff: + ctx = args[0].ctx + res = isl.isl_union_map_from_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + @staticmethod + def from_domain(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_from_domain(isl.isl_union_set_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + @staticmethod + def from_domain_and_range(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_from_domain_and_range(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + @staticmethod + def from_range(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_from_range(isl.isl_union_set_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_gist(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def gist_domain(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_gist_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_gist_params(isl.isl_union_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def gist_range(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_gist_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_intersect(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect_domain(*args): + if len(args) == 2 and args[1].__class__ is space: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_intersect_domain_space(isl.isl_union_map_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_intersect_domain_union_set(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def intersect_domain_factor_domain(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_intersect_domain_factor_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect_domain_factor_range(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_intersect_domain_factor_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect_domain_wrapped_domain(*args): + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_intersect_domain_wrapped_domain_union_set(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_intersect_params(isl.isl_union_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect_range(*args): + if len(args) == 2 and args[1].__class__ is space: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_intersect_range_space(isl.isl_union_map_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_intersect_range_union_set(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def intersect_range_factor_domain(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_intersect_range_factor_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect_range_factor_range(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_intersect_range_factor_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect_range_wrapped_domain(*args): + if len(args) == 2 and args[1].__class__ is union_set: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_intersect_range_wrapped_domain_union_set(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def is_bijective(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_bijective(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_disjoint(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_disjoint(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_empty(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_injective(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_injective(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_single_valued(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_single_valued(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_strict_subset(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_strict_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subset(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_is_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def isa_map(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_isa_map(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def lexmax(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_lexmax(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def lexmin(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_lexmin(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def map_list(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_get_map_list(arg0.ptr) + obj = map_list(ctx=ctx, ptr=res) + return obj + def get_map_list(arg0): + return arg0.map_list() + def params(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_params(isl.isl_union_map_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def polyhedral_hull(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_polyhedral_hull(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def preimage_domain(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_domain_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_domain_multi_pw_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_domain_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_domain_union_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def preimage_range(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_range_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_range_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_preimage_range_union_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def product(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_product(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def project_out_all_params(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_project_out_all_params(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def project_out_param(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_project_out_param_id(isl.isl_union_map_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is id_list: + args = list(args) + try: + if not args[0].__class__ is union_map: + args[0] = union_map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_map_project_out_param_id_list(isl.isl_union_map_copy(args[0].ptr), isl.isl_id_list_copy(args[1].ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + raise Error + def range(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_range(isl.isl_union_map_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def range_factor_domain(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_range_factor_domain(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def range_factor_range(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_range_factor_range(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def range_map(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_range_map(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def range_product(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_range_product(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def range_reverse(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_range_reverse(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def reverse(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_reverse(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def space(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def subtract(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_subtract(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def subtract_domain(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_subtract_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def subtract_range(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_subtract_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def uncurry(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_uncurry(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def union(arg0, arg1): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_union(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def universe(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_universe(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def wrap(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_wrap(isl.isl_union_map_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def zip(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_map_zip(isl.isl_union_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + +isl.isl_union_map_from_basic_map.restype = c_void_p +isl.isl_union_map_from_basic_map.argtypes = [c_void_p] +isl.isl_union_map_from_map.restype = c_void_p +isl.isl_union_map_from_map.argtypes = [c_void_p] +isl.isl_union_map_read_from_str.restype = c_void_p +isl.isl_union_map_read_from_str.argtypes = [Context, c_char_p] +isl.isl_union_map_affine_hull.restype = c_void_p +isl.isl_union_map_affine_hull.argtypes = [c_void_p] +isl.isl_union_map_apply_domain.restype = c_void_p +isl.isl_union_map_apply_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_apply_range.restype = c_void_p +isl.isl_union_map_apply_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_as_map.restype = c_void_p +isl.isl_union_map_as_map.argtypes = [c_void_p] +isl.isl_union_map_as_multi_union_pw_aff.restype = c_void_p +isl.isl_union_map_as_multi_union_pw_aff.argtypes = [c_void_p] +isl.isl_union_map_as_union_pw_multi_aff.restype = c_void_p +isl.isl_union_map_as_union_pw_multi_aff.argtypes = [c_void_p] +isl.isl_union_map_bind_range.restype = c_void_p +isl.isl_union_map_bind_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_coalesce.restype = c_void_p +isl.isl_union_map_coalesce.argtypes = [c_void_p] +isl.isl_union_map_compute_divs.restype = c_void_p +isl.isl_union_map_compute_divs.argtypes = [c_void_p] +isl.isl_union_map_curry.restype = c_void_p +isl.isl_union_map_curry.argtypes = [c_void_p] +isl.isl_union_map_deltas.restype = c_void_p +isl.isl_union_map_deltas.argtypes = [c_void_p] +isl.isl_union_map_detect_equalities.restype = c_void_p +isl.isl_union_map_detect_equalities.argtypes = [c_void_p] +isl.isl_union_map_domain.restype = c_void_p +isl.isl_union_map_domain.argtypes = [c_void_p] +isl.isl_union_map_domain_factor_domain.restype = c_void_p +isl.isl_union_map_domain_factor_domain.argtypes = [c_void_p] +isl.isl_union_map_domain_factor_range.restype = c_void_p +isl.isl_union_map_domain_factor_range.argtypes = [c_void_p] +isl.isl_union_map_domain_map.restype = c_void_p +isl.isl_union_map_domain_map.argtypes = [c_void_p] +isl.isl_union_map_domain_map_union_pw_multi_aff.restype = c_void_p +isl.isl_union_map_domain_map_union_pw_multi_aff.argtypes = [c_void_p] +isl.isl_union_map_domain_product.restype = c_void_p +isl.isl_union_map_domain_product.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_domain_reverse.restype = c_void_p +isl.isl_union_map_domain_reverse.argtypes = [c_void_p] +isl.isl_union_map_drop_unused_params.restype = c_void_p +isl.isl_union_map_drop_unused_params.argtypes = [c_void_p] +isl.isl_union_map_empty_ctx.restype = c_void_p +isl.isl_union_map_empty_ctx.argtypes = [Context] +isl.isl_union_map_eq_at_multi_union_pw_aff.restype = c_void_p +isl.isl_union_map_eq_at_multi_union_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_every_map.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_map_extract_map.restype = c_void_p +isl.isl_union_map_extract_map.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_factor_domain.restype = c_void_p +isl.isl_union_map_factor_domain.argtypes = [c_void_p] +isl.isl_union_map_factor_range.restype = c_void_p +isl.isl_union_map_factor_range.argtypes = [c_void_p] +isl.isl_union_map_fixed_power_val.restype = c_void_p +isl.isl_union_map_fixed_power_val.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_foreach_map.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_map_from_multi_union_pw_aff.restype = c_void_p +isl.isl_union_map_from_multi_union_pw_aff.argtypes = [c_void_p] +isl.isl_union_map_from_union_pw_multi_aff.restype = c_void_p +isl.isl_union_map_from_union_pw_multi_aff.argtypes = [c_void_p] +isl.isl_union_map_from_domain.restype = c_void_p +isl.isl_union_map_from_domain.argtypes = [c_void_p] +isl.isl_union_map_from_domain_and_range.restype = c_void_p +isl.isl_union_map_from_domain_and_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_from_range.restype = c_void_p +isl.isl_union_map_from_range.argtypes = [c_void_p] +isl.isl_union_map_gist.restype = c_void_p +isl.isl_union_map_gist.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_gist_domain.restype = c_void_p +isl.isl_union_map_gist_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_gist_params.restype = c_void_p +isl.isl_union_map_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_gist_range.restype = c_void_p +isl.isl_union_map_gist_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect.restype = c_void_p +isl.isl_union_map_intersect.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_domain_space.restype = c_void_p +isl.isl_union_map_intersect_domain_space.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_domain_union_set.restype = c_void_p +isl.isl_union_map_intersect_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_domain_factor_domain.restype = c_void_p +isl.isl_union_map_intersect_domain_factor_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_domain_factor_range.restype = c_void_p +isl.isl_union_map_intersect_domain_factor_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_domain_wrapped_domain_union_set.restype = c_void_p +isl.isl_union_map_intersect_domain_wrapped_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_params.restype = c_void_p +isl.isl_union_map_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_range_space.restype = c_void_p +isl.isl_union_map_intersect_range_space.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_range_union_set.restype = c_void_p +isl.isl_union_map_intersect_range_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_range_factor_domain.restype = c_void_p +isl.isl_union_map_intersect_range_factor_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_range_factor_range.restype = c_void_p +isl.isl_union_map_intersect_range_factor_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_intersect_range_wrapped_domain_union_set.restype = c_void_p +isl.isl_union_map_intersect_range_wrapped_domain_union_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_is_bijective.argtypes = [c_void_p] +isl.isl_union_map_is_disjoint.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_is_empty.argtypes = [c_void_p] +isl.isl_union_map_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_is_injective.argtypes = [c_void_p] +isl.isl_union_map_is_single_valued.argtypes = [c_void_p] +isl.isl_union_map_is_strict_subset.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_is_subset.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_isa_map.argtypes = [c_void_p] +isl.isl_union_map_lexmax.restype = c_void_p +isl.isl_union_map_lexmax.argtypes = [c_void_p] +isl.isl_union_map_lexmin.restype = c_void_p +isl.isl_union_map_lexmin.argtypes = [c_void_p] +isl.isl_union_map_get_map_list.restype = c_void_p +isl.isl_union_map_get_map_list.argtypes = [c_void_p] +isl.isl_union_map_params.restype = c_void_p +isl.isl_union_map_params.argtypes = [c_void_p] +isl.isl_union_map_polyhedral_hull.restype = c_void_p +isl.isl_union_map_polyhedral_hull.argtypes = [c_void_p] +isl.isl_union_map_preimage_domain_multi_aff.restype = c_void_p +isl.isl_union_map_preimage_domain_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_preimage_domain_multi_pw_aff.restype = c_void_p +isl.isl_union_map_preimage_domain_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_preimage_domain_pw_multi_aff.restype = c_void_p +isl.isl_union_map_preimage_domain_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_preimage_domain_union_pw_multi_aff.restype = c_void_p +isl.isl_union_map_preimage_domain_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_preimage_range_multi_aff.restype = c_void_p +isl.isl_union_map_preimage_range_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_preimage_range_pw_multi_aff.restype = c_void_p +isl.isl_union_map_preimage_range_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_preimage_range_union_pw_multi_aff.restype = c_void_p +isl.isl_union_map_preimage_range_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_product.restype = c_void_p +isl.isl_union_map_product.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_project_out_all_params.restype = c_void_p +isl.isl_union_map_project_out_all_params.argtypes = [c_void_p] +isl.isl_union_map_project_out_param_id.restype = c_void_p +isl.isl_union_map_project_out_param_id.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_project_out_param_id_list.restype = c_void_p +isl.isl_union_map_project_out_param_id_list.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_range.restype = c_void_p +isl.isl_union_map_range.argtypes = [c_void_p] +isl.isl_union_map_range_factor_domain.restype = c_void_p +isl.isl_union_map_range_factor_domain.argtypes = [c_void_p] +isl.isl_union_map_range_factor_range.restype = c_void_p +isl.isl_union_map_range_factor_range.argtypes = [c_void_p] +isl.isl_union_map_range_map.restype = c_void_p +isl.isl_union_map_range_map.argtypes = [c_void_p] +isl.isl_union_map_range_product.restype = c_void_p +isl.isl_union_map_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_range_reverse.restype = c_void_p +isl.isl_union_map_range_reverse.argtypes = [c_void_p] +isl.isl_union_map_reverse.restype = c_void_p +isl.isl_union_map_reverse.argtypes = [c_void_p] +isl.isl_union_map_get_space.restype = c_void_p +isl.isl_union_map_get_space.argtypes = [c_void_p] +isl.isl_union_map_subtract.restype = c_void_p +isl.isl_union_map_subtract.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_subtract_domain.restype = c_void_p +isl.isl_union_map_subtract_domain.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_subtract_range.restype = c_void_p +isl.isl_union_map_subtract_range.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_uncurry.restype = c_void_p +isl.isl_union_map_uncurry.argtypes = [c_void_p] +isl.isl_union_map_union.restype = c_void_p +isl.isl_union_map_union.argtypes = [c_void_p, c_void_p] +isl.isl_union_map_universe.restype = c_void_p +isl.isl_union_map_universe.argtypes = [c_void_p] +isl.isl_union_map_wrap.restype = c_void_p +isl.isl_union_map_wrap.argtypes = [c_void_p] +isl.isl_union_map_zip.restype = c_void_p +isl.isl_union_map_zip.argtypes = [c_void_p] +isl.isl_union_map_copy.restype = c_void_p +isl.isl_union_map_copy.argtypes = [c_void_p] +isl.isl_union_map_free.restype = c_void_p +isl.isl_union_map_free.argtypes = [c_void_p] +isl.isl_union_map_to_str.restype = POINTER(c_char) +isl.isl_union_map_to_str.argtypes = [c_void_p] + +class map(union_map): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is basic_map: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_map_from_basic_map(isl.isl_basic_map_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_map_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_map_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ptr = isl.isl_map_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.map("""%s""")' % s + else: + return 'isl.map("%s")' % s + def affine_hull(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_affine_hull(isl.isl_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def apply_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).apply_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_apply_domain(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def apply_range(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).apply_range(arg1) + ctx = arg0.ctx + res = isl.isl_map_apply_range(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def as_pw_multi_aff(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_as_pw_multi_aff(isl.isl_map_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def bind_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_map(arg0).bind_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_bind_domain(isl.isl_map_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def bind_range(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_map(arg0).bind_range(arg1) + ctx = arg0.ctx + res = isl.isl_map_bind_range(isl.isl_map_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_coalesce(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def complement(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_complement(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def curry(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_curry(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def deltas(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_deltas(isl.isl_map_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def detect_equalities(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_detect_equalities(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_domain(isl.isl_map_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def domain_factor_domain(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_domain_factor_domain(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def domain_factor_range(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_domain_factor_range(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def domain_product(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).domain_product(arg1) + ctx = arg0.ctx + res = isl.isl_map_domain_product(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_domain_reverse(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def domain_tuple_dim(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_domain_tuple_dim(arg0.ptr) + if res < 0: + raise Error + return int(res) + def domain_tuple_id(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_get_domain_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_domain_tuple_id(arg0): + return arg0.domain_tuple_id() + def drop_unused_params(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_drop_unused_params(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + @staticmethod + def empty(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_empty(isl.isl_space_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def eq_at(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_eq_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def factor_domain(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_factor_domain(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def factor_range(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_factor_range(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def fixed_power(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_fixed_power_val(isl.isl_map_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def flatten(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_flatten(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def flatten_domain(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_flatten_domain(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def flatten_range(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_flatten_range(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def foreach_basic_map(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = basic_map(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_map_foreach_basic_map(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def gist(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_map_gist(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def gist_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).gist_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_gist_domain(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_map_gist_params(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def has_domain_tuple_id(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_has_domain_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def intersect(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).intersect(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).intersect_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_domain(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_domain_factor_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).intersect_domain_factor_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_domain_factor_domain(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_domain_factor_range(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).intersect_domain_factor_range(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_domain_factor_range(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_domain_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).intersect_domain_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_domain_wrapped_domain(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_params(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_range(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).intersect_range(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_range(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_range_factor_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).intersect_range_factor_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_range_factor_domain(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_range_factor_range(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).intersect_range_factor_range(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_range_factor_range(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect_range_wrapped_domain(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_map(arg0).intersect_range_wrapped_domain(arg1) + ctx = arg0.ctx + res = isl.isl_map_intersect_range_wrapped_domain(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def is_bijective(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_is_bijective(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_disjoint(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).is_disjoint(arg1) + ctx = arg0.ctx + res = isl.isl_map_is_disjoint(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_empty(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_map_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_injective(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_is_injective(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_single_valued(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_is_single_valued(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_strict_subset(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).is_strict_subset(arg1) + ctx = arg0.ctx + res = isl.isl_map_is_strict_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subset(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).is_subset(arg1) + ctx = arg0.ctx + res = isl.isl_map_is_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def lex_ge_at(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_lex_ge_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def lex_gt_at(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_lex_gt_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def lex_le_at(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_lex_le_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def lex_lt_at(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_lex_lt_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def lexmax(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_lexmax(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def lexmax_pw_multi_aff(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_lexmax_pw_multi_aff(isl.isl_map_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def lexmin(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_lexmin(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def lexmin_pw_multi_aff(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_lexmin_pw_multi_aff(isl.isl_map_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def lower_bound(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_lower_bound_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def max_multi_pw_aff(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_max_multi_pw_aff(isl.isl_map_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def min_multi_pw_aff(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_min_multi_pw_aff(isl.isl_map_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def n_basic_map(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_n_basic_map(arg0.ptr) + if res < 0: + raise Error + return int(res) + def params(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_params(isl.isl_map_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def polyhedral_hull(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_polyhedral_hull(isl.isl_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def preimage_domain(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_preimage_domain_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_preimage_domain_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_preimage_domain_pw_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def preimage_range(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_preimage_range_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_preimage_range_pw_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def product(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).product(arg1) + ctx = arg0.ctx + res = isl.isl_map_product(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def project_out_all_params(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_project_out_all_params(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def project_out_param(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_project_out_param_id(isl.isl_map_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is id_list: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_project_out_param_id_list(isl.isl_map_copy(args[0].ptr), isl.isl_id_list_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def range(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_range(isl.isl_map_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def range_factor_domain(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_range_factor_domain(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def range_factor_range(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_range_factor_range(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def range_lattice_tile(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_get_range_lattice_tile(arg0.ptr) + obj = fixed_box(ctx=ctx, ptr=res) + return obj + def get_range_lattice_tile(arg0): + return arg0.range_lattice_tile() + def range_product(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).range_product(arg1) + ctx = arg0.ctx + res = isl.isl_map_range_product(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def range_reverse(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_range_reverse(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def range_simple_fixed_box_hull(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_get_range_simple_fixed_box_hull(arg0.ptr) + obj = fixed_box(ctx=ctx, ptr=res) + return obj + def get_range_simple_fixed_box_hull(arg0): + return arg0.range_simple_fixed_box_hull() + def range_tuple_dim(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_range_tuple_dim(arg0.ptr) + if res < 0: + raise Error + return int(res) + def range_tuple_id(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def reverse(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_reverse(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def sample(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_sample(isl.isl_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def set_domain_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_set_domain_tuple_id(isl.isl_map_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_set_range_tuple_id(isl.isl_map_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def space(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def subtract(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).subtract(arg1) + ctx = arg0.ctx + res = isl.isl_map_subtract(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_to_list(isl.isl_map_copy(arg0.ptr)) + obj = map_list(ctx=ctx, ptr=res) + return obj + def to_union_map(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_to_union_map(isl.isl_map_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def uncurry(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_uncurry(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def union(arg0, arg1): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_map(arg0).union(arg1) + ctx = arg0.ctx + res = isl.isl_map_union(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + @staticmethod + def universe(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_universe(isl.isl_space_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def unshifted_simple_hull(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_unshifted_simple_hull(isl.isl_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def upper_bound(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is map: + args[0] = map(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_map_upper_bound_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + raise Error + def wrap(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_wrap(isl.isl_map_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def zip(arg0): + try: + if not arg0.__class__ is map: + arg0 = map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_zip(isl.isl_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + +isl.isl_map_from_basic_map.restype = c_void_p +isl.isl_map_from_basic_map.argtypes = [c_void_p] +isl.isl_map_read_from_str.restype = c_void_p +isl.isl_map_read_from_str.argtypes = [Context, c_char_p] +isl.isl_map_affine_hull.restype = c_void_p +isl.isl_map_affine_hull.argtypes = [c_void_p] +isl.isl_map_apply_domain.restype = c_void_p +isl.isl_map_apply_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_apply_range.restype = c_void_p +isl.isl_map_apply_range.argtypes = [c_void_p, c_void_p] +isl.isl_map_as_pw_multi_aff.restype = c_void_p +isl.isl_map_as_pw_multi_aff.argtypes = [c_void_p] +isl.isl_map_bind_domain.restype = c_void_p +isl.isl_map_bind_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_bind_range.restype = c_void_p +isl.isl_map_bind_range.argtypes = [c_void_p, c_void_p] +isl.isl_map_coalesce.restype = c_void_p +isl.isl_map_coalesce.argtypes = [c_void_p] +isl.isl_map_complement.restype = c_void_p +isl.isl_map_complement.argtypes = [c_void_p] +isl.isl_map_curry.restype = c_void_p +isl.isl_map_curry.argtypes = [c_void_p] +isl.isl_map_deltas.restype = c_void_p +isl.isl_map_deltas.argtypes = [c_void_p] +isl.isl_map_detect_equalities.restype = c_void_p +isl.isl_map_detect_equalities.argtypes = [c_void_p] +isl.isl_map_domain.restype = c_void_p +isl.isl_map_domain.argtypes = [c_void_p] +isl.isl_map_domain_factor_domain.restype = c_void_p +isl.isl_map_domain_factor_domain.argtypes = [c_void_p] +isl.isl_map_domain_factor_range.restype = c_void_p +isl.isl_map_domain_factor_range.argtypes = [c_void_p] +isl.isl_map_domain_product.restype = c_void_p +isl.isl_map_domain_product.argtypes = [c_void_p, c_void_p] +isl.isl_map_domain_reverse.restype = c_void_p +isl.isl_map_domain_reverse.argtypes = [c_void_p] +isl.isl_map_domain_tuple_dim.argtypes = [c_void_p] +isl.isl_map_get_domain_tuple_id.restype = c_void_p +isl.isl_map_get_domain_tuple_id.argtypes = [c_void_p] +isl.isl_map_drop_unused_params.restype = c_void_p +isl.isl_map_drop_unused_params.argtypes = [c_void_p] +isl.isl_map_empty.restype = c_void_p +isl.isl_map_empty.argtypes = [c_void_p] +isl.isl_map_eq_at_multi_pw_aff.restype = c_void_p +isl.isl_map_eq_at_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_factor_domain.restype = c_void_p +isl.isl_map_factor_domain.argtypes = [c_void_p] +isl.isl_map_factor_range.restype = c_void_p +isl.isl_map_factor_range.argtypes = [c_void_p] +isl.isl_map_fixed_power_val.restype = c_void_p +isl.isl_map_fixed_power_val.argtypes = [c_void_p, c_void_p] +isl.isl_map_flatten.restype = c_void_p +isl.isl_map_flatten.argtypes = [c_void_p] +isl.isl_map_flatten_domain.restype = c_void_p +isl.isl_map_flatten_domain.argtypes = [c_void_p] +isl.isl_map_flatten_range.restype = c_void_p +isl.isl_map_flatten_range.argtypes = [c_void_p] +isl.isl_map_foreach_basic_map.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_map_gist.restype = c_void_p +isl.isl_map_gist.argtypes = [c_void_p, c_void_p] +isl.isl_map_gist_domain.restype = c_void_p +isl.isl_map_gist_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_gist_params.restype = c_void_p +isl.isl_map_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_map_has_domain_tuple_id.argtypes = [c_void_p] +isl.isl_map_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_map_intersect.restype = c_void_p +isl.isl_map_intersect.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_domain.restype = c_void_p +isl.isl_map_intersect_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_domain_factor_domain.restype = c_void_p +isl.isl_map_intersect_domain_factor_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_domain_factor_range.restype = c_void_p +isl.isl_map_intersect_domain_factor_range.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_domain_wrapped_domain.restype = c_void_p +isl.isl_map_intersect_domain_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_params.restype = c_void_p +isl.isl_map_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_range.restype = c_void_p +isl.isl_map_intersect_range.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_range_factor_domain.restype = c_void_p +isl.isl_map_intersect_range_factor_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_range_factor_range.restype = c_void_p +isl.isl_map_intersect_range_factor_range.argtypes = [c_void_p, c_void_p] +isl.isl_map_intersect_range_wrapped_domain.restype = c_void_p +isl.isl_map_intersect_range_wrapped_domain.argtypes = [c_void_p, c_void_p] +isl.isl_map_is_bijective.argtypes = [c_void_p] +isl.isl_map_is_disjoint.argtypes = [c_void_p, c_void_p] +isl.isl_map_is_empty.argtypes = [c_void_p] +isl.isl_map_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_map_is_injective.argtypes = [c_void_p] +isl.isl_map_is_single_valued.argtypes = [c_void_p] +isl.isl_map_is_strict_subset.argtypes = [c_void_p, c_void_p] +isl.isl_map_is_subset.argtypes = [c_void_p, c_void_p] +isl.isl_map_lex_ge_at_multi_pw_aff.restype = c_void_p +isl.isl_map_lex_ge_at_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_lex_gt_at_multi_pw_aff.restype = c_void_p +isl.isl_map_lex_gt_at_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_lex_le_at_multi_pw_aff.restype = c_void_p +isl.isl_map_lex_le_at_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_lex_lt_at_multi_pw_aff.restype = c_void_p +isl.isl_map_lex_lt_at_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_lexmax.restype = c_void_p +isl.isl_map_lexmax.argtypes = [c_void_p] +isl.isl_map_lexmax_pw_multi_aff.restype = c_void_p +isl.isl_map_lexmax_pw_multi_aff.argtypes = [c_void_p] +isl.isl_map_lexmin.restype = c_void_p +isl.isl_map_lexmin.argtypes = [c_void_p] +isl.isl_map_lexmin_pw_multi_aff.restype = c_void_p +isl.isl_map_lexmin_pw_multi_aff.argtypes = [c_void_p] +isl.isl_map_lower_bound_multi_pw_aff.restype = c_void_p +isl.isl_map_lower_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_max_multi_pw_aff.restype = c_void_p +isl.isl_map_max_multi_pw_aff.argtypes = [c_void_p] +isl.isl_map_min_multi_pw_aff.restype = c_void_p +isl.isl_map_min_multi_pw_aff.argtypes = [c_void_p] +isl.isl_map_n_basic_map.argtypes = [c_void_p] +isl.isl_map_params.restype = c_void_p +isl.isl_map_params.argtypes = [c_void_p] +isl.isl_map_polyhedral_hull.restype = c_void_p +isl.isl_map_polyhedral_hull.argtypes = [c_void_p] +isl.isl_map_preimage_domain_multi_aff.restype = c_void_p +isl.isl_map_preimage_domain_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_preimage_domain_multi_pw_aff.restype = c_void_p +isl.isl_map_preimage_domain_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_preimage_domain_pw_multi_aff.restype = c_void_p +isl.isl_map_preimage_domain_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_preimage_range_multi_aff.restype = c_void_p +isl.isl_map_preimage_range_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_preimage_range_pw_multi_aff.restype = c_void_p +isl.isl_map_preimage_range_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_product.restype = c_void_p +isl.isl_map_product.argtypes = [c_void_p, c_void_p] +isl.isl_map_project_out_all_params.restype = c_void_p +isl.isl_map_project_out_all_params.argtypes = [c_void_p] +isl.isl_map_project_out_param_id.restype = c_void_p +isl.isl_map_project_out_param_id.argtypes = [c_void_p, c_void_p] +isl.isl_map_project_out_param_id_list.restype = c_void_p +isl.isl_map_project_out_param_id_list.argtypes = [c_void_p, c_void_p] +isl.isl_map_range.restype = c_void_p +isl.isl_map_range.argtypes = [c_void_p] +isl.isl_map_range_factor_domain.restype = c_void_p +isl.isl_map_range_factor_domain.argtypes = [c_void_p] +isl.isl_map_range_factor_range.restype = c_void_p +isl.isl_map_range_factor_range.argtypes = [c_void_p] +isl.isl_map_get_range_lattice_tile.restype = c_void_p +isl.isl_map_get_range_lattice_tile.argtypes = [c_void_p] +isl.isl_map_range_product.restype = c_void_p +isl.isl_map_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_map_range_reverse.restype = c_void_p +isl.isl_map_range_reverse.argtypes = [c_void_p] +isl.isl_map_get_range_simple_fixed_box_hull.restype = c_void_p +isl.isl_map_get_range_simple_fixed_box_hull.argtypes = [c_void_p] +isl.isl_map_range_tuple_dim.argtypes = [c_void_p] +isl.isl_map_get_range_tuple_id.restype = c_void_p +isl.isl_map_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_map_reverse.restype = c_void_p +isl.isl_map_reverse.argtypes = [c_void_p] +isl.isl_map_sample.restype = c_void_p +isl.isl_map_sample.argtypes = [c_void_p] +isl.isl_map_set_domain_tuple_id.restype = c_void_p +isl.isl_map_set_domain_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_map_set_range_tuple_id.restype = c_void_p +isl.isl_map_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_map_get_space.restype = c_void_p +isl.isl_map_get_space.argtypes = [c_void_p] +isl.isl_map_subtract.restype = c_void_p +isl.isl_map_subtract.argtypes = [c_void_p, c_void_p] +isl.isl_map_to_list.restype = c_void_p +isl.isl_map_to_list.argtypes = [c_void_p] +isl.isl_map_to_union_map.restype = c_void_p +isl.isl_map_to_union_map.argtypes = [c_void_p] +isl.isl_map_uncurry.restype = c_void_p +isl.isl_map_uncurry.argtypes = [c_void_p] +isl.isl_map_union.restype = c_void_p +isl.isl_map_union.argtypes = [c_void_p, c_void_p] +isl.isl_map_universe.restype = c_void_p +isl.isl_map_universe.argtypes = [c_void_p] +isl.isl_map_unshifted_simple_hull.restype = c_void_p +isl.isl_map_unshifted_simple_hull.argtypes = [c_void_p] +isl.isl_map_upper_bound_multi_pw_aff.restype = c_void_p +isl.isl_map_upper_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_map_wrap.restype = c_void_p +isl.isl_map_wrap.argtypes = [c_void_p] +isl.isl_map_zip.restype = c_void_p +isl.isl_map_zip.argtypes = [c_void_p] +isl.isl_map_copy.restype = c_void_p +isl.isl_map_copy.argtypes = [c_void_p] +isl.isl_map_free.restype = c_void_p +isl.isl_map_free.argtypes = [c_void_p] +isl.isl_map_to_str.restype = POINTER(c_char) +isl.isl_map_to_str.argtypes = [c_void_p] + +class basic_map(map): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_basic_map_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_basic_map_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ptr = isl.isl_basic_map_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.basic_map("""%s""")' % s + else: + return 'isl.basic_map("%s")' % s + def affine_hull(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_affine_hull(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def apply_domain(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).apply_domain(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_apply_domain(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def apply_range(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).apply_range(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_apply_range(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def deltas(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_deltas(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def detect_equalities(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_detect_equalities(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def flatten(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_flatten(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def flatten_domain(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_flatten_domain(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def flatten_range(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_flatten_range(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_gist(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def intersect(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).intersect(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_intersect(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def intersect_domain(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return map(arg0).intersect_domain(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_intersect_domain(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def intersect_range(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return map(arg0).intersect_range(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_intersect_range(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def is_empty(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subset(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).is_subset(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_is_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def lexmax(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_lexmax(isl.isl_basic_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def lexmin(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_lexmin(isl.isl_basic_map_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def reverse(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_reverse(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def sample(arg0): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_map_sample(isl.isl_basic_map_copy(arg0.ptr)) + obj = basic_map(ctx=ctx, ptr=res) + return obj + def union(arg0, arg1): + try: + if not arg0.__class__ is basic_map: + arg0 = basic_map(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return map(arg0).union(arg1) + ctx = arg0.ctx + res = isl.isl_basic_map_union(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + +isl.isl_basic_map_read_from_str.restype = c_void_p +isl.isl_basic_map_read_from_str.argtypes = [Context, c_char_p] +isl.isl_basic_map_affine_hull.restype = c_void_p +isl.isl_basic_map_affine_hull.argtypes = [c_void_p] +isl.isl_basic_map_apply_domain.restype = c_void_p +isl.isl_basic_map_apply_domain.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_apply_range.restype = c_void_p +isl.isl_basic_map_apply_range.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_deltas.restype = c_void_p +isl.isl_basic_map_deltas.argtypes = [c_void_p] +isl.isl_basic_map_detect_equalities.restype = c_void_p +isl.isl_basic_map_detect_equalities.argtypes = [c_void_p] +isl.isl_basic_map_flatten.restype = c_void_p +isl.isl_basic_map_flatten.argtypes = [c_void_p] +isl.isl_basic_map_flatten_domain.restype = c_void_p +isl.isl_basic_map_flatten_domain.argtypes = [c_void_p] +isl.isl_basic_map_flatten_range.restype = c_void_p +isl.isl_basic_map_flatten_range.argtypes = [c_void_p] +isl.isl_basic_map_gist.restype = c_void_p +isl.isl_basic_map_gist.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_intersect.restype = c_void_p +isl.isl_basic_map_intersect.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_intersect_domain.restype = c_void_p +isl.isl_basic_map_intersect_domain.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_intersect_range.restype = c_void_p +isl.isl_basic_map_intersect_range.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_is_empty.argtypes = [c_void_p] +isl.isl_basic_map_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_is_subset.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_lexmax.restype = c_void_p +isl.isl_basic_map_lexmax.argtypes = [c_void_p] +isl.isl_basic_map_lexmin.restype = c_void_p +isl.isl_basic_map_lexmin.argtypes = [c_void_p] +isl.isl_basic_map_reverse.restype = c_void_p +isl.isl_basic_map_reverse.argtypes = [c_void_p] +isl.isl_basic_map_sample.restype = c_void_p +isl.isl_basic_map_sample.argtypes = [c_void_p] +isl.isl_basic_map_union.restype = c_void_p +isl.isl_basic_map_union.argtypes = [c_void_p, c_void_p] +isl.isl_basic_map_copy.restype = c_void_p +isl.isl_basic_map_copy.argtypes = [c_void_p] +isl.isl_basic_map_free.restype = c_void_p +isl.isl_basic_map_free.argtypes = [c_void_p] +isl.isl_basic_map_to_str.restype = POINTER(c_char) +isl.isl_basic_map_to_str.argtypes = [c_void_p] + +class union_set(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is basic_set: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_from_basic_set(isl.isl_basic_set_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is point: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_from_point(isl.isl_point_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is set: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_from_set(isl.isl_set_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_set_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ptr = isl.isl_union_set_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_set("""%s""")' % s + else: + return 'isl.union_set("%s")' % s + def affine_hull(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_affine_hull(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def apply(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_apply(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def as_set(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_as_set(isl.isl_union_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_coalesce(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def compute_divs(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_compute_divs(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def detect_equalities(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_detect_equalities(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_drop_unused_params(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + @staticmethod + def empty(*args): + if len(args) == 0: + ctx = Context.getDefaultInstance() + res = isl.isl_union_set_empty_ctx(ctx) + obj = union_set(ctx=ctx, ptr=res) + return obj + raise Error + def every_set(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = set(ctx=arg0.ctx, ptr=isl.isl_set_copy(cb_arg0)) + try: + res = arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_set_every_set(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + return bool(res) + def extract_set(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_extract_set(arg0.ptr, isl.isl_space_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def foreach_point(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = point(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_set_foreach_point(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_set(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = set(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_set_foreach_set(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def gist(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_gist(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_gist_params(isl.isl_union_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def identity(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_identity(isl.isl_union_set_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + def intersect(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_intersect(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_intersect_params(isl.isl_union_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def is_disjoint(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_is_disjoint(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_empty(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_strict_subset(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_is_strict_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subset(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_is_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def isa_set(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_isa_set(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def lexmax(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_lexmax(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def lexmin(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_lexmin(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def params(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_params(isl.isl_union_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def polyhedral_hull(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_polyhedral_hull(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def preimage(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_set: + args[0] = union_set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_set_preimage_multi_aff(isl.isl_union_set_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_set: + args[0] = union_set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_set_preimage_pw_multi_aff(isl.isl_union_set_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is union_set: + args[0] = union_set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_union_set_preimage_union_pw_multi_aff(isl.isl_union_set_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + raise Error + def project_out_all_params(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_project_out_all_params(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def sample_point(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_sample_point(isl.isl_union_set_copy(arg0.ptr)) + obj = point(ctx=ctx, ptr=res) + return obj + def set_list(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_get_set_list(arg0.ptr) + obj = set_list(ctx=ctx, ptr=res) + return obj + def get_set_list(arg0): + return arg0.set_list() + def space(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def subtract(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_subtract(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_to_list(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def union(arg0, arg1): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_union(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def universe(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_universe(isl.isl_union_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def unwrap(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_unwrap(isl.isl_union_set_copy(arg0.ptr)) + obj = union_map(ctx=ctx, ptr=res) + return obj + +isl.isl_union_set_from_basic_set.restype = c_void_p +isl.isl_union_set_from_basic_set.argtypes = [c_void_p] +isl.isl_union_set_from_point.restype = c_void_p +isl.isl_union_set_from_point.argtypes = [c_void_p] +isl.isl_union_set_from_set.restype = c_void_p +isl.isl_union_set_from_set.argtypes = [c_void_p] +isl.isl_union_set_read_from_str.restype = c_void_p +isl.isl_union_set_read_from_str.argtypes = [Context, c_char_p] +isl.isl_union_set_affine_hull.restype = c_void_p +isl.isl_union_set_affine_hull.argtypes = [c_void_p] +isl.isl_union_set_apply.restype = c_void_p +isl.isl_union_set_apply.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_as_set.restype = c_void_p +isl.isl_union_set_as_set.argtypes = [c_void_p] +isl.isl_union_set_coalesce.restype = c_void_p +isl.isl_union_set_coalesce.argtypes = [c_void_p] +isl.isl_union_set_compute_divs.restype = c_void_p +isl.isl_union_set_compute_divs.argtypes = [c_void_p] +isl.isl_union_set_detect_equalities.restype = c_void_p +isl.isl_union_set_detect_equalities.argtypes = [c_void_p] +isl.isl_union_set_drop_unused_params.restype = c_void_p +isl.isl_union_set_drop_unused_params.argtypes = [c_void_p] +isl.isl_union_set_empty_ctx.restype = c_void_p +isl.isl_union_set_empty_ctx.argtypes = [Context] +isl.isl_union_set_every_set.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_set_extract_set.restype = c_void_p +isl.isl_union_set_extract_set.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_foreach_point.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_set_foreach_set.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_set_gist.restype = c_void_p +isl.isl_union_set_gist.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_gist_params.restype = c_void_p +isl.isl_union_set_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_identity.restype = c_void_p +isl.isl_union_set_identity.argtypes = [c_void_p] +isl.isl_union_set_intersect.restype = c_void_p +isl.isl_union_set_intersect.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_intersect_params.restype = c_void_p +isl.isl_union_set_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_is_disjoint.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_is_empty.argtypes = [c_void_p] +isl.isl_union_set_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_is_strict_subset.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_is_subset.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_isa_set.argtypes = [c_void_p] +isl.isl_union_set_lexmax.restype = c_void_p +isl.isl_union_set_lexmax.argtypes = [c_void_p] +isl.isl_union_set_lexmin.restype = c_void_p +isl.isl_union_set_lexmin.argtypes = [c_void_p] +isl.isl_union_set_params.restype = c_void_p +isl.isl_union_set_params.argtypes = [c_void_p] +isl.isl_union_set_polyhedral_hull.restype = c_void_p +isl.isl_union_set_polyhedral_hull.argtypes = [c_void_p] +isl.isl_union_set_preimage_multi_aff.restype = c_void_p +isl.isl_union_set_preimage_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_preimage_pw_multi_aff.restype = c_void_p +isl.isl_union_set_preimage_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_preimage_union_pw_multi_aff.restype = c_void_p +isl.isl_union_set_preimage_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_project_out_all_params.restype = c_void_p +isl.isl_union_set_project_out_all_params.argtypes = [c_void_p] +isl.isl_union_set_sample_point.restype = c_void_p +isl.isl_union_set_sample_point.argtypes = [c_void_p] +isl.isl_union_set_get_set_list.restype = c_void_p +isl.isl_union_set_get_set_list.argtypes = [c_void_p] +isl.isl_union_set_get_space.restype = c_void_p +isl.isl_union_set_get_space.argtypes = [c_void_p] +isl.isl_union_set_subtract.restype = c_void_p +isl.isl_union_set_subtract.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_to_list.restype = c_void_p +isl.isl_union_set_to_list.argtypes = [c_void_p] +isl.isl_union_set_union.restype = c_void_p +isl.isl_union_set_union.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_universe.restype = c_void_p +isl.isl_union_set_universe.argtypes = [c_void_p] +isl.isl_union_set_unwrap.restype = c_void_p +isl.isl_union_set_unwrap.argtypes = [c_void_p] +isl.isl_union_set_copy.restype = c_void_p +isl.isl_union_set_copy.argtypes = [c_void_p] +isl.isl_union_set_free.restype = c_void_p +isl.isl_union_set_free.argtypes = [c_void_p] +isl.isl_union_set_to_str.restype = POINTER(c_char) +isl.isl_union_set_to_str.argtypes = [c_void_p] + +class set(union_set): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is basic_set: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_set_from_basic_set(isl.isl_basic_set_copy(args[0].ptr)) + return + if len(args) == 1 and args[0].__class__ is point: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_set_from_point(isl.isl_point_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_set_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_set_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ptr = isl.isl_set_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.set("""%s""")' % s + else: + return 'isl.set("%s")' % s + def affine_hull(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_affine_hull(isl.isl_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def apply(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + return union_set(arg0).apply(arg1) + ctx = arg0.ctx + res = isl.isl_set_apply(isl.isl_set_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def as_pw_multi_aff(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_as_pw_multi_aff(isl.isl_set_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def bind(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_set(arg0).bind(arg1) + ctx = arg0.ctx + res = isl.isl_set_bind(isl.isl_set_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def coalesce(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_coalesce(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def complement(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_complement(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def detect_equalities(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_detect_equalities(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def dim_max_val(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_dim_max_val(isl.isl_set_copy(arg0.ptr), arg1) + obj = val(ctx=ctx, ptr=res) + return obj + def dim_min_val(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_dim_min_val(isl.isl_set_copy(arg0.ptr), arg1) + obj = val(ctx=ctx, ptr=res) + return obj + def drop_unused_params(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_drop_unused_params(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + @staticmethod + def empty(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_empty(isl.isl_space_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def flatten(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_flatten(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def foreach_basic_set(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = basic_set(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_set_foreach_basic_set(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_point(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = point(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_set_foreach_point(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def gist(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_set_gist(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def gist_params(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).gist_params(arg1) + ctx = arg0.ctx + res = isl.isl_set_gist_params(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def identity(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_identity(isl.isl_set_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def indicator_function(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_indicator_function(isl.isl_set_copy(arg0.ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def insert_domain(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + return union_set(arg0).insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_set_insert_domain(isl.isl_set_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def intersect(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).intersect(arg1) + ctx = arg0.ctx + res = isl.isl_set_intersect(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_set_intersect_params(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def involves_locals(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_involves_locals(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_disjoint(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).is_disjoint(arg1) + ctx = arg0.ctx + res = isl.isl_set_is_disjoint(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_empty(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_set_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_singleton(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_is_singleton(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_strict_subset(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).is_strict_subset(arg1) + ctx = arg0.ctx + res = isl.isl_set_is_strict_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subset(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).is_subset(arg1) + ctx = arg0.ctx + res = isl.isl_set_is_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_wrapping(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_is_wrapping(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def lattice_tile(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_get_lattice_tile(arg0.ptr) + obj = fixed_box(ctx=ctx, ptr=res) + return obj + def get_lattice_tile(arg0): + return arg0.lattice_tile() + def lexmax(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_lexmax(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def lexmax_pw_multi_aff(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_lexmax_pw_multi_aff(isl.isl_set_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def lexmin(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_lexmin(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def lexmin_pw_multi_aff(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_lexmin_pw_multi_aff(isl.isl_set_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def lower_bound(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_lower_bound_multi_pw_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_lower_bound_multi_val(isl.isl_set_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + raise Error + def max_multi_pw_aff(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_max_multi_pw_aff(isl.isl_set_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def max_val(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return union_set(arg0).max_val(arg1) + ctx = arg0.ctx + res = isl.isl_set_max_val(arg0.ptr, arg1.ptr) + obj = val(ctx=ctx, ptr=res) + return obj + def min_multi_pw_aff(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_min_multi_pw_aff(isl.isl_set_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def min_val(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is aff: + arg1 = aff(arg1) + except: + return union_set(arg0).min_val(arg1) + ctx = arg0.ctx + res = isl.isl_set_min_val(arg0.ptr, arg1.ptr) + obj = val(ctx=ctx, ptr=res) + return obj + def n_basic_set(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_n_basic_set(arg0.ptr) + if res < 0: + raise Error + return int(res) + def param_pw_aff_on_domain(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_param_pw_aff_on_domain_id(isl.isl_set_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def params(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_params(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def plain_multi_val_if_fixed(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_get_plain_multi_val_if_fixed(arg0.ptr) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def get_plain_multi_val_if_fixed(arg0): + return arg0.plain_multi_val_if_fixed() + def polyhedral_hull(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_polyhedral_hull(isl.isl_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def preimage(*args): + if len(args) == 2 and args[1].__class__ is multi_aff: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_preimage_multi_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_preimage_multi_pw_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_preimage_pw_multi_aff(isl.isl_set_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + raise Error + def product(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).product(arg1) + ctx = arg0.ctx + res = isl.isl_set_product(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def project_out_all_params(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_project_out_all_params(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def project_out_param(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_project_out_param_id(isl.isl_set_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is id_list: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_project_out_param_id_list(isl.isl_set_copy(args[0].ptr), isl.isl_id_list_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + raise Error + def pw_aff_on_domain(*args): + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_pw_aff_on_domain_val(isl.isl_set_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + raise Error + def pw_multi_aff_on_domain(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_pw_multi_aff_on_domain_multi_val(isl.isl_set_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def sample(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_sample(isl.isl_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def sample_point(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_sample_point(isl.isl_set_copy(arg0.ptr)) + obj = point(ctx=ctx, ptr=res) + return obj + def simple_fixed_box_hull(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_get_simple_fixed_box_hull(arg0.ptr) + obj = fixed_box(ctx=ctx, ptr=res) + return obj + def get_simple_fixed_box_hull(arg0): + return arg0.simple_fixed_box_hull() + def space(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def stride(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_get_stride(arg0.ptr, arg1) + obj = val(ctx=ctx, ptr=res) + return obj + def get_stride(arg0, arg1): + return arg0.stride(arg1) + def subtract(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).subtract(arg1) + ctx = arg0.ctx + res = isl.isl_set_subtract(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_to_list(isl.isl_set_copy(arg0.ptr)) + obj = set_list(ctx=ctx, ptr=res) + return obj + def to_union_set(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_to_union_set(isl.isl_set_copy(arg0.ptr)) + obj = union_set(ctx=ctx, ptr=res) + return obj + def translation(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_translation(isl.isl_set_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def tuple_dim(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_tuple_dim(arg0.ptr) + if res < 0: + raise Error + return int(res) + def unbind_params(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_set(arg0).unbind_params(arg1) + ctx = arg0.ctx + res = isl.isl_set_unbind_params(isl.isl_set_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def unbind_params_insert_domain(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + return union_set(arg0).unbind_params_insert_domain(arg1) + ctx = arg0.ctx + res = isl.isl_set_unbind_params_insert_domain(isl.isl_set_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def union(arg0, arg1): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + return union_set(arg0).union(arg1) + ctx = arg0.ctx + res = isl.isl_set_union(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + @staticmethod + def universe(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_universe(isl.isl_space_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def unshifted_simple_hull(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_unshifted_simple_hull(isl.isl_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def unwrap(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_unwrap(isl.isl_set_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def upper_bound(*args): + if len(args) == 2 and args[1].__class__ is multi_pw_aff: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_upper_bound_multi_pw_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is set: + args[0] = set(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_set_upper_bound_multi_val(isl.isl_set_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + raise Error + def wrapped_reverse(arg0): + try: + if not arg0.__class__ is set: + arg0 = set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_wrapped_reverse(isl.isl_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + +isl.isl_set_from_basic_set.restype = c_void_p +isl.isl_set_from_basic_set.argtypes = [c_void_p] +isl.isl_set_from_point.restype = c_void_p +isl.isl_set_from_point.argtypes = [c_void_p] +isl.isl_set_read_from_str.restype = c_void_p +isl.isl_set_read_from_str.argtypes = [Context, c_char_p] +isl.isl_set_affine_hull.restype = c_void_p +isl.isl_set_affine_hull.argtypes = [c_void_p] +isl.isl_set_apply.restype = c_void_p +isl.isl_set_apply.argtypes = [c_void_p, c_void_p] +isl.isl_set_as_pw_multi_aff.restype = c_void_p +isl.isl_set_as_pw_multi_aff.argtypes = [c_void_p] +isl.isl_set_bind.restype = c_void_p +isl.isl_set_bind.argtypes = [c_void_p, c_void_p] +isl.isl_set_coalesce.restype = c_void_p +isl.isl_set_coalesce.argtypes = [c_void_p] +isl.isl_set_complement.restype = c_void_p +isl.isl_set_complement.argtypes = [c_void_p] +isl.isl_set_detect_equalities.restype = c_void_p +isl.isl_set_detect_equalities.argtypes = [c_void_p] +isl.isl_set_dim_max_val.restype = c_void_p +isl.isl_set_dim_max_val.argtypes = [c_void_p, c_int] +isl.isl_set_dim_min_val.restype = c_void_p +isl.isl_set_dim_min_val.argtypes = [c_void_p, c_int] +isl.isl_set_drop_unused_params.restype = c_void_p +isl.isl_set_drop_unused_params.argtypes = [c_void_p] +isl.isl_set_empty.restype = c_void_p +isl.isl_set_empty.argtypes = [c_void_p] +isl.isl_set_flatten.restype = c_void_p +isl.isl_set_flatten.argtypes = [c_void_p] +isl.isl_set_foreach_basic_set.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_set_foreach_point.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_set_gist.restype = c_void_p +isl.isl_set_gist.argtypes = [c_void_p, c_void_p] +isl.isl_set_gist_params.restype = c_void_p +isl.isl_set_gist_params.argtypes = [c_void_p, c_void_p] +isl.isl_set_identity.restype = c_void_p +isl.isl_set_identity.argtypes = [c_void_p] +isl.isl_set_indicator_function.restype = c_void_p +isl.isl_set_indicator_function.argtypes = [c_void_p] +isl.isl_set_insert_domain.restype = c_void_p +isl.isl_set_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_set_intersect.restype = c_void_p +isl.isl_set_intersect.argtypes = [c_void_p, c_void_p] +isl.isl_set_intersect_params.restype = c_void_p +isl.isl_set_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_set_involves_locals.argtypes = [c_void_p] +isl.isl_set_is_disjoint.argtypes = [c_void_p, c_void_p] +isl.isl_set_is_empty.argtypes = [c_void_p] +isl.isl_set_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_set_is_singleton.argtypes = [c_void_p] +isl.isl_set_is_strict_subset.argtypes = [c_void_p, c_void_p] +isl.isl_set_is_subset.argtypes = [c_void_p, c_void_p] +isl.isl_set_is_wrapping.argtypes = [c_void_p] +isl.isl_set_get_lattice_tile.restype = c_void_p +isl.isl_set_get_lattice_tile.argtypes = [c_void_p] +isl.isl_set_lexmax.restype = c_void_p +isl.isl_set_lexmax.argtypes = [c_void_p] +isl.isl_set_lexmax_pw_multi_aff.restype = c_void_p +isl.isl_set_lexmax_pw_multi_aff.argtypes = [c_void_p] +isl.isl_set_lexmin.restype = c_void_p +isl.isl_set_lexmin.argtypes = [c_void_p] +isl.isl_set_lexmin_pw_multi_aff.restype = c_void_p +isl.isl_set_lexmin_pw_multi_aff.argtypes = [c_void_p] +isl.isl_set_lower_bound_multi_pw_aff.restype = c_void_p +isl.isl_set_lower_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_set_lower_bound_multi_val.restype = c_void_p +isl.isl_set_lower_bound_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_set_max_multi_pw_aff.restype = c_void_p +isl.isl_set_max_multi_pw_aff.argtypes = [c_void_p] +isl.isl_set_max_val.restype = c_void_p +isl.isl_set_max_val.argtypes = [c_void_p, c_void_p] +isl.isl_set_min_multi_pw_aff.restype = c_void_p +isl.isl_set_min_multi_pw_aff.argtypes = [c_void_p] +isl.isl_set_min_val.restype = c_void_p +isl.isl_set_min_val.argtypes = [c_void_p, c_void_p] +isl.isl_set_n_basic_set.argtypes = [c_void_p] +isl.isl_set_param_pw_aff_on_domain_id.restype = c_void_p +isl.isl_set_param_pw_aff_on_domain_id.argtypes = [c_void_p, c_void_p] +isl.isl_set_params.restype = c_void_p +isl.isl_set_params.argtypes = [c_void_p] +isl.isl_set_get_plain_multi_val_if_fixed.restype = c_void_p +isl.isl_set_get_plain_multi_val_if_fixed.argtypes = [c_void_p] +isl.isl_set_polyhedral_hull.restype = c_void_p +isl.isl_set_polyhedral_hull.argtypes = [c_void_p] +isl.isl_set_preimage_multi_aff.restype = c_void_p +isl.isl_set_preimage_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_set_preimage_multi_pw_aff.restype = c_void_p +isl.isl_set_preimage_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_set_preimage_pw_multi_aff.restype = c_void_p +isl.isl_set_preimage_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_set_product.restype = c_void_p +isl.isl_set_product.argtypes = [c_void_p, c_void_p] +isl.isl_set_project_out_all_params.restype = c_void_p +isl.isl_set_project_out_all_params.argtypes = [c_void_p] +isl.isl_set_project_out_param_id.restype = c_void_p +isl.isl_set_project_out_param_id.argtypes = [c_void_p, c_void_p] +isl.isl_set_project_out_param_id_list.restype = c_void_p +isl.isl_set_project_out_param_id_list.argtypes = [c_void_p, c_void_p] +isl.isl_set_pw_aff_on_domain_val.restype = c_void_p +isl.isl_set_pw_aff_on_domain_val.argtypes = [c_void_p, c_void_p] +isl.isl_set_pw_multi_aff_on_domain_multi_val.restype = c_void_p +isl.isl_set_pw_multi_aff_on_domain_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_set_sample.restype = c_void_p +isl.isl_set_sample.argtypes = [c_void_p] +isl.isl_set_sample_point.restype = c_void_p +isl.isl_set_sample_point.argtypes = [c_void_p] +isl.isl_set_get_simple_fixed_box_hull.restype = c_void_p +isl.isl_set_get_simple_fixed_box_hull.argtypes = [c_void_p] +isl.isl_set_get_space.restype = c_void_p +isl.isl_set_get_space.argtypes = [c_void_p] +isl.isl_set_get_stride.restype = c_void_p +isl.isl_set_get_stride.argtypes = [c_void_p, c_int] +isl.isl_set_subtract.restype = c_void_p +isl.isl_set_subtract.argtypes = [c_void_p, c_void_p] +isl.isl_set_to_list.restype = c_void_p +isl.isl_set_to_list.argtypes = [c_void_p] +isl.isl_set_to_union_set.restype = c_void_p +isl.isl_set_to_union_set.argtypes = [c_void_p] +isl.isl_set_translation.restype = c_void_p +isl.isl_set_translation.argtypes = [c_void_p] +isl.isl_set_tuple_dim.argtypes = [c_void_p] +isl.isl_set_unbind_params.restype = c_void_p +isl.isl_set_unbind_params.argtypes = [c_void_p, c_void_p] +isl.isl_set_unbind_params_insert_domain.restype = c_void_p +isl.isl_set_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p] +isl.isl_set_union.restype = c_void_p +isl.isl_set_union.argtypes = [c_void_p, c_void_p] +isl.isl_set_universe.restype = c_void_p +isl.isl_set_universe.argtypes = [c_void_p] +isl.isl_set_unshifted_simple_hull.restype = c_void_p +isl.isl_set_unshifted_simple_hull.argtypes = [c_void_p] +isl.isl_set_unwrap.restype = c_void_p +isl.isl_set_unwrap.argtypes = [c_void_p] +isl.isl_set_upper_bound_multi_pw_aff.restype = c_void_p +isl.isl_set_upper_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_set_upper_bound_multi_val.restype = c_void_p +isl.isl_set_upper_bound_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_set_wrapped_reverse.restype = c_void_p +isl.isl_set_wrapped_reverse.argtypes = [c_void_p] +isl.isl_set_copy.restype = c_void_p +isl.isl_set_copy.argtypes = [c_void_p] +isl.isl_set_free.restype = c_void_p +isl.isl_set_free.argtypes = [c_void_p] +isl.isl_set_to_str.restype = POINTER(c_char) +isl.isl_set_to_str.argtypes = [c_void_p] + +class basic_set(set): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is point: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_basic_set_from_point(isl.isl_point_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_basic_set_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_basic_set_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ptr = isl.isl_basic_set_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.basic_set("""%s""")' % s + else: + return 'isl.basic_set("%s")' % s + def affine_hull(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_affine_hull(isl.isl_basic_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def apply(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_map: + arg1 = basic_map(arg1) + except: + return set(arg0).apply(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_apply(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def detect_equalities(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_detect_equalities(isl.isl_basic_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def dim_max_val(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_dim_max_val(isl.isl_basic_set_copy(arg0.ptr), arg1) + obj = val(ctx=ctx, ptr=res) + return obj + def flatten(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_flatten(isl.isl_basic_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def gist(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return set(arg0).gist(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_gist(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def intersect(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return set(arg0).intersect(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_intersect(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def intersect_params(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return set(arg0).intersect_params(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_intersect_params(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def is_empty(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_is_empty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return set(arg0).is_equal(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subset(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return set(arg0).is_subset(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_is_subset(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_wrapping(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_is_wrapping(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def lexmax(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_lexmax(isl.isl_basic_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def lexmin(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_lexmin(isl.isl_basic_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def params(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_params(isl.isl_basic_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def sample(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_sample(isl.isl_basic_set_copy(arg0.ptr)) + obj = basic_set(ctx=ctx, ptr=res) + return obj + def sample_point(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_sample_point(isl.isl_basic_set_copy(arg0.ptr)) + obj = point(ctx=ctx, ptr=res) + return obj + def to_set(arg0): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_basic_set_to_set(isl.isl_basic_set_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def union(arg0, arg1): + try: + if not arg0.__class__ is basic_set: + arg0 = basic_set(arg0) + except: + raise + try: + if not arg1.__class__ is basic_set: + arg1 = basic_set(arg1) + except: + return set(arg0).union(arg1) + ctx = arg0.ctx + res = isl.isl_basic_set_union(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + +isl.isl_basic_set_from_point.restype = c_void_p +isl.isl_basic_set_from_point.argtypes = [c_void_p] +isl.isl_basic_set_read_from_str.restype = c_void_p +isl.isl_basic_set_read_from_str.argtypes = [Context, c_char_p] +isl.isl_basic_set_affine_hull.restype = c_void_p +isl.isl_basic_set_affine_hull.argtypes = [c_void_p] +isl.isl_basic_set_apply.restype = c_void_p +isl.isl_basic_set_apply.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_detect_equalities.restype = c_void_p +isl.isl_basic_set_detect_equalities.argtypes = [c_void_p] +isl.isl_basic_set_dim_max_val.restype = c_void_p +isl.isl_basic_set_dim_max_val.argtypes = [c_void_p, c_int] +isl.isl_basic_set_flatten.restype = c_void_p +isl.isl_basic_set_flatten.argtypes = [c_void_p] +isl.isl_basic_set_gist.restype = c_void_p +isl.isl_basic_set_gist.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_intersect.restype = c_void_p +isl.isl_basic_set_intersect.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_intersect_params.restype = c_void_p +isl.isl_basic_set_intersect_params.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_is_empty.argtypes = [c_void_p] +isl.isl_basic_set_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_is_subset.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_is_wrapping.argtypes = [c_void_p] +isl.isl_basic_set_lexmax.restype = c_void_p +isl.isl_basic_set_lexmax.argtypes = [c_void_p] +isl.isl_basic_set_lexmin.restype = c_void_p +isl.isl_basic_set_lexmin.argtypes = [c_void_p] +isl.isl_basic_set_params.restype = c_void_p +isl.isl_basic_set_params.argtypes = [c_void_p] +isl.isl_basic_set_sample.restype = c_void_p +isl.isl_basic_set_sample.argtypes = [c_void_p] +isl.isl_basic_set_sample_point.restype = c_void_p +isl.isl_basic_set_sample_point.argtypes = [c_void_p] +isl.isl_basic_set_to_set.restype = c_void_p +isl.isl_basic_set_to_set.argtypes = [c_void_p] +isl.isl_basic_set_union.restype = c_void_p +isl.isl_basic_set_union.argtypes = [c_void_p, c_void_p] +isl.isl_basic_set_copy.restype = c_void_p +isl.isl_basic_set_copy.argtypes = [c_void_p] +isl.isl_basic_set_free.restype = c_void_p +isl.isl_basic_set_free.argtypes = [c_void_p] +isl.isl_basic_set_to_str.restype = POINTER(c_char) +isl.isl_basic_set_to_str.argtypes = [c_void_p] + +class fixed_box(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_fixed_box_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_fixed_box_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is fixed_box: + arg0 = fixed_box(arg0) + except: + raise + ptr = isl.isl_fixed_box_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.fixed_box("""%s""")' % s + else: + return 'isl.fixed_box("%s")' % s + def is_valid(arg0): + try: + if not arg0.__class__ is fixed_box: + arg0 = fixed_box(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_fixed_box_is_valid(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def offset(arg0): + try: + if not arg0.__class__ is fixed_box: + arg0 = fixed_box(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_fixed_box_get_offset(arg0.ptr) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def get_offset(arg0): + return arg0.offset() + def size(arg0): + try: + if not arg0.__class__ is fixed_box: + arg0 = fixed_box(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_fixed_box_get_size(arg0.ptr) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def get_size(arg0): + return arg0.size() + def space(arg0): + try: + if not arg0.__class__ is fixed_box: + arg0 = fixed_box(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_fixed_box_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + +isl.isl_fixed_box_read_from_str.restype = c_void_p +isl.isl_fixed_box_read_from_str.argtypes = [Context, c_char_p] +isl.isl_fixed_box_is_valid.argtypes = [c_void_p] +isl.isl_fixed_box_get_offset.restype = c_void_p +isl.isl_fixed_box_get_offset.argtypes = [c_void_p] +isl.isl_fixed_box_get_size.restype = c_void_p +isl.isl_fixed_box_get_size.argtypes = [c_void_p] +isl.isl_fixed_box_get_space.restype = c_void_p +isl.isl_fixed_box_get_space.argtypes = [c_void_p] +isl.isl_fixed_box_copy.restype = c_void_p +isl.isl_fixed_box_copy.argtypes = [c_void_p] +isl.isl_fixed_box_free.restype = c_void_p +isl.isl_fixed_box_free.argtypes = [c_void_p] +isl.isl_fixed_box_to_str.restype = POINTER(c_char) +isl.isl_fixed_box_to_str.argtypes = [c_void_p] + +class id(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_read_from_str(self.ctx, args[0].encode('ascii')) + return + if len(args) == 2 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + name = args[0].encode('ascii') + self.ptr = isl.isl_id_alloc(self.ctx, name, args[1]) + self.ptr = isl.isl_id_set_free_user(self.ptr, Context.free_user) + if self.ptr is not None: + pythonapi.Py_IncRef(py_object(args[1])) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_id_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is id: + arg0 = id(arg0) + except: + raise + ptr = isl.isl_id_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.id("""%s""")' % s + else: + return 'isl.id("%s")' % s + def user(self): + free_user = cast(Context.free_user, c_void_p) + id_free_user = cast(isl.isl_id_get_free_user(self.ptr), c_void_p) + if id_free_user.value != free_user.value: + return None + return isl.isl_id_get_user(self.ptr) + def name(arg0): + try: + if not arg0.__class__ is id: + arg0 = id(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_get_name(arg0.ptr) + if res == 0: + raise Error + string = cast(res, c_char_p).value.decode('ascii') + return string + def get_name(arg0): + return arg0.name() + def to_list(arg0): + try: + if not arg0.__class__ is id: + arg0 = id(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_to_list(isl.isl_id_copy(arg0.ptr)) + obj = id_list(ctx=ctx, ptr=res) + return obj + +isl.isl_id_read_from_str.restype = c_void_p +isl.isl_id_read_from_str.argtypes = [Context, c_char_p] +isl.isl_id_get_name.restype = POINTER(c_char) +isl.isl_id_get_name.argtypes = [c_void_p] +isl.isl_id_to_list.restype = c_void_p +isl.isl_id_to_list.argtypes = [c_void_p] +isl.isl_id_copy.restype = c_void_p +isl.isl_id_copy.argtypes = [c_void_p] +isl.isl_id_free.restype = c_void_p +isl.isl_id_free.argtypes = [c_void_p] +isl.isl_id_to_str.restype = POINTER(c_char) +isl.isl_id_to_str.argtypes = [c_void_p] + +class id_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and (args[0].__class__ is id or type(args[0]) == str): + args = list(args) + try: + if not args[0].__class__ is id: + args[0] = id(args[0]) + except: + raise + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_list_from_id(isl.isl_id_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_id_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + ptr = isl.isl_id_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.id_list("""%s""")' % s + else: + return 'isl.id_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + try: + if not arg1.__class__ is id: + arg1 = id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_add(isl.isl_id_list_copy(arg0.ptr), isl.isl_id_copy(arg1.ptr)) + obj = id_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_get_at(arg0.ptr, arg1) + obj = id(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_clear(isl.isl_id_list_copy(arg0.ptr)) + obj = id_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + try: + if not arg1.__class__ is id_list: + arg1 = id_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_concat(isl.isl_id_list_copy(arg0.ptr), isl.isl_id_list_copy(arg1.ptr)) + obj = id_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_drop(isl.isl_id_list_copy(arg0.ptr), arg1, arg2) + obj = id_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = id(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_id_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = id(ctx=arg0.ctx, ptr=isl.isl_id_copy(cb_arg0)) + cb_arg1 = id(ctx=arg0.ctx, ptr=isl.isl_id_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = id_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_id_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + try: + if not arg2.__class__ is id: + arg2 = id(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_insert(isl.isl_id_list_copy(arg0.ptr), arg1, isl.isl_id_copy(arg2.ptr)) + obj = id_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + try: + if not arg2.__class__ is id: + arg2 = id(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_set_at(isl.isl_id_list_copy(arg0.ptr), arg1, isl.isl_id_copy(arg2.ptr)) + obj = id_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is id_list: + arg0 = id_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_id_list_alloc.restype = c_void_p +isl.isl_id_list_alloc.argtypes = [Context, c_int] +isl.isl_id_list_from_id.restype = c_void_p +isl.isl_id_list_from_id.argtypes = [c_void_p] +isl.isl_id_list_read_from_str.restype = c_void_p +isl.isl_id_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_id_list_add.restype = c_void_p +isl.isl_id_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_id_list_get_at.restype = c_void_p +isl.isl_id_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_id_list_clear.restype = c_void_p +isl.isl_id_list_clear.argtypes = [c_void_p] +isl.isl_id_list_concat.restype = c_void_p +isl.isl_id_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_id_list_drop.restype = c_void_p +isl.isl_id_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_id_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_id_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_id_list_insert.restype = c_void_p +isl.isl_id_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_id_list_set_at.restype = c_void_p +isl.isl_id_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_id_list_size.argtypes = [c_void_p] +isl.isl_id_list_copy.restype = c_void_p +isl.isl_id_list_copy.argtypes = [c_void_p] +isl.isl_id_list_free.restype = c_void_p +isl.isl_id_list_free.argtypes = [c_void_p] +isl.isl_id_list_to_str.restype = POINTER(c_char) +isl.isl_id_list_to_str.argtypes = [c_void_p] + +class id_to_ast_expr(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_to_ast_expr_alloc(self.ctx, args[0]) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_to_ast_expr_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_id_to_ast_expr_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is id_to_ast_expr: + arg0 = id_to_ast_expr(arg0) + except: + raise + ptr = isl.isl_id_to_ast_expr_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.id_to_ast_expr("""%s""")' % s + else: + return 'isl.id_to_ast_expr("%s")' % s + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is id_to_ast_expr: + arg0 = id_to_ast_expr(arg0) + except: + raise + try: + if not arg1.__class__ is id_to_ast_expr: + arg1 = id_to_ast_expr(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_to_ast_expr_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def set(arg0, arg1, arg2): + try: + if not arg0.__class__ is id_to_ast_expr: + arg0 = id_to_ast_expr(arg0) + except: + raise + try: + if not arg1.__class__ is id: + arg1 = id(arg1) + except: + raise + try: + if not arg2.__class__ is ast_expr: + arg2 = ast_expr(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_to_ast_expr_set(isl.isl_id_to_ast_expr_copy(arg0.ptr), isl.isl_id_copy(arg1.ptr), isl.isl_ast_expr_copy(arg2.ptr)) + obj = id_to_ast_expr(ctx=ctx, ptr=res) + return obj + +isl.isl_id_to_ast_expr_alloc.restype = c_void_p +isl.isl_id_to_ast_expr_alloc.argtypes = [Context, c_int] +isl.isl_id_to_ast_expr_read_from_str.restype = c_void_p +isl.isl_id_to_ast_expr_read_from_str.argtypes = [Context, c_char_p] +isl.isl_id_to_ast_expr_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_id_to_ast_expr_set.restype = c_void_p +isl.isl_id_to_ast_expr_set.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_id_to_ast_expr_copy.restype = c_void_p +isl.isl_id_to_ast_expr_copy.argtypes = [c_void_p] +isl.isl_id_to_ast_expr_free.restype = c_void_p +isl.isl_id_to_ast_expr_free.argtypes = [c_void_p] +isl.isl_id_to_ast_expr_to_str.restype = POINTER(c_char) +isl.isl_id_to_ast_expr_to_str.argtypes = [c_void_p] + +class id_to_id(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_to_id_alloc(self.ctx, args[0]) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_id_to_id_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_id_to_id_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is id_to_id: + arg0 = id_to_id(arg0) + except: + raise + ptr = isl.isl_id_to_id_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.id_to_id("""%s""")' % s + else: + return 'isl.id_to_id("%s")' % s + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is id_to_id: + arg0 = id_to_id(arg0) + except: + raise + try: + if not arg1.__class__ is id_to_id: + arg1 = id_to_id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_to_id_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def set(arg0, arg1, arg2): + try: + if not arg0.__class__ is id_to_id: + arg0 = id_to_id(arg0) + except: + raise + try: + if not arg1.__class__ is id: + arg1 = id(arg1) + except: + raise + try: + if not arg2.__class__ is id: + arg2 = id(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_id_to_id_set(isl.isl_id_to_id_copy(arg0.ptr), isl.isl_id_copy(arg1.ptr), isl.isl_id_copy(arg2.ptr)) + obj = id_to_id(ctx=ctx, ptr=res) + return obj + +isl.isl_id_to_id_alloc.restype = c_void_p +isl.isl_id_to_id_alloc.argtypes = [Context, c_int] +isl.isl_id_to_id_read_from_str.restype = c_void_p +isl.isl_id_to_id_read_from_str.argtypes = [Context, c_char_p] +isl.isl_id_to_id_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_id_to_id_set.restype = c_void_p +isl.isl_id_to_id_set.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_id_to_id_copy.restype = c_void_p +isl.isl_id_to_id_copy.argtypes = [c_void_p] +isl.isl_id_to_id_free.restype = c_void_p +isl.isl_id_to_id_free.argtypes = [c_void_p] +isl.isl_id_to_id_to_str.restype = POINTER(c_char) +isl.isl_id_to_id_to_str.argtypes = [c_void_p] + +class map_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_map_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is map: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_map_list_from_map(isl.isl_map_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_map_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_map_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + ptr = isl.isl_map_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.map_list("""%s""")' % s + else: + return 'isl.map_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + try: + if not arg1.__class__ is map: + arg1 = map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_add(isl.isl_map_list_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr)) + obj = map_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_get_at(arg0.ptr, arg1) + obj = map(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_clear(isl.isl_map_list_copy(arg0.ptr)) + obj = map_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + try: + if not arg1.__class__ is map_list: + arg1 = map_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_concat(isl.isl_map_list_copy(arg0.ptr), isl.isl_map_list_copy(arg1.ptr)) + obj = map_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_drop(isl.isl_map_list_copy(arg0.ptr), arg1, arg2) + obj = map_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = map(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_map_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = map(ctx=arg0.ctx, ptr=isl.isl_map_copy(cb_arg0)) + cb_arg1 = map(ctx=arg0.ctx, ptr=isl.isl_map_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = map_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_map_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + try: + if not arg2.__class__ is map: + arg2 = map(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_insert(isl.isl_map_list_copy(arg0.ptr), arg1, isl.isl_map_copy(arg2.ptr)) + obj = map_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + try: + if not arg2.__class__ is map: + arg2 = map(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_set_at(isl.isl_map_list_copy(arg0.ptr), arg1, isl.isl_map_copy(arg2.ptr)) + obj = map_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is map_list: + arg0 = map_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_map_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_map_list_alloc.restype = c_void_p +isl.isl_map_list_alloc.argtypes = [Context, c_int] +isl.isl_map_list_from_map.restype = c_void_p +isl.isl_map_list_from_map.argtypes = [c_void_p] +isl.isl_map_list_read_from_str.restype = c_void_p +isl.isl_map_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_map_list_add.restype = c_void_p +isl.isl_map_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_map_list_get_at.restype = c_void_p +isl.isl_map_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_map_list_clear.restype = c_void_p +isl.isl_map_list_clear.argtypes = [c_void_p] +isl.isl_map_list_concat.restype = c_void_p +isl.isl_map_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_map_list_drop.restype = c_void_p +isl.isl_map_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_map_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_map_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_map_list_insert.restype = c_void_p +isl.isl_map_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_map_list_set_at.restype = c_void_p +isl.isl_map_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_map_list_size.argtypes = [c_void_p] +isl.isl_map_list_copy.restype = c_void_p +isl.isl_map_list_copy.argtypes = [c_void_p] +isl.isl_map_list_free.restype = c_void_p +isl.isl_map_list_free.argtypes = [c_void_p] +isl.isl_map_list_to_str.restype = POINTER(c_char) +isl.isl_map_list_to_str.argtypes = [c_void_p] + +class multi_id(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is id_list: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_id_from_id_list(isl.isl_space_copy(args[0].ptr), isl.isl_id_list_copy(args[1].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_id_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_multi_id_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + ptr = isl.isl_multi_id_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.multi_id("""%s""")' % s + else: + return 'isl.multi_id("%s")' % s + def at(arg0, arg1): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_get_at(arg0.ptr, arg1) + obj = id(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_flat_range_product(isl.isl_multi_id_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_id(ctx=ctx, ptr=res) + return obj + def list(arg0): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_get_list(arg0.ptr) + obj = id_list(ctx=ctx, ptr=res) + return obj + def get_list(arg0): + return arg0.list() + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + try: + if not arg1.__class__ is multi_id: + arg1 = multi_id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_range_product(isl.isl_multi_id_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr)) + obj = multi_id(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + try: + if not arg2.__class__ is id: + arg2 = id(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_set_at(isl.isl_multi_id_copy(arg0.ptr), arg1, isl.isl_id_copy(arg2.ptr)) + obj = multi_id(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + def space(arg0): + try: + if not arg0.__class__ is multi_id: + arg0 = multi_id(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_id_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + +isl.isl_multi_id_from_id_list.restype = c_void_p +isl.isl_multi_id_from_id_list.argtypes = [c_void_p, c_void_p] +isl.isl_multi_id_read_from_str.restype = c_void_p +isl.isl_multi_id_read_from_str.argtypes = [Context, c_char_p] +isl.isl_multi_id_get_at.restype = c_void_p +isl.isl_multi_id_get_at.argtypes = [c_void_p, c_int] +isl.isl_multi_id_flat_range_product.restype = c_void_p +isl.isl_multi_id_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_id_get_list.restype = c_void_p +isl.isl_multi_id_get_list.argtypes = [c_void_p] +isl.isl_multi_id_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_multi_id_range_product.restype = c_void_p +isl.isl_multi_id_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_id_set_at.restype = c_void_p +isl.isl_multi_id_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_multi_id_size.argtypes = [c_void_p] +isl.isl_multi_id_get_space.restype = c_void_p +isl.isl_multi_id_get_space.argtypes = [c_void_p] +isl.isl_multi_id_copy.restype = c_void_p +isl.isl_multi_id_copy.argtypes = [c_void_p] +isl.isl_multi_id_free.restype = c_void_p +isl.isl_multi_id_free.argtypes = [c_void_p] +isl.isl_multi_id_to_str.restype = POINTER(c_char) +isl.isl_multi_id_to_str.argtypes = [c_void_p] + +class multi_val(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is val_list: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_val_from_val_list(isl.isl_space_copy(args[0].ptr), isl.isl_val_list_copy(args[1].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_multi_val_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_multi_val_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ptr = isl.isl_multi_val_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.multi_val("""%s""")' % s + else: + return 'isl.multi_val("%s")' % s + def add(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_add(isl.isl_multi_val_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_add_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + raise Error + def at(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_get_at(arg0.ptr, arg1) + obj = val(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def flat_range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_flat_range_product(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def involves_nan(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_involves_nan(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def list(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_get_list(arg0.ptr) + obj = val_list(ctx=ctx, ptr=res) + return obj + def get_list(arg0): + return arg0.list() + def max(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_max(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def min(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_min(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def neg(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_neg(isl.isl_multi_val_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def plain_is_equal(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_plain_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def product(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_product(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def range_product(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_range_product(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def reset_range_tuple_id(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_reset_range_tuple_id(isl.isl_multi_val_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def scale(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_scale_multi_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_scale_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + raise Error + def scale_down(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_scale_down_multi_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int): + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + try: + if not args[1].__class__ is val: + args[1] = val(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_scale_down_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + raise Error + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg2.__class__ is val: + arg2 = val(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_set_at(isl.isl_multi_val_copy(arg0.ptr), arg1, isl.isl_val_copy(arg2.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is multi_val: + args[0] = multi_val(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_multi_val_set_range_tuple_id(isl.isl_multi_val_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + raise Error + def size(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + def space(arg0): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_get_space(arg0.ptr) + obj = space(ctx=ctx, ptr=res) + return obj + def get_space(arg0): + return arg0.space() + def sub(arg0, arg1): + try: + if not arg0.__class__ is multi_val: + arg0 = multi_val(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_sub(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_multi_val_zero(isl.isl_space_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + +isl.isl_multi_val_from_val_list.restype = c_void_p +isl.isl_multi_val_from_val_list.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_read_from_str.restype = c_void_p +isl.isl_multi_val_read_from_str.argtypes = [Context, c_char_p] +isl.isl_multi_val_add.restype = c_void_p +isl.isl_multi_val_add.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_add_val.restype = c_void_p +isl.isl_multi_val_add_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_get_at.restype = c_void_p +isl.isl_multi_val_get_at.argtypes = [c_void_p, c_int] +isl.isl_multi_val_flat_range_product.restype = c_void_p +isl.isl_multi_val_flat_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_val_involves_nan.argtypes = [c_void_p] +isl.isl_multi_val_get_list.restype = c_void_p +isl.isl_multi_val_get_list.argtypes = [c_void_p] +isl.isl_multi_val_max.restype = c_void_p +isl.isl_multi_val_max.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_min.restype = c_void_p +isl.isl_multi_val_min.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_neg.restype = c_void_p +isl.isl_multi_val_neg.argtypes = [c_void_p] +isl.isl_multi_val_plain_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_product.restype = c_void_p +isl.isl_multi_val_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_range_product.restype = c_void_p +isl.isl_multi_val_range_product.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_get_range_tuple_id.restype = c_void_p +isl.isl_multi_val_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_val_reset_range_tuple_id.restype = c_void_p +isl.isl_multi_val_reset_range_tuple_id.argtypes = [c_void_p] +isl.isl_multi_val_scale_multi_val.restype = c_void_p +isl.isl_multi_val_scale_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_scale_val.restype = c_void_p +isl.isl_multi_val_scale_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_scale_down_multi_val.restype = c_void_p +isl.isl_multi_val_scale_down_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_scale_down_val.restype = c_void_p +isl.isl_multi_val_scale_down_val.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_set_at.restype = c_void_p +isl.isl_multi_val_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_multi_val_set_range_tuple_id.restype = c_void_p +isl.isl_multi_val_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_size.argtypes = [c_void_p] +isl.isl_multi_val_get_space.restype = c_void_p +isl.isl_multi_val_get_space.argtypes = [c_void_p] +isl.isl_multi_val_sub.restype = c_void_p +isl.isl_multi_val_sub.argtypes = [c_void_p, c_void_p] +isl.isl_multi_val_zero.restype = c_void_p +isl.isl_multi_val_zero.argtypes = [c_void_p] +isl.isl_multi_val_copy.restype = c_void_p +isl.isl_multi_val_copy.argtypes = [c_void_p] +isl.isl_multi_val_free.restype = c_void_p +isl.isl_multi_val_free.argtypes = [c_void_p] +isl.isl_multi_val_to_str.restype = POINTER(c_char) +isl.isl_multi_val_to_str.argtypes = [c_void_p] + +class point(basic_set): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_point_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is point: + arg0 = point(arg0) + except: + raise + ptr = isl.isl_point_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.point("""%s""")' % s + else: + return 'isl.point("%s")' % s + def multi_val(arg0): + try: + if not arg0.__class__ is point: + arg0 = point(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_point_get_multi_val(arg0.ptr) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def get_multi_val(arg0): + return arg0.multi_val() + def to_set(arg0): + try: + if not arg0.__class__ is point: + arg0 = point(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_point_to_set(isl.isl_point_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + +isl.isl_point_get_multi_val.restype = c_void_p +isl.isl_point_get_multi_val.argtypes = [c_void_p] +isl.isl_point_to_set.restype = c_void_p +isl.isl_point_to_set.argtypes = [c_void_p] +isl.isl_point_copy.restype = c_void_p +isl.isl_point_copy.argtypes = [c_void_p] +isl.isl_point_free.restype = c_void_p +isl.isl_point_free.argtypes = [c_void_p] +isl.isl_point_to_str.restype = POINTER(c_char) +isl.isl_point_to_str.argtypes = [c_void_p] + +class pw_aff_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_aff_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_aff_list_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_aff_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_pw_aff_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + ptr = isl.isl_pw_aff_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.pw_aff_list("""%s""")' % s + else: + return 'isl.pw_aff_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff: + arg1 = pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_add(isl.isl_pw_aff_list_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr)) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_get_at(arg0.ptr, arg1) + obj = pw_aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_clear(isl.isl_pw_aff_list_copy(arg0.ptr)) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff_list: + arg1 = pw_aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_concat(isl.isl_pw_aff_list_copy(arg0.ptr), isl.isl_pw_aff_list_copy(arg1.ptr)) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_drop(isl.isl_pw_aff_list_copy(arg0.ptr), arg1, arg2) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = pw_aff(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_pw_aff_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = pw_aff(ctx=arg0.ctx, ptr=isl.isl_pw_aff_copy(cb_arg0)) + cb_arg1 = pw_aff(ctx=arg0.ctx, ptr=isl.isl_pw_aff_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = pw_aff_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_pw_aff_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is pw_aff: + arg2 = pw_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_insert(isl.isl_pw_aff_list_copy(arg0.ptr), arg1, isl.isl_pw_aff_copy(arg2.ptr)) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is pw_aff: + arg2 = pw_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_set_at(isl.isl_pw_aff_list_copy(arg0.ptr), arg1, isl.isl_pw_aff_copy(arg2.ptr)) + obj = pw_aff_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is pw_aff_list: + arg0 = pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_aff_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_pw_aff_list_alloc.restype = c_void_p +isl.isl_pw_aff_list_alloc.argtypes = [Context, c_int] +isl.isl_pw_aff_list_from_pw_aff.restype = c_void_p +isl.isl_pw_aff_list_from_pw_aff.argtypes = [c_void_p] +isl.isl_pw_aff_list_read_from_str.restype = c_void_p +isl.isl_pw_aff_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_pw_aff_list_add.restype = c_void_p +isl.isl_pw_aff_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_list_get_at.restype = c_void_p +isl.isl_pw_aff_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_pw_aff_list_clear.restype = c_void_p +isl.isl_pw_aff_list_clear.argtypes = [c_void_p] +isl.isl_pw_aff_list_concat.restype = c_void_p +isl.isl_pw_aff_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_pw_aff_list_drop.restype = c_void_p +isl.isl_pw_aff_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_pw_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_pw_aff_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_pw_aff_list_insert.restype = c_void_p +isl.isl_pw_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_pw_aff_list_set_at.restype = c_void_p +isl.isl_pw_aff_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_pw_aff_list_size.argtypes = [c_void_p] +isl.isl_pw_aff_list_copy.restype = c_void_p +isl.isl_pw_aff_list_copy.argtypes = [c_void_p] +isl.isl_pw_aff_list_free.restype = c_void_p +isl.isl_pw_aff_list_free.argtypes = [c_void_p] +isl.isl_pw_aff_list_to_str.restype = POINTER(c_char) +isl.isl_pw_aff_list_to_str.argtypes = [c_void_p] + +class pw_multi_aff_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_multi_aff_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is pw_multi_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_multi_aff_list_from_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_pw_multi_aff_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_pw_multi_aff_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + ptr = isl.isl_pw_multi_aff_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.pw_multi_aff_list("""%s""")' % s + else: + return 'isl.pw_multi_aff_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff: + arg1 = pw_multi_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_add(isl.isl_pw_multi_aff_list_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr)) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_get_at(arg0.ptr, arg1) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_clear(isl.isl_pw_multi_aff_list_copy(arg0.ptr)) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is pw_multi_aff_list: + arg1 = pw_multi_aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_concat(isl.isl_pw_multi_aff_list_copy(arg0.ptr), isl.isl_pw_multi_aff_list_copy(arg1.ptr)) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_drop(isl.isl_pw_multi_aff_list_copy(arg0.ptr), arg1, arg2) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = pw_multi_aff(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = pw_multi_aff(ctx=arg0.ctx, ptr=isl.isl_pw_multi_aff_copy(cb_arg0)) + cb_arg1 = pw_multi_aff(ctx=arg0.ctx, ptr=isl.isl_pw_multi_aff_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = pw_multi_aff_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is pw_multi_aff: + arg2 = pw_multi_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_insert(isl.isl_pw_multi_aff_list_copy(arg0.ptr), arg1, isl.isl_pw_multi_aff_copy(arg2.ptr)) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is pw_multi_aff: + arg2 = pw_multi_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_set_at(isl.isl_pw_multi_aff_list_copy(arg0.ptr), arg1, isl.isl_pw_multi_aff_copy(arg2.ptr)) + obj = pw_multi_aff_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is pw_multi_aff_list: + arg0 = pw_multi_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_pw_multi_aff_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_pw_multi_aff_list_alloc.restype = c_void_p +isl.isl_pw_multi_aff_list_alloc.argtypes = [Context, c_int] +isl.isl_pw_multi_aff_list_from_pw_multi_aff.restype = c_void_p +isl.isl_pw_multi_aff_list_from_pw_multi_aff.argtypes = [c_void_p] +isl.isl_pw_multi_aff_list_read_from_str.restype = c_void_p +isl.isl_pw_multi_aff_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_pw_multi_aff_list_add.restype = c_void_p +isl.isl_pw_multi_aff_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_list_get_at.restype = c_void_p +isl.isl_pw_multi_aff_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_pw_multi_aff_list_clear.restype = c_void_p +isl.isl_pw_multi_aff_list_clear.argtypes = [c_void_p] +isl.isl_pw_multi_aff_list_concat.restype = c_void_p +isl.isl_pw_multi_aff_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_pw_multi_aff_list_drop.restype = c_void_p +isl.isl_pw_multi_aff_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_pw_multi_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_pw_multi_aff_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_pw_multi_aff_list_insert.restype = c_void_p +isl.isl_pw_multi_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_pw_multi_aff_list_set_at.restype = c_void_p +isl.isl_pw_multi_aff_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_pw_multi_aff_list_size.argtypes = [c_void_p] +isl.isl_pw_multi_aff_list_copy.restype = c_void_p +isl.isl_pw_multi_aff_list_copy.argtypes = [c_void_p] +isl.isl_pw_multi_aff_list_free.restype = c_void_p +isl.isl_pw_multi_aff_list_free.argtypes = [c_void_p] +isl.isl_pw_multi_aff_list_to_str.restype = POINTER(c_char) +isl.isl_pw_multi_aff_list_to_str.argtypes = [c_void_p] + +class schedule(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_schedule_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is schedule: + arg0 = schedule(arg0) + except: + raise + ptr = isl.isl_schedule_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule("""%s""")' % s + else: + return 'isl.schedule("%s")' % s + def domain(arg0): + try: + if not arg0.__class__ is schedule: + arg0 = schedule(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_get_domain(arg0.ptr) + obj = union_set(ctx=ctx, ptr=res) + return obj + def get_domain(arg0): + return arg0.domain() + @staticmethod + def from_domain(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_from_domain(isl.isl_union_set_copy(arg0.ptr)) + obj = schedule(ctx=ctx, ptr=res) + return obj + def map(arg0): + try: + if not arg0.__class__ is schedule: + arg0 = schedule(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_get_map(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_map(arg0): + return arg0.map() + def pullback(*args): + if len(args) == 2 and args[1].__class__ is union_pw_multi_aff: + args = list(args) + try: + if not args[0].__class__ is schedule: + args[0] = schedule(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_schedule_pullback_union_pw_multi_aff(isl.isl_schedule_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr)) + obj = schedule(ctx=ctx, ptr=res) + return obj + raise Error + def root(arg0): + try: + if not arg0.__class__ is schedule: + arg0 = schedule(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_get_root(arg0.ptr) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def get_root(arg0): + return arg0.root() + +isl.isl_schedule_read_from_str.restype = c_void_p +isl.isl_schedule_read_from_str.argtypes = [Context, c_char_p] +isl.isl_schedule_get_domain.restype = c_void_p +isl.isl_schedule_get_domain.argtypes = [c_void_p] +isl.isl_schedule_from_domain.restype = c_void_p +isl.isl_schedule_from_domain.argtypes = [c_void_p] +isl.isl_schedule_get_map.restype = c_void_p +isl.isl_schedule_get_map.argtypes = [c_void_p] +isl.isl_schedule_pullback_union_pw_multi_aff.restype = c_void_p +isl.isl_schedule_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_get_root.restype = c_void_p +isl.isl_schedule_get_root.argtypes = [c_void_p] +isl.isl_schedule_copy.restype = c_void_p +isl.isl_schedule_copy.argtypes = [c_void_p] +isl.isl_schedule_free.restype = c_void_p +isl.isl_schedule_free.argtypes = [c_void_p] +isl.isl_schedule_to_str.restype = POINTER(c_char) +isl.isl_schedule_to_str.argtypes = [c_void_p] + +class schedule_constraints(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_schedule_constraints_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_constraints_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ptr = isl.isl_schedule_constraints_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_constraints("""%s""")' % s + else: + return 'isl.schedule_constraints("%s")' % s + def coincidence(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_coincidence(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_coincidence(arg0): + return arg0.coincidence() + def compute_schedule(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_compute_schedule(isl.isl_schedule_constraints_copy(arg0.ptr)) + obj = schedule(ctx=ctx, ptr=res) + return obj + def conditional_validity(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_conditional_validity(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_conditional_validity(arg0): + return arg0.conditional_validity() + def conditional_validity_condition(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_conditional_validity_condition(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_conditional_validity_condition(arg0): + return arg0.conditional_validity_condition() + def context(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_context(arg0.ptr) + obj = set(ctx=ctx, ptr=res) + return obj + def get_context(arg0): + return arg0.context() + def domain(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_domain(arg0.ptr) + obj = union_set(ctx=ctx, ptr=res) + return obj + def get_domain(arg0): + return arg0.domain() + @staticmethod + def on_domain(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_on_domain(isl.isl_union_set_copy(arg0.ptr)) + obj = schedule_constraints(ctx=ctx, ptr=res) + return obj + def proximity(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_proximity(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_proximity(arg0): + return arg0.proximity() + def set_coincidence(arg0, arg1): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_set_coincidence(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = schedule_constraints(ctx=ctx, ptr=res) + return obj + def set_conditional_validity(arg0, arg1, arg2): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + try: + if not arg2.__class__ is union_map: + arg2 = union_map(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_set_conditional_validity(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr), isl.isl_union_map_copy(arg2.ptr)) + obj = schedule_constraints(ctx=ctx, ptr=res) + return obj + def set_context(arg0, arg1): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_set_context(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = schedule_constraints(ctx=ctx, ptr=res) + return obj + def set_proximity(arg0, arg1): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_set_proximity(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = schedule_constraints(ctx=ctx, ptr=res) + return obj + def set_validity(arg0, arg1): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_set_validity(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = schedule_constraints(ctx=ctx, ptr=res) + return obj + def validity(arg0): + try: + if not arg0.__class__ is schedule_constraints: + arg0 = schedule_constraints(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_constraints_get_validity(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_validity(arg0): + return arg0.validity() + +isl.isl_schedule_constraints_read_from_str.restype = c_void_p +isl.isl_schedule_constraints_read_from_str.argtypes = [Context, c_char_p] +isl.isl_schedule_constraints_get_coincidence.restype = c_void_p +isl.isl_schedule_constraints_get_coincidence.argtypes = [c_void_p] +isl.isl_schedule_constraints_compute_schedule.restype = c_void_p +isl.isl_schedule_constraints_compute_schedule.argtypes = [c_void_p] +isl.isl_schedule_constraints_get_conditional_validity.restype = c_void_p +isl.isl_schedule_constraints_get_conditional_validity.argtypes = [c_void_p] +isl.isl_schedule_constraints_get_conditional_validity_condition.restype = c_void_p +isl.isl_schedule_constraints_get_conditional_validity_condition.argtypes = [c_void_p] +isl.isl_schedule_constraints_get_context.restype = c_void_p +isl.isl_schedule_constraints_get_context.argtypes = [c_void_p] +isl.isl_schedule_constraints_get_domain.restype = c_void_p +isl.isl_schedule_constraints_get_domain.argtypes = [c_void_p] +isl.isl_schedule_constraints_on_domain.restype = c_void_p +isl.isl_schedule_constraints_on_domain.argtypes = [c_void_p] +isl.isl_schedule_constraints_get_proximity.restype = c_void_p +isl.isl_schedule_constraints_get_proximity.argtypes = [c_void_p] +isl.isl_schedule_constraints_set_coincidence.restype = c_void_p +isl.isl_schedule_constraints_set_coincidence.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_constraints_set_conditional_validity.restype = c_void_p +isl.isl_schedule_constraints_set_conditional_validity.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_schedule_constraints_set_context.restype = c_void_p +isl.isl_schedule_constraints_set_context.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_constraints_set_proximity.restype = c_void_p +isl.isl_schedule_constraints_set_proximity.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_constraints_set_validity.restype = c_void_p +isl.isl_schedule_constraints_set_validity.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_constraints_get_validity.restype = c_void_p +isl.isl_schedule_constraints_get_validity.argtypes = [c_void_p] +isl.isl_schedule_constraints_copy.restype = c_void_p +isl.isl_schedule_constraints_copy.argtypes = [c_void_p] +isl.isl_schedule_constraints_free.restype = c_void_p +isl.isl_schedule_constraints_free.argtypes = [c_void_p] +isl.isl_schedule_constraints_to_str.restype = POINTER(c_char) +isl.isl_schedule_constraints_to_str.argtypes = [c_void_p] + +class schedule_node(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and isinstance(args[0], schedule_node_band): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_context): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_domain): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_expansion): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_extension): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_filter): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_leaf): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_guard): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_mark): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_sequence): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + if len(args) == 1 and isinstance(args[0], schedule_node_set): + self.ctx = args[0].ctx + self.ptr = isl.isl_schedule_node_copy(args[0].ptr) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + if "ptr" in keywords: + type = isl.isl_schedule_node_get_type(keywords["ptr"]) + if type == 0: + return schedule_node_band(**keywords) + if type == 1: + return schedule_node_context(**keywords) + if type == 2: + return schedule_node_domain(**keywords) + if type == 3: + return schedule_node_expansion(**keywords) + if type == 4: + return schedule_node_extension(**keywords) + if type == 5: + return schedule_node_filter(**keywords) + if type == 6: + return schedule_node_leaf(**keywords) + if type == 7: + return schedule_node_guard(**keywords) + if type == 8: + return schedule_node_mark(**keywords) + if type == 9: + return schedule_node_sequence(**keywords) + if type == 10: + return schedule_node_set(**keywords) + raise Error + return super(schedule_node, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node("""%s""")' % s + else: + return 'isl.schedule_node("%s")' % s + def ancestor(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_ancestor(isl.isl_schedule_node_copy(arg0.ptr), arg1) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def ancestor_child_position(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is schedule_node: + arg1 = schedule_node(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_ancestor_child_position(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return int(res) + def get_ancestor_child_position(arg0, arg1): + return arg0.ancestor_child_position(arg1) + def child(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_child(isl.isl_schedule_node_copy(arg0.ptr), arg1) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def child_position(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_child_position(arg0.ptr) + if res < 0: + raise Error + return int(res) + def get_child_position(arg0): + return arg0.child_position() + def every_descendant(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=isl.isl_schedule_node_copy(cb_arg0)) + try: + res = arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_schedule_node_every_descendant(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + return bool(res) + def first_child(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_first_child(isl.isl_schedule_node_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def foreach_ancestor_top_down(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=isl.isl_schedule_node_copy(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_schedule_node_foreach_ancestor_top_down(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_descendant_top_down(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=isl.isl_schedule_node_copy(cb_arg0)) + try: + res = arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_schedule_node_foreach_descendant_top_down(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + @staticmethod + def from_domain(arg0): + try: + if not arg0.__class__ is union_set: + arg0 = union_set(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_from_domain(isl.isl_union_set_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + @staticmethod + def from_extension(arg0): + try: + if not arg0.__class__ is union_map: + arg0 = union_map(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_from_extension(isl.isl_union_map_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def graft_after(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is schedule_node: + arg1 = schedule_node(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_graft_after(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_schedule_node_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def graft_before(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is schedule_node: + arg1 = schedule_node(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_graft_before(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_schedule_node_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def has_children(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_has_children(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def has_next_sibling(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_has_next_sibling(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def has_parent(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_has_parent(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def has_previous_sibling(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_has_previous_sibling(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def insert_context(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_context(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def insert_filter(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_filter(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def insert_guard(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_guard(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def insert_mark(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is id: + arg1 = id(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_mark(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_id_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def insert_partial_schedule(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_partial_schedule(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def insert_sequence(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is union_set_list: + arg1 = union_set_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_sequence(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_list_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def insert_set(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is union_set_list: + arg1 = union_set_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_insert_set(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_list_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is schedule_node: + arg1 = schedule_node(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_subtree_anchored(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_is_subtree_anchored(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def map_descendant_bottom_up(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + res = arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return None + return isl.isl_schedule_node_copy(res.ptr) + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_schedule_node_map_descendant_bottom_up(isl.isl_schedule_node_copy(arg0.ptr), cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def n_children(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_n_children(arg0.ptr) + if res < 0: + raise Error + return int(res) + def next_sibling(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_next_sibling(isl.isl_schedule_node_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def order_after(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_order_after(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def order_before(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_order_before(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def parent(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_parent(isl.isl_schedule_node_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def prefix_schedule_multi_union_pw_aff(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(arg0.ptr) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def get_prefix_schedule_multi_union_pw_aff(arg0): + return arg0.prefix_schedule_multi_union_pw_aff() + def prefix_schedule_union_map(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_prefix_schedule_union_map(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_prefix_schedule_union_map(arg0): + return arg0.prefix_schedule_union_map() + def prefix_schedule_union_pw_multi_aff(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(arg0.ptr) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def get_prefix_schedule_union_pw_multi_aff(arg0): + return arg0.prefix_schedule_union_pw_multi_aff() + def previous_sibling(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_previous_sibling(isl.isl_schedule_node_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def root(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_root(isl.isl_schedule_node_copy(arg0.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def schedule(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_schedule(arg0.ptr) + obj = schedule(ctx=ctx, ptr=res) + return obj + def get_schedule(arg0): + return arg0.schedule() + def shared_ancestor(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is schedule_node: + arg1 = schedule_node(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_shared_ancestor(arg0.ptr, arg1.ptr) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def get_shared_ancestor(arg0, arg1): + return arg0.shared_ancestor(arg1) + def tree_depth(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_get_tree_depth(arg0.ptr) + if res < 0: + raise Error + return int(res) + def get_tree_depth(arg0): + return arg0.tree_depth() + +isl.isl_schedule_node_ancestor.restype = c_void_p +isl.isl_schedule_node_ancestor.argtypes = [c_void_p, c_int] +isl.isl_schedule_node_get_ancestor_child_position.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_child.restype = c_void_p +isl.isl_schedule_node_child.argtypes = [c_void_p, c_int] +isl.isl_schedule_node_get_child_position.argtypes = [c_void_p] +isl.isl_schedule_node_every_descendant.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_schedule_node_first_child.restype = c_void_p +isl.isl_schedule_node_first_child.argtypes = [c_void_p] +isl.isl_schedule_node_foreach_ancestor_top_down.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_schedule_node_foreach_descendant_top_down.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_schedule_node_from_domain.restype = c_void_p +isl.isl_schedule_node_from_domain.argtypes = [c_void_p] +isl.isl_schedule_node_from_extension.restype = c_void_p +isl.isl_schedule_node_from_extension.argtypes = [c_void_p] +isl.isl_schedule_node_graft_after.restype = c_void_p +isl.isl_schedule_node_graft_after.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_graft_before.restype = c_void_p +isl.isl_schedule_node_graft_before.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_has_children.argtypes = [c_void_p] +isl.isl_schedule_node_has_next_sibling.argtypes = [c_void_p] +isl.isl_schedule_node_has_parent.argtypes = [c_void_p] +isl.isl_schedule_node_has_previous_sibling.argtypes = [c_void_p] +isl.isl_schedule_node_insert_context.restype = c_void_p +isl.isl_schedule_node_insert_context.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_insert_filter.restype = c_void_p +isl.isl_schedule_node_insert_filter.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_insert_guard.restype = c_void_p +isl.isl_schedule_node_insert_guard.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_insert_mark.restype = c_void_p +isl.isl_schedule_node_insert_mark.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_insert_partial_schedule.restype = c_void_p +isl.isl_schedule_node_insert_partial_schedule.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_insert_sequence.restype = c_void_p +isl.isl_schedule_node_insert_sequence.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_insert_set.restype = c_void_p +isl.isl_schedule_node_insert_set.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_is_subtree_anchored.argtypes = [c_void_p] +isl.isl_schedule_node_map_descendant_bottom_up.restype = c_void_p +isl.isl_schedule_node_map_descendant_bottom_up.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_schedule_node_n_children.argtypes = [c_void_p] +isl.isl_schedule_node_next_sibling.restype = c_void_p +isl.isl_schedule_node_next_sibling.argtypes = [c_void_p] +isl.isl_schedule_node_order_after.restype = c_void_p +isl.isl_schedule_node_order_after.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_order_before.restype = c_void_p +isl.isl_schedule_node_order_before.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_parent.restype = c_void_p +isl.isl_schedule_node_parent.argtypes = [c_void_p] +isl.isl_schedule_node_get_prefix_schedule_multi_union_pw_aff.restype = c_void_p +isl.isl_schedule_node_get_prefix_schedule_multi_union_pw_aff.argtypes = [c_void_p] +isl.isl_schedule_node_get_prefix_schedule_union_map.restype = c_void_p +isl.isl_schedule_node_get_prefix_schedule_union_map.argtypes = [c_void_p] +isl.isl_schedule_node_get_prefix_schedule_union_pw_multi_aff.restype = c_void_p +isl.isl_schedule_node_get_prefix_schedule_union_pw_multi_aff.argtypes = [c_void_p] +isl.isl_schedule_node_previous_sibling.restype = c_void_p +isl.isl_schedule_node_previous_sibling.argtypes = [c_void_p] +isl.isl_schedule_node_root.restype = c_void_p +isl.isl_schedule_node_root.argtypes = [c_void_p] +isl.isl_schedule_node_get_schedule.restype = c_void_p +isl.isl_schedule_node_get_schedule.argtypes = [c_void_p] +isl.isl_schedule_node_get_shared_ancestor.restype = c_void_p +isl.isl_schedule_node_get_shared_ancestor.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_get_tree_depth.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] +isl.isl_schedule_node_get_type.argtypes = [c_void_p] + +class schedule_node_band(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_band, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_band: + arg0 = schedule_node_band(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_band("""%s""")' % s + else: + return 'isl.schedule_node_band("%s")' % s + def ast_build_options(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_get_ast_build_options(arg0.ptr) + obj = union_set(ctx=ctx, ptr=res) + return obj + def get_ast_build_options(arg0): + return arg0.ast_build_options() + def ast_isolate_option(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_get_ast_isolate_option(arg0.ptr) + obj = set(ctx=ctx, ptr=res) + return obj + def get_ast_isolate_option(arg0): + return arg0.ast_isolate_option() + def member_get_coincident(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_member_get_coincident(arg0.ptr, arg1) + if res < 0: + raise Error + return bool(res) + def member_set_coincident(arg0, arg1, arg2): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_member_set_coincident(isl.isl_schedule_node_copy(arg0.ptr), arg1, arg2) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def mod(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_mod(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def n_member(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_n_member(arg0.ptr) + if res < 0: + raise Error + return int(res) + def partial_schedule(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_get_partial_schedule(arg0.ptr) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def get_partial_schedule(arg0): + return arg0.partial_schedule() + def permutable(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_get_permutable(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def get_permutable(arg0): + return arg0.permutable() + def scale(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_scale(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def scale_down(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_scale_down(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def set_ast_build_options(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_set_ast_build_options(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def set_permutable(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_set_permutable(isl.isl_schedule_node_copy(arg0.ptr), arg1) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def shift(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is multi_union_pw_aff: + arg1 = multi_union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_shift(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def split(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_split(isl.isl_schedule_node_copy(arg0.ptr), arg1) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def tile(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + try: + if not arg1.__class__ is multi_val: + arg1 = multi_val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_tile(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr)) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def member_set_ast_loop_default(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 0) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def member_set_ast_loop_atomic(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 1) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def member_set_ast_loop_unroll(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 2) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + def member_set_ast_loop_separate(arg0, arg1): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 3) + obj = schedule_node(ctx=ctx, ptr=res) + return obj + +isl.isl_schedule_node_band_get_ast_build_options.restype = c_void_p +isl.isl_schedule_node_band_get_ast_build_options.argtypes = [c_void_p] +isl.isl_schedule_node_band_get_ast_isolate_option.restype = c_void_p +isl.isl_schedule_node_band_get_ast_isolate_option.argtypes = [c_void_p] +isl.isl_schedule_node_band_member_get_coincident.argtypes = [c_void_p, c_int] +isl.isl_schedule_node_band_member_set_coincident.restype = c_void_p +isl.isl_schedule_node_band_member_set_coincident.argtypes = [c_void_p, c_int, c_int] +isl.isl_schedule_node_band_mod.restype = c_void_p +isl.isl_schedule_node_band_mod.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_band_n_member.argtypes = [c_void_p] +isl.isl_schedule_node_band_get_partial_schedule.restype = c_void_p +isl.isl_schedule_node_band_get_partial_schedule.argtypes = [c_void_p] +isl.isl_schedule_node_band_get_permutable.argtypes = [c_void_p] +isl.isl_schedule_node_band_scale.restype = c_void_p +isl.isl_schedule_node_band_scale.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_band_scale_down.restype = c_void_p +isl.isl_schedule_node_band_scale_down.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_band_set_ast_build_options.restype = c_void_p +isl.isl_schedule_node_band_set_ast_build_options.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_band_set_permutable.restype = c_void_p +isl.isl_schedule_node_band_set_permutable.argtypes = [c_void_p, c_int] +isl.isl_schedule_node_band_shift.restype = c_void_p +isl.isl_schedule_node_band_shift.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_band_split.restype = c_void_p +isl.isl_schedule_node_band_split.argtypes = [c_void_p, c_int] +isl.isl_schedule_node_band_tile.restype = c_void_p +isl.isl_schedule_node_band_tile.argtypes = [c_void_p, c_void_p] +isl.isl_schedule_node_band_member_set_ast_loop_type.restype = c_void_p +isl.isl_schedule_node_band_member_set_ast_loop_type.argtypes = [c_void_p, c_int, c_int] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_context(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_context, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_context: + arg0 = schedule_node_context(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_context("""%s""")' % s + else: + return 'isl.schedule_node_context("%s")' % s + def context(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_context_get_context(arg0.ptr) + obj = set(ctx=ctx, ptr=res) + return obj + def get_context(arg0): + return arg0.context() + +isl.isl_schedule_node_context_get_context.restype = c_void_p +isl.isl_schedule_node_context_get_context.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_domain(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_domain, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_domain: + arg0 = schedule_node_domain(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_domain("""%s""")' % s + else: + return 'isl.schedule_node_domain("%s")' % s + def domain(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_domain_get_domain(arg0.ptr) + obj = union_set(ctx=ctx, ptr=res) + return obj + def get_domain(arg0): + return arg0.domain() + +isl.isl_schedule_node_domain_get_domain.restype = c_void_p +isl.isl_schedule_node_domain_get_domain.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_expansion(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_expansion, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_expansion: + arg0 = schedule_node_expansion(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_expansion("""%s""")' % s + else: + return 'isl.schedule_node_expansion("%s")' % s + def contraction(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_expansion_get_contraction(arg0.ptr) + obj = union_pw_multi_aff(ctx=ctx, ptr=res) + return obj + def get_contraction(arg0): + return arg0.contraction() + def expansion(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_expansion_get_expansion(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_expansion(arg0): + return arg0.expansion() + +isl.isl_schedule_node_expansion_get_contraction.restype = c_void_p +isl.isl_schedule_node_expansion_get_contraction.argtypes = [c_void_p] +isl.isl_schedule_node_expansion_get_expansion.restype = c_void_p +isl.isl_schedule_node_expansion_get_expansion.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_extension(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_extension, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_extension: + arg0 = schedule_node_extension(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_extension("""%s""")' % s + else: + return 'isl.schedule_node_extension("%s")' % s + def extension(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_extension_get_extension(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_extension(arg0): + return arg0.extension() + +isl.isl_schedule_node_extension_get_extension.restype = c_void_p +isl.isl_schedule_node_extension_get_extension.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_filter(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_filter, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_filter: + arg0 = schedule_node_filter(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_filter("""%s""")' % s + else: + return 'isl.schedule_node_filter("%s")' % s + def filter(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_filter_get_filter(arg0.ptr) + obj = union_set(ctx=ctx, ptr=res) + return obj + def get_filter(arg0): + return arg0.filter() + +isl.isl_schedule_node_filter_get_filter.restype = c_void_p +isl.isl_schedule_node_filter_get_filter.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_guard(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_guard, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_guard: + arg0 = schedule_node_guard(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_guard("""%s""")' % s + else: + return 'isl.schedule_node_guard("%s")' % s + def guard(arg0): + try: + if not arg0.__class__ is schedule_node: + arg0 = schedule_node(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_schedule_node_guard_get_guard(arg0.ptr) + obj = set(ctx=ctx, ptr=res) + return obj + def get_guard(arg0): + return arg0.guard() + +isl.isl_schedule_node_guard_get_guard.restype = c_void_p +isl.isl_schedule_node_guard_get_guard.argtypes = [c_void_p] +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_leaf(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_leaf, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_leaf: + arg0 = schedule_node_leaf(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_leaf("""%s""")' % s + else: + return 'isl.schedule_node_leaf("%s")' % s + +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_mark(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_mark, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_mark: + arg0 = schedule_node_mark(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_mark("""%s""")' % s + else: + return 'isl.schedule_node_mark("%s")' % s + +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_sequence(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_sequence, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_sequence: + arg0 = schedule_node_sequence(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_sequence("""%s""")' % s + else: + return 'isl.schedule_node_sequence("%s")' % s + +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class schedule_node_set(schedule_node): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_schedule_node_free(self.ptr) + def __new__(cls, *args, **keywords): + return super(schedule_node_set, cls).__new__(cls) + def __str__(arg0): + try: + if not arg0.__class__ is schedule_node_set: + arg0 = schedule_node_set(arg0) + except: + raise + ptr = isl.isl_schedule_node_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.schedule_node_set("""%s""")' % s + else: + return 'isl.schedule_node_set("%s")' % s + +isl.isl_schedule_node_copy.restype = c_void_p +isl.isl_schedule_node_copy.argtypes = [c_void_p] +isl.isl_schedule_node_free.restype = c_void_p +isl.isl_schedule_node_free.argtypes = [c_void_p] +isl.isl_schedule_node_to_str.restype = POINTER(c_char) +isl.isl_schedule_node_to_str.argtypes = [c_void_p] + +class set_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_set_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is set: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_set_list_from_set(isl.isl_set_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_set_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_set_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + ptr = isl.isl_set_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.set_list("""%s""")' % s + else: + return 'isl.set_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + try: + if not arg1.__class__ is set: + arg1 = set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_add(isl.isl_set_list_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr)) + obj = set_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_get_at(arg0.ptr, arg1) + obj = set(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_clear(isl.isl_set_list_copy(arg0.ptr)) + obj = set_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + try: + if not arg1.__class__ is set_list: + arg1 = set_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_concat(isl.isl_set_list_copy(arg0.ptr), isl.isl_set_list_copy(arg1.ptr)) + obj = set_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_drop(isl.isl_set_list_copy(arg0.ptr), arg1, arg2) + obj = set_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = set(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_set_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = set(ctx=arg0.ctx, ptr=isl.isl_set_copy(cb_arg0)) + cb_arg1 = set(ctx=arg0.ctx, ptr=isl.isl_set_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = set_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_set_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + try: + if not arg2.__class__ is set: + arg2 = set(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_insert(isl.isl_set_list_copy(arg0.ptr), arg1, isl.isl_set_copy(arg2.ptr)) + obj = set_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + try: + if not arg2.__class__ is set: + arg2 = set(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_set_at(isl.isl_set_list_copy(arg0.ptr), arg1, isl.isl_set_copy(arg2.ptr)) + obj = set_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is set_list: + arg0 = set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_set_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_set_list_alloc.restype = c_void_p +isl.isl_set_list_alloc.argtypes = [Context, c_int] +isl.isl_set_list_from_set.restype = c_void_p +isl.isl_set_list_from_set.argtypes = [c_void_p] +isl.isl_set_list_read_from_str.restype = c_void_p +isl.isl_set_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_set_list_add.restype = c_void_p +isl.isl_set_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_set_list_get_at.restype = c_void_p +isl.isl_set_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_set_list_clear.restype = c_void_p +isl.isl_set_list_clear.argtypes = [c_void_p] +isl.isl_set_list_concat.restype = c_void_p +isl.isl_set_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_set_list_drop.restype = c_void_p +isl.isl_set_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_set_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_set_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_set_list_insert.restype = c_void_p +isl.isl_set_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_set_list_set_at.restype = c_void_p +isl.isl_set_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_set_list_size.argtypes = [c_void_p] +isl.isl_set_list_copy.restype = c_void_p +isl.isl_set_list_copy.argtypes = [c_void_p] +isl.isl_set_list_free.restype = c_void_p +isl.isl_set_list_free.argtypes = [c_void_p] +isl.isl_set_list_to_str.restype = POINTER(c_char) +isl.isl_set_list_to_str.argtypes = [c_void_p] + +class space(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_space_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_space_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ptr = isl.isl_space_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.space("""%s""")' % s + else: + return 'isl.space("%s")' % s + def add_named_tuple(*args): + if len(args) == 3 and (args[1].__class__ is id or type(args[1]) == str) and type(args[2]) == int: + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_add_named_tuple_id_ui(isl.isl_space_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr), args[2]) + obj = space(ctx=ctx, ptr=res) + return obj + raise Error + def add_param(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_add_param_id(isl.isl_space_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + raise Error + def add_unnamed_tuple(*args): + if len(args) == 2 and type(args[1]) == int: + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_add_unnamed_tuple_ui(isl.isl_space_copy(args[0].ptr), args[1]) + obj = space(ctx=ctx, ptr=res) + return obj + raise Error + def curry(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_curry(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def domain(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_domain(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def domain_map_multi_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_domain_map_multi_aff(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def domain_map_pw_multi_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_domain_map_pw_multi_aff(isl.isl_space_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def domain_reverse(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_domain_reverse(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def domain_tuple_id(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_get_domain_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_domain_tuple_id(arg0): + return arg0.domain_tuple_id() + def drop_all_params(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_drop_all_params(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def flatten_domain(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_flatten_domain(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def flatten_range(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_flatten_range(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def has_domain_tuple_id(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_has_domain_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def has_range_tuple_id(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_has_range_tuple_id(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def identity_multi_aff_on_domain(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_identity_multi_aff_on_domain(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def identity_multi_pw_aff_on_domain(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_identity_multi_pw_aff_on_domain(isl.isl_space_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def identity_pw_multi_aff_on_domain(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_identity_pw_multi_aff_on_domain(isl.isl_space_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def is_equal(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_is_equal(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_wrapping(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_is_wrapping(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def map_from_set(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_map_from_set(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def multi_aff(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is aff_list: + arg1 = aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_multi_aff(isl.isl_space_copy(arg0.ptr), isl.isl_aff_list_copy(arg1.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def multi_aff_on_domain(*args): + if len(args) == 2 and args[1].__class__ is multi_val: + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_multi_aff_on_domain_multi_val(isl.isl_space_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + raise Error + def multi_id(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is id_list: + arg1 = id_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_multi_id(isl.isl_space_copy(arg0.ptr), isl.isl_id_list_copy(arg1.ptr)) + obj = multi_id(ctx=ctx, ptr=res) + return obj + def multi_pw_aff(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is pw_aff_list: + arg1 = pw_aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_multi_pw_aff(isl.isl_space_copy(arg0.ptr), isl.isl_pw_aff_list_copy(arg1.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def multi_union_pw_aff(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff_list: + arg1 = union_pw_aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_multi_union_pw_aff(isl.isl_space_copy(arg0.ptr), isl.isl_union_pw_aff_list_copy(arg1.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def multi_val(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is val_list: + arg1 = val_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_multi_val(isl.isl_space_copy(arg0.ptr), isl.isl_val_list_copy(arg1.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + def param_aff_on_domain(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_param_aff_on_domain_id(isl.isl_space_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + raise Error + def params(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_params(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def product(arg0, arg1): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + try: + if not arg1.__class__ is space: + arg1 = space(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_product(isl.isl_space_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def range(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_range(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def range_map_multi_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_range_map_multi_aff(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def range_map_pw_multi_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_range_map_pw_multi_aff(isl.isl_space_copy(arg0.ptr)) + obj = pw_multi_aff(ctx=ctx, ptr=res) + return obj + def range_reverse(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_range_reverse(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def range_tuple_id(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_get_range_tuple_id(arg0.ptr) + obj = id(ctx=ctx, ptr=res) + return obj + def get_range_tuple_id(arg0): + return arg0.range_tuple_id() + def reverse(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_reverse(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def set_domain_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_set_domain_tuple_id(isl.isl_space_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + raise Error + def set_range_tuple(*args): + if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str): + args = list(args) + try: + if not args[0].__class__ is space: + args[0] = space(args[0]) + except: + raise + try: + if not args[1].__class__ is id: + args[1] = id(args[1]) + except: + raise + ctx = args[0].ctx + res = isl.isl_space_set_range_tuple_id(isl.isl_space_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + raise Error + def uncurry(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_uncurry(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + @staticmethod + def unit(): + ctx = Context.getDefaultInstance() + res = isl.isl_space_unit(ctx) + obj = space(ctx=ctx, ptr=res) + return obj + def universe_map(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_universe_map(isl.isl_space_copy(arg0.ptr)) + obj = map(ctx=ctx, ptr=res) + return obj + def universe_set(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_universe_set(isl.isl_space_copy(arg0.ptr)) + obj = set(ctx=ctx, ptr=res) + return obj + def unwrap(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_unwrap(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def wrap(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_wrap(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def wrapped_reverse(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_wrapped_reverse(isl.isl_space_copy(arg0.ptr)) + obj = space(ctx=ctx, ptr=res) + return obj + def zero_aff_on_domain(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_zero_aff_on_domain(isl.isl_space_copy(arg0.ptr)) + obj = aff(ctx=ctx, ptr=res) + return obj + def zero_multi_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_zero_multi_aff(isl.isl_space_copy(arg0.ptr)) + obj = multi_aff(ctx=ctx, ptr=res) + return obj + def zero_multi_pw_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_zero_multi_pw_aff(isl.isl_space_copy(arg0.ptr)) + obj = multi_pw_aff(ctx=ctx, ptr=res) + return obj + def zero_multi_union_pw_aff(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_zero_multi_union_pw_aff(isl.isl_space_copy(arg0.ptr)) + obj = multi_union_pw_aff(ctx=ctx, ptr=res) + return obj + def zero_multi_val(arg0): + try: + if not arg0.__class__ is space: + arg0 = space(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_space_zero_multi_val(isl.isl_space_copy(arg0.ptr)) + obj = multi_val(ctx=ctx, ptr=res) + return obj + +isl.isl_space_read_from_str.restype = c_void_p +isl.isl_space_read_from_str.argtypes = [Context, c_char_p] +isl.isl_space_add_named_tuple_id_ui.restype = c_void_p +isl.isl_space_add_named_tuple_id_ui.argtypes = [c_void_p, c_void_p, c_int] +isl.isl_space_add_param_id.restype = c_void_p +isl.isl_space_add_param_id.argtypes = [c_void_p, c_void_p] +isl.isl_space_add_unnamed_tuple_ui.restype = c_void_p +isl.isl_space_add_unnamed_tuple_ui.argtypes = [c_void_p, c_int] +isl.isl_space_curry.restype = c_void_p +isl.isl_space_curry.argtypes = [c_void_p] +isl.isl_space_domain.restype = c_void_p +isl.isl_space_domain.argtypes = [c_void_p] +isl.isl_space_domain_map_multi_aff.restype = c_void_p +isl.isl_space_domain_map_multi_aff.argtypes = [c_void_p] +isl.isl_space_domain_map_pw_multi_aff.restype = c_void_p +isl.isl_space_domain_map_pw_multi_aff.argtypes = [c_void_p] +isl.isl_space_domain_reverse.restype = c_void_p +isl.isl_space_domain_reverse.argtypes = [c_void_p] +isl.isl_space_get_domain_tuple_id.restype = c_void_p +isl.isl_space_get_domain_tuple_id.argtypes = [c_void_p] +isl.isl_space_drop_all_params.restype = c_void_p +isl.isl_space_drop_all_params.argtypes = [c_void_p] +isl.isl_space_flatten_domain.restype = c_void_p +isl.isl_space_flatten_domain.argtypes = [c_void_p] +isl.isl_space_flatten_range.restype = c_void_p +isl.isl_space_flatten_range.argtypes = [c_void_p] +isl.isl_space_has_domain_tuple_id.argtypes = [c_void_p] +isl.isl_space_has_range_tuple_id.argtypes = [c_void_p] +isl.isl_space_identity_multi_aff_on_domain.restype = c_void_p +isl.isl_space_identity_multi_aff_on_domain.argtypes = [c_void_p] +isl.isl_space_identity_multi_pw_aff_on_domain.restype = c_void_p +isl.isl_space_identity_multi_pw_aff_on_domain.argtypes = [c_void_p] +isl.isl_space_identity_pw_multi_aff_on_domain.restype = c_void_p +isl.isl_space_identity_pw_multi_aff_on_domain.argtypes = [c_void_p] +isl.isl_space_is_equal.argtypes = [c_void_p, c_void_p] +isl.isl_space_is_wrapping.argtypes = [c_void_p] +isl.isl_space_map_from_set.restype = c_void_p +isl.isl_space_map_from_set.argtypes = [c_void_p] +isl.isl_space_multi_aff.restype = c_void_p +isl.isl_space_multi_aff.argtypes = [c_void_p, c_void_p] +isl.isl_space_multi_aff_on_domain_multi_val.restype = c_void_p +isl.isl_space_multi_aff_on_domain_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_space_multi_id.restype = c_void_p +isl.isl_space_multi_id.argtypes = [c_void_p, c_void_p] +isl.isl_space_multi_pw_aff.restype = c_void_p +isl.isl_space_multi_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_space_multi_union_pw_aff.restype = c_void_p +isl.isl_space_multi_union_pw_aff.argtypes = [c_void_p, c_void_p] +isl.isl_space_multi_val.restype = c_void_p +isl.isl_space_multi_val.argtypes = [c_void_p, c_void_p] +isl.isl_space_param_aff_on_domain_id.restype = c_void_p +isl.isl_space_param_aff_on_domain_id.argtypes = [c_void_p, c_void_p] +isl.isl_space_params.restype = c_void_p +isl.isl_space_params.argtypes = [c_void_p] +isl.isl_space_product.restype = c_void_p +isl.isl_space_product.argtypes = [c_void_p, c_void_p] +isl.isl_space_range.restype = c_void_p +isl.isl_space_range.argtypes = [c_void_p] +isl.isl_space_range_map_multi_aff.restype = c_void_p +isl.isl_space_range_map_multi_aff.argtypes = [c_void_p] +isl.isl_space_range_map_pw_multi_aff.restype = c_void_p +isl.isl_space_range_map_pw_multi_aff.argtypes = [c_void_p] +isl.isl_space_range_reverse.restype = c_void_p +isl.isl_space_range_reverse.argtypes = [c_void_p] +isl.isl_space_get_range_tuple_id.restype = c_void_p +isl.isl_space_get_range_tuple_id.argtypes = [c_void_p] +isl.isl_space_reverse.restype = c_void_p +isl.isl_space_reverse.argtypes = [c_void_p] +isl.isl_space_set_domain_tuple_id.restype = c_void_p +isl.isl_space_set_domain_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_space_set_range_tuple_id.restype = c_void_p +isl.isl_space_set_range_tuple_id.argtypes = [c_void_p, c_void_p] +isl.isl_space_uncurry.restype = c_void_p +isl.isl_space_uncurry.argtypes = [c_void_p] +isl.isl_space_unit.restype = c_void_p +isl.isl_space_unit.argtypes = [Context] +isl.isl_space_universe_map.restype = c_void_p +isl.isl_space_universe_map.argtypes = [c_void_p] +isl.isl_space_universe_set.restype = c_void_p +isl.isl_space_universe_set.argtypes = [c_void_p] +isl.isl_space_unwrap.restype = c_void_p +isl.isl_space_unwrap.argtypes = [c_void_p] +isl.isl_space_wrap.restype = c_void_p +isl.isl_space_wrap.argtypes = [c_void_p] +isl.isl_space_wrapped_reverse.restype = c_void_p +isl.isl_space_wrapped_reverse.argtypes = [c_void_p] +isl.isl_space_zero_aff_on_domain.restype = c_void_p +isl.isl_space_zero_aff_on_domain.argtypes = [c_void_p] +isl.isl_space_zero_multi_aff.restype = c_void_p +isl.isl_space_zero_multi_aff.argtypes = [c_void_p] +isl.isl_space_zero_multi_pw_aff.restype = c_void_p +isl.isl_space_zero_multi_pw_aff.argtypes = [c_void_p] +isl.isl_space_zero_multi_union_pw_aff.restype = c_void_p +isl.isl_space_zero_multi_union_pw_aff.argtypes = [c_void_p] +isl.isl_space_zero_multi_val.restype = c_void_p +isl.isl_space_zero_multi_val.argtypes = [c_void_p] +isl.isl_space_copy.restype = c_void_p +isl.isl_space_copy.argtypes = [c_void_p] +isl.isl_space_free.restype = c_void_p +isl.isl_space_free.argtypes = [c_void_p] +isl.isl_space_to_str.restype = POINTER(c_char) +isl.isl_space_to_str.argtypes = [c_void_p] + +class union_access_info(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and args[0].__class__ is union_map: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_access_info_from_sink(isl.isl_union_map_copy(args[0].ptr)) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_access_info_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + ptr = isl.isl_union_access_info_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_access_info("""%s""")' % s + else: + return 'isl.union_access_info("%s")' % s + def compute_flow(arg0): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_access_info_compute_flow(isl.isl_union_access_info_copy(arg0.ptr)) + obj = union_flow(ctx=ctx, ptr=res) + return obj + def set_kill(arg0, arg1): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_access_info_set_kill(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_access_info(ctx=ctx, ptr=res) + return obj + def set_may_source(arg0, arg1): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_access_info_set_may_source(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_access_info(ctx=ctx, ptr=res) + return obj + def set_must_source(arg0, arg1): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_access_info_set_must_source(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_access_info(ctx=ctx, ptr=res) + return obj + def set_schedule(arg0, arg1): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + try: + if not arg1.__class__ is schedule: + arg1 = schedule(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_access_info_set_schedule(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_schedule_copy(arg1.ptr)) + obj = union_access_info(ctx=ctx, ptr=res) + return obj + def set_schedule_map(arg0, arg1): + try: + if not arg0.__class__ is union_access_info: + arg0 = union_access_info(arg0) + except: + raise + try: + if not arg1.__class__ is union_map: + arg1 = union_map(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_access_info_set_schedule_map(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr)) + obj = union_access_info(ctx=ctx, ptr=res) + return obj + +isl.isl_union_access_info_from_sink.restype = c_void_p +isl.isl_union_access_info_from_sink.argtypes = [c_void_p] +isl.isl_union_access_info_compute_flow.restype = c_void_p +isl.isl_union_access_info_compute_flow.argtypes = [c_void_p] +isl.isl_union_access_info_set_kill.restype = c_void_p +isl.isl_union_access_info_set_kill.argtypes = [c_void_p, c_void_p] +isl.isl_union_access_info_set_may_source.restype = c_void_p +isl.isl_union_access_info_set_may_source.argtypes = [c_void_p, c_void_p] +isl.isl_union_access_info_set_must_source.restype = c_void_p +isl.isl_union_access_info_set_must_source.argtypes = [c_void_p, c_void_p] +isl.isl_union_access_info_set_schedule.restype = c_void_p +isl.isl_union_access_info_set_schedule.argtypes = [c_void_p, c_void_p] +isl.isl_union_access_info_set_schedule_map.restype = c_void_p +isl.isl_union_access_info_set_schedule_map.argtypes = [c_void_p, c_void_p] +isl.isl_union_access_info_copy.restype = c_void_p +isl.isl_union_access_info_copy.argtypes = [c_void_p] +isl.isl_union_access_info_free.restype = c_void_p +isl.isl_union_access_info_free.argtypes = [c_void_p] +isl.isl_union_access_info_to_str.restype = POINTER(c_char) +isl.isl_union_access_info_to_str.argtypes = [c_void_p] + +class union_flow(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_flow_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ptr = isl.isl_union_flow_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_flow("""%s""")' % s + else: + return 'isl.union_flow("%s")' % s + def full_may_dependence(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_flow_get_full_may_dependence(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_full_may_dependence(arg0): + return arg0.full_may_dependence() + def full_must_dependence(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_flow_get_full_must_dependence(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_full_must_dependence(arg0): + return arg0.full_must_dependence() + def may_dependence(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_flow_get_may_dependence(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_may_dependence(arg0): + return arg0.may_dependence() + def may_no_source(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_flow_get_may_no_source(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_may_no_source(arg0): + return arg0.may_no_source() + def must_dependence(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_flow_get_must_dependence(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_must_dependence(arg0): + return arg0.must_dependence() + def must_no_source(arg0): + try: + if not arg0.__class__ is union_flow: + arg0 = union_flow(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_flow_get_must_no_source(arg0.ptr) + obj = union_map(ctx=ctx, ptr=res) + return obj + def get_must_no_source(arg0): + return arg0.must_no_source() + +isl.isl_union_flow_get_full_may_dependence.restype = c_void_p +isl.isl_union_flow_get_full_may_dependence.argtypes = [c_void_p] +isl.isl_union_flow_get_full_must_dependence.restype = c_void_p +isl.isl_union_flow_get_full_must_dependence.argtypes = [c_void_p] +isl.isl_union_flow_get_may_dependence.restype = c_void_p +isl.isl_union_flow_get_may_dependence.argtypes = [c_void_p] +isl.isl_union_flow_get_may_no_source.restype = c_void_p +isl.isl_union_flow_get_may_no_source.argtypes = [c_void_p] +isl.isl_union_flow_get_must_dependence.restype = c_void_p +isl.isl_union_flow_get_must_dependence.argtypes = [c_void_p] +isl.isl_union_flow_get_must_no_source.restype = c_void_p +isl.isl_union_flow_get_must_no_source.argtypes = [c_void_p] +isl.isl_union_flow_copy.restype = c_void_p +isl.isl_union_flow_copy.argtypes = [c_void_p] +isl.isl_union_flow_free.restype = c_void_p +isl.isl_union_flow_free.argtypes = [c_void_p] +isl.isl_union_flow_to_str.restype = POINTER(c_char) +isl.isl_union_flow_to_str.argtypes = [c_void_p] + +class union_pw_aff_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_aff_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is union_pw_aff: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_aff_list_from_union_pw_aff(isl.isl_union_pw_aff_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_pw_aff_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_pw_aff_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + ptr = isl.isl_union_pw_aff_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_pw_aff_list("""%s""")' % s + else: + return 'isl.union_pw_aff_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff: + arg1 = union_pw_aff(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_add(isl.isl_union_pw_aff_list_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr)) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_get_at(arg0.ptr, arg1) + obj = union_pw_aff(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_clear(isl.isl_union_pw_aff_list_copy(arg0.ptr)) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + try: + if not arg1.__class__ is union_pw_aff_list: + arg1 = union_pw_aff_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_concat(isl.isl_union_pw_aff_list_copy(arg0.ptr), isl.isl_union_pw_aff_list_copy(arg1.ptr)) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_drop(isl.isl_union_pw_aff_list_copy(arg0.ptr), arg1, arg2) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = union_pw_aff(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = union_pw_aff(ctx=arg0.ctx, ptr=isl.isl_union_pw_aff_copy(cb_arg0)) + cb_arg1 = union_pw_aff(ctx=arg0.ctx, ptr=isl.isl_union_pw_aff_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = union_pw_aff_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is union_pw_aff: + arg2 = union_pw_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_insert(isl.isl_union_pw_aff_list_copy(arg0.ptr), arg1, isl.isl_union_pw_aff_copy(arg2.ptr)) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + try: + if not arg2.__class__ is union_pw_aff: + arg2 = union_pw_aff(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_set_at(isl.isl_union_pw_aff_list_copy(arg0.ptr), arg1, isl.isl_union_pw_aff_copy(arg2.ptr)) + obj = union_pw_aff_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is union_pw_aff_list: + arg0 = union_pw_aff_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_pw_aff_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_union_pw_aff_list_alloc.restype = c_void_p +isl.isl_union_pw_aff_list_alloc.argtypes = [Context, c_int] +isl.isl_union_pw_aff_list_from_union_pw_aff.restype = c_void_p +isl.isl_union_pw_aff_list_from_union_pw_aff.argtypes = [c_void_p] +isl.isl_union_pw_aff_list_read_from_str.restype = c_void_p +isl.isl_union_pw_aff_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_union_pw_aff_list_add.restype = c_void_p +isl.isl_union_pw_aff_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_list_get_at.restype = c_void_p +isl.isl_union_pw_aff_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_union_pw_aff_list_clear.restype = c_void_p +isl.isl_union_pw_aff_list_clear.argtypes = [c_void_p] +isl.isl_union_pw_aff_list_concat.restype = c_void_p +isl.isl_union_pw_aff_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_union_pw_aff_list_drop.restype = c_void_p +isl.isl_union_pw_aff_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_union_pw_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_pw_aff_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_union_pw_aff_list_insert.restype = c_void_p +isl.isl_union_pw_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_union_pw_aff_list_set_at.restype = c_void_p +isl.isl_union_pw_aff_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_union_pw_aff_list_size.argtypes = [c_void_p] +isl.isl_union_pw_aff_list_copy.restype = c_void_p +isl.isl_union_pw_aff_list_copy.argtypes = [c_void_p] +isl.isl_union_pw_aff_list_free.restype = c_void_p +isl.isl_union_pw_aff_list_free.argtypes = [c_void_p] +isl.isl_union_pw_aff_list_to_str.restype = POINTER(c_char) +isl.isl_union_pw_aff_list_to_str.argtypes = [c_void_p] + +class union_set_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and args[0].__class__ is union_set: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_list_from_union_set(isl.isl_union_set_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_union_set_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_union_set_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + ptr = isl.isl_union_set_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.union_set_list("""%s""")' % s + else: + return 'isl.union_set_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + try: + if not arg1.__class__ is union_set: + arg1 = union_set(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_add(isl.isl_union_set_list_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr)) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_get_at(arg0.ptr, arg1) + obj = union_set(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_clear(isl.isl_union_set_list_copy(arg0.ptr)) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + try: + if not arg1.__class__ is union_set_list: + arg1 = union_set_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_concat(isl.isl_union_set_list_copy(arg0.ptr), isl.isl_union_set_list_copy(arg1.ptr)) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_drop(isl.isl_union_set_list_copy(arg0.ptr), arg1, arg2) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = union_set(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_set_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = union_set(ctx=arg0.ctx, ptr=isl.isl_union_set_copy(cb_arg0)) + cb_arg1 = union_set(ctx=arg0.ctx, ptr=isl.isl_union_set_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = union_set_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_union_set_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + try: + if not arg2.__class__ is union_set: + arg2 = union_set(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_insert(isl.isl_union_set_list_copy(arg0.ptr), arg1, isl.isl_union_set_copy(arg2.ptr)) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + try: + if not arg2.__class__ is union_set: + arg2 = union_set(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_set_at(isl.isl_union_set_list_copy(arg0.ptr), arg1, isl.isl_union_set_copy(arg2.ptr)) + obj = union_set_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is union_set_list: + arg0 = union_set_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_union_set_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_union_set_list_alloc.restype = c_void_p +isl.isl_union_set_list_alloc.argtypes = [Context, c_int] +isl.isl_union_set_list_from_union_set.restype = c_void_p +isl.isl_union_set_list_from_union_set.argtypes = [c_void_p] +isl.isl_union_set_list_read_from_str.restype = c_void_p +isl.isl_union_set_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_union_set_list_add.restype = c_void_p +isl.isl_union_set_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_list_get_at.restype = c_void_p +isl.isl_union_set_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_union_set_list_clear.restype = c_void_p +isl.isl_union_set_list_clear.argtypes = [c_void_p] +isl.isl_union_set_list_concat.restype = c_void_p +isl.isl_union_set_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_union_set_list_drop.restype = c_void_p +isl.isl_union_set_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_union_set_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_union_set_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_union_set_list_insert.restype = c_void_p +isl.isl_union_set_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_union_set_list_set_at.restype = c_void_p +isl.isl_union_set_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_union_set_list_size.argtypes = [c_void_p] +isl.isl_union_set_list_copy.restype = c_void_p +isl.isl_union_set_list_copy.argtypes = [c_void_p] +isl.isl_union_set_list_free.restype = c_void_p +isl.isl_union_set_list_free.argtypes = [c_void_p] +isl.isl_union_set_list_to_str.restype = POINTER(c_char) +isl.isl_union_set_list_to_str.argtypes = [c_void_p] + +class val(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_val_int_from_si(self.ctx, args[0]) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_val_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_val_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ptr = isl.isl_val_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.val("""%s""")' % s + else: + return 'isl.val("%s")' % s + def abs(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_abs(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def abs_eq(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_abs_eq(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def add(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_add(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def ceil(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_ceil(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def cmp_si(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_cmp_si(arg0.ptr, arg1) + return res + def den_si(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_get_den_si(arg0.ptr) + return res + def get_den_si(arg0): + return arg0.den_si() + def div(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_div(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def eq(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_eq(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def floor(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_floor(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def gcd(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_gcd(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def ge(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_ge(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def gt(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_gt(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + @staticmethod + def infty(): + ctx = Context.getDefaultInstance() + res = isl.isl_val_infty(ctx) + obj = val(ctx=ctx, ptr=res) + return obj + def inv(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_inv(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def is_divisible_by(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_divisible_by(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def is_infty(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_infty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_int(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_int(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_nan(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_nan(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_neg(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_neg(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_neginfty(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_neginfty(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_negone(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_negone(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_nonneg(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_nonneg(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_nonpos(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_nonpos(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_one(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_one(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_pos(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_pos(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_rat(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_rat(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def is_zero(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_is_zero(arg0.ptr) + if res < 0: + raise Error + return bool(res) + def le(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_le(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def lt(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_lt(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def max(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_max(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def min(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_min(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def mod(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_mod(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def mul(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_mul(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + @staticmethod + def nan(): + ctx = Context.getDefaultInstance() + res = isl.isl_val_nan(ctx) + obj = val(ctx=ctx, ptr=res) + return obj + def ne(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_ne(arg0.ptr, arg1.ptr) + if res < 0: + raise Error + return bool(res) + def neg(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_neg(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + @staticmethod + def neginfty(): + ctx = Context.getDefaultInstance() + res = isl.isl_val_neginfty(ctx) + obj = val(ctx=ctx, ptr=res) + return obj + @staticmethod + def negone(): + ctx = Context.getDefaultInstance() + res = isl.isl_val_negone(ctx) + obj = val(ctx=ctx, ptr=res) + return obj + def num_si(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_get_num_si(arg0.ptr) + return res + def get_num_si(arg0): + return arg0.num_si() + @staticmethod + def one(): + ctx = Context.getDefaultInstance() + res = isl.isl_val_one(ctx) + obj = val(ctx=ctx, ptr=res) + return obj + def pow2(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_pow2(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def sgn(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_sgn(arg0.ptr) + return res + def sub(arg0, arg1): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_sub(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + def to_list(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_to_list(isl.isl_val_copy(arg0.ptr)) + obj = val_list(ctx=ctx, ptr=res) + return obj + def trunc(arg0): + try: + if not arg0.__class__ is val: + arg0 = val(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_trunc(isl.isl_val_copy(arg0.ptr)) + obj = val(ctx=ctx, ptr=res) + return obj + @staticmethod + def zero(): + ctx = Context.getDefaultInstance() + res = isl.isl_val_zero(ctx) + obj = val(ctx=ctx, ptr=res) + return obj + +isl.isl_val_int_from_si.restype = c_void_p +isl.isl_val_int_from_si.argtypes = [Context, c_long] +isl.isl_val_read_from_str.restype = c_void_p +isl.isl_val_read_from_str.argtypes = [Context, c_char_p] +isl.isl_val_abs.restype = c_void_p +isl.isl_val_abs.argtypes = [c_void_p] +isl.isl_val_abs_eq.argtypes = [c_void_p, c_void_p] +isl.isl_val_add.restype = c_void_p +isl.isl_val_add.argtypes = [c_void_p, c_void_p] +isl.isl_val_ceil.restype = c_void_p +isl.isl_val_ceil.argtypes = [c_void_p] +isl.isl_val_cmp_si.argtypes = [c_void_p, c_long] +isl.isl_val_get_den_si.argtypes = [c_void_p] +isl.isl_val_div.restype = c_void_p +isl.isl_val_div.argtypes = [c_void_p, c_void_p] +isl.isl_val_eq.argtypes = [c_void_p, c_void_p] +isl.isl_val_floor.restype = c_void_p +isl.isl_val_floor.argtypes = [c_void_p] +isl.isl_val_gcd.restype = c_void_p +isl.isl_val_gcd.argtypes = [c_void_p, c_void_p] +isl.isl_val_ge.argtypes = [c_void_p, c_void_p] +isl.isl_val_gt.argtypes = [c_void_p, c_void_p] +isl.isl_val_infty.restype = c_void_p +isl.isl_val_infty.argtypes = [Context] +isl.isl_val_inv.restype = c_void_p +isl.isl_val_inv.argtypes = [c_void_p] +isl.isl_val_is_divisible_by.argtypes = [c_void_p, c_void_p] +isl.isl_val_is_infty.argtypes = [c_void_p] +isl.isl_val_is_int.argtypes = [c_void_p] +isl.isl_val_is_nan.argtypes = [c_void_p] +isl.isl_val_is_neg.argtypes = [c_void_p] +isl.isl_val_is_neginfty.argtypes = [c_void_p] +isl.isl_val_is_negone.argtypes = [c_void_p] +isl.isl_val_is_nonneg.argtypes = [c_void_p] +isl.isl_val_is_nonpos.argtypes = [c_void_p] +isl.isl_val_is_one.argtypes = [c_void_p] +isl.isl_val_is_pos.argtypes = [c_void_p] +isl.isl_val_is_rat.argtypes = [c_void_p] +isl.isl_val_is_zero.argtypes = [c_void_p] +isl.isl_val_le.argtypes = [c_void_p, c_void_p] +isl.isl_val_lt.argtypes = [c_void_p, c_void_p] +isl.isl_val_max.restype = c_void_p +isl.isl_val_max.argtypes = [c_void_p, c_void_p] +isl.isl_val_min.restype = c_void_p +isl.isl_val_min.argtypes = [c_void_p, c_void_p] +isl.isl_val_mod.restype = c_void_p +isl.isl_val_mod.argtypes = [c_void_p, c_void_p] +isl.isl_val_mul.restype = c_void_p +isl.isl_val_mul.argtypes = [c_void_p, c_void_p] +isl.isl_val_nan.restype = c_void_p +isl.isl_val_nan.argtypes = [Context] +isl.isl_val_ne.argtypes = [c_void_p, c_void_p] +isl.isl_val_neg.restype = c_void_p +isl.isl_val_neg.argtypes = [c_void_p] +isl.isl_val_neginfty.restype = c_void_p +isl.isl_val_neginfty.argtypes = [Context] +isl.isl_val_negone.restype = c_void_p +isl.isl_val_negone.argtypes = [Context] +isl.isl_val_get_num_si.argtypes = [c_void_p] +isl.isl_val_one.restype = c_void_p +isl.isl_val_one.argtypes = [Context] +isl.isl_val_pow2.restype = c_void_p +isl.isl_val_pow2.argtypes = [c_void_p] +isl.isl_val_sgn.argtypes = [c_void_p] +isl.isl_val_sub.restype = c_void_p +isl.isl_val_sub.argtypes = [c_void_p, c_void_p] +isl.isl_val_to_list.restype = c_void_p +isl.isl_val_to_list.argtypes = [c_void_p] +isl.isl_val_trunc.restype = c_void_p +isl.isl_val_trunc.argtypes = [c_void_p] +isl.isl_val_zero.restype = c_void_p +isl.isl_val_zero.argtypes = [Context] +isl.isl_val_copy.restype = c_void_p +isl.isl_val_copy.argtypes = [c_void_p] +isl.isl_val_free.restype = c_void_p +isl.isl_val_free.argtypes = [c_void_p] +isl.isl_val_to_str.restype = POINTER(c_char) +isl.isl_val_to_str.argtypes = [c_void_p] + +class val_list(object): + def __init__(self, *args, **keywords): + if "ptr" in keywords: + self.ctx = keywords["ctx"] + self.ptr = keywords["ptr"] + return + if len(args) == 1 and type(args[0]) == int: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_val_list_alloc(self.ctx, args[0]) + return + if len(args) == 1 and (args[0].__class__ is val or type(args[0]) == int): + args = list(args) + try: + if not args[0].__class__ is val: + args[0] = val(args[0]) + except: + raise + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_val_list_from_val(isl.isl_val_copy(args[0].ptr)) + return + if len(args) == 1 and type(args[0]) == str: + self.ctx = Context.getDefaultInstance() + self.ptr = isl.isl_val_list_read_from_str(self.ctx, args[0].encode('ascii')) + return + raise Error + def __del__(self): + if hasattr(self, 'ptr'): + isl.isl_val_list_free(self.ptr) + def __str__(arg0): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + ptr = isl.isl_val_list_to_str(arg0.ptr) + res = cast(ptr, c_char_p).value.decode('ascii') + libc.free(ptr) + return res + def __repr__(self): + s = str(self) + if '"' in s: + return 'isl.val_list("""%s""")' % s + else: + return 'isl.val_list("%s")' % s + def add(arg0, arg1): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + try: + if not arg1.__class__ is val: + arg1 = val(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_add(isl.isl_val_list_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr)) + obj = val_list(ctx=ctx, ptr=res) + return obj + def at(arg0, arg1): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_get_at(arg0.ptr, arg1) + obj = val(ctx=ctx, ptr=res) + return obj + def get_at(arg0, arg1): + return arg0.at(arg1) + def clear(arg0): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_clear(isl.isl_val_list_copy(arg0.ptr)) + obj = val_list(ctx=ctx, ptr=res) + return obj + def concat(arg0, arg1): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + try: + if not arg1.__class__ is val_list: + arg1 = val_list(arg1) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_concat(isl.isl_val_list_copy(arg0.ptr), isl.isl_val_list_copy(arg1.ptr)) + obj = val_list(ctx=ctx, ptr=res) + return obj + def drop(arg0, arg1, arg2): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_drop(isl.isl_val_list_copy(arg0.ptr), arg1, arg2) + obj = val_list(ctx=ctx, ptr=res) + return obj + def foreach(arg0, arg1): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = val(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg1(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb1 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_val_list_foreach(arg0.ptr, cb1, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def foreach_scc(arg0, arg1, arg2): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1, cb_arg2): + cb_arg0 = val(ctx=arg0.ctx, ptr=isl.isl_val_copy(cb_arg0)) + cb_arg1 = val(ctx=arg0.ctx, ptr=isl.isl_val_copy(cb_arg1)) + try: + res = arg1(cb_arg0, cb_arg1) + except BaseException as e: + exc_info[0] = e + return -1 + return 1 if res else 0 + cb1 = fn(cb_func) + exc_info = [None] + fn = CFUNCTYPE(c_int, c_void_p, c_void_p) + def cb_func(cb_arg0, cb_arg1): + cb_arg0 = val_list(ctx=arg0.ctx, ptr=(cb_arg0)) + try: + arg2(cb_arg0) + except BaseException as e: + exc_info[0] = e + return -1 + return 0 + cb2 = fn(cb_func) + ctx = arg0.ctx + res = isl.isl_val_list_foreach_scc(arg0.ptr, cb1, None, cb2, None) + if exc_info[0] is not None: + raise exc_info[0] + if res < 0: + raise Error + def insert(arg0, arg1, arg2): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + try: + if not arg2.__class__ is val: + arg2 = val(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_insert(isl.isl_val_list_copy(arg0.ptr), arg1, isl.isl_val_copy(arg2.ptr)) + obj = val_list(ctx=ctx, ptr=res) + return obj + def set_at(arg0, arg1, arg2): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + try: + if not arg2.__class__ is val: + arg2 = val(arg2) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_set_at(isl.isl_val_list_copy(arg0.ptr), arg1, isl.isl_val_copy(arg2.ptr)) + obj = val_list(ctx=ctx, ptr=res) + return obj + def size(arg0): + try: + if not arg0.__class__ is val_list: + arg0 = val_list(arg0) + except: + raise + ctx = arg0.ctx + res = isl.isl_val_list_size(arg0.ptr) + if res < 0: + raise Error + return int(res) + +isl.isl_val_list_alloc.restype = c_void_p +isl.isl_val_list_alloc.argtypes = [Context, c_int] +isl.isl_val_list_from_val.restype = c_void_p +isl.isl_val_list_from_val.argtypes = [c_void_p] +isl.isl_val_list_read_from_str.restype = c_void_p +isl.isl_val_list_read_from_str.argtypes = [Context, c_char_p] +isl.isl_val_list_add.restype = c_void_p +isl.isl_val_list_add.argtypes = [c_void_p, c_void_p] +isl.isl_val_list_get_at.restype = c_void_p +isl.isl_val_list_get_at.argtypes = [c_void_p, c_int] +isl.isl_val_list_clear.restype = c_void_p +isl.isl_val_list_clear.argtypes = [c_void_p] +isl.isl_val_list_concat.restype = c_void_p +isl.isl_val_list_concat.argtypes = [c_void_p, c_void_p] +isl.isl_val_list_drop.restype = c_void_p +isl.isl_val_list_drop.argtypes = [c_void_p, c_int, c_int] +isl.isl_val_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p] +isl.isl_val_list_foreach_scc.argtypes = [c_void_p, c_void_p, c_void_p, c_void_p, c_void_p] +isl.isl_val_list_insert.restype = c_void_p +isl.isl_val_list_insert.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_val_list_set_at.restype = c_void_p +isl.isl_val_list_set_at.argtypes = [c_void_p, c_int, c_void_p] +isl.isl_val_list_size.argtypes = [c_void_p] +isl.isl_val_list_copy.restype = c_void_p +isl.isl_val_list_copy.argtypes = [c_void_p] +isl.isl_val_list_free.restype = c_void_p +isl.isl_val_list_free.argtypes = [c_void_p] +isl.isl_val_list_to_str.restype = POINTER(c_char) +isl.isl_val_list_to_str.argtypes = [c_void_p] -- 2.11.4.GIT