OBJECTS := $(patsubst %.cc, ../bin/%, $(wildcard *.cc))
COBJECTS := $(patsubst %.c, ../bin/%, $(wildcard *.c))
-
+PYOBJECT := $(patsubst %.py, ../bin/%, $(wildcard *.py))
include $(BASE)/common.mk
DEPS := $(join $(addsuffix ., $(dir $(OBJECTS))), $(addsuffix .d, $(notdir $(OBJECTS))))
CPPFLAGS += -I$(BASE) -I$(BASE)/AST -I$(BASE)/Collections -I$(BASE)/Backend -I$(BASE)/Tuner
-all: $(OBJECTS) $(COBJECTS) ../bin/run.sh
+all: $(OBJECTS) $(COBJECTS) ../bin/run.sh $(PYOBJECT)
-include $(DEPS)
../bin/run.sh: run.sh
cp run.sh ../bin/run.sh
+../bin/%: %.py
+ cp $< ../bin/$<
clean::
rm -f $(OBJECTS) $(COBJECTS) $(DEPS) ../bin/run.sh
#define SATC_EQUALS 0
int main (int num, char** args){
- void* solver = CreateCCSolver();
+ void* solver = createCCSolver();
long set1[] = {0, 1, 2};
long set2[] = {3, 1, 7};
void *s1 = createSet(solver,0, set1, 3);
--- /dev/null
+import pycsolver as ps
+from ctypes import *
+
+SATC_EQUALS = 0
+
+def main():
+ csolverlb = ps.loadCSolver()
+ solver = csolverlb.createCCSolver()
+ s1 = [0, 1, 2]
+ set1 = (c_long * len(s1))(*s1)
+ s2 = [3, 1, 7]
+ set2 = (c_long*len(s2))(*s2)
+ s1 = csolverlb.createSet(solver,c_uint(0), set1, c_uint(3))
+ s2 = csolverlb.createSet(solver,0, set2, 3)
+ e1 = csolverlb.getElementVar(solver,s1)
+ e2 = csolverlb.getElementVar(solver,s2)
+ d = [s1, s2]
+ domain = (c_void_p*len(d))(*d)
+ equals = csolverlb.createPredicateOperator(solver,c_uint(SATC_EQUALS), domain, c_uint(2));
+ inp = [e1, e2];
+ inputs = (c_void_p*len(inp))(*inp)
+ b = csolverlb.applyPredicate(solver,equals, inputs, c_uint(2));
+ csolverlb.addConstraint(solver,b);
+ if csolverlb.solve(solver) == 1:
+ print "e1="+ str(csolverlb.getElementValue(solver, e1)) + "\te2=" + str(csolverlb.getElementValue(solver, e2));
+ else:
+ print "UNSAT";
+
+ csolverlb.deleteCCSolver(solver)
+
+
+
+if __name__== "__main__":
+ main()
+
#define CCSOLVER(solver) ((CSolver*)solver)
-void* CreateCCSolver(){
+void* createCCSolver(){
return (void*) new CSolver();
}
void deleteCCSolver(void* solver){
delete CCSOLVER(solver);
}
-void *createSet(void* solver,unsigned int type, void *elements, unsigned int num){
+void *createSet(void* solver,unsigned int type, long *elements, unsigned int num){
return CCSOLVER(solver)->createSet((VarType) type, (uint64_t *)elements, (uint) num);
}
return CCSOLVER(solver)->createFunctionOperator((ArithOp) op, (Set **)domain, (uint) numDomain, (Set *)range, (OverFlowBehavior) overflowbehavior);
}
-void *createPredicateOperator(void* solver,unsigned int op, void *domain, unsigned int numDomain){
+void *createPredicateOperator(void* solver,unsigned int op, void **domain, unsigned int numDomain){
return CCSOLVER(solver)->createPredicateOperator((CompOp) op, (Set **)domain, (uint) numDomain);
}
#ifdef __cplusplus
extern "C" {
#endif
-void* CreateCCSolver();
+void* createCCSolver();
void deleteCCSolver(void* solver);
-void *createSet(void* solver,unsigned int type, void *elements, unsigned int num);
+void *createSet(void* solver,unsigned int type, long *elements, unsigned int num);
void *createRangeSet(void* solver,unsigned int type, long lowrange, long highrange);
void *createRangeVar(void* solver,unsigned type, long lowrange, long highrange);
void *createMutableSet(void* solver,unsigned type);
void *getElementRange (void* solver,void *element);
void* getBooleanVar(void* solver,unsigned int type);
void *createFunctionOperator(void* solver,unsigned int op, void *domain, unsigned int numDomain, void *range,unsigned int overflowbehavior);
-void *createPredicateOperator(void* solver,unsigned int op, void *domain, unsigned int numDomain);
+void *createPredicateOperator(void* solver,unsigned int op, void **domain, unsigned int numDomain);
void *createPredicateTable(void* solver,void *table, unsigned int behavior);
void *createTable(void* solver,void*domains, unsigned int numDomain, void *range);
void *createTableForPredicate(void* solver,void*domains, unsigned int numDomain);
--- /dev/null
+from ctypes import *
+
+def loadCSolver():
+ csolverlb = cdll.LoadLibrary("lib_cons_comp.so")
+ csolverlb.createCCSolver.restype = c_void_p
+ csolverlb.createSet.argtypes = [c_void_p, c_uint, POINTER(c_long), c_uint]
+ csolverlb.createSet.restype = c_void_p
+ csolverlb.getElementVar.argtypes = [c_void_p, c_void_p]
+ csolverlb.getElementVar.restype = c_void_p
+ csolverlb.createPredicateOperator.argtypes = [c_void_p, c_uint, POINTER(c_void_p), c_uint]
+ csolverlb.createPredicateOperator.restype = c_void_p
+ csolverlb.applyPredicate.argtypes = [c_void_p, c_void_p, POINTER(c_void_p), c_uint]
+ csolverlb.applyPredicate.restype = c_void_p
+ csolverlb.addConstraint.argtypes = [c_void_p, c_void_p]
+ csolverlb.addConstraint.restype = None
+ csolverlb.solve.argtypes = [c_void_p]
+ csolverlb.solve.restype = c_int
+ csolverlb.getElementValue.argtypes = [c_void_p, c_void_p]
+ csolverlb.getElementValue.restype = c_long
+ csolverlb.deleteCCSolver.argtypes = [c_void_p]
+ csolverlb.deleteCCSolver.restype = None
+ return csolverlb
+