diff --git a/.gitmodules b/.gitmodules index 5291ebd9d8a81aba72fb3c71ce52d0c06e719a95..ead9d3de57ff04a1eeea14d455fd1cf1c7e61c5e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "isl"] path = isl - url = git://github.com/inducer/isl + url = http://repo.or.cz/r/isl.git [submodule "bpl-subset"] path = bpl-subset url = git://github.com/inducer/bpl-subset diff --git a/doc/index.rst b/doc/index.rst index 46271a19777ccd2b3e024a1e3fb0f8630233e962..8299589001168b0b50b557be674aa327d5eed111 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -20,6 +20,20 @@ It also includes an ILP solver based on generalized basis reduction, transitive closures on maps (which may encode infinite graphs), dependence analysis and bounds on piecewise step-polynomials. +.. note:: + + After the 2011.2 release of islpy, one more aspect of the islpy interface + has changed, namely that the constant in a constraint is now set as the '1' + key in a coefficient dictionary in + :meth:`islpy.Constraint.eq_from_names`, + :meth:`islpy.Constraint.ineq_from_names`, and + :meth:`islpy.Constraint.set_coefficients_by_name`. + + This documentation reflects the in-development state of the interface in + version control, as it will be--not as it is in the released version + 2011.2. If you would like to use the software that's described here, get a + current checkout from `github `_. + Now you obviously want to watch the library do something (at least mildly) cool? Well, sit back and watch:: @@ -29,10 +43,10 @@ cool? Well, sit back and watch:: dim = isl.Dim.create_from_names(ctx, set=["x", "y"]) bset = (isl.BasicSet.universe(dim) - .add_constraint(isl.Constraint.ineq_from_names(dim, -1, dict(x=1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, 5, dict(x=-1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, -1, dict(y=1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, 5, dict(y=-1)))) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: -1, "x":1})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: 5, "x":-1})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: -1, "y": 1})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: 5, "y": -1}))) print "set 1:", bset bset2 = isl.BasicSet.read_from_str(ctx, diff --git a/doc/reference.rst b/doc/reference.rst index ba40a1916b3a3a02625e4526326b21c20a4a7de7..92e3029b267ce4f15ee2fc2cc3c8186d7a9e3b45 100644 --- a/doc/reference.rst +++ b/doc/reference.rst @@ -288,6 +288,6 @@ Output Convenience ----------- -.. autofunc:: project_out_except +.. autofunction:: project_out_except .. vim: sw=4 diff --git a/example/demo.py b/example/demo.py index 93a4931a51c527c8e05d71af2db10be30c46a32f..23a8ee44ce19b6ba9bbf4cad6b460b1eeda16116 100644 --- a/example/demo.py +++ b/example/demo.py @@ -4,10 +4,10 @@ ctx = isl.Context() dim = isl.Dim.create_from_names(ctx, set=["x", "y"]) bset = (isl.BasicSet.universe(dim) - .add_constraint(isl.Constraint.ineq_from_names(dim, -1, dict(x=1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, 5, dict(x=-1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, -1, dict(y=1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, 5, dict(y=-1)))) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: -1, "x":1})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: 5, "x":-1})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: -1, "y": 1})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {1: 5, "y": -1}))) print "set 1:", bset bset2 = isl.BasicSet.read_from_str(ctx, diff --git a/gen_wrap.py b/gen_wrap.py index ee73f685d4b67abd4aa9a88adaaca6904ec5bbce..d283716992f27ed43d827566cba6c09005dd38ee 100644 --- a/gen_wrap.py +++ b/gen_wrap.py @@ -75,8 +75,8 @@ class Method: CLASSES = [ - "basic_set_list", "set_list", "aff_list", "band_list", - "printer", "mat", "vec", + "basic_set_list", "set_list", "aff_list", "pw_aff_list", "band_list", + "printer", "mat", "vec", "id", "aff", "pw_aff", "div", "dim", "constraint", "local_space", diff --git a/isl b/isl index d30e0704d8fd2b5c4ded2ee7fc2465ed61bde248..3fbc27ff19492e6ae0975ac26d006a7d93ebe39b 160000 --- a/isl +++ b/isl @@ -1 +1 @@ -Subproject commit d30e0704d8fd2b5c4ded2ee7fc2465ed61bde248 +Subproject commit 3fbc27ff19492e6ae0975ac26d006a7d93ebe39b diff --git a/isl_list.h b/isl_list.h index 22b6a62f027fe9ea8faa5646de78bd1259239a1f..e499b49ea3a0f52adab3c1d67c934ec554d6550f 100644 --- a/isl_list.h +++ b/isl_list.h @@ -1,4 +1,5 @@ -struct isl_basic_set; struct isl_basic_set_list; typedef struct isl_basic_set_list isl_basic_set_list; isl_ctx *isl_basic_set_list_get_ctx(__isl_keep isl_basic_set_list *list); __isl_give isl_basic_set_list *isl_basic_set_list_alloc(isl_ctx *ctx, int n); __isl_give isl_basic_set_list *isl_basic_set_list_copy( __isl_keep isl_basic_set_list *list); void isl_basic_set_list_free(__isl_take isl_basic_set_list *list); __isl_give isl_basic_set_list *isl_basic_set_list_add( __isl_take isl_basic_set_list *list, __isl_take struct isl_basic_set *el); int isl_basic_set_list_n_basic_set(__isl_keep isl_basic_set_list *list); __isl_give struct isl_basic_set *isl_basic_set_list_get_basic_set( __isl_keep isl_basic_set_list *list, int index); int isl_basic_set_list_foreach(__isl_keep isl_basic_set_list *list, int (*fn)(__isl_take struct isl_basic_set *el, void *user), void *user); __isl_give isl_printer *isl_printer_print_basic_set_list( __isl_take isl_printer *p, __isl_keep isl_basic_set_list *list); void isl_basic_set_list_dump(__isl_keep isl_basic_set_list *list); -struct isl_set; struct isl_set_list; typedef struct isl_set_list isl_set_list; isl_ctx *isl_set_list_get_ctx(__isl_keep isl_set_list *list); __isl_give isl_set_list *isl_set_list_alloc(isl_ctx *ctx, int n); __isl_give isl_set_list *isl_set_list_copy( __isl_keep isl_set_list *list); void isl_set_list_free(__isl_take isl_set_list *list); __isl_give isl_set_list *isl_set_list_add( __isl_take isl_set_list *list, __isl_take struct isl_set *el); int isl_set_list_n_set(__isl_keep isl_set_list *list); __isl_give struct isl_set *isl_set_list_get_set( __isl_keep isl_set_list *list, int index); int isl_set_list_foreach(__isl_keep isl_set_list *list, int (*fn)(__isl_take struct isl_set *el, void *user), void *user); __isl_give isl_printer *isl_printer_print_set_list( __isl_take isl_printer *p, __isl_keep isl_set_list *list); void isl_set_list_dump(__isl_keep isl_set_list *list); -struct isl_aff; struct isl_aff_list; typedef struct isl_aff_list isl_aff_list; isl_ctx *isl_aff_list_get_ctx(__isl_keep isl_aff_list *list); __isl_give isl_aff_list *isl_aff_list_alloc(isl_ctx *ctx, int n); __isl_give isl_aff_list *isl_aff_list_copy( __isl_keep isl_aff_list *list); void isl_aff_list_free(__isl_take isl_aff_list *list); __isl_give isl_aff_list *isl_aff_list_add( __isl_take isl_aff_list *list, __isl_take struct isl_aff *el); int isl_aff_list_n_aff(__isl_keep isl_aff_list *list); __isl_give struct isl_aff *isl_aff_list_get_aff( __isl_keep isl_aff_list *list, int index); int isl_aff_list_foreach(__isl_keep isl_aff_list *list, int (*fn)(__isl_take struct isl_aff *el, void *user), void *user); __isl_give isl_printer *isl_printer_print_aff_list( __isl_take isl_printer *p, __isl_keep isl_aff_list *list); void isl_aff_list_dump(__isl_keep isl_aff_list *list); -struct isl_band; struct isl_band_list; typedef struct isl_band_list isl_band_list; isl_ctx *isl_band_list_get_ctx(__isl_keep isl_band_list *list); __isl_give isl_band_list *isl_band_list_alloc(isl_ctx *ctx, int n); __isl_give isl_band_list *isl_band_list_copy( __isl_keep isl_band_list *list); void isl_band_list_free(__isl_take isl_band_list *list); __isl_give isl_band_list *isl_band_list_add( __isl_take isl_band_list *list, __isl_take struct isl_band *el); int isl_band_list_n_band(__isl_keep isl_band_list *list); __isl_give struct isl_band *isl_band_list_get_band( __isl_keep isl_band_list *list, int index); int isl_band_list_foreach(__isl_keep isl_band_list *list, int (*fn)(__isl_take struct isl_band *el, void *user), void *user); __isl_give isl_printer *isl_printer_print_band_list( __isl_take isl_printer *p, __isl_keep isl_band_list *list); void isl_band_list_dump(__isl_keep isl_band_list *list); +struct isl_basic_set; struct isl_basic_set_list; typedef struct isl_basic_set_list isl_basic_set_list; isl_ctx *isl_basic_set_list_get_ctx( isl_basic_set_list *list); isl_basic_set_list *isl_basic_set_list_from_basic_set( struct isl_basic_set *el); isl_basic_set_list *isl_basic_set_list_alloc(isl_ctx *ctx, int n); isl_basic_set_list *isl_basic_set_list_copy( isl_basic_set_list *list); void *isl_basic_set_list_free( isl_basic_set_list *list); isl_basic_set_list *isl_basic_set_list_add( isl_basic_set_list *list, struct isl_basic_set *el); isl_basic_set_list *isl_basic_set_list_concat( isl_basic_set_list *list1, isl_basic_set_list *list2); int isl_basic_set_list_n_basic_set( isl_basic_set_list *list); struct isl_basic_set *isl_basic_set_list_get_basic_set( isl_basic_set_list *list, int index); int isl_basic_set_list_foreach( isl_basic_set_list *list, int (*fn)( struct isl_basic_set *el, void *user), void *user); isl_printer *isl_printer_print_basic_set_list( isl_printer *p, isl_basic_set_list *list); void isl_basic_set_list_dump( isl_basic_set_list *list); +struct isl_set; struct isl_set_list; typedef struct isl_set_list isl_set_list; isl_ctx *isl_set_list_get_ctx( isl_set_list *list); isl_set_list *isl_set_list_from_set( struct isl_set *el); isl_set_list *isl_set_list_alloc(isl_ctx *ctx, int n); isl_set_list *isl_set_list_copy( isl_set_list *list); void *isl_set_list_free( isl_set_list *list); isl_set_list *isl_set_list_add( isl_set_list *list, struct isl_set *el); isl_set_list *isl_set_list_concat( isl_set_list *list1, isl_set_list *list2); int isl_set_list_n_set( isl_set_list *list); struct isl_set *isl_set_list_get_set( isl_set_list *list, int index); int isl_set_list_foreach( isl_set_list *list, int (*fn)( struct isl_set *el, void *user), void *user); isl_printer *isl_printer_print_set_list( isl_printer *p, isl_set_list *list); void isl_set_list_dump( isl_set_list *list); +struct isl_aff; struct isl_aff_list; typedef struct isl_aff_list isl_aff_list; isl_ctx *isl_aff_list_get_ctx( isl_aff_list *list); isl_aff_list *isl_aff_list_from_aff( struct isl_aff *el); isl_aff_list *isl_aff_list_alloc(isl_ctx *ctx, int n); isl_aff_list *isl_aff_list_copy( isl_aff_list *list); void *isl_aff_list_free( isl_aff_list *list); isl_aff_list *isl_aff_list_add( isl_aff_list *list, struct isl_aff *el); isl_aff_list *isl_aff_list_concat( isl_aff_list *list1, isl_aff_list *list2); int isl_aff_list_n_aff( isl_aff_list *list); struct isl_aff *isl_aff_list_get_aff( isl_aff_list *list, int index); int isl_aff_list_foreach( isl_aff_list *list, int (*fn)( struct isl_aff *el, void *user), void *user); isl_printer *isl_printer_print_aff_list( isl_printer *p, isl_aff_list *list); void isl_aff_list_dump( isl_aff_list *list); +struct isl_pw_aff; struct isl_pw_aff_list; typedef struct isl_pw_aff_list isl_pw_aff_list; isl_ctx *isl_pw_aff_list_get_ctx( isl_pw_aff_list *list); isl_pw_aff_list *isl_pw_aff_list_from_pw_aff( struct isl_pw_aff *el); isl_pw_aff_list *isl_pw_aff_list_alloc(isl_ctx *ctx, int n); isl_pw_aff_list *isl_pw_aff_list_copy( isl_pw_aff_list *list); void *isl_pw_aff_list_free( isl_pw_aff_list *list); isl_pw_aff_list *isl_pw_aff_list_add( isl_pw_aff_list *list, struct isl_pw_aff *el); isl_pw_aff_list *isl_pw_aff_list_concat( isl_pw_aff_list *list1, isl_pw_aff_list *list2); int isl_pw_aff_list_n_pw_aff( isl_pw_aff_list *list); struct isl_pw_aff *isl_pw_aff_list_get_pw_aff( isl_pw_aff_list *list, int index); int isl_pw_aff_list_foreach( isl_pw_aff_list *list, int (*fn)( struct isl_pw_aff *el, void *user), void *user); isl_printer *isl_printer_print_pw_aff_list( isl_printer *p, isl_pw_aff_list *list); void isl_pw_aff_list_dump( isl_pw_aff_list *list); +struct isl_band; struct isl_band_list; typedef struct isl_band_list isl_band_list; isl_ctx *isl_band_list_get_ctx( isl_band_list *list); isl_band_list *isl_band_list_from_band( struct isl_band *el); isl_band_list *isl_band_list_alloc(isl_ctx *ctx, int n); isl_band_list *isl_band_list_copy( isl_band_list *list); void *isl_band_list_free( isl_band_list *list); isl_band_list *isl_band_list_add( isl_band_list *list, struct isl_band *el); isl_band_list *isl_band_list_concat( isl_band_list *list1, isl_band_list *list2); int isl_band_list_n_band( isl_band_list *list); struct isl_band *isl_band_list_get_band( isl_band_list *list, int index); int isl_band_list_foreach( isl_band_list *list, int (*fn)( struct isl_band *el, void *user), void *user); isl_printer *isl_printer_print_band_list( isl_printer *p, isl_band_list *list); void isl_band_list_dump( isl_band_list *list); diff --git a/islpy/__init__.py b/islpy/__init__.py index 4440f607b35c670095926c8360261d257968a2ae..08a49dd8421a525be0cb96f0f10a51dae1f1d5c7 100644 --- a/islpy/__init__.py +++ b/islpy/__init__.py @@ -104,13 +104,16 @@ def _add_functionality(): :param args: :class:`list` of coefficients, for indices `0..len(args)-1`. """ for i, coeff in enumerate(args): - self.set_coefficient(dim_tp, i, coeff) + self = self.set_coefficient(dim_tp, i, coeff) return self def constraint_set_coefficients_by_name(self, iterable): - """ - :param iterable: a :class:`dict` or iterable of :class:`tuple` instances mapping variable names to their coefficients + """Set the coefficients and the constant of the constraint. + + :param iterable: a :class:`dict` or iterable of :class:`tuple` + instances mapping variable names to their coefficients. + The constant is set to the value of the key '1'. """ try: iterable = iterable.iteritems() @@ -121,10 +124,10 @@ def _add_functionality(): for name, coeff in iterable: if name == 1: - self.set_constant(coeff) + self = self.set_constant(coeff) else: tp, idx = var2idx[name] - self.set_coefficient(tp, idx, coeff) + self = self.set_coefficient(tp, idx, coeff) return self diff --git a/islpy/version.py b/islpy/version.py index 0134479d3672e5e06d0ffe6cf105cf32d2538723..278a2c2da3be3007170600c0bc5f98e36c789e43 100644 --- a/islpy/version.py +++ b/islpy/version.py @@ -1,3 +1,3 @@ -VERSION = (2011, 2) +VERSION = (2011, 3) VERSION_TEXT = ".".join(str(i) for i in VERSION) diff --git a/regenerate-isl-list.sh b/regenerate-isl-list.sh new file mode 100755 index 0000000000000000000000000000000000000000..3e1a1ce01d08fcea4db68195a9eaaa054a52ed25 --- /dev/null +++ b/regenerate-isl-list.sh @@ -0,0 +1,6 @@ +#! /bin/bash + +cc -E -Iisl/include -Iisl-generated isl/include/isl/list.h -o isl_list.h +echo "now chop away the non-list related stuff in isl_list.h, starting vim [Enter]" +read INPUT +vim isl_list.h diff --git a/src/wrapper/wrap_isl.cpp b/src/wrapper/wrap_isl.cpp index 5bbca3dc60dd601114cff5784735f8816d41dcd9..a8ae16d1fbc438da7caaa467277bed527b7a4f90 100644 --- a/src/wrapper/wrap_isl.cpp +++ b/src/wrapper/wrap_isl.cpp @@ -118,6 +118,7 @@ namespace isl WRAP_CLASS(printer); WRAP_CLASS(mat); WRAP_CLASS(vec); + WRAP_CLASS(id); WRAP_CLASS(aff); WRAP_CLASS(pw_aff); @@ -150,6 +151,7 @@ namespace isl WRAP_CLASS(basic_set_list); WRAP_CLASS(set_list); WRAP_CLASS(aff_list); + WRAP_CLASS(pw_aff_list); WRAP_CLASS(band_list); WRAP_CLASS(band); @@ -255,6 +257,7 @@ BOOST_PYTHON_MODULE(_isl) MAKE_WRAP(printer, Printer); MAKE_WRAP(mat, Mat); MAKE_WRAP(vec, Vec); + MAKE_WRAP(id, Id); MAKE_WRAP(aff, Aff); MAKE_WRAP(pw_aff, PwAff); @@ -290,6 +293,7 @@ BOOST_PYTHON_MODULE(_isl) MAKE_WRAP(basic_set_list, BasicSetList); MAKE_WRAP(set_list, SetList); MAKE_WRAP(aff_list, AffList); + MAKE_WRAP(pw_aff_list, PwAffList); MAKE_WRAP(band_list, BandList); MAKE_WRAP(access_info, AccessInfo); diff --git a/test/test_isl.py b/test/test_isl.py index bef1ad95d843323ca956aee9a8da8378c10ebdda..85bf24c4b70b6ba2409de776db67d1eca7a7df32 100644 --- a/test/test_isl.py +++ b/test/test_isl.py @@ -15,11 +15,10 @@ def test_basics(): dim = isl.Dim.create_from_names(ctx, set=["a", "b"]) bset = (isl.BasicSet.universe(dim) - .add_constraint(isl.Constraint.eq_from_names(dim, 0, dict(a=-1, b=2))) - .add_constraint(isl.Constraint.ineq_from_names(dim, -10, dict(a=1))) - .add_constraint(isl.Constraint.ineq_from_names(dim, 42, dict(a=-1))) + .add_constraint(isl.Constraint.eq_from_names(dim, {"a":-1, "b": 2})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {"a":1, 1:-10})) + .add_constraint(isl.Constraint.ineq_from_names(dim, {"a":-1, 1: 42})) .project_out(dt.set, 1, 1)) - print bset bset2 = isl.BasicSet.read_from_str(ctx, "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}", nparam=-1)