From 5ede66e318c7167703738c8f7aac822c2a96ede5 Mon Sep 17 00:00:00 2001 From: Julius Date: Sun, 16 Jul 2023 14:56:52 +0200 Subject: [PATCH 001/155] init dreal4 --- .idea/codeStyles/Project.xml | 185 + .idea/codeStyles/codeStyleConfig.xml | 5 + .../java_smt/SolverContextFactory.java | 3 +- .../dreal4/DReal4BooleanFormulaManager.java | 182 + .../solvers/dreal4/DReal4Formula.java | 90 + .../solvers/dreal4/DReal4FormulaCreator.java | 85 + .../solvers/dreal4/DReal4FormulaManager.java | 60 + .../dreal4/DReal4IntegerFormulaManager.java | 41 + .../dreal4/DReal4NumeralFormulaManager.java | 265 + .../dreal4/DReal4RationalFormulaManager.java | 42 + .../solvers/dreal4/DReal4SolverContext.java | 110 + .../solvers/dreal4/DReal4TheoremProver.java | 104 + .../solvers/dreal4/DReal4UFManager.java | 33 + .../java_smt/solvers/dreal4/DRealTerm.java | 81 + .../java_smt/solvers/dreal4/Documentation.md | 39 + .../java_smt/solvers/dreal4/drealjni/Box.java | 154 + .../solvers/dreal4/drealjni/BoxBoxPair.java | 101 + .../solvers/dreal4/drealjni/Config.java | 349 + .../solvers/dreal4/drealjni/Context.java | 189 + .../solvers/dreal4/drealjni/Documentation.md | 311 + .../dreal4/drealjni/DoubleIntPair.java | 99 + .../solvers/dreal4/drealjni/Environment.java | 151 + .../solvers/dreal4/drealjni/Expression.java | 196 + .../dreal4/drealjni/ExpressionDoubleMap.java | 266 + .../drealjni/ExpressionExpressionMap.java | 265 + .../dreal4/drealjni/ExpressionKind.java | 97 + .../dreal4/drealjni/ExpressionVector.java | 175 + .../solvers/dreal4/drealjni/Formula.java | 164 + .../solvers/dreal4/drealjni/FormulaKind.java | 84 + .../solvers/dreal4/drealjni/FormulaSet.java | 258 + .../dreal4/drealjni/FormulaVector.java | 175 + .../solvers/dreal4/drealjni/Logic.java | 82 + .../dreal4/drealjni/OptionValueBool.java | 148 + .../dreal4/drealjni/OptionValueDouble.java | 148 + .../dreal4/drealjni/OptionValueInt.java | 148 + .../drealjni/OptionValueUnsignedInt.java | 145 + .../dreal4/drealjni/Program_synthesis.java | 80 + .../dreal4/drealjni/RelationalOperator.java | 77 + ...orT_dreal__drake__symbolic__Formula_t.java | 49 + .../dreal4/drealjni/SWIGTYPE_p_bool.java | 49 + .../dreal4/drealjni/SWIGTYPE_p_double.java | 49 + ...lueT_dreal__Config__SatDefaultPhase_t.java | 49 + ...onst_R_dreal__Box_p_dreal__Box_pF_t_t.java | 49 + .../drealjni/SWIGTYPE_p_ibex__Interval.java | 49 + .../SWIGTYPE_p_ibex__IntervalVector.java | 49 + .../dreal4/drealjni/SWIGTYPE_p_int.java | 49 + .../SWIGTYPE_p_optionalT_dreal__Box_t.java | 49 + .../SWIGTYPE_p_optionalT_std__string_t.java | 49 + ...__drake__symbolic__Formula_const_RF_t.java | 49 + ..._const_R_dreal__Box_p_dreal__Box_pF_t.java | 49 + ...tT_dreal__drake__symbolic__Variable_t.java | 50 + ..._symbolic__Variable_t_t__value_type_t.java | 49 + .../drealjni/SWIGTYPE_p_std__ostream.java | 49 + ..._symbolic__Variable_t__const_iterator.java | 49 + ...c__Variable_t__const_reverse_iterator.java | 49 + ...drake__symbolic__Variable_t__iterator.java | 49 + ...ymbolic__Variable_t__reverse_iterator.java | 49 + ...rake__symbolic__Variable_t__size_type.java | 49 + ..._dreal__drake__symbolic__Variable_t_t.java | 49 + ...ymbolic__Variable_t_t__const_iterator.java | 49 + ...ake__symbolic__Variable_t_t__iterator.java | 49 + ..._dreal__drake__symbolic__Variable_t_t.java | 49 + ..._dreal__drake__symbolic__Variable_t_t.java | 49 + .../dreal4/drealjni/SWIGTYPE_p_uint32_t.java | 49 + .../drealjni/SharedPointerToUnorderedMap.java | 74 + ...redPointerToUnorderedMapWithHashValue.java | 74 + .../drealjni/SharedPointerToVector.java | 74 + .../solvers/dreal4/drealjni/Variable.java | 173 + .../dreal4/drealjni/VariableVector.java | 175 + .../solvers/dreal4/drealjni/Variables.java | 182 + .../drealjni/VaribaleIntUnorderedMap.java | 264 + .../solvers/dreal4/drealjni/dreal.java | 791 ++ .../solvers/dreal4/drealjni/drealJNI.java | 633 + .../solvers/dreal4/drealjni/dreal_wrap.cxx | 11840 ++++++++++++++++ .../solvers/dreal4/drealjni/dreal_wrap.o | Bin 0 -> 1736592 bytes 75 files changed, 20741 insertions(+), 1 deletion(-) create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4IntegerFormulaManager.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4RationalFormulaManager.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Box.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/BoxBoxPair.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Config.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/DoubleIntPair.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Environment.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionDoubleMap.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionExpressionMap.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionKind.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionVector.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaKind.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaSet.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaVector.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Logic.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueBool.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueDouble.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueInt.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueUnsignedInt.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/RelationalOperator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_bool.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_double.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__Interval.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__IntervalVector.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_int.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_dreal__Box_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_std__string_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__ostream.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_uint32_t.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMap.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMapWithHashValue.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToVector.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variable.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableVector.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variables.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VaribaleIntUnorderedMap.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000000..2e6e4da19a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,185 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000000..79ee123c2b --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/org/sosy_lab/java_smt/SolverContextFactory.java b/src/org/sosy_lab/java_smt/SolverContextFactory.java index 500beb11cf..695f81d203 100644 --- a/src/org/sosy_lab/java_smt/SolverContextFactory.java +++ b/src/org/sosy_lab/java_smt/SolverContextFactory.java @@ -55,7 +55,8 @@ public enum Solvers { BOOLECTOR, CVC4, CVC5, - YICES2 + YICES2, + DREAL4 } @Option(secure = true, description = "Export solver queries in SmtLib format into a file.") diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java new file mode 100644 index 0000000000..8aeb8fbd4a --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -0,0 +1,182 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import org.sosy_lab.java_smt.basicimpl.AbstractBooleanFormulaManager; +import org.sosy_lab.java_smt.basicimpl.FormulaCreator; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; + + +public class DReal4BooleanFormulaManager + extends AbstractBooleanFormulaManager { + + protected DReal4BooleanFormulaManager(FormulaCreator pCreator) { + super(pCreator); + } + + @Override + protected DRealTerm makeVariableImpl(String pVar) { + return formulaCreator.makeVariable(getFormulaCreator().getBoolType(), pVar); + } + + @Override + protected DRealTerm makeBooleanImpl(boolean value) { + if (value) { + return new DRealTerm(null, null, Formula.True()); + } else { + return new DRealTerm(null, null, Formula.False()); + } + } + + @Override + protected DRealTerm not(DRealTerm pParam1) { + if (pParam1.isFormula()) { + return new DRealTerm(null, null, dreal.Not(pParam1.getFormula())); + } else if (pParam1.isVar()) { + return new DRealTerm(null, null, dreal.Not(pParam1.getVariable())); + } else { + throw new UnsupportedOperationException("dReal does not support not on Expressions."); + } + } + + @Override + protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isFormula()) { + return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getFormula())); + } else if (pParam1.isFormula() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getVariable())); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getVariable())); + } else if (pParam1.isFormula() && pParam2.isFormula()) { + return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getFormula())); + } else { + throw new UnsupportedOperationException("dReal does not support and on Expressions."); + } + } + + @Override + protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isFormula()) { + return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getFormula())); + } else if (pParam1.isFormula() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getVariable())); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getVariable())); + } else if (pParam1.isFormula() && pParam2.isFormula()) { + return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getFormula())); + } else { + throw new UnsupportedOperationException("dReal does not support or on Expressions."); + } + } + + // a xor b = (NOT(A AND B)) AND (NOT(NOT A AND NOT B)) + @Override + protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isFormula()) { + return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), + pParam2.getFormula())), + dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), + dreal.Not(pParam2.getFormula()))))); + } else if (pParam1.isFormula() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), + pParam2.getVariable())), + dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), + dreal.Not(pParam2.getVariable()))))); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), + pParam2.getVariable())), + dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), + dreal.Not(pParam2.getVariable()))))); + } else if (pParam1.isFormula() && pParam2.isFormula()) { + return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), + pParam2.getFormula())), + dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), + dreal.Not(pParam2.getFormula()))))); + } else { + throw new UnsupportedOperationException("dReal does not support xor on Expressions."); + } + } + + @Override + protected DRealTerm equivalence(DRealTerm bits1, DRealTerm bits2) { + if (bits1.isVar() && bits2.isFormula()) { + return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getFormula())); + } else if (bits1.isFormula() && bits2.isVar()) { + return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getVariable())); + } else if (bits1.isVar() && bits2.isVar()) { + return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getVariable())); + } else if (bits1.isFormula() && bits2.isFormula()) { + return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getFormula())); + } else { + throw new UnsupportedOperationException("dReal does not support iff on Expressions."); + } + } + + @Override + protected boolean isTrue(DRealTerm bits) { + if (bits.isFormula()) { + return dreal.is_true(bits.getFormula()); + } else { + throw new UnsupportedOperationException("dReal does not support isTrue on " + + "Variables and Expressions."); + } + } + + @Override + protected boolean isFalse(DRealTerm bits) { + if (bits.isFormula()) { + return dreal.is_false(bits.getFormula()); + } else { + throw new UnsupportedOperationException("dReal does not support isTrue on " + + "Variables and Expressions."); + } + } + + @Override + protected DRealTerm ifThenElse(DRealTerm cond, DRealTerm f1, DRealTerm f2) { + if (cond.isFormula()) { + if (dreal.is_true(cond.getFormula())) { + if (f1.isVar()) { + return new DRealTerm(f1.getVariable(), null, null); + } else if (f1.isExp()) { + return new DRealTerm(null, f1.getExpression(), null); + } else { + return new DRealTerm(null, null, f1.getFormula()); + } + } else { + if (f2.isVar()) { + return new DRealTerm(f2.getVariable(), null, null); + } else if (f2.isExp()) { + return new DRealTerm(null, f2.getExpression(), null); + } else { + return new DRealTerm(null, null, f2.getFormula()); + } + } + } else { + throw new UnsupportedOperationException("dReal does not suppord ifThenElse with first " + + "argument beeing not a Formula."); + } + } + +} \ No newline at end of file diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java new file mode 100644 index 0000000000..912bed2087 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java @@ -0,0 +1,90 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; +import org.sosy_lab.java_smt.api.BooleanFormula; +import org.sosy_lab.java_smt.api.Formula; +import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula; +import org.sosy_lab.java_smt.api.NumeralFormula.RationalFormula; + +abstract class DReal4Formula implements Formula { + + private final DRealTerm term; + + DReal4Formula(DRealTerm pTerm) { + this.term = pTerm; + } + + final DRealTerm getTerm() { + return term; + } + + @Override + public final boolean equals(Object o) { + if ( o == this) { + return true; + } + if (!(o instanceof DRealTerm)) { + return false; + } + return term == ((DReal4Formula) o).term; + } + + @Override + public final String toString() { + if (term.isExp()) { + return term.getExpression().toString(); + } else if (term.isFormula()){ + return term.getFormula().toString(); + } else { + return term.getVariable().toString(); + } + } + + @Override + public final int hashCode() { + if (term.isExp()) { + return (int) term.getExpression().get_hash(); + } else if (term.isFormula()){ + return (int) term.getFormula().get_hash(); + } else { + return (int) term.getVariable().get_hash(); + } + } + + static final class DReal4BooleanFormula extends DReal4Formula implements BooleanFormula { + DReal4BooleanFormula(DRealTerm pTerm) { + super(pTerm); + } + } + + static final class DReal4RelationalFormula extends DReal4Formula implements RationalFormula { + DReal4RelationalFormula(DRealTerm pTerm) { + super(pTerm); + } + } + + static final class DReal4IntegerFormula extends DReal4Formula implements IntegerFormula { + DReal4IntegerFormula(DRealTerm pTerm) { + super(pTerm); + } + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java new file mode 100644 index 0000000000..b566c6d668 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -0,0 +1,85 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import java.util.List; +import org.sosy_lab.java_smt.api.Formula; +import org.sosy_lab.java_smt.api.FormulaType; +import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType; +import org.sosy_lab.java_smt.api.visitors.FormulaVisitor; +import org.sosy_lab.java_smt.basicimpl.FormulaCreator; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + + +public class DReal4FormulaCreator extends FormulaCreator { + + public DReal4FormulaCreator(Context context) { + super(context, Type.BOOLEAN, Type.INTEGER, Type.CONTINUOUS, null, null); + } + + @Override + public Type getBitvectorType(int bitwidth) { + return null; + } + + @Override + public Type getFloatingPointType(FloatingPointType type) { + return null; + } + + @Override + public Type getArrayType(Type indexType, Type elementType) { + return null; + } + + @Override + public DRealTerm makeVariable(Type pType, String varName) { + return new DRealTerm(new Variable(varName, pType), null, null); + } + + @Override + public FormulaType getFormulaType(DRealTerm formula) { + return null; + } + + @Override + public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { + return null; + } + + @Override + public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { + return null; + } + + @Override + public DRealTerm declareUFImpl(String pName, Type pReturnType, List pArgTypes) { + return null; + } + + @Override + protected DRealTerm getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { + return null; + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java new file mode 100644 index 0000000000..47ed4245b1 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java @@ -0,0 +1,60 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import org.sosy_lab.common.Appender; +import org.sosy_lab.java_smt.api.BooleanFormula; +import org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + +public class DReal4FormulaManager extends AbstractFormulaManager { + + DReal4FormulaManager(DReal4FormulaCreator pFormulaCreator, DReal4UFManager pFunctionManager, + DReal4BooleanFormulaManager pBooleanManager, + DReal4IntegerFormulaManager pIntegerManager, + DReal4RationalFormulaManager pRationalManager) { + super( + pFormulaCreator, + pFunctionManager, + pBooleanManager, + pIntegerManager, + pRationalManager, + null, + null, + null, + null, + null, + null, + null); + } + + @Override + public BooleanFormula parse(String s) throws IllegalArgumentException { + return null; + } + + @Override + public Appender dumpFormula(DRealTerm t) { + return null; + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4IntegerFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4IntegerFormulaManager.java new file mode 100644 index 0000000000..8df05df4df --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4IntegerFormulaManager.java @@ -0,0 +1,41 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import org.sosy_lab.java_smt.api.IntegerFormulaManager; +import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + + +public class DReal4IntegerFormulaManager + extends DReal4NumeralFormulaManager + implements IntegerFormulaManager { + + DReal4IntegerFormulaManager(DReal4FormulaCreator pCreator, + NonLinearArithmetic pNonLinearArithmetic) { + super(pCreator, pNonLinearArithmetic); + } + + @Override + protected Type getNumeralType() { + return getFormulaCreator().getIntegerType(); + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java new file mode 100644 index 0000000000..3613ee9fa1 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -0,0 +1,265 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; +import org.sosy_lab.java_smt.api.FormulaType; +import org.sosy_lab.java_smt.api.NumeralFormula; +import org.sosy_lab.java_smt.basicimpl.AbstractNumeralFormulaManager; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; + +public abstract class DReal4NumeralFormulaManager< + ParamFormulaType extends NumeralFormula, ResultFormulaType extends NumeralFormula> + extends AbstractNumeralFormulaManager< + DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, DRealTerm> { + + DReal4NumeralFormulaManager( + DReal4FormulaCreator pCreator, NonLinearArithmetic pNonLinearArithmetic) { + super(pCreator, pNonLinearArithmetic); + } + + @Override + public FormulaType getFormulaType() { + return null; + } + + @Override + protected boolean isNumeral(DRealTerm val) { + if (val.isExp()) { + return val.getExpression().get_kind() == ExpressionKind.Constant; + } else { + throw new UnsupportedOperationException("dReal does not support isNumeral on Variable or " + + "Formula."); + } + } + + @Override + protected DRealTerm makeNumberImpl(long i) { + return null; + } + + @Override + protected DRealTerm makeNumberImpl(BigInteger i) { + return null; + } + + @Override + protected DRealTerm makeNumberImpl(String i) { + return null; + } + + protected abstract Type getNumeralType(); + + @Override + protected DRealTerm makeNumberImpl(double pNumber) { + return new DRealTerm(null, new Expression(pNumber), null); + } + + @Override + protected DRealTerm makeNumberImpl(BigDecimal pNumber) { + return null; + } + + @Override + protected DRealTerm makeVariableImpl(String i) { + return getFormulaCreator().makeVariable(getNumeralType(), i); + } + + @Override + protected DRealTerm negate(DRealTerm pParam1) { + return null; + } + + @Override + protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Add(pParam1.getExpression(), pParam2.getExpression()), null); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, dreal.Add(new Expression(pParam1.getVariable()), + new Expression(pParam1.getVariable())), null); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, dreal.Add(pParam1.getExpression(), + new Expression(pParam2.getVariable())), null); + } else if (pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Add(new Expression(pParam1.getVariable()), + pParam2.getExpression()), null); + } else { + throw new UnsupportedOperationException("dReal does not support add on Formulas."); + } + } + + @Override + protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Substract(pParam1.getExpression(), pParam2.getExpression()), null); + } else { + throw new UnsupportedOperationException("dReal does not support subtract on Variables or " + + "Formulas."); + } + } + + @Override + public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Divide(pParam1.getExpression(), pParam2.getExpression()), + null); + } else if (pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Divide(new Expression(pParam1.getVariable()), + pParam2.getExpression()), null); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, dreal.Divide(pParam1.getExpression(), + new Expression(pParam2.getVariable())), null); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, dreal.Divide(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), null); + } else { + throw new UnsupportedOperationException("dReal does not support divide with Formulas."); + } + } + + @Override + public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Multiply(pParam1.getExpression(), pParam2.getExpression()), + null); + } else if (pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, dreal.Multiply(new Expression(pParam1.getVariable()), + pParam2.getExpression()), null); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, dreal.Multiply(pParam1.getExpression(), + new Expression(pParam2.getVariable())), null); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, dreal.Multiply(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), null); + } else { + throw new UnsupportedOperationException("dReal does not support multiply with Formulas."); + } + } + + // only use Equal(Expression exp1, Expression exp2), Equal with Formulas is same as iff + @Override + protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), + pParam2.getExpression())); + } else if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Equal(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable()))); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), + new Expression(pParam2.getVariable()))); + } else if (pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), + new Expression(pParam2.getVariable()))); + } else { + throw new UnsupportedOperationException("dReal does not support equal on Formulas."); + } + } + + + @Override + protected DRealTerm distinctImpl(List pNumbers) { + return null; + } + + @Override + protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Grater(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable()))); + } else if(pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.Grater(new Expression(pParam1.getVariable()), + pParam2.getExpression())); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Grater(pParam1.getExpression(), + new Expression(pParam2.getVariable()))); + } else if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.Grater(pParam1.getExpression(), + pParam2.getExpression())); + } else { + throw new UnsupportedOperationException("dReal does not support greaterThan on Formulas."); + } + } + + @Override + protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.GraterEqual(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable()))); + } else if(pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.GraterEqual(new Expression(pParam1.getVariable()), + pParam2.getExpression())); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.GraterEqual(pParam1.getExpression(), + new Expression(pParam2.getVariable()))); + } else if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.GraterEqual(pParam1.getExpression(), + pParam2.getExpression())); + } else { + throw new UnsupportedOperationException("dReal does not support greaterOrEquals on Formulas" + + "."); + } + } + + @Override + protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Less(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable()))); + } else if(pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.Less(new Expression(pParam1.getVariable()), + pParam2.getExpression())); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.Less(pParam1.getExpression(), + new Expression(pParam2.getVariable()))); + } else if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.Less(pParam1.getExpression(), + pParam2.getExpression())); + } else { + throw new UnsupportedOperationException("dReal does not support lessThan on Formulas."); + } + } + + @Override + protected DRealTerm lessOrEquals(DRealTerm pParam1, DRealTerm pParam2) { + if (pParam1.isVar() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.LessEqual(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable()))); + } else if(pParam1.isVar() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.LessEqual(new Expression(pParam1.getVariable()), + pParam2.getExpression())); + } else if (pParam1.isExp() && pParam2.isVar()) { + return new DRealTerm(null, null, dreal.LessEqual(pParam1.getExpression(), + new Expression(pParam2.getVariable()))); + } else if (pParam1.isExp() && pParam2.isExp()) { + return new DRealTerm(null, null, dreal.LessEqual(pParam1.getExpression(), + pParam2.getExpression())); + } else { + throw new UnsupportedOperationException("dReal does not support lessOrEquals on Formulas."); + } + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4RationalFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4RationalFormulaManager.java new file mode 100644 index 0000000000..d9298b2044 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4RationalFormulaManager.java @@ -0,0 +1,42 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + + +import org.sosy_lab.java_smt.api.NumeralFormula; +import org.sosy_lab.java_smt.api.NumeralFormula.RationalFormula; +import org.sosy_lab.java_smt.api.RationalFormulaManager; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + + +public class DReal4RationalFormulaManager + extends DReal4NumeralFormulaManager + implements RationalFormulaManager { + + DReal4RationalFormulaManager(DReal4FormulaCreator pCreator, NonLinearArithmetic pNonLinearArithmetic) { + super(pCreator, pNonLinearArithmetic); + } + + @Override + protected Type getNumeralType() { + return getFormulaCreator().getRationalType(); + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java new file mode 100644 index 0000000000..8004d5284f --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java @@ -0,0 +1,110 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import org.sosy_lab.common.ShutdownNotifier; +import org.sosy_lab.common.log.LogManager; +import org.sosy_lab.java_smt.api.FloatingPointRoundingMode; +import org.sosy_lab.java_smt.basicimpl.AbstractNumeralFormulaManager.NonLinearArithmetic; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.*; + +import java.util.Set; +import org.sosy_lab.java_smt.SolverContextFactory.Solvers; +import org.sosy_lab.java_smt.api.InterpolatingProverEnvironment; +import org.sosy_lab.java_smt.api.OptimizationProverEnvironment; +import org.sosy_lab.java_smt.api.ProverEnvironment; +import org.sosy_lab.java_smt.basicimpl.AbstractSolverContext; + +public class DReal4SolverContext extends AbstractSolverContext { + + private final DReal4FormulaManager manager; + private final DReal4FormulaCreator creator; + private final ShutdownNotifier shutdownNotifier; + + public DReal4SolverContext( + DReal4FormulaManager pManager, DReal4FormulaCreator pCreator, + ShutdownNotifier pShutdownNotifier) { + super(pManager); + manager = pManager; + creator = pCreator; + shutdownNotifier = pShutdownNotifier; + } + + public static DReal4SolverContext create( + LogManager pLogger, + ShutdownNotifier pShutdownNotifier, + int randomSeed, + NonLinearArithmetic pNonLinearArithmetic, + FloatingPointRoundingMode pFloatingPointRoundingMode + ) { + + // Create config + Config config = new Config(); + config.mutable_random_seed(randomSeed); + + Context context = new Context(config); + DReal4FormulaCreator creator = new DReal4FormulaCreator(context); + + // Create manager + DReal4UFManager functionTheory = new DReal4UFManager(creator); + DReal4BooleanFormulaManager booleanTheory = new DReal4BooleanFormulaManager(creator); + DReal4IntegerFormulaManager integerTheory = new DReal4IntegerFormulaManager(creator, + pNonLinearArithmetic); + DReal4RationalFormulaManager rationalTheory = new DReal4RationalFormulaManager(creator, + pNonLinearArithmetic); + DReal4FormulaManager manager = new DReal4FormulaManager(creator, functionTheory, + booleanTheory, integerTheory, rationalTheory); + return new DReal4SolverContext(manager, creator, pShutdownNotifier); + + } + @Override + public String getVersion() { + return "dReal " + drealJNI.Context_version(); + } + + @Override + public Solvers getSolverName() { + return Solvers.DREAL4; + } + + @Override + public void close() {} + + @Override + protected ProverEnvironment newProverEnvironment0(Set pOptions) { + return new DReal4TheoremProver(creator, pOptions, manager, shutdownNotifier); + } + + @Override + protected InterpolatingProverEnvironment newProverEnvironmentWithInterpolation0(Set pSet) { + throw new UnsupportedOperationException("dReal does not support interpolation"); + } + + @Override + protected OptimizationProverEnvironment newOptimizationProverEnvironment0(Set pSet) { + return null; + } + + @Override + protected boolean supportsAssumptionSolving() { + return false; + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java new file mode 100644 index 0000000000..7ae3c05846 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java @@ -0,0 +1,104 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.sosy_lab.common.ShutdownNotifier; +import org.sosy_lab.java_smt.api.BooleanFormula; +import org.sosy_lab.java_smt.api.Evaluator; +import org.sosy_lab.java_smt.api.Model; +import org.sosy_lab.java_smt.api.ProverEnvironment; +import org.sosy_lab.java_smt.api.SolverContext.ProverOptions; +import org.sosy_lab.java_smt.api.SolverException; +import org.sosy_lab.java_smt.basicimpl.AbstractProverWithAllSat; +import java.util.Set; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Config; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; + +class DReal4TheoremProver extends AbstractProverWithAllSat implements ProverEnvironment { + + private final DReal4FormulaCreator creator; + private final Config curCfg; + private final Context curCnt; + protected DReal4TheoremProver(DReal4FormulaCreator creator, Set pOptions, + DReal4FormulaManager pFmgr, ShutdownNotifier pShutdownNotifier) { + super(pOptions, pFmgr.getBooleanFormulaManager(), pShutdownNotifier); + this.creator = creator; + curCfg = new Config(); + curCnt = new Context(curCfg); + } + + @Override + public void pop() { + + } + + @Override + public @Nullable Void addConstraint(BooleanFormula constraint) throws InterruptedException { + return null; + } + + @Override + public void push() throws InterruptedException { + + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isUnsat() throws SolverException, InterruptedException { + return false; + } + + @Override + public boolean isUnsatWithAssumptions(Collection assumptions) + throws SolverException, InterruptedException { + return false; + } + + @Override + public Model getModel() throws SolverException { + return null; + } + + @Override + public List getUnsatCore() { + return null; + } + + @Override + public Optional> unsatCoreOverAssumptions(Collection assumptions) + throws SolverException, InterruptedException { + return Optional.empty(); + } + + @Override + protected Evaluator getEvaluatorWithoutChecks() throws SolverException { + return null; + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java new file mode 100644 index 0000000000..5c538f20d3 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java @@ -0,0 +1,33 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import org.sosy_lab.java_smt.basicimpl.AbstractUFManager; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + +public class DReal4UFManager extends AbstractUFManager { + + DReal4UFManager(DReal4FormulaCreator pCreator) { + super(pCreator); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java new file mode 100644 index 0000000000..bae8afe39b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java @@ -0,0 +1,81 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import javax.annotation.Nullable; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + +public class DRealTerm { + + @Nullable + private Variable var; + @Nullable + private Expression exp; + @Nullable + private Formula formula; + + public DRealTerm(Variable pVar, Expression pExp, Formula pFormula) { + this.var = pVar; + this.exp = pExp; + this.formula = pFormula; + } + + public boolean isVar() { + return var != null; + } + + public boolean isExp() { + return exp != null; + } + + public boolean isFormula() { + return formula != null; + } + + public Variable getVariable() { + return var; + } + + public Expression getExpression() { + return exp; + } + + public Formula getFormula() { + return formula; + } + + public Type getVariableKind() { + return var.get_type(); + } + + public ExpressionKind getExpressionKind() { + return exp.get_kind(); + } + + public FormulaKind getFormulaKind() { + return formula.get_kind(); + } +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md b/src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md new file mode 100644 index 0000000000..b478b1e8b8 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md @@ -0,0 +1,39 @@ +#### Fragen: +- Soll jetzt nur noch mit Pointer gearbeitet werden oder sollen auch die interface Klassen + verwendet werden? -> z.b TheoremProver mit Conifg und Context +- oder bei Dreal4Formula mit toString Methode + +- Not in BooleanFormulaManager + + +- UFManager, FormulaCreator welche Types? +- BooleanFormulaManger mit Variable erstellen von Typ Boolean und dann zu Formula umwandeln? +- Was sind die Types, bei BooleanFormulaManager bei ifThenElse, geht nur mit Expression + +### SolverContext: +- newOptimizationProverEnvironment: man kann in config optimization wählen, vllt damit? + + +### DRealTerm +- eventuell Variable hinzufügen? Erstmal ohne probieren + +### Not and negate: +- not bei BooleanFormula nur auf Formula? nur gucken, dass ganze formel nicht wahr wird? +- negate nur auf Variablen? Also nur Variable negieren + + +### FormulaManagers: +- Ich muss darauf achten, dass aus Variablen Expression erstellt werden können, um auch mit + Variables zu addieren usw. +- Gucken wie das mit erstellen von Variablen ist -> Expression oder Variable +- Überall wo Expression verwendet wird, kann auch Variable verwendet werden, vorher zu + Expression machen + + +- Equal(==) und iff das selbe in dREal bei Formals? und Equal(==) bei Variable oder Expression ist + dann x + 2 = 10 +- Überladene Operatoren aufpassen, sind blöd + + +### Type: +- Type ist von Variable? Reicht das? Wir haben Boolean, Integer, Continous(double), Binary \ No newline at end of file diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Box.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Box.java new file mode 100644 index 0000000000..406f0c01c0 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Box.java @@ -0,0 +1,154 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class Box { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Box(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Box obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Box obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Box(swigCPtr); + } + swigCPtr = 0; + } + } + + public Box() { + this(drealJNI.new_Box__SWIG_0(), true); + } + + public Box(VariableVector variables) { + this(drealJNI.new_Box__SWIG_1(VariableVector.getCPtr(variables), variables), true); + } + + public Box(Box arg0) { + this(drealJNI.new_Box__SWIG_2(Box.getCPtr(arg0), arg0), true); + } + + public Box AssignOperator(Box arg0) { + return new Box(drealJNI.Box_AssignOperator__SWIG_0(swigCPtr, this, Box.getCPtr(arg0), arg0), false); + } + + public void Add(Variable v) { + drealJNI.Box_Add__SWIG_0(swigCPtr, this, Variable.getCPtr(v), v); + } + + public void Add(Variable v, double lb, double ub) { + drealJNI.Box_Add__SWIG_1(swigCPtr, this, Variable.getCPtr(v), v, lb, ub); + } + + public boolean empty() { + return drealJNI.Box_empty(swigCPtr, this); + } + + public void set_empty() { + drealJNI.Box_set_empty(swigCPtr, this); + } + + public int size() { + return drealJNI.Box_size(swigCPtr, this); + } + + public SWIGTYPE_p_ibex__Interval Indexing(int i) { + return new SWIGTYPE_p_ibex__Interval(drealJNI.Box_Indexing__SWIG_0(swigCPtr, this, i), false); + } + + public SWIGTYPE_p_ibex__Interval Indexing(Variable var) { + return new SWIGTYPE_p_ibex__Interval(drealJNI.Box_Indexing__SWIG_1(swigCPtr, this, Variable.getCPtr(var), var), false); + } + + public VariableVector variables() { + return new VariableVector(drealJNI.Box_variables(swigCPtr, this), false); + } + + public Variable variable(int i) { + return new Variable(drealJNI.Box_variable(swigCPtr, this, i), false); + } + + public boolean has_variable(Variable var) { + return drealJNI.Box_has_variable(swigCPtr, this, Variable.getCPtr(var), var); + } + + public SWIGTYPE_p_ibex__IntervalVector interval_vector() { + return new SWIGTYPE_p_ibex__IntervalVector(drealJNI.Box_interval_vector(swigCPtr, this), false); + } + + public SWIGTYPE_p_ibex__IntervalVector mutable_interval_vector() { + return new SWIGTYPE_p_ibex__IntervalVector(drealJNI.Box_mutable_interval_vector(swigCPtr, this), false); + } + + public int index(Variable var) { + return drealJNI.Box_index(swigCPtr, this, Variable.getCPtr(var), var); + } + + public DoubleIntPair MaxDiam() { + return new DoubleIntPair(drealJNI.Box_MaxDiam(swigCPtr, this), true); + } + + public BoxBoxPair bisect(int i) { + return new BoxBoxPair(drealJNI.Box_bisect__SWIG_0(swigCPtr, this, i), true); + } + + public BoxBoxPair bisect(Variable var) { + return new BoxBoxPair(drealJNI.Box_bisect__SWIG_1(swigCPtr, this, Variable.getCPtr(var), var), true); + } + + public Box InplaceUnion(Box b) { + return new Box(drealJNI.Box_InplaceUnion(swigCPtr, this, Box.getCPtr(b), b), false); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/BoxBoxPair.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/BoxBoxPair.java new file mode 100644 index 0000000000..2674c8946b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/BoxBoxPair.java @@ -0,0 +1,101 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class BoxBoxPair { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected BoxBoxPair(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(BoxBoxPair obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(BoxBoxPair obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_BoxBoxPair(swigCPtr); + } + swigCPtr = 0; + } + } + + public BoxBoxPair() { + this(drealJNI.new_BoxBoxPair__SWIG_0(), true); + } + + public BoxBoxPair(Box first, Box second) { + this(drealJNI.new_BoxBoxPair__SWIG_1(Box.getCPtr(first), first, Box.getCPtr(second), second), true); + } + + public BoxBoxPair(BoxBoxPair other) { + this(drealJNI.new_BoxBoxPair__SWIG_2(BoxBoxPair.getCPtr(other), other), true); + } + + public void setFirst(Box value) { + drealJNI.BoxBoxPair_first_set(swigCPtr, this, Box.getCPtr(value), value); + } + + public Box getFirst() { + long cPtr = drealJNI.BoxBoxPair_first_get(swigCPtr, this); + return (cPtr == 0) ? null : new Box(cPtr, false); + } + + public void setSecond(Box value) { + drealJNI.BoxBoxPair_second_set(swigCPtr, this, Box.getCPtr(value), value); + } + + public Box getSecond() { + long cPtr = drealJNI.BoxBoxPair_second_get(swigCPtr, this); + return (cPtr == 0) ? null : new Box(cPtr, false); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Config.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Config.java new file mode 100644 index 0000000000..37e4158f2c --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Config.java @@ -0,0 +1,349 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class Config { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Config(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Config obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Config obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Config(swigCPtr); + } + swigCPtr = 0; + } + } + + public Config() { + this(drealJNI.new_Config__SWIG_0(), true); + } + + public Config(Config arg0) { + this(drealJNI.new_Config__SWIG_1(Config.getCPtr(arg0), arg0), true); + } + + public Config AssignOperator(Config arg0) { + return new Config(drealJNI.Config_AssignOperator__SWIG_0(swigCPtr, this, Config.getCPtr(arg0), arg0), false); + } + + public double precision() { + return drealJNI.Config_precision(swigCPtr, this); + } + + public OptionValueDouble mutable_precision() { + return new OptionValueDouble(drealJNI.Config_mutable_precision(swigCPtr, this), false); + } + + public void mutable_precision(double value) { + drealJNI.Config_mutable_precision_0(value, Config.getCPtr(this)); + } + + public boolean produce_models() { + return drealJNI.Config_produce_models(swigCPtr, this); + } + + public OptionValueBool mutable_produce_models() { + return new OptionValueBool(drealJNI.Config_mutable_produce_models(swigCPtr, this), false); + } + + public void mutable_produce_models(boolean bool) { + drealJNI.Config_mutable_produce_models_0(bool, Config.getCPtr(this)); + } + + public boolean use_polytope() { + return drealJNI.Config_use_polytope(swigCPtr, this); + } + + public OptionValueBool mutable_use_polytope() { + return new OptionValueBool(drealJNI.Config_mutable_use_polytope(swigCPtr, this), false); + } + + public void mutable_use_polytope(boolean bool) { + drealJNI.Config_mutable_use_polytope_0(bool, Config.getCPtr(this)); + } + + public boolean use_polytope_in_forall() { + return drealJNI.Config_use_polytope_in_forall(swigCPtr, this); + } + + public OptionValueBool mutable_use_polytope_in_forall() { + return new OptionValueBool(drealJNI.Config_mutable_use_polytope_in_forall(swigCPtr, this), false); + } + + public void mutable_use_polytope_in_forall(boolean bool) { + drealJNI.Config_mutable_use_polytope_in_forall_0(bool, Config.getCPtr(this)); + } + + public boolean use_worklist_fixpoint() { + return drealJNI.Config_use_worklist_fixpoint(swigCPtr, this); + } + + public OptionValueBool mutable_use_worklist_fixpoint() { + return new OptionValueBool(drealJNI.Config_mutable_use_worklist_fixpoint(swigCPtr, this), false); + } + + public void mutable_use_worklist_fixpoint(boolean bool) { + drealJNI.Config_mutable_use_worklist_fixpoint_0(bool, Config.getCPtr(this)); + } + + public boolean use_local_optimization() { + return drealJNI.Config_use_local_optimization(swigCPtr, this); + } + + public OptionValueBool mutable_use_local_optimization() { + return new OptionValueBool(drealJNI.Config_mutable_use_local_optimization(swigCPtr, this), false); + } + + public void mutable_use_local_optimization(boolean bool) { + drealJNI.Config_mutable_use_local_optimization_0(bool, Config.getCPtr(this)); + } + + public boolean dump_theory_literals() { + return drealJNI.Config_dump_theory_literals(swigCPtr, this); + } + + public OptionValueBool mutable_dump_theory_literals() { + return new OptionValueBool(drealJNI.Config_mutable_dump_theory_literals(swigCPtr, this), false); + } + + public void mutable_dump_theory_literals(boolean bool) { + drealJNI.Config_mutable_dump_theory_literals_0(bool, Config.getCPtr(this)); + } + + + public int number_of_jobs() { + return drealJNI.Config_number_of_jobs(swigCPtr, this); + } + + public OptionValueInt mutable_number_of_jobs() { + return new OptionValueInt(drealJNI.Config_mutable_number_of_jobs(swigCPtr, this), false); + } + + public void mutable_number_of_jobs(int i) { + drealJNI.Config_mutable_number_of_jobs_0(i, Config.getCPtr(this)); + } + + public boolean stack_left_box_first() { + return drealJNI.Config_stack_left_box_first(swigCPtr, this); + } + + public OptionValueBool mutable_stack_left_box_first() { + return new OptionValueBool(drealJNI.Config_mutable_stack_left_box_first(swigCPtr, this), false); + } + + public void mutable_stack_left_box_first(boolean bool) { + drealJNI.Config_mutable_stack_left_box_first_0(bool, Config.getCPtr(this)); + } + + public SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t brancher() { + return new SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t(drealJNI.Config_brancher(swigCPtr, this), false); + } + + public SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t mutable_brancher() { + return new SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t(drealJNI.Config_mutable_brancher(swigCPtr, this), false); + } + + public double nlopt_ftol_rel() { + return drealJNI.Config_nlopt_ftol_rel(swigCPtr, this); + } + + public OptionValueDouble mutable_nlopt_ftol_rel() { + return new OptionValueDouble(drealJNI.Config_mutable_nlopt_ftol_rel(swigCPtr, this), false); + } + + public void mutable_nlopt_ftol_rel(double value) { + drealJNI.Config_mutable_nlopt_ftol_rel_0(value, Config.getCPtr(this)); + } + + public double nlopt_ftol_abs() { + return drealJNI.Config_nlopt_ftol_abs(swigCPtr, this); + } + + public OptionValueDouble mutable_nlopt_ftol_abs() { + return new OptionValueDouble(drealJNI.Config_mutable_nlopt_ftol_abs(swigCPtr, this), false); + } + + public void mutable_nlopt_ftol_abs(double value) { + drealJNI.Config_mutable_nlopt_ftol_abs_0(value, Config.getCPtr(this)); + } + + public int nlopt_maxeval() { + return drealJNI.Config_nlopt_maxeval(swigCPtr, this); + } + + public OptionValueInt mutable_nlopt_maxeval() { + return new OptionValueInt(drealJNI.Config_mutable_nlopt_maxeval(swigCPtr, this), false); + } + + public void mutable_nlopt_maxeval(int i) { + drealJNI.Config_mutable_nlopt_maxeval_0(i, Config.getCPtr(this)); + } + + public double nlopt_maxtime() { + return drealJNI.Config_nlopt_maxtime(swigCPtr, this); + } + + public OptionValueDouble mutable_nlopt_maxtime() { + return new OptionValueDouble(drealJNI.Config_mutable_nlopt_maxtime(swigCPtr, this), false); + } + + public void mutable_nlopt_maxtime(double value) { + drealJNI.Config_mutable_nlopt_maxtime_0(value, Config.getCPtr(this)); + } + + public Config.SatDefaultPhase sat_default_phase() { + return Config.SatDefaultPhase.swigToEnum(drealJNI.Config_sat_default_phase(swigCPtr, this)); + } + + public SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t mutable_sat_default_phase() { + return new SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t(drealJNI.Config_mutable_sat_default_phase(swigCPtr, this), false); + } + + public long random_seed() { + return (drealJNI.Config_random_seed(swigCPtr, this)); + } + + public OptionValueUnsignedInt mutable_random_seed() { + return new OptionValueUnsignedInt(drealJNI.Config_mutable_random_seed(swigCPtr, this), false); + } + + public void mutable_random_seed(long seed){ + if (seed < 0) { + throw new IllegalArgumentException("Seed must be greater than zero"); + } + drealJNI.Config_mutable_random_seed_0(seed, Config.getCPtr(this)); + } + + public boolean smtlib2_compliant() { + return drealJNI.Config_smtlib2_compliant(swigCPtr, this); + } + + public OptionValueBool mutable_smtlib2_compliant() { + return new OptionValueBool(drealJNI.Config_mutable_smtlib2_compliant(swigCPtr, this), false); + } + + public void mutable_smtlib2_compliant(boolean bool) { + drealJNI.Config_mutable_smtlib2_compliant_0(bool, Config.getCPtr(this)); + } + + public static double getKDefaultPrecision() { + return drealJNI.Config_kDefaultPrecision_get(); + } + + public static double getKDefaultNloptFtolRel() { + return drealJNI.Config_kDefaultNloptFtolRel_get(); + } + + public static double getKDefaultNloptFtolAbs() { + return drealJNI.Config_kDefaultNloptFtolAbs_get(); + } + + public static int getKDefaultNloptMaxEval() { + return drealJNI.Config_kDefaultNloptMaxEval_get(); + } + + public static double getKDefaultNloptMaxTime() { + return drealJNI.Config_kDefaultNloptMaxTime_get(); + } + + public final static class SatDefaultPhase { + public final static Config.SatDefaultPhase False = new Config.SatDefaultPhase("False", drealJNI.Config_SatDefaultPhase_False_get()); + public final static Config.SatDefaultPhase True = new Config.SatDefaultPhase("True", drealJNI.Config_SatDefaultPhase_True_get()); + public final static Config.SatDefaultPhase JeroslowWang = new Config.SatDefaultPhase("JeroslowWang", drealJNI.Config_SatDefaultPhase_JeroslowWang_get()); + public final static Config.SatDefaultPhase RandomInitialPhase = new Config.SatDefaultPhase("RandomInitialPhase", drealJNI.Config_SatDefaultPhase_RandomInitialPhase_get()); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static SatDefaultPhase swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + SatDefaultPhase.class + " with value " + swigValue); + } + + private SatDefaultPhase(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private SatDefaultPhase(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private SatDefaultPhase(String swigName, SatDefaultPhase swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static SatDefaultPhase[] swigValues = { False, True, JeroslowWang, RandomInitialPhase }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java new file mode 100644 index 0000000000..0726af43af --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java @@ -0,0 +1,189 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + + + +public class Context { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Context(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Context obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Context obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Context(swigCPtr); + } + swigCPtr = 0; + } + } + + public Context() { + this(drealJNI.new_Context__SWIG_0(), true); + } + + public Context(Context context) { + this(drealJNI.new_Context__SWIG_1(Context.swigRelease(context), context), true); + } + + public Context(Config config) { + this(drealJNI.new_Context__SWIG_2(Config.getCPtr(config), config), true); + } + + public void Assert(Formula f) { + drealJNI.Context_Assert(swigCPtr, this, Formula.getCPtr(f), f); + } + + public SWIGTYPE_p_optionalT_dreal__Box_t CheckSat() { + return new SWIGTYPE_p_optionalT_dreal__Box_t(drealJNI.Context_CheckSat(swigCPtr, this), true); + } + + public void DeclareVariable(Variable v, boolean is_model_variable) { + drealJNI.Context_DeclareVariable__SWIG_0(swigCPtr, this, Variable.getCPtr(v), v, is_model_variable); + } + + public void DeclareVariable(Variable v) { + drealJNI.Context_DeclareVariable__SWIG_1(swigCPtr, this, Variable.getCPtr(v), v); + } + + public void DeclareVariable(Variable v, Expression lb, Expression ub, boolean is_model_variable) { + drealJNI.Context_DeclareVariable__SWIG_2(swigCPtr, this, Variable.getCPtr(v), v, Expression.getCPtr(lb), lb, Expression.getCPtr(ub), ub, is_model_variable); + } + + public void DeclareVariable(Variable v, Expression lb, Expression ub) { + drealJNI.Context_DeclareVariable__SWIG_3(swigCPtr, this, Variable.getCPtr(v), v, Expression.getCPtr(lb), lb, Expression.getCPtr(ub), ub); + } + + public static void Exit() { + drealJNI.Context_Exit(); + } + + public void Minimize(Expression f) { + drealJNI.Context_Minimize__SWIG_0(swigCPtr, this, Expression.getCPtr(f), f); + } + + public void Minimize(ExpressionVector functions) { + drealJNI.Context_Minimize__SWIG_1(swigCPtr, this, ExpressionVector.getCPtr(functions), functions); + } + + public void Maximize(Expression f) { + drealJNI.Context_Maximize(swigCPtr, this, Expression.getCPtr(f), f); + } + + public void Pop(int n) { + drealJNI.Context_Pop(swigCPtr, this, n); + } + + public void Push(int n) { + drealJNI.Context_Push(swigCPtr, this, n); + } + + public void SetInfo(String key, double val) { + drealJNI.Context_SetInfo__SWIG_0(swigCPtr, this, key, val); + } + + public void SetInfo(String key, String val) { + drealJNI.Context_SetInfo__SWIG_1(swigCPtr, this, key, val); + } + + public void SetInterval(Variable v, double lb, double ub) { + drealJNI.Context_SetInterval(swigCPtr, this, Variable.getCPtr(v), v, lb, ub); + } + + public void SetLogic(Logic logic) { + drealJNI.Context_SetLogic(swigCPtr, this, logic.swigValue()); + } + + public void SetOption(String key, double val) { + drealJNI.Context_SetOption__SWIG_0(swigCPtr, this, key, val); + } + + public void SetOption(String key, String val) { + drealJNI.Context_SetOption__SWIG_1(swigCPtr, this, key, val); + } + + public SWIGTYPE_p_optionalT_std__string_t GetOption(String key) { + return new SWIGTYPE_p_optionalT_std__string_t(drealJNI.Context_GetOption(swigCPtr, this, key), true); + } + + public Config config() { + return new Config(drealJNI.Context_config(swigCPtr, this), false); + } + + public Config mutable_config() { + return new Config(drealJNI.Context_mutable_config(swigCPtr, this), false); + } + + public static String version() { + return drealJNI.Context_version(); + } + + public SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t assertions() { + return new SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t(drealJNI.Context_assertions(swigCPtr, this), false); + } + + public Box box() { + return new Box(drealJNI.Context_box(swigCPtr, this), false); + } + + public Box get_model() { + return new Box(drealJNI.Context_get_model(swigCPtr, this), false); + } + + // self written + public Box CheckSatBox() { + return new Box(drealJNI.Context_CheckSatBox(Context.getCPtr(this)), true); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md new file mode 100644 index 0000000000..2b335fffd6 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md @@ -0,0 +1,311 @@ +c++### Fragen: +- Box.set_empty() funktioniert nicht, es wird nur der Wert auf False gesetzt, + aber Elemente immer noch aufrufbar. Aber ist auch in dReal so.... +- Deconstructor? Wo braucht man das, aslo wo soll ich es noch implementieren, weil bisher nicht übersetzt? +- Brauche ich Context? Oder reicht durch API call? + +### TODO: +- Generell Box printen? Bisher keine möglichkeit Ergebnis auszugeben +- mutable_... zum laufen kriegen +- tests schreiben + +##### Config: +- uint32_t needs to be changed to long -> per Hand und mit Exceptions +- mutable function not working, need to be implemented as well and looked at how they work +##### Environment: +- Indexing has SWIGTYPE_p_double should be double -> per Hand +- Uses intitializer_list, but not supported -> work around like in Variables? +#### OptionValue Class: +- AssignOperator has type SWIGTYPE, can be change to write type by hand +##### Formula File: +- weird error, make_conjunction() and make_disjunction() duplicates, but there are not -> do it myself + + + +### Documentation: +#### SWIG: +- create SWIG interface (file with .i) and put functions and header in that file +- It is possible to overload ooperators in C++, therefore, it is possible to tell swig to rename the overloaded operators, so that those can be translated to java as well. For that use the ```rename``` command. +- There are a lot of overloads in dReal, especially in the symbolic.h file and the includes of the file. Those overloaded methods need to be handled with rename. +- The interface-file also needs a few includes for handeling specific C++ class templates: + ``` + %include "std_string.i" + %include "std_vector.i" + %include "std_unordered_map.i" + %include "std_pair.i" + %include "std_shared_ptr.i" + %include "std_set.i" + %include "std_map.i" + ``` +- To use std::set and so on, you need to specify how the template is going to be named, so to wrapp std::set with a certain type, it needs to be specified, for example: + ``` + std::set -> + %template() std::set + ``` + So SWIG knows how to name the generated class. +- In C++ templates can be used. A template is a construct that generates an ordinary type or function at compile time based on arguments the user supplies for the template parameters. +In order to use that, the templates must be wrapped with a type, to do so, in the interface file the template needs to be defined and wraped like: + ``` + namespace dreal { + template + class OptionValue { + public: + enum class Type { + DEFAULT, ///< Default value + FROM_FILE, ///< Updated by a set-option/set-info in a file + FROM_COMMAND_LINE, ///< Updated by a command-line argument + FROM_CODE, ///< Explicitly updated by a code + }; + + /// Constructs an option value with @p value. + explicit OptionValue(T value) + : value_{std::move(value)}, type_{Type::DEFAULT} {} + + /// Default copy constructor. + OptionValue(const OptionValue&) = default; + + /// Default move constructor. + OptionValue(OptionValue&&) noexcept = default; + + /// Default copy assign operator. + OptionValue& operator=(const OptionValue&) = default; + + /// Default move assign operator. + OptionValue& operator=(OptionValue&&) noexcept = default; + + /// Default destructor. + ~OptionValue() = default; + + /// Copy-assign operator for T. + /// + /// Note: It sets value with `Type::FROM_CODE` type. + OptionValue& operator=(const T& value) { + value_ = value; + type_ = Type::FROM_CODE; + return *this; + } + + /// Move-assign operator for T. + /// + /// Note: It sets value with `Type::FROM_CODE` type. + OptionValue& operator=(T&& value) { + value_ = std::move(value); + type_ = Type::FROM_CODE; + return *this; + } + + /// Returns the value. + const T& get() const { return value_; } + + /// Sets the value to @p value which is given by a command-line argument. + void set_from_command_line(const T& value) { + if (type_ != Type::FROM_CODE) { + value_ = value; + type_ = Type::FROM_COMMAND_LINE; + } + } + + /// Sets the value to @p value which is provided from a file. + /// + /// @note This operation is ignored if the current value is set by + /// command-line. + void set_from_file(const T& value) { + switch (type_) { + case Type::DEFAULT: + case Type::FROM_FILE: + value_ = value; + type_ = Type::FROM_FILE; + return; + + case Type::FROM_COMMAND_LINE: + case Type::FROM_CODE: + // No operation. + return; + } + } + + friend std::ostream& operator<<(std::ostream& os, Type type) { + switch (type) { + case OptionValue::Type::DEFAULT: + return os << "DEFAULT"; + case OptionValue::Type::FROM_FILE: + return os << "FROM_FILE"; + case OptionValue::Type::FROM_COMMAND_LINE: + return os << "FROM_COMMAND_LINE"; + case OptionValue::Type::FROM_CODE: + return os << "FROM_CODE"; + } + } + + private: + T value_; + Type type_; + }; + + %template(OptionValueBool) OptionValue; + %template(OptionValueInt) OptionValue; + %template(OptionValueDouble) OptionValue; + %template(OptionValueUnsignedInt) OptionValue; + } + ``` + +- The order of the includes is important, so that a class that is used in different headers must be wraped first, so it is known to SWIG in other files + +- To create a wrapper file with SWIG use the following command : + - C++ + ```bash + swig -c++ -java .i + ``` +- Compile _wrap.cxx to create the extension lib.so (unix). In order to compile the C++ wrappers, the compiler needs the jni.h and jni_md.h header files which are part of the JDK. They are usually in directories like this: + ```bash + /usr/java/include + /usr/java/include/ + ``` + Use the following commands (be careful with dependecies!!!): + - C++: + ```bash + # General usage + c++ -fpic -c _wrap.cxx -I/usr/lib/jvm/java-1.11.0-openjdk-amd64/include/ -I/usr/lib/jvm/java-1.11.0-openjdk-amd64/include/linux + + # This is specific for dReal, so that all the right dependecies are included + c++ -fpic -c dreal_wrap.cxx -I/usr/lib/jvm/java-1.11.0-openjdk-amd64/include/ -I/usr/lib/jvm/java-1.11.0-openjdk-amd64/include/linux -I/opt/dreal/4.21.06.2/include -I/opt/libibex/2.7.4/include -I/opt/libibex/2.7.4/include/ibex -I/opt/libibex/2.7.4/include/ibex/3rd -I/usr/include/coin -L/opt/dreal/4.21.06.2/lib -L/opt/libibex/2.7.4/lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib -ldreal -libex -lClpSolver -lClp -lCoinUtils -lbz2 -lz -llapack -lblas -lm -lnlopt + ``` + + For the libaries to work, the dependencies of ibex and dreal are needed. Therefore, the library is compiled with those two libraries, which should be both in the same directory: + ```bash + # General usage + c++ -shared _wrap.o -o .so + + # This is specific for dReal, so that all the right dependecies are included + c++ -shared dreal_wrap.o -L/opt/dreal/4.21.06.2/lib -L/opt/libibex/2.7.4/lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib -ldreal -libex -lClpSolver -lClp -lCoinUtils -lbz2 -lz -llapack -lblas -lm -lnlopt -o libdreal4.so + + ``` +- Compile the java files example.java and main.java to create the class files example.class and main.class before running main in the JVM. Ensure that the libexample.so file is in your LD_LIBRARY_PATH before running. For example: + ```bash + export LD_LIBRARY_PATH=. + javac *.java + java main + ``` + +### General remarks SWIG: +- std::ostream is with SWIGTYPE generated, no solution yet, but maybe ok because only for output + +### SWIG File remarks: +#### Config File: +- std::function not supported, work around? + - therefore Brancher does not work and dynamicBitset does not work + - Because dynamicBitset not used in Conifg file, class not wraped +- OptionValue satDefault not possible, but should be possible if done by hand with the templates of OptionValue Int etc. (doch möglich da ja im template die klasse definiert wird?) +- mutable function not working, need to be implemented as well and looked at how they work + +#### API File: +- optional not supported, but api has for checkSatisfiability the option to use the boolean method (same for the other method) + +#### Context File: +- ScopedVector not working +- optional not supported, need to look for workaround +- both ignored for now +- Class not needed? + +#### Symbolic File: +- hash.h? hash_value never used? +- std::function not supported + +##### Environment File: +- std::unordered_map does not work + - begin(), end() etc. do not work, problem in Variables as well +- Indexing has SWIGTYPE_p_double should be double -> per Hand +- Uses intitializer_list, but not supported -> work around like in Variables? + +##### Expression File. +- ExpressionSubstitution & FormulaSubstitution do not work + - template for std::unordered_map return error: not more than 2 templates oder sowas +- Same in Formula + +##### Variables File: +- std::unordered_map does not work + - begin(), end() etc. do not work + - it is just a set, so maybe work around possible if self written + +##### Formula File: +- weird error, make_conjunction() and make_disjunction() duplicates, but there are not -> do it myself + +#### OptionValue Class: +- AssignOperator has type SWIGTYPE, can be change to write type by hand + +#### Ibex: +- Ibex ignored, therefore SWIGTYPE generated, maybe does work as well +- Ibex not wrapped, because lib did not work, so trying to avoid to generate ibex + + +### Changes made to the following files: +#### symbolic_formula.h +- in line 160: ```bool Evaluate(const Environment& env = Environment{}) const;``` zu ```bool Evaluate(const Environment& env = Environment()) const; ``` -> vllt durch c++ 11 auch gelöst? +- in line 291: Line commented +- in line 313: Line commented + - or this Error: + ``` + dreal/symbolic/symbolic.h:119: Error: 'make_conjunction' is multiply defined in the generated target language module in scope 'dreal_SymbolicJNI'. + /home/julius/Desktop/dreal4/dreal/symbolic/symbolic_formula.h:291: Error: Previous declaration of 'make_conjunction' + dreal/symbolic/symbolic.h:124: Error: 'make_disjunction' is multiply defined in the generated target language module in scope 'dreal_SymbolicJNI'. + /home/julius/Desktop/dreal4/dreal/symbolic/symbolic_formula.h:313: Error: Previous declaration of 'make_disjunction' + ``` + -> selber einfügen? +#### symbolic_expression.h +- line 234: ```double Evaluate(const Environment& env = Environment{}) const;``` zu ```double Evaluate(const Environment& env = Environment()) const; ``` + + + +### Compiling!! +```bash +c++ Test.cc -o Test.out -I/opt/dreal/4.21.06.2/include -I/opt/libibex/2.7.4/include -I/opt/libibex/2.7.4/include/ibex -I/opt/libibex/2.7.4/include/ibex/3rd -I/usr/include/coin -L/opt/dreal/4.21.06.2/lib -L/opt/libibex/2.7.4/lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib -ldreal -libex -lClpSolver -lClp -lCoinUtils -lbz2 -lz -llapack -lblas -lm -lnlopt + +``` + +### Was nicht funktioniert: +#### Expression: +- EvaluatePartial not tested +- Substitute funktioniert nur mit Variable und Expression +- get_first/second_argument bekommt man Expression, aber kann nicht z.b auf gleichheit testen, aber in c++ auch so +- Nicht alle statitschen methoden getestet, aber alles funktioniert sonst, also sollte auch alles gehen + +#### Variables: +- begin(), end() ..., find() usw geht nicht + +#### Environment: +- der eine Konstruktor mit intializer_list geht nicht, mit initializer_list selber konstruiert +- begin(), end(), ..., find() usw. geht nicht, wie bei Variables + +#### Formula: +- Substitute geht nicht mit ExpressionSubstitution, FormulaSubstitution +- Substitute mit Formula, läuft durch aber ändert nichts, aber auch in C++ nicht, wie funktioniert die Funktion? +- make_conjunction/dijunction selber machen? in symbolic die selbe nur mit vector? ALso egal ob mit vector erstelle oder mit set?? +- Überladenden operatoren nicht getestet, da indirekt getestet durch anlegen von Formulas .... -> nicht so gut +- get_variable ?, Formula get_operands, mit set gehts, bzw. wirft kein Fehler ?, get_quantified_formula ? + +#### Symbolic: +- map funktioniert nicht, da std::function nicht unterstützt ist +- DeltaWeaken/Strengthen, IsDifferentiable? Was tun die Funktionen? Daher nur geguckt ob die keinen Fehler werfen + +#### Context: +- nicht getestet, da nur durch api verwendet wird, d.h. CheckSatisfiability() verwendet context nur intern, +Klasse überflüssig? +- Wenn Context gebraucht wird, CheckSat Rückgabe wert vorher überprüfen und wie bei API machen mit übergabe + +#### Config: +- Brancher geht nicht +- dump_theory_literals findet er die dependecy nicht? +- Default Brancher gesetzt, aber nicht änderbar, da ich nicht weiß, welche Möglichkeiten es gibt, daher nur default. +- SatDefaultPhase kann man nicht ändern, erstmal weggelassen +### Was noch angeguckt werden muss: +#### Box: +- Interval, IntervalVector gehen nicht, aber wichtig um Lösung auszugeben? +- Wenn nur LÖsung ausgeben dann einfach printen die Box? +- set_empty() komisches verhalten? Aber ist genauso in dreal +- InplaceUnion nur getestet ob durch läuft, was tut das? + +#### API: +- Minimize mit Config stürtz ab + + + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/DoubleIntPair.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/DoubleIntPair.java new file mode 100644 index 0000000000..752d809cc2 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/DoubleIntPair.java @@ -0,0 +1,99 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class DoubleIntPair { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected DoubleIntPair(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(DoubleIntPair obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(DoubleIntPair obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_DoubleIntPair(swigCPtr); + } + swigCPtr = 0; + } + } + + public DoubleIntPair() { + this(drealJNI.new_DoubleIntPair__SWIG_0(), true); + } + + public DoubleIntPair(double first, int second) { + this(drealJNI.new_DoubleIntPair__SWIG_1(first, second), true); + } + + public DoubleIntPair(DoubleIntPair other) { + this(drealJNI.new_DoubleIntPair__SWIG_2(DoubleIntPair.getCPtr(other), other), true); + } + + public void setFirst(double value) { + drealJNI.DoubleIntPair_first_set(swigCPtr, this, value); + } + + public double getFirst() { + return drealJNI.DoubleIntPair_first_get(swigCPtr, this); + } + + public void setSecond(int value) { + drealJNI.DoubleIntPair_second_set(swigCPtr, this, value); + } + + public int getSecond() { + return drealJNI.DoubleIntPair_second_get(swigCPtr, this); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Environment.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Environment.java new file mode 100644 index 0000000000..190b21695f --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Environment.java @@ -0,0 +1,151 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class Environment { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Environment(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Environment obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Environment obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Environment(swigCPtr); + } + swigCPtr = 0; + } + } + + public Environment(Environment arg0) { + this(drealJNI.new_Environment__SWIG_0(Environment.getCPtr(arg0), arg0), true); + } + + public Environment AssignOperator(Environment arg0) { + return new Environment(drealJNI.Environment_AssignOperator__SWIG_0(swigCPtr, this, Environment.getCPtr(arg0), arg0), false); + } + + public Environment(Variable[] varArr) { + this(drealJNI.new_Environment__SWIG_1(), true); + for (Variable var : varArr) { + if (var.is_dummy()) { + throw new IllegalArgumentException("Dummy variable is detected in the initialization of an environment."); + } else { + this.insert(var, 0.0); + } + } + } + + public Environment() { + this(drealJNI.new_Environment__SWIG_1(), true); + } + + public Environment( + SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t init) { + this(drealJNI.new_Environment__SWIG_2(SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t.getCPtr(init)), true); + } + + public Environment(SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t vars) { + this(drealJNI.new_Environment__SWIG_3(SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t.getCPtr(vars)), true); + } + + public Environment( + SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t m) { + this(drealJNI.new_Environment__SWIG_4(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(m)), true); + } + + public SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator begin() { + return new SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator(drealJNI.Environment_begin__SWIG_0(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator end() { + return new SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator(drealJNI.Environment_end__SWIG_0(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator cbegin() { + return new SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator(drealJNI.Environment_cbegin(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator cend() { + return new SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator(drealJNI.Environment_cend(swigCPtr, this), true); + } + + public void insert(Variable key, double elem) { + drealJNI.Environment_insert(swigCPtr, this, Variable.getCPtr(key), key, elem); + } + + public boolean empty() { + return drealJNI.Environment_empty(swigCPtr, this); + } + + public long size() { + return drealJNI.Environment_size(swigCPtr, this); + } + + public SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator find(Variable key) { + return new SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator(drealJNI.Environment_find__SWIG_0(swigCPtr, this, Variable.getCPtr(key), key), true); + } + + public Variables domain() { + return new Variables(drealJNI.Environment_domain(swigCPtr, this), true); + } + + public String to_string() { + return drealJNI.Environment_to_string(swigCPtr, this); + } + + public SWIGTYPE_p_double Indexing(Variable key) { + return new SWIGTYPE_p_double(drealJNI.Environment_Indexing__SWIG_0(swigCPtr, this, Variable.getCPtr(key), key), false); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java new file mode 100644 index 0000000000..e31150dc1d --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java @@ -0,0 +1,196 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class Expression { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Expression(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Expression obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Expression obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Expression(swigCPtr); + } + swigCPtr = 0; + } + } + + public Expression(Expression arg0) { + this(drealJNI.new_Expression__SWIG_0(Expression.getCPtr(arg0), arg0), true); + } + + public Expression AssignOperator(Expression arg0) { + return new Expression(drealJNI.Expression_AssignOperator__SWIG_0(swigCPtr, this, Expression.getCPtr(arg0), arg0), false); + } + + public Expression() { + this(drealJNI.new_Expression__SWIG_1(), true); + } + + public Expression(double d) { + this(drealJNI.new_Expression__SWIG_2(d), true); + } + + public Expression(Variable var) { + this(drealJNI.new_Expression__SWIG_3(Variable.getCPtr(var), var), true); + } + + public ExpressionKind get_kind() { + return ExpressionKind.swigToEnum(drealJNI.Expression_get_kind(swigCPtr, this)); + } + + public long get_hash() { + return drealJNI.Expression_get_hash(swigCPtr, this); + } + + public Variables GetVariables() { + return new Variables(drealJNI.Expression_GetVariables(swigCPtr, this), false); + } + + public boolean EqualTo(Expression e) { + return drealJNI.Expression_EqualTo(swigCPtr, this, Expression.getCPtr(e), e); + } + + public boolean Less(Expression e) { + return drealJNI.Expression_Less(swigCPtr, this, Expression.getCPtr(e), e); + } + + public boolean is_polynomial() { + return drealJNI.Expression_is_polynomial(swigCPtr, this); + } + + public boolean include_ite() { + return drealJNI.Expression_include_ite(swigCPtr, this); + } + + public double Evaluate(Environment env) { + return drealJNI.Expression_Evaluate__SWIG_0(swigCPtr, this, Environment.getCPtr(env), env); + } + + public double Evaluate() { + return drealJNI.Expression_Evaluate__SWIG_1(swigCPtr, this); + } + + public Expression EvaluatePartial(Environment env) { + return new Expression(drealJNI.Expression_EvaluatePartial(swigCPtr, this, Environment.getCPtr(env), env), true); + } + + public Expression Expand() { + return new Expression(drealJNI.Expression_Expand(swigCPtr, this), true); + } + + public Expression Substitute(Variable var, Expression e) { + return new Expression(drealJNI.Expression_Substitute__SWIG_0(swigCPtr, this, Variable.getCPtr(var), var, Expression.getCPtr(e), e), true); + } + + public Expression Substitute( + SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t expr_subst, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t formula_subst) { + return new Expression(drealJNI.Expression_Substitute__SWIG_1(swigCPtr, this, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(expr_subst), SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(formula_subst)), true); + } + + public Expression Substitute(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t expr_subst) { + return new Expression(drealJNI.Expression_Substitute__SWIG_2(swigCPtr, this, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(expr_subst)), true); + } + + public Expression Substitute(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t formula_subst) { + return new Expression(drealJNI.Expression_Substitute__SWIG_3(swigCPtr, this, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(formula_subst)), true); + } + + public Expression Differentiate(Variable x) { + return new Expression(drealJNI.Expression_Differentiate(swigCPtr, this, Variable.getCPtr(x), x), true); + } + + public String to_string() { + return drealJNI.Expression_to_string(swigCPtr, this); + } + + public static Expression Zero() { + return new Expression(drealJNI.Expression_Zero(), true); + } + + public static Expression One() { + return new Expression(drealJNI.Expression_One(), true); + } + + public static Expression Pi() { + return new Expression(drealJNI.Expression_Pi(), true); + } + + public static Expression E() { + return new Expression(drealJNI.Expression_E(), true); + } + + public static Expression NaN() { + return new Expression(drealJNI.Expression_NaN(), true); + } + + public Expression Increment() { + return new Expression(drealJNI.Expression_Increment__SWIG_0(swigCPtr, this), false); + } + + public Expression Increment(int arg0) { + return new Expression(drealJNI.Expression_Increment__SWIG_1(swigCPtr, this, arg0), true); + } + + public Expression Decrement() { + return new Expression(drealJNI.Expression_Decrement__SWIG_0(swigCPtr, this), false); + } + + public Expression Decrement(int arg0) { + return new Expression(drealJNI.Expression_Decrement__SWIG_1(swigCPtr, this, arg0), true); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionDoubleMap.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionDoubleMap.java new file mode 100644 index 0000000000..b97c864f82 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionDoubleMap.java @@ -0,0 +1,266 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + + +public class ExpressionDoubleMap extends java.util.AbstractMap { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected ExpressionDoubleMap(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(ExpressionDoubleMap obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(ExpressionDoubleMap obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_ExpressionDoubleMap(swigCPtr); + } + swigCPtr = 0; + } + } + + + public int size() { + return sizeImpl(); + } + + public boolean containsKey(java.lang.Object key) { + if (!(key instanceof Expression)) { + return false; + } + + return containsImpl((Expression)key); + } + + public Double get(java.lang.Object key) { + if (!(key instanceof Expression)) { + return null; + } + + Iterator itr = find((Expression) key); + if (itr.isNot(end())) { + return itr.getValue(); + } + + return null; + } + + public Double put(Expression key, Double value) { + Iterator itr = find((Expression) key); + if (itr.isNot(end())) { + Double oldValue = itr.getValue(); + itr.setValue(value); + return oldValue; + } else { + putUnchecked(key, value); + return null; + } + } + + public Double remove(java.lang.Object key) { + if (!(key instanceof Expression)) { + return null; + } + + Iterator itr = find((Expression) key); + if (itr.isNot(end())) { + Double oldValue = itr.getValue(); + removeUnchecked(itr); + return oldValue; + } else { + return null; + } + } + + public java.util.Set> entrySet() { + java.util.Set> setToReturn = + new java.util.HashSet>(); + + Iterator itr = begin(); + final Iterator end = end(); + while (itr.isNot(end)) { + setToReturn.add(new Entry() { + private Iterator iterator; + + private Entry init(Iterator iterator) { + this.iterator = iterator; + return this; + } + + public Expression getKey() { + return iterator.getKey(); + } + + public Double getValue() { + return iterator.getValue(); + } + + public Double setValue(Double newValue) { + Double oldValue = iterator.getValue(); + iterator.setValue(newValue); + return oldValue; + } + }.init(itr)); + itr = itr.getNextUnchecked(); + } + + return setToReturn; + } + + public ExpressionDoubleMap() { + this(drealJNI.new_ExpressionDoubleMap__SWIG_0(), true); + } + + public ExpressionDoubleMap(ExpressionDoubleMap other) { + this(drealJNI.new_ExpressionDoubleMap__SWIG_1(ExpressionDoubleMap.getCPtr(other), other), true); + } + + static protected class Iterator { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Iterator(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Iterator obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_ExpressionDoubleMap_Iterator(swigCPtr); + } + swigCPtr = 0; + } + } + + private ExpressionDoubleMap.Iterator getNextUnchecked() { + return new ExpressionDoubleMap.Iterator(drealJNI.ExpressionDoubleMap_Iterator_getNextUnchecked(swigCPtr, this), true); + } + + private boolean isNot(ExpressionDoubleMap.Iterator other) { + return drealJNI.ExpressionDoubleMap_Iterator_isNot(swigCPtr, this, ExpressionDoubleMap.Iterator.getCPtr(other), other); + } + + private Expression getKey() { + return new Expression(drealJNI.ExpressionDoubleMap_Iterator_getKey(swigCPtr, this), true); + } + + private double getValue() { + return drealJNI.ExpressionDoubleMap_Iterator_getValue(swigCPtr, this); + } + + private void setValue(double newValue) { + drealJNI.ExpressionDoubleMap_Iterator_setValue(swigCPtr, this, newValue); + } + + } + + public boolean isEmpty() { + return drealJNI.ExpressionDoubleMap_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.ExpressionDoubleMap_clear(swigCPtr, this); + } + + private ExpressionDoubleMap.Iterator find(Expression key) { + return new ExpressionDoubleMap.Iterator(drealJNI.ExpressionDoubleMap_find(swigCPtr, this, Expression.getCPtr(key), key), true); + } + + private ExpressionDoubleMap.Iterator begin() { + return new ExpressionDoubleMap.Iterator(drealJNI.ExpressionDoubleMap_begin(swigCPtr, this), true); + } + + private ExpressionDoubleMap.Iterator end() { + return new ExpressionDoubleMap.Iterator(drealJNI.ExpressionDoubleMap_end(swigCPtr, this), true); + } + + private int sizeImpl() { + return drealJNI.ExpressionDoubleMap_sizeImpl(swigCPtr, this); + } + + private boolean containsImpl(Expression key) { + return drealJNI.ExpressionDoubleMap_containsImpl(swigCPtr, this, Expression.getCPtr(key), key); + } + + private void putUnchecked(Expression key, double value) { + drealJNI.ExpressionDoubleMap_putUnchecked(swigCPtr, this, Expression.getCPtr(key), key, value); + } + + private void removeUnchecked(ExpressionDoubleMap.Iterator itr) { + drealJNI.ExpressionDoubleMap_removeUnchecked(swigCPtr, this, ExpressionDoubleMap.Iterator.getCPtr(itr), itr); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionExpressionMap.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionExpressionMap.java new file mode 100644 index 0000000000..f4dd51984c --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionExpressionMap.java @@ -0,0 +1,265 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class ExpressionExpressionMap extends java.util.AbstractMap { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected ExpressionExpressionMap(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(ExpressionExpressionMap obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(ExpressionExpressionMap obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_ExpressionExpressionMap(swigCPtr); + } + swigCPtr = 0; + } + } + + + public int size() { + return sizeImpl(); + } + + public boolean containsKey(java.lang.Object key) { + if (!(key instanceof Expression)) { + return false; + } + + return containsImpl((Expression)key); + } + + public Expression get(java.lang.Object key) { + if (!(key instanceof Expression)) { + return null; + } + + Iterator itr = find((Expression) key); + if (itr.isNot(end())) { + return itr.getValue(); + } + + return null; + } + + public Expression put(Expression key, Expression value) { + Iterator itr = find((Expression) key); + if (itr.isNot(end())) { + Expression oldValue = itr.getValue(); + itr.setValue(value); + return oldValue; + } else { + putUnchecked(key, value); + return null; + } + } + + public Expression remove(java.lang.Object key) { + if (!(key instanceof Expression)) { + return null; + } + + Iterator itr = find((Expression) key); + if (itr.isNot(end())) { + Expression oldValue = itr.getValue(); + removeUnchecked(itr); + return oldValue; + } else { + return null; + } + } + + public java.util.Set> entrySet() { + java.util.Set> setToReturn = + new java.util.HashSet>(); + + Iterator itr = begin(); + final Iterator end = end(); + while (itr.isNot(end)) { + setToReturn.add(new Entry() { + private Iterator iterator; + + private Entry init(Iterator iterator) { + this.iterator = iterator; + return this; + } + + public Expression getKey() { + return iterator.getKey(); + } + + public Expression getValue() { + return iterator.getValue(); + } + + public Expression setValue(Expression newValue) { + Expression oldValue = iterator.getValue(); + iterator.setValue(newValue); + return oldValue; + } + }.init(itr)); + itr = itr.getNextUnchecked(); + } + + return setToReturn; + } + + public ExpressionExpressionMap() { + this(drealJNI.new_ExpressionExpressionMap__SWIG_0(), true); + } + + public ExpressionExpressionMap(ExpressionExpressionMap other) { + this(drealJNI.new_ExpressionExpressionMap__SWIG_1(ExpressionExpressionMap.getCPtr(other), other), true); + } + + static protected class Iterator { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Iterator(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Iterator obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_ExpressionExpressionMap_Iterator(swigCPtr); + } + swigCPtr = 0; + } + } + + private ExpressionExpressionMap.Iterator getNextUnchecked() { + return new ExpressionExpressionMap.Iterator(drealJNI.ExpressionExpressionMap_Iterator_getNextUnchecked(swigCPtr, this), true); + } + + private boolean isNot(ExpressionExpressionMap.Iterator other) { + return drealJNI.ExpressionExpressionMap_Iterator_isNot(swigCPtr, this, ExpressionExpressionMap.Iterator.getCPtr(other), other); + } + + private Expression getKey() { + return new Expression(drealJNI.ExpressionExpressionMap_Iterator_getKey(swigCPtr, this), true); + } + + private Expression getValue() { + return new Expression(drealJNI.ExpressionExpressionMap_Iterator_getValue(swigCPtr, this), true); + } + + private void setValue(Expression newValue) { + drealJNI.ExpressionExpressionMap_Iterator_setValue(swigCPtr, this, Expression.getCPtr(newValue), newValue); + } + + } + + public boolean isEmpty() { + return drealJNI.ExpressionExpressionMap_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.ExpressionExpressionMap_clear(swigCPtr, this); + } + + private ExpressionExpressionMap.Iterator find(Expression key) { + return new ExpressionExpressionMap.Iterator(drealJNI.ExpressionExpressionMap_find(swigCPtr, this, Expression.getCPtr(key), key), true); + } + + private ExpressionExpressionMap.Iterator begin() { + return new ExpressionExpressionMap.Iterator(drealJNI.ExpressionExpressionMap_begin(swigCPtr, this), true); + } + + private ExpressionExpressionMap.Iterator end() { + return new ExpressionExpressionMap.Iterator(drealJNI.ExpressionExpressionMap_end(swigCPtr, this), true); + } + + private int sizeImpl() { + return drealJNI.ExpressionExpressionMap_sizeImpl(swigCPtr, this); + } + + private boolean containsImpl(Expression key) { + return drealJNI.ExpressionExpressionMap_containsImpl(swigCPtr, this, Expression.getCPtr(key), key); + } + + private void putUnchecked(Expression key, Expression value) { + drealJNI.ExpressionExpressionMap_putUnchecked(swigCPtr, this, Expression.getCPtr(key), key, Expression.getCPtr(value), value); + } + + private void removeUnchecked(ExpressionExpressionMap.Iterator itr) { + drealJNI.ExpressionExpressionMap_removeUnchecked(swigCPtr, this, ExpressionExpressionMap.Iterator.getCPtr(itr), itr); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionKind.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionKind.java new file mode 100644 index 0000000000..9fd32c646b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionKind.java @@ -0,0 +1,97 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public final class ExpressionKind { + public final static ExpressionKind Constant = new ExpressionKind("Constant"); + public final static ExpressionKind RealConstant = new ExpressionKind("RealConstant"); + public final static ExpressionKind Var = new ExpressionKind("Var"); + public final static ExpressionKind Add = new ExpressionKind("Add"); + public final static ExpressionKind Mul = new ExpressionKind("Mul"); + public final static ExpressionKind Div = new ExpressionKind("Div"); + public final static ExpressionKind Log = new ExpressionKind("Log"); + public final static ExpressionKind Abs = new ExpressionKind("Abs"); + public final static ExpressionKind Exp = new ExpressionKind("Exp"); + public final static ExpressionKind Sqrt = new ExpressionKind("Sqrt"); + public final static ExpressionKind Pow = new ExpressionKind("Pow"); + public final static ExpressionKind Sin = new ExpressionKind("Sin"); + public final static ExpressionKind Cos = new ExpressionKind("Cos"); + public final static ExpressionKind Tan = new ExpressionKind("Tan"); + public final static ExpressionKind Asin = new ExpressionKind("Asin"); + public final static ExpressionKind Acos = new ExpressionKind("Acos"); + public final static ExpressionKind Atan = new ExpressionKind("Atan"); + public final static ExpressionKind Atan2 = new ExpressionKind("Atan2"); + public final static ExpressionKind Sinh = new ExpressionKind("Sinh"); + public final static ExpressionKind Cosh = new ExpressionKind("Cosh"); + public final static ExpressionKind Tanh = new ExpressionKind("Tanh"); + public final static ExpressionKind Min = new ExpressionKind("Min"); + public final static ExpressionKind Max = new ExpressionKind("Max"); + public final static ExpressionKind IfThenElse = new ExpressionKind("IfThenElse"); + public final static ExpressionKind NaN = new ExpressionKind("NaN"); + public final static ExpressionKind UninterpretedFunction = new ExpressionKind("UninterpretedFunction"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static ExpressionKind swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + ExpressionKind.class + " with value " + swigValue); + } + + private ExpressionKind(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private ExpressionKind(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private ExpressionKind(String swigName, ExpressionKind swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static ExpressionKind[] swigValues = { Constant, RealConstant, Var, Add, Mul, Div, Log, Abs, Exp, Sqrt, Pow, Sin, Cos, Tan, Asin, Acos, Atan, Atan2, Sinh, Cosh, Tanh, Min, Max, IfThenElse, NaN, UninterpretedFunction }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionVector.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionVector.java new file mode 100644 index 0000000000..66955a850c --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/ExpressionVector.java @@ -0,0 +1,175 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class ExpressionVector extends java.util.AbstractList implements java.util.RandomAccess { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected ExpressionVector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(ExpressionVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(ExpressionVector obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_ExpressionVector(swigCPtr); + } + swigCPtr = 0; + } + } + + public ExpressionVector(Expression[] initialElements) { + this(); + reserve(initialElements.length); + + for (Expression element : initialElements) { + add(element); + } + } + + public ExpressionVector(Iterable initialElements) { + this(); + for (Expression element : initialElements) { + add(element); + } + } + + public Expression get(int index) { + return doGet(index); + } + + public Expression set(int index, Expression e) { + return doSet(index, e); + } + + public boolean add(Expression e) { + modCount++; + doAdd(e); + return true; + } + + public void add(int index, Expression e) { + modCount++; + doAdd(index, e); + } + + public Expression remove(int index) { + modCount++; + return doRemove(index); + } + + protected void removeRange(int fromIndex, int toIndex) { + modCount++; + doRemoveRange(fromIndex, toIndex); + } + + public int size() { + return doSize(); + } + + public ExpressionVector() { + this(drealJNI.new_ExpressionVector__SWIG_0(), true); + } + + public ExpressionVector(ExpressionVector other) { + this(drealJNI.new_ExpressionVector__SWIG_1(ExpressionVector.getCPtr(other), other), true); + } + + public long capacity() { + return drealJNI.ExpressionVector_capacity(swigCPtr, this); + } + + public void reserve(long n) { + drealJNI.ExpressionVector_reserve(swigCPtr, this, n); + } + + public boolean isEmpty() { + return drealJNI.ExpressionVector_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.ExpressionVector_clear(swigCPtr, this); + } + + public ExpressionVector(int count, Expression value) { + this(drealJNI.new_ExpressionVector__SWIG_2(count, Expression.getCPtr(value), value), true); + } + + private int doSize() { + return drealJNI.ExpressionVector_doSize(swigCPtr, this); + } + + private void doAdd(Expression x) { + drealJNI.ExpressionVector_doAdd__SWIG_0(swigCPtr, this, Expression.getCPtr(x), x); + } + + private void doAdd(int index, Expression x) { + drealJNI.ExpressionVector_doAdd__SWIG_1(swigCPtr, this, index, Expression.getCPtr(x), x); + } + + private Expression doRemove(int index) { + return new Expression(drealJNI.ExpressionVector_doRemove(swigCPtr, this, index), true); + } + + private Expression doGet(int index) { + return new Expression(drealJNI.ExpressionVector_doGet(swigCPtr, this, index), false); + } + + private Expression doSet(int index, Expression val) { + return new Expression(drealJNI.ExpressionVector_doSet(swigCPtr, this, index, Expression.getCPtr(val), val), true); + } + + private void doRemoveRange(int fromIndex, int toIndex) { + drealJNI.ExpressionVector_doRemoveRange(swigCPtr, this, fromIndex, toIndex); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java new file mode 100644 index 0000000000..9d2d75078e --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java @@ -0,0 +1,164 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class Formula { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Formula(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Formula obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Formula obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Formula(swigCPtr); + } + swigCPtr = 0; + } + } + + public Formula() { + this(drealJNI.new_Formula__SWIG_0(), true); + } + + public Formula(Formula arg0) { + this(drealJNI.new_Formula__SWIG_1(Formula.getCPtr(arg0), arg0), true); + } + + public Formula AssignOperator(Formula arg0) { + return new Formula(drealJNI.Formula_AssignOperator__SWIG_0(swigCPtr, this, Formula.getCPtr(arg0), arg0), false); + } + + public Formula(Variable var) { + this(drealJNI.new_Formula__SWIG_2(Variable.getCPtr(var), var), true); + } + + public FormulaKind get_kind() { + return FormulaKind.swigToEnum(drealJNI.Formula_get_kind(swigCPtr, this)); + } + + public long get_hash() { + return drealJNI.Formula_get_hash(swigCPtr, this); + } + + public Variables GetFreeVariables() { + return new Variables(drealJNI.Formula_GetFreeVariables(swigCPtr, this), false); + } + + public boolean EqualTo(Formula f) { + return drealJNI.Formula_EqualTo(swigCPtr, this, Formula.getCPtr(f), f); + } + + public boolean Less(Formula f) { + return drealJNI.Formula_Less(swigCPtr, this, Formula.getCPtr(f), f); + } + + public boolean Evaluate(Environment env) { + return drealJNI.Formula_Evaluate__SWIG_0(swigCPtr, this, Environment.getCPtr(env), env); + } + + public boolean Evaluate() { + return drealJNI.Formula_Evaluate__SWIG_1(swigCPtr, this); + } + + public Formula Substitute(Variable var, Expression e) { + return new Formula(drealJNI.Formula_Substitute__SWIG_0(swigCPtr, this, Variable.getCPtr(var), var, Expression.getCPtr(e), e), true); + } + + public Formula Substitute(Variable var, Formula f) { + return new Formula(drealJNI.Formula_Substitute__SWIG_1(swigCPtr, this, Variable.getCPtr(var), var, Formula.getCPtr(f), f), true); + } + + public Formula Substitute( + SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t expr_subst, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t formula_subst) { + return new Formula(drealJNI.Formula_Substitute__SWIG_2(swigCPtr, this, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(expr_subst), SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(formula_subst)), true); + } + + public Formula Substitute(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t expr_subst) { + return new Formula(drealJNI.Formula_Substitute__SWIG_3(swigCPtr, this, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(expr_subst)), true); + } + + public Formula Substitute(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t formula_subst) { + return new Formula(drealJNI.Formula_Substitute__SWIG_4(swigCPtr, this, SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.getCPtr(formula_subst)), true); + } + + public String to_string() { + return drealJNI.Formula_to_string(swigCPtr, this); + } + + public static Formula True() { + return new Formula(drealJNI.Formula_True(), true); + } + + public static Formula False() { + return new Formula(drealJNI.Formula_False(), true); + } + + public boolean BoolOperator() { + return drealJNI.Formula_BoolOperator(swigCPtr, this); + } + + public static Formula make_conjunction(Formula f1, Formula f2) { + return new Formula(drealJNI.Formula_make_conjunction(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula make_disjunction(Formula f1, Formula f2) { + return new Formula(drealJNI.Formula_make_disjunction(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public boolean include_ite() { + return drealJNI.Formula_include_ite(swigCPtr, this); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaKind.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaKind.java new file mode 100644 index 0000000000..80edacbf0a --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaKind.java @@ -0,0 +1,84 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public final class FormulaKind { + public final static FormulaKind False = new FormulaKind("False"); + public final static FormulaKind True = new FormulaKind("True"); + public final static FormulaKind Var = new FormulaKind("Var"); + public final static FormulaKind Eq = new FormulaKind("Eq"); + public final static FormulaKind Neq = new FormulaKind("Neq"); + public final static FormulaKind Gt = new FormulaKind("Gt"); + public final static FormulaKind Geq = new FormulaKind("Geq"); + public final static FormulaKind Lt = new FormulaKind("Lt"); + public final static FormulaKind Leq = new FormulaKind("Leq"); + public final static FormulaKind And = new FormulaKind("And"); + public final static FormulaKind Or = new FormulaKind("Or"); + public final static FormulaKind Not = new FormulaKind("Not"); + public final static FormulaKind Forall = new FormulaKind("Forall"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static FormulaKind swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + FormulaKind.class + " with value " + swigValue); + } + + private FormulaKind(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private FormulaKind(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private FormulaKind(String swigName, FormulaKind swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static FormulaKind[] swigValues = { False, True, Var, Eq, Neq, Gt, Geq, Lt, Leq, And, Or, Not, Forall }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaSet.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaSet.java new file mode 100644 index 0000000000..245e9a366c --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaSet.java @@ -0,0 +1,258 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class FormulaSet extends java.util.AbstractSet { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected FormulaSet(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(FormulaSet obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(FormulaSet obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_FormulaSet(swigCPtr); + } + swigCPtr = 0; + } + } + + public FormulaSet(java.util.Collection collection) { + this(); + addAll(collection); + } + + public int size() { + return sizeImpl(); + } + + public boolean add(Formula key) { + return addImpl(key); + } + + public boolean addAll(java.util.Collection collection) { + boolean didAddElement = false; + for (java.lang.Object object : collection) { + didAddElement |= add((Formula)object); + } + + return didAddElement; + } + + public java.util.Iterator iterator() { + return new java.util.Iterator() { + private Iterator curr; + private Iterator end; + + private java.util.Iterator init() { + curr = FormulaSet.this.begin(); + end = FormulaSet.this.end(); + return this; + } + + public Formula next() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + + // Save the current position, increment it, + // then return the value at the position before the increment. + final Formula currValue = curr.derefUnchecked(); + curr.incrementUnchecked(); + return currValue; + } + + public boolean hasNext() { + return curr.isNot(end); + } + + public void remove() { + throw new java.lang.UnsupportedOperationException(); + } + }.init(); + } + + public boolean containsAll(java.util.Collection collection) { + for (java.lang.Object object : collection) { + if (!contains(object)) { + return false; + } + } + + return true; + } + + public boolean contains(java.lang.Object object) { + if (!(object instanceof Formula)) { + return false; + } + + return containsImpl((Formula)object); + } + + public boolean removeAll(java.util.Collection collection) { + boolean didRemoveElement = false; + for (java.lang.Object object : collection) { + didRemoveElement |= remove(object); + } + + return didRemoveElement; + } + + public boolean remove(java.lang.Object object) { + if (!(object instanceof Formula)) { + return false; + } + + return removeImpl((Formula)object); + } + + static protected class Iterator { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Iterator(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Iterator obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_FormulaSet_Iterator(swigCPtr); + } + swigCPtr = 0; + } + } + + private void incrementUnchecked() { + drealJNI.FormulaSet_Iterator_incrementUnchecked(swigCPtr, this); + } + + private Formula derefUnchecked() { + return new Formula(drealJNI.FormulaSet_Iterator_derefUnchecked(swigCPtr, this), true); + } + + private boolean isNot(FormulaSet.Iterator other) { + return drealJNI.FormulaSet_Iterator_isNot(swigCPtr, this, FormulaSet.Iterator.getCPtr(other), other); + } + + } + + public FormulaSet() { + this(drealJNI.new_FormulaSet__SWIG_0(), true); + } + + public FormulaSet(FormulaSet other) { + this(drealJNI.new_FormulaSet__SWIG_1(FormulaSet.getCPtr(other), other), true); + } + + public boolean isEmpty() { + return drealJNI.FormulaSet_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.FormulaSet_clear(swigCPtr, this); + } + + private FormulaSet.Iterator begin() { + return new FormulaSet.Iterator(drealJNI.FormulaSet_begin(swigCPtr, this), true); + } + + private FormulaSet.Iterator end() { + return new FormulaSet.Iterator(drealJNI.FormulaSet_end(swigCPtr, this), true); + } + + public boolean addImpl(Formula key) { + return drealJNI.FormulaSet_addImpl(swigCPtr, this, Formula.getCPtr(key), key); + } + + private boolean containsImpl(Formula key) { + return drealJNI.FormulaSet_containsImpl(swigCPtr, this, Formula.getCPtr(key), key); + } + + private boolean removeImpl(Formula key) { + return drealJNI.FormulaSet_removeImpl(swigCPtr, this, Formula.getCPtr(key), key); + } + + private int sizeImpl() { + return drealJNI.FormulaSet_sizeImpl(swigCPtr, this); + } + + private boolean hasNextImpl(FormulaSet.Iterator itr) { + return drealJNI.FormulaSet_hasNextImpl(swigCPtr, this, FormulaSet.Iterator.getCPtr(itr), itr); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaVector.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaVector.java new file mode 100644 index 0000000000..e515392880 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/FormulaVector.java @@ -0,0 +1,175 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class FormulaVector extends java.util.AbstractList implements java.util.RandomAccess { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected FormulaVector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(FormulaVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(FormulaVector obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_FormulaVector(swigCPtr); + } + swigCPtr = 0; + } + } + + public FormulaVector(Formula[] initialElements) { + this(); + reserve(initialElements.length); + + for (Formula element : initialElements) { + add(element); + } + } + + public FormulaVector(Iterable initialElements) { + this(); + for (Formula element : initialElements) { + add(element); + } + } + + public Formula get(int index) { + return doGet(index); + } + + public Formula set(int index, Formula e) { + return doSet(index, e); + } + + public boolean add(Formula e) { + modCount++; + doAdd(e); + return true; + } + + public void add(int index, Formula e) { + modCount++; + doAdd(index, e); + } + + public Formula remove(int index) { + modCount++; + return doRemove(index); + } + + protected void removeRange(int fromIndex, int toIndex) { + modCount++; + doRemoveRange(fromIndex, toIndex); + } + + public int size() { + return doSize(); + } + + public FormulaVector() { + this(drealJNI.new_FormulaVector__SWIG_0(), true); + } + + public FormulaVector(FormulaVector other) { + this(drealJNI.new_FormulaVector__SWIG_1(FormulaVector.getCPtr(other), other), true); + } + + public long capacity() { + return drealJNI.FormulaVector_capacity(swigCPtr, this); + } + + public void reserve(long n) { + drealJNI.FormulaVector_reserve(swigCPtr, this, n); + } + + public boolean isEmpty() { + return drealJNI.FormulaVector_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.FormulaVector_clear(swigCPtr, this); + } + + public FormulaVector(int count, Formula value) { + this(drealJNI.new_FormulaVector__SWIG_2(count, Formula.getCPtr(value), value), true); + } + + private int doSize() { + return drealJNI.FormulaVector_doSize(swigCPtr, this); + } + + private void doAdd(Formula x) { + drealJNI.FormulaVector_doAdd__SWIG_0(swigCPtr, this, Formula.getCPtr(x), x); + } + + private void doAdd(int index, Formula x) { + drealJNI.FormulaVector_doAdd__SWIG_1(swigCPtr, this, index, Formula.getCPtr(x), x); + } + + private Formula doRemove(int index) { + return new Formula(drealJNI.FormulaVector_doRemove(swigCPtr, this, index), true); + } + + private Formula doGet(int index) { + return new Formula(drealJNI.FormulaVector_doGet(swigCPtr, this, index), false); + } + + private Formula doSet(int index, Formula val) { + return new Formula(drealJNI.FormulaVector_doSet(swigCPtr, this, index, Formula.getCPtr(val), val), true); + } + + private void doRemoveRange(int fromIndex, int toIndex) { + drealJNI.FormulaVector_doRemoveRange(swigCPtr, this, fromIndex, toIndex); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Logic.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Logic.java new file mode 100644 index 0000000000..50708c360c --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Logic.java @@ -0,0 +1,82 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public final class Logic { + public final static Logic ALL = new Logic("ALL"); + public final static Logic QF_LIA = new Logic("QF_LIA"); + public final static Logic QF_LIRA = new Logic("QF_LIRA"); + public final static Logic QF_LRA = new Logic("QF_LRA"); + public final static Logic QF_NIA = new Logic("QF_NIA"); + public final static Logic QF_NIAT = new Logic("QF_NIAT"); + public final static Logic QF_NIRA = new Logic("QF_NIRA"); + public final static Logic QF_NIRAT = new Logic("QF_NIRAT"); + public final static Logic QF_NRA = new Logic("QF_NRA"); + public final static Logic QF_NRAT = new Logic("QF_NRAT"); + public final static Logic QF_RDL = new Logic("QF_RDL"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static Logic swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + Logic.class + " with value " + swigValue); + } + + private Logic(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private Logic(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private Logic(String swigName, Logic swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static Logic[] swigValues = { ALL, QF_LIA, QF_LIRA, QF_LRA, QF_NIA, QF_NIAT, QF_NIRA, QF_NIRAT, QF_NRA, QF_NRAT, QF_RDL }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueBool.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueBool.java new file mode 100644 index 0000000000..ee828bb71a --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueBool.java @@ -0,0 +1,148 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class OptionValueBool { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected OptionValueBool(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(OptionValueBool obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(OptionValueBool obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_OptionValueBool(swigCPtr); + } + swigCPtr = 0; + } + } + + public OptionValueBool(boolean value) { + this(drealJNI.new_OptionValueBool__SWIG_0(value), true); + } + + public OptionValueBool(OptionValueBool arg0) { + this(drealJNI.new_OptionValueBool__SWIG_1(OptionValueBool.getCPtr(arg0), arg0), true); + } + + public OptionValueBool AssignOperator(OptionValueBool arg0) { + return new OptionValueBool(drealJNI.OptionValueBool_AssignOperator__SWIG_0(swigCPtr, this, OptionValueBool.getCPtr(arg0), arg0), false); + } + + public OptionValueBool AssignOperator(boolean value) { + return new OptionValueBool(drealJNI.OptionValueBool_AssignOperator__SWIG_2(swigCPtr, this, value), false); + } + + public OptionValueBool AssignOperator(SWIGTYPE_p_bool value) { + return new OptionValueBool(drealJNI.OptionValueBool_AssignOperator__SWIG_3(swigCPtr, this, SWIGTYPE_p_bool.swigRelease(value)), false); + } + + public boolean get() { + return drealJNI.OptionValueBool_get(swigCPtr, this); + } + + public void set_from_command_line(boolean value) { + drealJNI.OptionValueBool_set_from_command_line(swigCPtr, this, value); + } + + public void set_from_file(boolean value) { + drealJNI.OptionValueBool_set_from_file(swigCPtr, this, value); + } + + public final static class Type { + public final static OptionValueBool.Type DEFAULT = new OptionValueBool.Type("DEFAULT"); + public final static OptionValueBool.Type FROM_FILE = new OptionValueBool.Type("FROM_FILE"); + public final static OptionValueBool.Type FROM_COMMAND_LINE = new OptionValueBool.Type("FROM_COMMAND_LINE"); + public final static OptionValueBool.Type FROM_CODE = new OptionValueBool.Type("FROM_CODE"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static Type swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + Type.class + " with value " + swigValue); + } + + private Type(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private Type(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private Type(String swigName, Type swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static Type[] swigValues = { DEFAULT, FROM_FILE, FROM_COMMAND_LINE, FROM_CODE }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueDouble.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueDouble.java new file mode 100644 index 0000000000..06af43593d --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueDouble.java @@ -0,0 +1,148 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class OptionValueDouble { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected OptionValueDouble(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(OptionValueDouble obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(OptionValueDouble obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_OptionValueDouble(swigCPtr); + } + swigCPtr = 0; + } + } + + public OptionValueDouble(double value) { + this(drealJNI.new_OptionValueDouble__SWIG_0(value), true); + } + + public OptionValueDouble(OptionValueDouble arg0) { + this(drealJNI.new_OptionValueDouble__SWIG_1(OptionValueDouble.getCPtr(arg0), arg0), true); + } + + public OptionValueDouble AssignOperator(OptionValueDouble arg0) { + return new OptionValueDouble(drealJNI.OptionValueDouble_AssignOperator__SWIG_0(swigCPtr, this, OptionValueDouble.getCPtr(arg0), arg0), false); + } + + public OptionValueDouble AssignOperator(double value) { + return new OptionValueDouble(drealJNI.OptionValueDouble_AssignOperator__SWIG_2(swigCPtr, this, value), false); + } + + public OptionValueDouble AssignOperator(SWIGTYPE_p_double value) { + return new OptionValueDouble(drealJNI.OptionValueDouble_AssignOperator__SWIG_3(swigCPtr, this, SWIGTYPE_p_double.swigRelease(value)), false); + } + + public double get() { + return drealJNI.OptionValueDouble_get(swigCPtr, this); + } + + public void set_from_command_line(double value) { + drealJNI.OptionValueDouble_set_from_command_line(swigCPtr, this, value); + } + + public void set_from_file(double value) { + drealJNI.OptionValueDouble_set_from_file(swigCPtr, this, value); + } + + public final static class Type { + public final static OptionValueDouble.Type DEFAULT = new OptionValueDouble.Type("DEFAULT"); + public final static OptionValueDouble.Type FROM_FILE = new OptionValueDouble.Type("FROM_FILE"); + public final static OptionValueDouble.Type FROM_COMMAND_LINE = new OptionValueDouble.Type("FROM_COMMAND_LINE"); + public final static OptionValueDouble.Type FROM_CODE = new OptionValueDouble.Type("FROM_CODE"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static Type swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + Type.class + " with value " + swigValue); + } + + private Type(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private Type(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private Type(String swigName, Type swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static Type[] swigValues = { DEFAULT, FROM_FILE, FROM_COMMAND_LINE, FROM_CODE }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueInt.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueInt.java new file mode 100644 index 0000000000..9a919dd9be --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueInt.java @@ -0,0 +1,148 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class OptionValueInt { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected OptionValueInt(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(OptionValueInt obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(OptionValueInt obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_OptionValueInt(swigCPtr); + } + swigCPtr = 0; + } + } + + public OptionValueInt(int value) { + this(drealJNI.new_OptionValueInt__SWIG_0(value), true); + } + + public OptionValueInt(OptionValueInt arg0) { + this(drealJNI.new_OptionValueInt__SWIG_1(OptionValueInt.getCPtr(arg0), arg0), true); + } + + public OptionValueInt AssignOperator(OptionValueInt arg0) { + return new OptionValueInt(drealJNI.OptionValueInt_AssignOperator__SWIG_0(swigCPtr, this, OptionValueInt.getCPtr(arg0), arg0), false); + } + + public OptionValueInt AssignOperator(int value) { + return new OptionValueInt(drealJNI.OptionValueInt_AssignOperator__SWIG_2(swigCPtr, this, value), false); + } + + public OptionValueInt AssignOperator(SWIGTYPE_p_int value) { + return new OptionValueInt(drealJNI.OptionValueInt_AssignOperator__SWIG_3(swigCPtr, this, SWIGTYPE_p_int.swigRelease(value)), false); + } + + public int get() { + return drealJNI.OptionValueInt_get(swigCPtr, this); + } + + public void set_from_command_line(int value) { + drealJNI.OptionValueInt_set_from_command_line(swigCPtr, this, value); + } + + public void set_from_file(int value) { + drealJNI.OptionValueInt_set_from_file(swigCPtr, this, value); + } + + public final static class Type { + public final static OptionValueInt.Type DEFAULT = new OptionValueInt.Type("DEFAULT"); + public final static OptionValueInt.Type FROM_FILE = new OptionValueInt.Type("FROM_FILE"); + public final static OptionValueInt.Type FROM_COMMAND_LINE = new OptionValueInt.Type("FROM_COMMAND_LINE"); + public final static OptionValueInt.Type FROM_CODE = new OptionValueInt.Type("FROM_CODE"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static Type swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + Type.class + " with value " + swigValue); + } + + private Type(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private Type(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private Type(String swigName, Type swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static Type[] swigValues = { DEFAULT, FROM_FILE, FROM_COMMAND_LINE, FROM_CODE }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueUnsignedInt.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueUnsignedInt.java new file mode 100644 index 0000000000..1104386414 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/OptionValueUnsignedInt.java @@ -0,0 +1,145 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class OptionValueUnsignedInt { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected OptionValueUnsignedInt(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(OptionValueUnsignedInt obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(OptionValueUnsignedInt obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_OptionValueUnsignedInt(swigCPtr); + } + swigCPtr = 0; + } + } + + public OptionValueUnsignedInt(SWIGTYPE_p_uint32_t value) { + this(drealJNI.new_OptionValueUnsignedInt__SWIG_0(SWIGTYPE_p_uint32_t.getCPtr(value)), true); + } + + public OptionValueUnsignedInt(OptionValueUnsignedInt arg0) { + this(drealJNI.new_OptionValueUnsignedInt__SWIG_1(OptionValueUnsignedInt.getCPtr(arg0), arg0), true); + } + + public OptionValueUnsignedInt AssignOperator(OptionValueUnsignedInt arg0) { + return new OptionValueUnsignedInt(drealJNI.OptionValueUnsignedInt_AssignOperator__SWIG_0(swigCPtr, this, OptionValueUnsignedInt.getCPtr(arg0), arg0), false); + } + + public OptionValueUnsignedInt AssignOperator(SWIGTYPE_p_uint32_t value) { + return new OptionValueUnsignedInt(drealJNI.OptionValueUnsignedInt_AssignOperator__SWIG_2(swigCPtr, this, SWIGTYPE_p_uint32_t.getCPtr(value)), false); + } + + public SWIGTYPE_p_uint32_t get() { + return new SWIGTYPE_p_uint32_t(drealJNI.OptionValueUnsignedInt_get(swigCPtr, this), false); + } + + public void set_from_command_line(SWIGTYPE_p_uint32_t value) { + drealJNI.OptionValueUnsignedInt_set_from_command_line(swigCPtr, this, SWIGTYPE_p_uint32_t.getCPtr(value)); + } + + public void set_from_file(SWIGTYPE_p_uint32_t value) { + drealJNI.OptionValueUnsignedInt_set_from_file(swigCPtr, this, SWIGTYPE_p_uint32_t.getCPtr(value)); + } + + public final static class Type { + public final static OptionValueUnsignedInt.Type DEFAULT = new OptionValueUnsignedInt.Type("DEFAULT"); + public final static OptionValueUnsignedInt.Type FROM_FILE = new OptionValueUnsignedInt.Type("FROM_FILE"); + public final static OptionValueUnsignedInt.Type FROM_COMMAND_LINE = new OptionValueUnsignedInt.Type("FROM_COMMAND_LINE"); + public final static OptionValueUnsignedInt.Type FROM_CODE = new OptionValueUnsignedInt.Type("FROM_CODE"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static Type swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + Type.class + " with value " + swigValue); + } + + private Type(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private Type(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private Type(String swigName, Type swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static Type[] swigValues = { DEFAULT, FROM_FILE, FROM_COMMAND_LINE, FROM_CODE }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java new file mode 100644 index 0000000000..bdf42fa232 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java @@ -0,0 +1,80 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class Program_synthesis { + static { + try { + System.loadLibrary("dreal4"); + } catch(UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load.\n" + e); + System.exit(1); + } + } + + public static void main(String[] args) { + Variable var_x = new Variable("x"); + Variable var_a = new Variable("a"); + Variable var_b = new Variable("b"); + Variable var_c = new Variable("c"); + + Expression x = new Expression(var_x); + Expression a = new Expression(var_a); + Expression b = new Expression(var_b); + Expression c = new Expression(var_c); + Expression nt = new Expression(-1000.0); + Expression t = new Expression(1000.0); + Expression nh = new Expression(-100.0); + Expression h = new Expression(100.0); + + Formula sndimply = new Formula(dreal.imply(dreal.GraterEqual(x, c), dreal.Equal(dreal.abs(x), dreal.Multiply(a, x)))); + Formula thrdimply = new Formula(dreal.imply(dreal.Less(x, c), dreal.Equal(dreal.abs(x), dreal.Multiply(b, x)))); + + Formula nested = new Formula(dreal.imply(dreal.And(dreal.LessEqual(nt, x), dreal.LessEqual(x, t)), dreal.And(sndimply, thrdimply))); + + Formula quantified = new Formula(dreal.forall(new Variables(new Variable[] {var_x}), nested)); + + Box box = new Box(); + + Config config = new Config(); + config.mutable_precision(0.001); + config.mutable_use_polytope_in_forall(true); + config.mutable_use_local_optimization(true); + + Formula f1 = new Formula(dreal.And(dreal.LessEqual(nh, a), dreal.LessEqual(a, h))); + Formula f2 = new Formula(dreal.And(dreal.LessEqual(nh, b), dreal.LessEqual(b, h))); + Formula f3 = new Formula(dreal.And(dreal.LessEqual(nh, c), dreal.LessEqual(c, h))); + + Formula f1f2 = new Formula(dreal.And(f1, f2)); + Formula f3quantified = new Formula(dreal.And(f3, quantified)); + + Formula check = new Formula(dreal.And(f1f2, f3quantified)); + + boolean result = dreal.CheckSatisfiability(check, config, box); + + if (result) { + System.out.println("Formula is sat."); + } else { + System.out.println("Formula is unsat"); + } + + } +} \ No newline at end of file diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/RelationalOperator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/RelationalOperator.java new file mode 100644 index 0000000000..bd149ec429 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/RelationalOperator.java @@ -0,0 +1,77 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public final class RelationalOperator { + public final static RelationalOperator EQ = new RelationalOperator("EQ"); + public final static RelationalOperator NEQ = new RelationalOperator("NEQ"); + public final static RelationalOperator GT = new RelationalOperator("GT"); + public final static RelationalOperator GEQ = new RelationalOperator("GEQ"); + public final static RelationalOperator LT = new RelationalOperator("LT"); + public final static RelationalOperator LEQ = new RelationalOperator("LEQ"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static RelationalOperator swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + RelationalOperator.class + " with value " + swigValue); + } + + private RelationalOperator(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private RelationalOperator(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private RelationalOperator(String swigName, RelationalOperator swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static RelationalOperator[] swigValues = { EQ, NEQ, GT, GEQ, LT, LEQ }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t.java new file mode 100644 index 0000000000..f04206d900 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_ScopedVectorT_dreal__drake__symbolic__Formula_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_bool.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_bool.java new file mode 100644 index 0000000000..9071d718b3 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_bool.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_bool { + private transient long swigCPtr; + + protected SWIGTYPE_p_bool(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_bool() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_bool obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_bool obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_double.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_double.java new file mode 100644 index 0000000000..15d06c6900 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_double.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_double { + private transient long swigCPtr; + + protected SWIGTYPE_p_double(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_double() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_double obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_double obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t.java new file mode 100644 index 0000000000..96cdcb600b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_dreal__OptionValueT_dreal__Config__SatDefaultPhase_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t.java new file mode 100644 index 0000000000..70edbf783e --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_dreal__OptionValueT_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__Interval.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__Interval.java new file mode 100644 index 0000000000..bf3d010827 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__Interval.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_ibex__Interval { + private transient long swigCPtr; + + protected SWIGTYPE_p_ibex__Interval(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_ibex__Interval() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_ibex__Interval obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_ibex__Interval obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__IntervalVector.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__IntervalVector.java new file mode 100644 index 0000000000..7d66da2d78 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_ibex__IntervalVector.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_ibex__IntervalVector { + private transient long swigCPtr; + + protected SWIGTYPE_p_ibex__IntervalVector(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_ibex__IntervalVector() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_ibex__IntervalVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_ibex__IntervalVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_int.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_int.java new file mode 100644 index 0000000000..767aa93941 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_int.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_int { + private transient long swigCPtr; + + protected SWIGTYPE_p_int(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_int() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_int obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_int obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_dreal__Box_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_dreal__Box_t.java new file mode 100644 index 0000000000..1b6346cb86 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_dreal__Box_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_optionalT_dreal__Box_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_optionalT_dreal__Box_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_optionalT_dreal__Box_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_optionalT_dreal__Box_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_optionalT_dreal__Box_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_std__string_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_std__string_t.java new file mode 100644 index 0000000000..3a8e6a4a00 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_optionalT_std__string_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_optionalT_std__string_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_optionalT_std__string_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_optionalT_std__string_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_optionalT_std__string_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_optionalT_std__string_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t.java new file mode 100644 index 0000000000..0d2a43c381 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t.java new file mode 100644 index 0000000000..9a135ce9a9 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__functionT_int_fdreal__Box_const_R_DynamicBitset_const_R_dreal__Box_p_dreal__Box_pF_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t.java new file mode 100644 index 0000000000..3d19848d3f --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t.java @@ -0,0 +1,50 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t.java new file mode 100644 index 0000000000..241b98455d --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__initializer_listT_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__value_type_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__ostream.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__ostream.java new file mode 100644 index 0000000000..9dd958008d --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__ostream.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__ostream { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__ostream(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__ostream() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__ostream obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__ostream obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator.java new file mode 100644 index 0000000000..10d91f8c27 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator.java new file mode 100644 index 0000000000..23a804e733 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator.java new file mode 100644 index 0000000000..b6812c9345 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator.java new file mode 100644 index 0000000000..0fc426508a --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type.java new file mode 100644 index 0000000000..cf0f0d9933 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__size_type obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java new file mode 100644 index 0000000000..74f0e4d20c --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator.java new file mode 100644 index 0000000000..8aca9180ab --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__const_iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator.java new file mode 100644 index 0000000000..682ed9aa8f --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_double_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t__iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java new file mode 100644 index 0000000000..6ab674c5d5 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Expression_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java new file mode 100644 index 0000000000..74485a9e10 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_std__unordered_mapT_dreal__drake__symbolic__Variable_dreal__drake__symbolic__Formula_dreal__drake__hash_valueT_dreal__drake__symbolic__Variable_t_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_uint32_t.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_uint32_t.java new file mode 100644 index 0000000000..8f96aab0b7 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SWIGTYPE_p_uint32_t.java @@ -0,0 +1,49 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SWIGTYPE_p_uint32_t { + private transient long swigCPtr; + + protected SWIGTYPE_p_uint32_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) { + swigCPtr = cPtr; + } + + protected SWIGTYPE_p_uint32_t() { + swigCPtr = 0; + } + + protected static long getCPtr(SWIGTYPE_p_uint32_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SWIGTYPE_p_uint32_t obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } +} + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMap.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMap.java new file mode 100644 index 0000000000..8f857e428b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMap.java @@ -0,0 +1,74 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SharedPointerToUnorderedMap { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected SharedPointerToUnorderedMap(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(SharedPointerToUnorderedMap obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SharedPointerToUnorderedMap obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_SharedPointerToUnorderedMap(swigCPtr); + } + swigCPtr = 0; + } + } + + public SharedPointerToUnorderedMap() { + this(drealJNI.new_SharedPointerToUnorderedMap(), true); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMapWithHashValue.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMapWithHashValue.java new file mode 100644 index 0000000000..2e553e2873 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToUnorderedMapWithHashValue.java @@ -0,0 +1,74 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SharedPointerToUnorderedMapWithHashValue { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected SharedPointerToUnorderedMapWithHashValue(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(SharedPointerToUnorderedMapWithHashValue obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SharedPointerToUnorderedMapWithHashValue obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_SharedPointerToUnorderedMapWithHashValue(swigCPtr); + } + swigCPtr = 0; + } + } + + public SharedPointerToUnorderedMapWithHashValue() { + this(drealJNI.new_SharedPointerToUnorderedMapWithHashValue(), true); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToVector.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToVector.java new file mode 100644 index 0000000000..42a92ff10d --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/SharedPointerToVector.java @@ -0,0 +1,74 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class SharedPointerToVector { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected SharedPointerToVector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(SharedPointerToVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(SharedPointerToVector obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_SharedPointerToVector(swigCPtr); + } + swigCPtr = 0; + } + } + + public SharedPointerToVector() { + this(drealJNI.new_SharedPointerToVector(), true); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variable.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variable.java new file mode 100644 index 0000000000..194d8941aa --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variable.java @@ -0,0 +1,173 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class Variable { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Variable(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Variable obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Variable obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Variable(swigCPtr); + } + swigCPtr = 0; + } + } + + public Variable(Variable arg0) { + this(drealJNI.new_Variable__SWIG_0(Variable.getCPtr(arg0), arg0), true); + } + + public Variable AssignOperator(Variable arg0) { + return new Variable(drealJNI.Variable_AssignOperator__SWIG_0(swigCPtr, this, Variable.getCPtr(arg0), arg0), false); + } + + public Variable() { + this(drealJNI.new_Variable__SWIG_1(), true); + } + + public Variable(String name, Variable.Type type) { + this(drealJNI.new_Variable__SWIG_2(name, type.swigValue()), true); + } + + public Variable(String name) { + this(drealJNI.new_Variable__SWIG_3(name), true); + } + + public Variable(String name, Variable.Type type, boolean model_variable) { + this(drealJNI.new_Variable__SWIG_4(name, type.swigValue(), model_variable), true); + } + + public boolean is_dummy() { + return drealJNI.Variable_is_dummy(swigCPtr, this); + } + + public long get_id() { + return drealJNI.Variable_get_id(swigCPtr, this); + } + + public Variable.Type get_type() { + return Variable.Type.swigToEnum(drealJNI.Variable_get_type(swigCPtr, this)); + } + + public long get_hash() { + return drealJNI.Variable_get_hash(swigCPtr, this); + } + + public String get_name() { + return drealJNI.Variable_get_name(swigCPtr, this); + } + + public String to_string() { + return drealJNI.Variable_to_string(swigCPtr, this); + } + + public boolean equal_to(Variable v) { + return drealJNI.Variable_equal_to(swigCPtr, this, Variable.getCPtr(v), v); + } + + public boolean less(Variable v) { + return drealJNI.Variable_less(swigCPtr, this, Variable.getCPtr(v), v); + } + + public final static class Type { + public final static Variable.Type CONTINUOUS = new Variable.Type("CONTINUOUS"); + public final static Variable.Type INTEGER = new Variable.Type("INTEGER"); + public final static Variable.Type BINARY = new Variable.Type("BINARY"); + public final static Variable.Type BOOLEAN = new Variable.Type("BOOLEAN"); + + public final int swigValue() { + return swigValue; + } + + public String toString() { + return swigName; + } + + public static Type swigToEnum(int swigValue) { + if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) + return swigValues[swigValue]; + for (int i = 0; i < swigValues.length; i++) + if (swigValues[i].swigValue == swigValue) + return swigValues[i]; + throw new IllegalArgumentException("No enum " + Type.class + " with value " + swigValue); + } + + private Type(String swigName) { + this.swigName = swigName; + this.swigValue = swigNext++; + } + + private Type(String swigName, int swigValue) { + this.swigName = swigName; + this.swigValue = swigValue; + swigNext = swigValue+1; + } + + private Type(String swigName, Type swigEnum) { + this.swigName = swigName; + this.swigValue = swigEnum.swigValue; + swigNext = this.swigValue+1; + } + + private static Type[] swigValues = { CONTINUOUS, INTEGER, BINARY, BOOLEAN }; + private static int swigNext = 0; + private final int swigValue; + private final String swigName; + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableVector.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableVector.java new file mode 100644 index 0000000000..4680380c4b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableVector.java @@ -0,0 +1,175 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class VariableVector extends java.util.AbstractList implements java.util.RandomAccess { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected VariableVector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(VariableVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(VariableVector obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_VariableVector(swigCPtr); + } + swigCPtr = 0; + } + } + + public VariableVector(Variable[] initialElements) { + this(); + reserve(initialElements.length); + + for (Variable element : initialElements) { + add(element); + } + } + + public VariableVector(Iterable initialElements) { + this(); + for (Variable element : initialElements) { + add(element); + } + } + + public Variable get(int index) { + return doGet(index); + } + + public Variable set(int index, Variable e) { + return doSet(index, e); + } + + public boolean add(Variable e) { + modCount++; + doAdd(e); + return true; + } + + public void add(int index, Variable e) { + modCount++; + doAdd(index, e); + } + + public Variable remove(int index) { + modCount++; + return doRemove(index); + } + + protected void removeRange(int fromIndex, int toIndex) { + modCount++; + doRemoveRange(fromIndex, toIndex); + } + + public int size() { + return doSize(); + } + + public VariableVector() { + this(drealJNI.new_VariableVector__SWIG_0(), true); + } + + public VariableVector(VariableVector other) { + this(drealJNI.new_VariableVector__SWIG_1(VariableVector.getCPtr(other), other), true); + } + + public long capacity() { + return drealJNI.VariableVector_capacity(swigCPtr, this); + } + + public void reserve(long n) { + drealJNI.VariableVector_reserve(swigCPtr, this, n); + } + + public boolean isEmpty() { + return drealJNI.VariableVector_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.VariableVector_clear(swigCPtr, this); + } + + public VariableVector(int count, Variable value) { + this(drealJNI.new_VariableVector__SWIG_2(count, Variable.getCPtr(value), value), true); + } + + private int doSize() { + return drealJNI.VariableVector_doSize(swigCPtr, this); + } + + private void doAdd(Variable x) { + drealJNI.VariableVector_doAdd__SWIG_0(swigCPtr, this, Variable.getCPtr(x), x); + } + + private void doAdd(int index, Variable x) { + drealJNI.VariableVector_doAdd__SWIG_1(swigCPtr, this, index, Variable.getCPtr(x), x); + } + + private Variable doRemove(int index) { + return new Variable(drealJNI.VariableVector_doRemove(swigCPtr, this, index), true); + } + + private Variable doGet(int index) { + return new Variable(drealJNI.VariableVector_doGet(swigCPtr, this, index), false); + } + + private Variable doSet(int index, Variable val) { + return new Variable(drealJNI.VariableVector_doSet(swigCPtr, this, index, Variable.getCPtr(val), val), true); + } + + private void doRemoveRange(int fromIndex, int toIndex) { + drealJNI.VariableVector_doRemoveRange(swigCPtr, this, fromIndex, toIndex); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variables.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variables.java new file mode 100644 index 0000000000..8a52c5c441 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Variables.java @@ -0,0 +1,182 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class Variables { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Variables(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Variables obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Variables obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_Variables(swigCPtr); + } + swigCPtr = 0; + } + } + + public Variables(Variables arg0) { + this(drealJNI.new_Variables__SWIG_0(Variables.getCPtr(arg0), arg0), true); + } + + public Variables AssignOperator(Variables arg0) { + return new Variables(drealJNI.Variables_AssignOperator__SWIG_0(swigCPtr, this, Variables.getCPtr(arg0), arg0), false); + } + + public Variables() { + this(drealJNI.new_Variables__SWIG_1(), true); + } + + public Variables(Variable[] arr) { + this(drealJNI.new_Variables__SWIG_1(), true); + for (Variable var : arr) { + this.insert(var); + } + } + + public Variables(SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t init) { + this(drealJNI.new_Variables__SWIG_2(SWIGTYPE_p_std__initializer_listT_dreal__drake__symbolic__Variable_t.getCPtr(init)), true); + } + + public long get_hash() { + return drealJNI.Variables_get_hash(swigCPtr, this); + } + + public long size() { + return (drealJNI.Variables_size(swigCPtr, this)); + } + + public boolean empty() { + return drealJNI.Variables_empty(swigCPtr, this); + } + + public String to_string() { + return drealJNI.Variables_to_string(swigCPtr, this); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator begin() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator(drealJNI.Variables_begin__SWIG_0(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator end() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator(drealJNI.Variables_end__SWIG_0(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator cbegin() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator(drealJNI.Variables_cbegin(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator cend() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_iterator(drealJNI.Variables_cend(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator rbegin() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator(drealJNI.Variables_rbegin__SWIG_0(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator rend() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__reverse_iterator(drealJNI.Variables_rend__SWIG_0(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator crbegin() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator(drealJNI.Variables_crbegin(swigCPtr, this), true); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator crend() { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__const_reverse_iterator(drealJNI.Variables_crend(swigCPtr, this), true); + } + + public void insert(Variable var) { + drealJNI.Variables_insert__SWIG_0(swigCPtr, this, Variable.getCPtr(var), var); + } + + public void insert(Variables vars) { + drealJNI.Variables_insert__SWIG_2(swigCPtr, this, Variables.getCPtr(vars), vars); + } + + public long erase(Variable key) { + return (drealJNI.Variables_erase__SWIG_0(swigCPtr, this, Variable.getCPtr(key), key)); + } + + public long erase(Variables vars) { + return (drealJNI.Variables_erase__SWIG_1(swigCPtr, this, Variables.getCPtr(vars), vars)); + } + + public SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator find(Variable key) { + return new SWIGTYPE_p_std__setT_dreal__drake__symbolic__Variable_t__iterator(drealJNI.Variables_find__SWIG_0(swigCPtr, this, Variable.getCPtr(key), key), true); + } + + public boolean include(Variable key) { + return drealJNI.Variables_include(swigCPtr, this, Variable.getCPtr(key), key); + } + + public boolean IsSubsetOf(Variables vars) { + return drealJNI.Variables_IsSubsetOf(swigCPtr, this, Variables.getCPtr(vars), vars); + } + + public boolean IsSupersetOf(Variables vars) { + return drealJNI.Variables_IsSupersetOf(swigCPtr, this, Variables.getCPtr(vars), vars); + } + + public boolean IsStrictSubsetOf(Variables vars) { + return drealJNI.Variables_IsStrictSubsetOf(swigCPtr, this, Variables.getCPtr(vars), vars); + } + + public boolean IsStrictSupersetOf(Variables vars) { + return drealJNI.Variables_IsStrictSupersetOf(swigCPtr, this, Variables.getCPtr(vars), vars); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VaribaleIntUnorderedMap.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VaribaleIntUnorderedMap.java new file mode 100644 index 0000000000..ae85e1a367 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VaribaleIntUnorderedMap.java @@ -0,0 +1,264 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class VaribaleIntUnorderedMap extends java.util.AbstractMap { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected VaribaleIntUnorderedMap(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(VaribaleIntUnorderedMap obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(VaribaleIntUnorderedMap obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_VaribaleIntUnorderedMap(swigCPtr); + } + swigCPtr = 0; + } + } + + + public int size() { + return sizeImpl(); + } + + public boolean containsKey(java.lang.Object key) { + if (!(key instanceof Variable)) { + return false; + } + + return containsImpl((Variable)key); + } + + public Integer get(java.lang.Object key) { + if (!(key instanceof Variable)) { + return null; + } + + Iterator itr = find((Variable) key); + if (itr.isNot(end())) { + return itr.getValue(); + } + + return null; + } + + public Integer put(Variable key, Integer value) { + Iterator itr = find((Variable) key); + if (itr.isNot(end())) { + Integer oldValue = itr.getValue(); + itr.setValue(value); + return oldValue; + } else { + putUnchecked(key, value); + return null; + } + } + + public Integer remove(java.lang.Object key) { + if (!(key instanceof Variable)) { + return null; + } + + Iterator itr = find((Variable) key); + if (itr.isNot(end())) { + Integer oldValue = itr.getValue(); + removeUnchecked(itr); + return oldValue; + } else { + return null; + } + } + + public java.util.Set> entrySet() { + java.util.Set> setToReturn = + new java.util.HashSet>(); + + Iterator itr = begin(); + final Iterator end = end(); + while (itr.isNot(end)) { + setToReturn.add(new Entry() { + private Iterator iterator; + + private Entry init(Iterator iterator) { + this.iterator = iterator; + return this; + } + + public Variable getKey() { + return iterator.getKey(); + } + + public Integer getValue() { + return iterator.getValue(); + } + + public Integer setValue(Integer newValue) { + Integer oldValue = iterator.getValue(); + iterator.setValue(newValue); + return oldValue; + } + }.init(itr)); + itr = itr.getNextUnchecked(); + } + + return setToReturn; + } + + public VaribaleIntUnorderedMap() { + this(drealJNI.new_VaribaleIntUnorderedMap__SWIG_0(), true); + } + + public VaribaleIntUnorderedMap(VaribaleIntUnorderedMap other) { + this(drealJNI.new_VaribaleIntUnorderedMap__SWIG_1(VaribaleIntUnorderedMap.getCPtr(other), other), true); + } + + static protected class Iterator { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Iterator(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Iterator obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_VaribaleIntUnorderedMap_Iterator(swigCPtr); + } + swigCPtr = 0; + } + } + + private VaribaleIntUnorderedMap.Iterator getNextUnchecked() { + return new VaribaleIntUnorderedMap.Iterator(drealJNI.VaribaleIntUnorderedMap_Iterator_getNextUnchecked(swigCPtr, this), true); + } + + private boolean isNot(VaribaleIntUnorderedMap.Iterator other) { + return drealJNI.VaribaleIntUnorderedMap_Iterator_isNot(swigCPtr, this, VaribaleIntUnorderedMap.Iterator.getCPtr(other), other); + } + + private Variable getKey() { + return new Variable(drealJNI.VaribaleIntUnorderedMap_Iterator_getKey(swigCPtr, this), true); + } + + private int getValue() { + return drealJNI.VaribaleIntUnorderedMap_Iterator_getValue(swigCPtr, this); + } + + private void setValue(int newValue) { + drealJNI.VaribaleIntUnorderedMap_Iterator_setValue(swigCPtr, this, newValue); + } + + } + + public boolean isEmpty() { + return drealJNI.VaribaleIntUnorderedMap_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.VaribaleIntUnorderedMap_clear(swigCPtr, this); + } + + private VaribaleIntUnorderedMap.Iterator find(Variable key) { + return new VaribaleIntUnorderedMap.Iterator(drealJNI.VaribaleIntUnorderedMap_find(swigCPtr, this, Variable.getCPtr(key), key), true); + } + + private VaribaleIntUnorderedMap.Iterator begin() { + return new VaribaleIntUnorderedMap.Iterator(drealJNI.VaribaleIntUnorderedMap_begin(swigCPtr, this), true); + } + + private VaribaleIntUnorderedMap.Iterator end() { + return new VaribaleIntUnorderedMap.Iterator(drealJNI.VaribaleIntUnorderedMap_end(swigCPtr, this), true); + } + + private int sizeImpl() { + return drealJNI.VaribaleIntUnorderedMap_sizeImpl(swigCPtr, this); + } + + private boolean containsImpl(Variable key) { + return drealJNI.VaribaleIntUnorderedMap_containsImpl(swigCPtr, this, Variable.getCPtr(key), key); + } + + private void putUnchecked(Variable key, int value) { + drealJNI.VaribaleIntUnorderedMap_putUnchecked(swigCPtr, this, Variable.getCPtr(key), key, value); + } + + private void removeUnchecked(VaribaleIntUnorderedMap.Iterator itr) { + drealJNI.VaribaleIntUnorderedMap_removeUnchecked(swigCPtr, this, VaribaleIntUnorderedMap.Iterator.getCPtr(itr), itr); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java new file mode 100644 index 0000000000..eb7c08562b --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java @@ -0,0 +1,791 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + + +public class dreal { + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Variable var) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_0(SWIGTYPE_p_std__ostream.getCPtr(os), Variable.getCPtr(var), var), false); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Variable.Type type) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_1(SWIGTYPE_p_std__ostream.getCPtr(os), type.swigValue()), false); + } + + public static boolean Equal(Variables vars1, Variables vars2) { + return drealJNI.Equal__SWIG_0(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2); + } + + public static boolean Less(Variables vars1, Variables vars2) { + return drealJNI.Less__SWIG_0(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream arg0, Variables vars) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_2(SWIGTYPE_p_std__ostream.getCPtr(arg0), Variables.getCPtr(vars), vars), false); + } + + public static Variables intersect(Variables vars1, Variables vars2) { + return new Variables(drealJNI.intersect(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2), true); + } + + public static Variables AddEqual(Variables vars1, Variables vars2) { + return new Variables(drealJNI.AddEqual__SWIG_0(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2), true); + } + + public static Variables AddEqual(Variables vars, Variable var) { + return new Variables(drealJNI.AddEqual__SWIG_1(Variables.getCPtr(vars), vars, Variable.getCPtr(var), var), true); + } + + public static Variables Add(Variables vars1, Variables vars2) { + return new Variables(drealJNI.Add__SWIG_0(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2), true); + } + + public static Variables Add(Variables vars, Variable var) { + return new Variables(drealJNI.Add__SWIG_1(Variables.getCPtr(vars), vars, Variable.getCPtr(var), var), true); + } + + public static Variables Add(Variable var, Variables vars) { + return new Variables(drealJNI.Add__SWIG_2(Variable.getCPtr(var), var, Variables.getCPtr(vars), vars), true); + } + + public static Variables SubstractEqual(Variables vars1, Variables vars2) { + return new Variables(drealJNI.SubstractEqual__SWIG_0(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2), true); + } + + public static Variables SubstractEqual(Variables vars, Variable var) { + return new Variables(drealJNI.SubstractEqual__SWIG_1(Variables.getCPtr(vars), vars, Variable.getCPtr(var), var), true); + } + + public static Variables Substract(Variables vars1, Variables vars2) { + return new Variables(drealJNI.Substract__SWIG_0(Variables.getCPtr(vars1), vars1, Variables.getCPtr(vars2), vars2), true); + } + + public static Variables Substract(Variables vars, Variable var) { + return new Variables(drealJNI.Substract__SWIG_1(Variables.getCPtr(vars), vars, Variable.getCPtr(var), var), true); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Environment env) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_3(SWIGTYPE_p_std__ostream.getCPtr(os), Environment.getCPtr(env), env), false); + } + + public static boolean Less(ExpressionKind k1, ExpressionKind k2) { + return drealJNI.Less__SWIG_1(k1.swigValue(), k2.swigValue()); + } + + public static Expression Add(Expression lhs, Expression rhs) { + return new Expression(drealJNI.Add__SWIG_3(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), true); + } + + public static Expression AddEqual(Expression lhs, Expression rhs) { + return new Expression(drealJNI.AddEqual__SWIG_2(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), false); + } + + public static Expression Substract(Expression lhs, Expression rhs) { + return new Expression(drealJNI.Substract__SWIG_2(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), true); + } + + public static Expression SubstractEqual(Expression lhs, Expression rhs) { + return new Expression(drealJNI.SubstractEqual__SWIG_2(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), false); + } + + public static Expression Add(Expression e) { + return new Expression(drealJNI.Add__SWIG_7(Expression.getCPtr(e), e), true); + } + + public static Expression Substract(Expression e) { + return new Expression(drealJNI.Substract__SWIG_6(Expression.getCPtr(e), e), true); + } + + public static Expression Multiply(Expression lhs, Expression rhs) { + return new Expression(drealJNI.Multiply__SWIG_0(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), true); + } + + public static Expression MultiplyEqual(Expression lhs, Expression rhs) { + return new Expression(drealJNI.MultiplyEqual(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), false); + } + + public static Expression Divide(Expression lhs, Expression rhs) { + return new Expression(drealJNI.Divide(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), true); + } + + public static Expression DivideEqual(Expression lhs, Expression rhs) { + return new Expression(drealJNI.DivideEqual(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), false); + } + + public static Expression real_constant(double lb, double ub, boolean use_lb_as_representative) { + return new Expression(drealJNI.real_constant(lb, ub, use_lb_as_representative), true); + } + + public static Expression log(Expression e) { + return new Expression(drealJNI.log(Expression.getCPtr(e), e), true); + } + + public static Expression abs(Expression e) { + return new Expression(drealJNI.abs(Expression.getCPtr(e), e), true); + } + + public static Expression exp(Expression e) { + return new Expression(drealJNI.exp(Expression.getCPtr(e), e), true); + } + + public static Expression sqrt(Expression e) { + return new Expression(drealJNI.sqrt(Expression.getCPtr(e), e), true); + } + + public static Expression pow(Expression e1, Expression e2) { + return new Expression(drealJNI.pow(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Expression sin(Expression e) { + return new Expression(drealJNI.sin(Expression.getCPtr(e), e), true); + } + + public static Expression cos(Expression e) { + return new Expression(drealJNI.cos(Expression.getCPtr(e), e), true); + } + + public static Expression tan(Expression e) { + return new Expression(drealJNI.tan(Expression.getCPtr(e), e), true); + } + + public static Expression asin(Expression e) { + return new Expression(drealJNI.asin(Expression.getCPtr(e), e), true); + } + + public static Expression acos(Expression e) { + return new Expression(drealJNI.acos(Expression.getCPtr(e), e), true); + } + + public static Expression atan(Expression e) { + return new Expression(drealJNI.atan(Expression.getCPtr(e), e), true); + } + + public static Expression atan2(Expression e1, Expression e2) { + return new Expression(drealJNI.atan2(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Expression sinh(Expression e) { + return new Expression(drealJNI.sinh(Expression.getCPtr(e), e), true); + } + + public static Expression cosh(Expression e) { + return new Expression(drealJNI.cosh(Expression.getCPtr(e), e), true); + } + + public static Expression tanh(Expression e) { + return new Expression(drealJNI.tanh(Expression.getCPtr(e), e), true); + } + + public static Expression min(Expression e1, Expression e2) { + return new Expression(drealJNI.min(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Expression max(Expression e1, Expression e2) { + return new Expression(drealJNI.max(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Expression if_then_else(Formula f_cond, Expression e_then, Expression e_else) { + return new Expression(drealJNI.if_then_else(Formula.getCPtr(f_cond), f_cond, Expression.getCPtr(e_then), e_then, Expression.getCPtr(e_else), e_else), true); + } + + public static Expression uninterpreted_function(String name, Variables vars) { + return new Expression(drealJNI.uninterpreted_function(name, Variables.getCPtr(vars), vars), true); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Expression e) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_4(SWIGTYPE_p_std__ostream.getCPtr(os), Expression.getCPtr(e), e), false); + } + + public static boolean is_constant(Expression e) { + return drealJNI.is_constant__SWIG_0(Expression.getCPtr(e), e); + } + + public static boolean is_real_constant(Expression e) { + return drealJNI.is_real_constant(Expression.getCPtr(e), e); + } + + public static boolean is_variable(Expression e) { + return drealJNI.is_variable__SWIG_0(Expression.getCPtr(e), e); + } + + public static boolean is_addition(Expression e) { + return drealJNI.is_addition(Expression.getCPtr(e), e); + } + + public static boolean is_multiplication(Expression e) { + return drealJNI.is_multiplication(Expression.getCPtr(e), e); + } + + public static boolean is_division(Expression e) { + return drealJNI.is_division(Expression.getCPtr(e), e); + } + + public static boolean is_log(Expression e) { + return drealJNI.is_log(Expression.getCPtr(e), e); + } + + public static boolean is_abs(Expression e) { + return drealJNI.is_abs(Expression.getCPtr(e), e); + } + + public static boolean is_exp(Expression e) { + return drealJNI.is_exp(Expression.getCPtr(e), e); + } + + public static boolean is_sqrt(Expression e) { + return drealJNI.is_sqrt(Expression.getCPtr(e), e); + } + + public static boolean is_pow(Expression e) { + return drealJNI.is_pow(Expression.getCPtr(e), e); + } + + public static boolean is_sin(Expression e) { + return drealJNI.is_sin(Expression.getCPtr(e), e); + } + + public static boolean is_cos(Expression e) { + return drealJNI.is_cos(Expression.getCPtr(e), e); + } + + public static boolean is_tan(Expression e) { + return drealJNI.is_tan(Expression.getCPtr(e), e); + } + + public static boolean is_asin(Expression e) { + return drealJNI.is_asin(Expression.getCPtr(e), e); + } + + public static boolean is_acos(Expression e) { + return drealJNI.is_acos(Expression.getCPtr(e), e); + } + + public static boolean is_atan(Expression e) { + return drealJNI.is_atan(Expression.getCPtr(e), e); + } + + public static boolean is_atan2(Expression e) { + return drealJNI.is_atan2(Expression.getCPtr(e), e); + } + + public static boolean is_sinh(Expression e) { + return drealJNI.is_sinh(Expression.getCPtr(e), e); + } + + public static boolean is_cosh(Expression e) { + return drealJNI.is_cosh(Expression.getCPtr(e), e); + } + + public static boolean is_tanh(Expression e) { + return drealJNI.is_tanh(Expression.getCPtr(e), e); + } + + public static boolean is_min(Expression e) { + return drealJNI.is_min(Expression.getCPtr(e), e); + } + + public static boolean is_max(Expression e) { + return drealJNI.is_max(Expression.getCPtr(e), e); + } + + public static boolean is_if_then_else(Expression e) { + return drealJNI.is_if_then_else(Expression.getCPtr(e), e); + } + + public static boolean is_uninterpreted_function(Expression e) { + return drealJNI.is_uninterpreted_function(Expression.getCPtr(e), e); + } + + public static Expression Sum(ExpressionVector expressions) { + return new Expression(drealJNI.Sum(ExpressionVector.getCPtr(expressions), expressions), true); + } + + public static Expression Prod(ExpressionVector expressions) { + return new Expression(drealJNI.Prod(ExpressionVector.getCPtr(expressions), expressions), true); + } + + public static void swap(Expression a, Expression b) { + drealJNI.swap(Expression.getCPtr(a), a, Expression.getCPtr(b), b); + } + + public static boolean is_constant(Expression e, double v) { + return drealJNI.is_constant__SWIG_1(Expression.getCPtr(e), e, v); + } + + public static boolean is_zero(Expression e) { + return drealJNI.is_zero(Expression.getCPtr(e), e); + } + + public static boolean is_one(Expression e) { + return drealJNI.is_one(Expression.getCPtr(e), e); + } + + public static boolean is_neg_one(Expression e) { + return drealJNI.is_neg_one(Expression.getCPtr(e), e); + } + + public static boolean is_two(Expression e) { + return drealJNI.is_two(Expression.getCPtr(e), e); + } + + public static boolean is_nan(Expression e) { + return drealJNI.is_nan(Expression.getCPtr(e), e); + } + + public static double get_constant_value(Expression e) { + return drealJNI.get_constant_value(Expression.getCPtr(e), e); + } + + public static double get_lb_of_real_constant(Expression e) { + return drealJNI.get_lb_of_real_constant(Expression.getCPtr(e), e); + } + + public static double get_ub_of_real_constant(Expression e) { + return drealJNI.get_ub_of_real_constant(Expression.getCPtr(e), e); + } + + public static Variable get_variable(Expression e) { + return new Variable(drealJNI.get_variable__SWIG_0(Expression.getCPtr(e), e), false); + } + + public static Expression get_argument(Expression e) { + return new Expression(drealJNI.get_argument(Expression.getCPtr(e), e), false); + } + + public static Expression get_first_argument(Expression e) { + return new Expression(drealJNI.get_first_argument(Expression.getCPtr(e), e), false); + } + + public static Expression get_second_argument(Expression e) { + return new Expression(drealJNI.get_second_argument(Expression.getCPtr(e), e), false); + } + + public static double get_constant_in_addition(Expression e) { + return drealJNI.get_constant_in_addition(Expression.getCPtr(e), e); + } + + public static ExpressionDoubleMap get_expr_to_coeff_map_in_addition(Expression e) { + return new ExpressionDoubleMap(drealJNI.get_expr_to_coeff_map_in_addition(Expression.getCPtr(e), e), false); + } + + public static double get_constant_in_multiplication(Expression e) { + return drealJNI.get_constant_in_multiplication(Expression.getCPtr(e), e); + } + + public static ExpressionExpressionMap get_base_to_exponent_map_in_multiplication(Expression e) { + return new ExpressionExpressionMap(drealJNI.get_base_to_exponent_map_in_multiplication(Expression.getCPtr(e), e), false); + } + + public static Formula get_conditional_formula(Expression e) { + return new Formula(drealJNI.get_conditional_formula(Expression.getCPtr(e), e), false); + } + + public static Expression get_then_expression(Expression e) { + return new Expression(drealJNI.get_then_expression(Expression.getCPtr(e), e), false); + } + + public static Expression get_else_expression(Expression e) { + return new Expression(drealJNI.get_else_expression(Expression.getCPtr(e), e), false); + } + + public static String get_uninterpreted_function_name(Expression e) { + return drealJNI.get_uninterpreted_function_name(Expression.getCPtr(e), e); + } + + public static Expression Add(Variable var) { + return new Expression(drealJNI.Add__SWIG_8(Variable.getCPtr(var), var), true); + } + + public static Expression Substract(Variable var) { + return new Expression(drealJNI.Substract__SWIG_8(Variable.getCPtr(var), var), true); + } + + public static boolean Less(FormulaKind k1, FormulaKind k2) { + return drealJNI.Less__SWIG_2(k1.swigValue(), k2.swigValue()); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Formula f) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_5(SWIGTYPE_p_std__ostream.getCPtr(os), Formula.getCPtr(f), f), false); + } + + public static boolean is_false(Formula f) { + return drealJNI.is_false(Formula.getCPtr(f), f); + } + + public static boolean is_true(Formula f) { + return drealJNI.is_true(Formula.getCPtr(f), f); + } + + public static boolean is_variable(Formula f) { + return drealJNI.is_variable__SWIG_1(Formula.getCPtr(f), f); + } + + public static boolean is_equal_to(Formula f) { + return drealJNI.is_equal_to(Formula.getCPtr(f), f); + } + + public static boolean is_not_equal_to(Formula f) { + return drealJNI.is_not_equal_to(Formula.getCPtr(f), f); + } + + public static boolean is_greater_than(Formula f) { + return drealJNI.is_greater_than(Formula.getCPtr(f), f); + } + + public static boolean is_greater_than_or_equal_to(Formula f) { + return drealJNI.is_greater_than_or_equal_to(Formula.getCPtr(f), f); + } + + public static boolean is_less_than(Formula f) { + return drealJNI.is_less_than(Formula.getCPtr(f), f); + } + + public static boolean is_less_than_or_equal_to(Formula f) { + return drealJNI.is_less_than_or_equal_to(Formula.getCPtr(f), f); + } + + public static boolean is_relational(Formula f) { + return drealJNI.is_relational(Formula.getCPtr(f), f); + } + + public static boolean is_conjunction(Formula f) { + return drealJNI.is_conjunction(Formula.getCPtr(f), f); + } + + public static boolean is_disjunction(Formula f) { + return drealJNI.is_disjunction(Formula.getCPtr(f), f); + } + + public static boolean is_negation(Formula f) { + return drealJNI.is_negation(Formula.getCPtr(f), f); + } + + public static boolean is_forall(Formula f) { + return drealJNI.is_forall(Formula.getCPtr(f), f); + } + + public static Formula Not(Formula f) { + return new Formula(drealJNI.Not__SWIG_0(Formula.getCPtr(f), f), true); + } + + public static Formula Equal(Expression e1, Expression e2) { + return new Formula(drealJNI.Equal__SWIG_1(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Formula NotEqual(Expression e1, Expression e2) { + return new Formula(drealJNI.NotEqual__SWIG_0(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Formula Less(Expression e1, Expression e2) { + return new Formula(drealJNI.Less__SWIG_3(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Formula LessEqual(Expression e1, Expression e2) { + return new Formula(drealJNI.LessEqual(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Formula Grater(Expression e1, Expression e2) { + return new Formula(drealJNI.Grater(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Formula GraterEqual(Expression e1, Expression e2) { + return new Formula(drealJNI.GraterEqual(Expression.getCPtr(e1), e1, Expression.getCPtr(e2), e2), true); + } + + public static Formula forall(Variables vars, Formula f) { + return new Formula(drealJNI.forall(Variables.getCPtr(vars), vars, Formula.getCPtr(f), f), true); + } + + public static Formula And(Formula f1, Formula f2) { + return new Formula(drealJNI.And__SWIG_0(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula And(Variable v, Formula f) { + return new Formula(drealJNI.And__SWIG_4(Variable.getCPtr(v), v, Formula.getCPtr(f), f), true); + } + + public static Formula And(Formula f, Variable v) { + return new Formula(drealJNI.And__SWIG_6(Formula.getCPtr(f), f, Variable.getCPtr(v), v), true); + } + + public static Formula And(Variable v1, Variable v2) { + return new Formula(drealJNI.And__SWIG_8(Variable.getCPtr(v1), v1, Variable.getCPtr(v2), v2), true); + } + + public static Formula Or(Formula f1, Formula f2) { + return new Formula(drealJNI.Or__SWIG_0(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula Or(Variable v, Formula f) { + return new Formula(drealJNI.Or__SWIG_4(Variable.getCPtr(v), v, Formula.getCPtr(f), f), true); + } + + public static Formula Or(Formula f, Variable v) { + return new Formula(drealJNI.Or__SWIG_6(Formula.getCPtr(f), f, Variable.getCPtr(v), v), true); + } + + public static Formula Or(Variable v1, Variable v2) { + return new Formula(drealJNI.Or__SWIG_8(Variable.getCPtr(v1), v1, Variable.getCPtr(v2), v2), true); + } + + public static Formula Not(Variable v) { + return new Formula(drealJNI.Not__SWIG_1(Variable.getCPtr(v), v), true); + } + + public static Formula Equal(Variable v1, Variable v2) { + return new Formula(drealJNI.Equal__SWIG_2(Variable.getCPtr(v1), v1, Variable.getCPtr(v2), v2), true); + } + + public static Formula Equal(Formula f1, Formula f2) { + return new Formula(drealJNI.Equal__SWIG_3(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula Equal(Variable v, Formula f) { + return new Formula(drealJNI.Equal__SWIG_4(Variable.getCPtr(v), v, Formula.getCPtr(f), f), true); + } + + public static Formula Equal(Formula f, Variable v) { + return new Formula(drealJNI.Equal__SWIG_5(Formula.getCPtr(f), f, Variable.getCPtr(v), v), true); + } + + public static Formula NotEqual(Variable v1, Variable v2) { + return new Formula(drealJNI.NotEqual__SWIG_1(Variable.getCPtr(v1), v1, Variable.getCPtr(v2), v2), true); + } + + public static Formula NotEqual(Formula f1, Formula f2) { + return new Formula(drealJNI.NotEqual__SWIG_2(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula NotEqual(Variable v, Formula f) { + return new Formula(drealJNI.NotEqual__SWIG_3(Variable.getCPtr(v), v, Formula.getCPtr(f), f), true); + } + + public static Formula NotEqual(Formula f, Variable v) { + return new Formula(drealJNI.NotEqual__SWIG_4(Formula.getCPtr(f), f, Variable.getCPtr(v), v), true); + } + + public static boolean is_nary(Formula f) { + return drealJNI.is_nary(Formula.getCPtr(f), f); + } + + public static Variable get_variable(Formula f) { + return new Variable(drealJNI.get_variable__SWIG_1(Formula.getCPtr(f), f), false); + } + + public static Expression get_lhs_expression(Formula f) { + return new Expression(drealJNI.get_lhs_expression(Formula.getCPtr(f), f), false); + } + + public static Expression get_rhs_expression(Formula f) { + return new Expression(drealJNI.get_rhs_expression(Formula.getCPtr(f), f), false); + } + + public static FormulaSet get_operands(Formula f) { + return new FormulaSet(drealJNI.get_operands(Formula.getCPtr(f), f), false); + } + + public static Formula get_operand(Formula f) { + return new Formula(drealJNI.get_operand(Formula.getCPtr(f), f), false); + } + + public static Variables get_quantified_variables(Formula f) { + return new Variables(drealJNI.get_quantified_variables(Formula.getCPtr(f), f), false); + } + + public static Formula get_quantified_formula(Formula f) { + return new Formula(drealJNI.get_quantified_formula(Formula.getCPtr(f), f), false); + } + + public static Formula logic_and(Formula f1, Formula f2) { + return new Formula(drealJNI.logic_and(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula imply(Formula f1, Formula f2) { + return new Formula(drealJNI.imply__SWIG_0(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula imply(Variable v, Formula f) { + return new Formula(drealJNI.imply__SWIG_1(Variable.getCPtr(v), v, Formula.getCPtr(f), f), true); + } + + public static Formula imply(Formula f, Variable v) { + return new Formula(drealJNI.imply__SWIG_2(Formula.getCPtr(f), f, Variable.getCPtr(v), v), true); + } + + public static Formula imply(Variable v1, Variable v2) { + return new Formula(drealJNI.imply__SWIG_3(Variable.getCPtr(v1), v1, Variable.getCPtr(v2), v2), true); + } + + public static Formula iff(Formula f1, Formula f2) { + return new Formula(drealJNI.iff__SWIG_0(Formula.getCPtr(f1), f1, Formula.getCPtr(f2), f2), true); + } + + public static Formula iff(Variable v, Formula f) { + return new Formula(drealJNI.iff__SWIG_1(Variable.getCPtr(v), v, Formula.getCPtr(f), f), true); + } + + public static Formula iff(Formula f, Variable v) { + return new Formula(drealJNI.iff__SWIG_2(Formula.getCPtr(f), f, Variable.getCPtr(v), v), true); + } + + public static Formula iff(Variable v1, Variable v2) { + return new Formula(drealJNI.iff__SWIG_3(Variable.getCPtr(v1), v1, Variable.getCPtr(v2), v2), true); + } + + public static FormulaSet map(FormulaSet formulas, SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t func) { + return new FormulaSet(drealJNI.map(FormulaSet.getCPtr(formulas), formulas, SWIGTYPE_p_std__functionT_dreal__drake__symbolic__Formula_fdreal__drake__symbolic__Formula_const_RF_t.getCPtr(func)), true); + } + + public static boolean is_atomic(Formula f) { + return drealJNI.is_atomic(Formula.getCPtr(f), f); + } + + public static boolean is_clause(Formula f) { + return drealJNI.is_clause(Formula.getCPtr(f), f); + } + + public static FormulaSet get_clauses(Formula f) { + return new FormulaSet(drealJNI.get_clauses(Formula.getCPtr(f), f), true); + } + + public static boolean is_cnf(Formula f) { + return drealJNI.is_cnf(Formula.getCPtr(f), f); + } + + public static boolean HaveIntersection(Variables variables1, Variables variables2) { + return drealJNI.HaveIntersection(Variables.getCPtr(variables1), variables1, Variables.getCPtr(variables2), variables2); + } + + public static Formula DeltaStrengthen(Formula f, double delta) { + return new Formula(drealJNI.DeltaStrengthen(Formula.getCPtr(f), f, delta), true); + } + + public static Formula DeltaWeaken(Formula f, double delta) { + return new Formula(drealJNI.DeltaWeaken(Formula.getCPtr(f), f, delta), true); + } + + public static boolean IsDifferentiable(Formula f) { + return drealJNI.IsDifferentiable__SWIG_0(Formula.getCPtr(f), f); + } + + public static boolean IsDifferentiable(Expression e) { + return drealJNI.IsDifferentiable__SWIG_1(Expression.getCPtr(e), e); + } + + public static Formula make_conjunction(FormulaVector formulas) { + return new Formula(drealJNI.make_conjunction(FormulaVector.getCPtr(formulas), formulas), true); + } + + public static Formula make_disjunction(FormulaVector formulas) { + return new Formula(drealJNI.make_disjunction(FormulaVector.getCPtr(formulas), formulas), true); + } + + public static VariableVector CreateVector(String prefix, int size, Variable.Type type) { + return new VariableVector(drealJNI.CreateVector__SWIG_0(prefix, size, type.swigValue()), true); + } + + public static VariableVector CreateVector(String prefix, int size) { + return new VariableVector(drealJNI.CreateVector__SWIG_1(prefix, size), true); + } + + public static RelationalOperator Not(RelationalOperator op) { + return RelationalOperator.swigToEnum(drealJNI.Not(op.swigValue())); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, RelationalOperator op) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_6(SWIGTYPE_p_std__ostream.getCPtr(os), op.swigValue()), false); + } + + public static Logic parse_logic(String s) { + return Logic.swigToEnum(drealJNI.parse_logic(s)); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Logic logic) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_7(SWIGTYPE_p_std__ostream.getCPtr(os), logic.swigValue()), false); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Box box) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_8(SWIGTYPE_p_std__ostream.getCPtr(os), Box.getCPtr(box), box), false); + } + + public static boolean Equal(Box b1, Box b2) { + return drealJNI.Equal(Box.getCPtr(b1), b1, Box.getCPtr(b2), b2); + } + + public static boolean NotEqual(Box b1, Box b2) { + return drealJNI.NotEqual(Box.getCPtr(b1), b1, Box.getCPtr(b2), b2); + } + + public static SWIGTYPE_p_std__ostream DisplayDiff(SWIGTYPE_p_std__ostream os, VariableVector variables, SWIGTYPE_p_ibex__IntervalVector old_iv, SWIGTYPE_p_ibex__IntervalVector new_iv) { + return new SWIGTYPE_p_std__ostream(drealJNI.DisplayDiff(SWIGTYPE_p_std__ostream.getCPtr(os), VariableVector.getCPtr(variables), variables, SWIGTYPE_p_ibex__IntervalVector.getCPtr(old_iv), SWIGTYPE_p_ibex__IntervalVector.getCPtr(new_iv)), false); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Config.SatDefaultPhase sat_default_phase) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_9(SWIGTYPE_p_std__ostream.getCPtr(os), sat_default_phase.swigValue()), false); + } + + public static SWIGTYPE_p_std__ostream InsertOperator(SWIGTYPE_p_std__ostream os, Config config) { + return new SWIGTYPE_p_std__ostream(drealJNI.InsertOperator__SWIG_22(SWIGTYPE_p_std__ostream.getCPtr(os), Config.getCPtr(config), config), false); + } + + public static boolean CheckSatisfiability(Formula f, double delta, Box box) { + return drealJNI.CheckSatisfiability__SWIG_0(Formula.getCPtr(f), f, delta, Box.getCPtr(box), box); + } + + public static boolean CheckSatisfiability(Formula f, Config config, Box box) { + return drealJNI.CheckSatisfiability__SWIG_1(Formula.getCPtr(f), f, Config.getCPtr(config), config, Box.getCPtr(box), box); + } + + public static boolean Minimize(Expression objective, Formula constraint, double delta, Box box) { + return drealJNI.Minimize__SWIG_0(Expression.getCPtr(objective), objective, Formula.getCPtr(constraint), constraint, delta, Box.getCPtr(box), box); + } + + public static boolean Minimize(Expression objective, Formula constraint, Config config, Box box) { + return drealJNI.Minimize__SWIG_1(Expression.getCPtr(objective), objective, Formula.getCPtr(constraint), constraint, Config.getCPtr(config), config, Box.getCPtr(box), box); + } + + // self written + public static boolean CheckSatisfiability(Formula f) { + return drealJNI.CheckSatisfiability__SWIG_2(Formula.getCPtr(f)); + } + public static boolean CheckSatisfiabilityTest(Formula f, double delta, Box box) { + System.out.println("Aufruf von Main und jetzt wird drealJNI und dann wrapper aufgerufen"); + return drealJNI.CheckSatisfiability__SWIG_3(Formula.getCPtr(f), delta, Box.getCPtr(box)); + } + + public static void Test() { + drealJNI.Context_Test(); + }; + public static void TestCheckSat() { + drealJNI.Context_TestCheckSat(); + } + public static void satCheck() { + drealJNI.satCheck(); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java new file mode 100644 index 0000000000..3c2a9498bc --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java @@ -0,0 +1,633 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; + +public class drealJNI { + public final static native void FormulaSet_Iterator_incrementUnchecked(long jarg1, FormulaSet.Iterator jarg1_); + public final static native long FormulaSet_Iterator_derefUnchecked(long jarg1, FormulaSet.Iterator jarg1_); + public final static native boolean FormulaSet_Iterator_isNot(long jarg1, FormulaSet.Iterator jarg1_, long jarg2, FormulaSet.Iterator jarg2_); + public final static native void delete_FormulaSet_Iterator(long jarg1); + public final static native long new_FormulaSet__SWIG_0(); + public final static native long new_FormulaSet__SWIG_1(long jarg1, FormulaSet jarg1_); + public final static native boolean FormulaSet_isEmpty(long jarg1, FormulaSet jarg1_); + public final static native void FormulaSet_clear(long jarg1, FormulaSet jarg1_); + public final static native long FormulaSet_begin(long jarg1, FormulaSet jarg1_); + public final static native long FormulaSet_end(long jarg1, FormulaSet jarg1_); + public final static native boolean FormulaSet_addImpl(long jarg1, FormulaSet jarg1_, long jarg2, Formula jarg2_); + public final static native boolean FormulaSet_containsImpl(long jarg1, FormulaSet jarg1_, long jarg2, Formula jarg2_); + public final static native boolean FormulaSet_removeImpl(long jarg1, FormulaSet jarg1_, long jarg2, Formula jarg2_); + public final static native int FormulaSet_sizeImpl(long jarg1, FormulaSet jarg1_); + public final static native boolean FormulaSet_hasNextImpl(long jarg1, FormulaSet jarg1_, long jarg2, FormulaSet.Iterator jarg2_); + public final static native void delete_FormulaSet(long jarg1); + public final static native long new_FormulaVector__SWIG_0(); + public final static native long new_FormulaVector__SWIG_1(long jarg1, FormulaVector jarg1_); + public final static native long FormulaVector_capacity(long jarg1, FormulaVector jarg1_); + public final static native void FormulaVector_reserve(long jarg1, FormulaVector jarg1_, long jarg2); + public final static native boolean FormulaVector_isEmpty(long jarg1, FormulaVector jarg1_); + public final static native void FormulaVector_clear(long jarg1, FormulaVector jarg1_); + public final static native long new_FormulaVector__SWIG_2(int jarg1, long jarg2, Formula jarg2_); + public final static native int FormulaVector_doSize(long jarg1, FormulaVector jarg1_); + public final static native void FormulaVector_doAdd__SWIG_0(long jarg1, FormulaVector jarg1_, long jarg2, Formula jarg2_); + public final static native void FormulaVector_doAdd__SWIG_1(long jarg1, FormulaVector jarg1_, int jarg2, long jarg3, Formula jarg3_); + public final static native long FormulaVector_doRemove(long jarg1, FormulaVector jarg1_, int jarg2); + public final static native long FormulaVector_doGet(long jarg1, FormulaVector jarg1_, int jarg2); + public final static native long FormulaVector_doSet(long jarg1, FormulaVector jarg1_, int jarg2, long jarg3, Formula jarg3_); + public final static native void FormulaVector_doRemoveRange(long jarg1, FormulaVector jarg1_, int jarg2, int jarg3); + public final static native void delete_FormulaVector(long jarg1); + public final static native long new_VariableVector__SWIG_0(); + public final static native long new_VariableVector__SWIG_1(long jarg1, VariableVector jarg1_); + public final static native long VariableVector_capacity(long jarg1, VariableVector jarg1_); + public final static native void VariableVector_reserve(long jarg1, VariableVector jarg1_, long jarg2); + public final static native boolean VariableVector_isEmpty(long jarg1, VariableVector jarg1_); + public final static native void VariableVector_clear(long jarg1, VariableVector jarg1_); + public final static native long new_VariableVector__SWIG_2(int jarg1, long jarg2, Variable jarg2_); + public final static native int VariableVector_doSize(long jarg1, VariableVector jarg1_); + public final static native void VariableVector_doAdd__SWIG_0(long jarg1, VariableVector jarg1_, long jarg2, Variable jarg2_); + public final static native void VariableVector_doAdd__SWIG_1(long jarg1, VariableVector jarg1_, int jarg2, long jarg3, Variable jarg3_); + public final static native long VariableVector_doRemove(long jarg1, VariableVector jarg1_, int jarg2); + public final static native long VariableVector_doGet(long jarg1, VariableVector jarg1_, int jarg2); + public final static native long VariableVector_doSet(long jarg1, VariableVector jarg1_, int jarg2, long jarg3, Variable jarg3_); + public final static native void VariableVector_doRemoveRange(long jarg1, VariableVector jarg1_, int jarg2, int jarg3); + public final static native void delete_VariableVector(long jarg1); + public final static native long new_ExpressionVector__SWIG_0(); + public final static native long new_ExpressionVector__SWIG_1(long jarg1, ExpressionVector jarg1_); + public final static native long ExpressionVector_capacity(long jarg1, ExpressionVector jarg1_); + public final static native void ExpressionVector_reserve(long jarg1, ExpressionVector jarg1_, long jarg2); + public final static native boolean ExpressionVector_isEmpty(long jarg1, ExpressionVector jarg1_); + public final static native void ExpressionVector_clear(long jarg1, ExpressionVector jarg1_); + public final static native long new_ExpressionVector__SWIG_2(int jarg1, long jarg2, Expression jarg2_); + public final static native int ExpressionVector_doSize(long jarg1, ExpressionVector jarg1_); + public final static native void ExpressionVector_doAdd__SWIG_0(long jarg1, ExpressionVector jarg1_, long jarg2, Expression jarg2_); + public final static native void ExpressionVector_doAdd__SWIG_1(long jarg1, ExpressionVector jarg1_, int jarg2, long jarg3, Expression jarg3_); + public final static native long ExpressionVector_doRemove(long jarg1, ExpressionVector jarg1_, int jarg2); + public final static native long ExpressionVector_doGet(long jarg1, ExpressionVector jarg1_, int jarg2); + public final static native long ExpressionVector_doSet(long jarg1, ExpressionVector jarg1_, int jarg2, long jarg3, Expression jarg3_); + public final static native void ExpressionVector_doRemoveRange(long jarg1, ExpressionVector jarg1_, int jarg2, int jarg3); + public final static native void delete_ExpressionVector(long jarg1); + public final static native long new_ExpressionDoubleMap__SWIG_0(); + public final static native long new_ExpressionDoubleMap__SWIG_1(long jarg1, ExpressionDoubleMap jarg1_); + public final static native long ExpressionDoubleMap_Iterator_getNextUnchecked(long jarg1, ExpressionDoubleMap.Iterator jarg1_); + public final static native boolean ExpressionDoubleMap_Iterator_isNot(long jarg1, ExpressionDoubleMap.Iterator jarg1_, long jarg2, ExpressionDoubleMap.Iterator jarg2_); + public final static native long ExpressionDoubleMap_Iterator_getKey(long jarg1, ExpressionDoubleMap.Iterator jarg1_); + public final static native double ExpressionDoubleMap_Iterator_getValue(long jarg1, ExpressionDoubleMap.Iterator jarg1_); + public final static native void ExpressionDoubleMap_Iterator_setValue(long jarg1, ExpressionDoubleMap.Iterator jarg1_, double jarg2); + public final static native void delete_ExpressionDoubleMap_Iterator(long jarg1); + public final static native boolean ExpressionDoubleMap_isEmpty(long jarg1, ExpressionDoubleMap jarg1_); + public final static native void ExpressionDoubleMap_clear(long jarg1, ExpressionDoubleMap jarg1_); + public final static native long ExpressionDoubleMap_find(long jarg1, ExpressionDoubleMap jarg1_, long jarg2, Expression jarg2_); + public final static native long ExpressionDoubleMap_begin(long jarg1, ExpressionDoubleMap jarg1_); + public final static native long ExpressionDoubleMap_end(long jarg1, ExpressionDoubleMap jarg1_); + public final static native int ExpressionDoubleMap_sizeImpl(long jarg1, ExpressionDoubleMap jarg1_); + public final static native boolean ExpressionDoubleMap_containsImpl(long jarg1, ExpressionDoubleMap jarg1_, long jarg2, Expression jarg2_); + public final static native void ExpressionDoubleMap_putUnchecked(long jarg1, ExpressionDoubleMap jarg1_, long jarg2, Expression jarg2_, double jarg3); + public final static native void ExpressionDoubleMap_removeUnchecked(long jarg1, ExpressionDoubleMap jarg1_, long jarg2, ExpressionDoubleMap.Iterator jarg2_); + public final static native void delete_ExpressionDoubleMap(long jarg1); + public final static native long new_ExpressionExpressionMap__SWIG_0(); + public final static native long new_ExpressionExpressionMap__SWIG_1(long jarg1, ExpressionExpressionMap jarg1_); + public final static native long ExpressionExpressionMap_Iterator_getNextUnchecked(long jarg1, ExpressionExpressionMap.Iterator jarg1_); + public final static native boolean ExpressionExpressionMap_Iterator_isNot(long jarg1, ExpressionExpressionMap.Iterator jarg1_, long jarg2, ExpressionExpressionMap.Iterator jarg2_); + public final static native long ExpressionExpressionMap_Iterator_getKey(long jarg1, ExpressionExpressionMap.Iterator jarg1_); + public final static native long ExpressionExpressionMap_Iterator_getValue(long jarg1, ExpressionExpressionMap.Iterator jarg1_); + public final static native void ExpressionExpressionMap_Iterator_setValue(long jarg1, ExpressionExpressionMap.Iterator jarg1_, long jarg2, Expression jarg2_); + public final static native void delete_ExpressionExpressionMap_Iterator(long jarg1); + public final static native boolean ExpressionExpressionMap_isEmpty(long jarg1, ExpressionExpressionMap jarg1_); + public final static native void ExpressionExpressionMap_clear(long jarg1, ExpressionExpressionMap jarg1_); + public final static native long ExpressionExpressionMap_find(long jarg1, ExpressionExpressionMap jarg1_, long jarg2, Expression jarg2_); + public final static native long ExpressionExpressionMap_begin(long jarg1, ExpressionExpressionMap jarg1_); + public final static native long ExpressionExpressionMap_end(long jarg1, ExpressionExpressionMap jarg1_); + public final static native int ExpressionExpressionMap_sizeImpl(long jarg1, ExpressionExpressionMap jarg1_); + public final static native boolean ExpressionExpressionMap_containsImpl(long jarg1, ExpressionExpressionMap jarg1_, long jarg2, Expression jarg2_); + public final static native void ExpressionExpressionMap_putUnchecked(long jarg1, ExpressionExpressionMap jarg1_, long jarg2, Expression jarg2_, long jarg3, Expression jarg3_); + public final static native void ExpressionExpressionMap_removeUnchecked(long jarg1, ExpressionExpressionMap jarg1_, long jarg2, ExpressionExpressionMap.Iterator jarg2_); + public final static native void delete_ExpressionExpressionMap(long jarg1); + public final static native long new_DoubleIntPair__SWIG_0(); + public final static native long new_DoubleIntPair__SWIG_1(double jarg1, int jarg2); + public final static native long new_DoubleIntPair__SWIG_2(long jarg1, DoubleIntPair jarg1_); + public final static native void DoubleIntPair_first_set(long jarg1, DoubleIntPair jarg1_, double jarg2); + public final static native double DoubleIntPair_first_get(long jarg1, DoubleIntPair jarg1_); + public final static native void DoubleIntPair_second_set(long jarg1, DoubleIntPair jarg1_, int jarg2); + public final static native int DoubleIntPair_second_get(long jarg1, DoubleIntPair jarg1_); + public final static native void delete_DoubleIntPair(long jarg1); + public final static native long new_BoxBoxPair__SWIG_0(); + public final static native long new_BoxBoxPair__SWIG_1(long jarg1, Box jarg1_, long jarg2, Box jarg2_); + public final static native long new_BoxBoxPair__SWIG_2(long jarg1, BoxBoxPair jarg1_); + public final static native void BoxBoxPair_first_set(long jarg1, BoxBoxPair jarg1_, long jarg2, Box jarg2_); + public final static native long BoxBoxPair_first_get(long jarg1, BoxBoxPair jarg1_); + public final static native void BoxBoxPair_second_set(long jarg1, BoxBoxPair jarg1_, long jarg2, Box jarg2_); + public final static native long BoxBoxPair_second_get(long jarg1, BoxBoxPair jarg1_); + public final static native void delete_BoxBoxPair(long jarg1); + public final static native long new_VaribaleIntUnorderedMap__SWIG_0(); + public final static native long new_VaribaleIntUnorderedMap__SWIG_1(long jarg1, VaribaleIntUnorderedMap jarg1_); + public final static native long VaribaleIntUnorderedMap_Iterator_getNextUnchecked(long jarg1, VaribaleIntUnorderedMap.Iterator jarg1_); + public final static native boolean VaribaleIntUnorderedMap_Iterator_isNot(long jarg1, VaribaleIntUnorderedMap.Iterator jarg1_, long jarg2, VaribaleIntUnorderedMap.Iterator jarg2_); + public final static native long VaribaleIntUnorderedMap_Iterator_getKey(long jarg1, VaribaleIntUnorderedMap.Iterator jarg1_); + public final static native int VaribaleIntUnorderedMap_Iterator_getValue(long jarg1, VaribaleIntUnorderedMap.Iterator jarg1_); + public final static native void VaribaleIntUnorderedMap_Iterator_setValue(long jarg1, VaribaleIntUnorderedMap.Iterator jarg1_, int jarg2); + public final static native void delete_VaribaleIntUnorderedMap_Iterator(long jarg1); + public final static native boolean VaribaleIntUnorderedMap_isEmpty(long jarg1, VaribaleIntUnorderedMap jarg1_); + public final static native void VaribaleIntUnorderedMap_clear(long jarg1, VaribaleIntUnorderedMap jarg1_); + public final static native long VaribaleIntUnorderedMap_find(long jarg1, VaribaleIntUnorderedMap jarg1_, long jarg2, Variable jarg2_); + public final static native long VaribaleIntUnorderedMap_begin(long jarg1, VaribaleIntUnorderedMap jarg1_); + public final static native long VaribaleIntUnorderedMap_end(long jarg1, VaribaleIntUnorderedMap jarg1_); + public final static native int VaribaleIntUnorderedMap_sizeImpl(long jarg1, VaribaleIntUnorderedMap jarg1_); + public final static native boolean VaribaleIntUnorderedMap_containsImpl(long jarg1, VaribaleIntUnorderedMap jarg1_, long jarg2, Variable jarg2_); + public final static native void VaribaleIntUnorderedMap_putUnchecked(long jarg1, VaribaleIntUnorderedMap jarg1_, long jarg2, Variable jarg2_, int jarg3); + public final static native void VaribaleIntUnorderedMap_removeUnchecked(long jarg1, VaribaleIntUnorderedMap jarg1_, long jarg2, VaribaleIntUnorderedMap.Iterator jarg2_); + public final static native void delete_VaribaleIntUnorderedMap(long jarg1); + public final static native long new_SharedPointerToVector(); + public final static native void delete_SharedPointerToVector(long jarg1); + public final static native long new_SharedPointerToUnorderedMapWithHashValue(); + public final static native void delete_SharedPointerToUnorderedMapWithHashValue(long jarg1); + public final static native long new_SharedPointerToUnorderedMap(); + public final static native void delete_SharedPointerToUnorderedMap(long jarg1); + public final static native long new_Variable__SWIG_0(long jarg1, Variable jarg1_); + public final static native long Variable_AssignOperator__SWIG_0(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long new_Variable__SWIG_1(); + public final static native void delete_Variable(long jarg1); + public final static native long new_Variable__SWIG_2(String jarg1, int jarg2); + public final static native long new_Variable__SWIG_3(String jarg1); + public final static native long new_Variable__SWIG_4(String jarg1, int jarg2, boolean jarg3); + public final static native boolean Variable_is_dummy(long jarg1, Variable jarg1_); + public final static native long Variable_get_id(long jarg1, Variable jarg1_); + public final static native int Variable_get_type(long jarg1, Variable jarg1_); + public final static native long Variable_get_hash(long jarg1, Variable jarg1_); + public final static native String Variable_get_name(long jarg1, Variable jarg1_); + public final static native String Variable_to_string(long jarg1, Variable jarg1_); + public final static native boolean Variable_equal_to(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native boolean Variable_less(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long InsertOperator__SWIG_0(long jarg1, long jarg2, Variable jarg2_); + public final static native long InsertOperator__SWIG_1(long jarg1, int jarg2); + public final static native long new_Variables__SWIG_0(long jarg1, Variables jarg1_); + public final static native long Variables_AssignOperator__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long new_Variables__SWIG_1(); + public final static native void delete_Variables(long jarg1); + public final static native long new_Variables__SWIG_2(long jarg1); + public final static native long Variables_get_hash(long jarg1, Variables jarg1_); + public final static native long Variables_size(long jarg1, Variables jarg1_); + public final static native boolean Variables_empty(long jarg1, Variables jarg1_); + public final static native String Variables_to_string(long jarg1, Variables jarg1_); + public final static native long Variables_begin__SWIG_0(long jarg1, Variables jarg1_); + public final static native long Variables_end__SWIG_0(long jarg1, Variables jarg1_); + public final static native long Variables_cbegin(long jarg1, Variables jarg1_); + public final static native long Variables_cend(long jarg1, Variables jarg1_); + public final static native long Variables_rbegin__SWIG_0(long jarg1, Variables jarg1_); + public final static native long Variables_rend__SWIG_0(long jarg1, Variables jarg1_); + public final static native long Variables_crbegin(long jarg1, Variables jarg1_); + public final static native long Variables_crend(long jarg1, Variables jarg1_); + public final static native void Variables_insert__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native void Variables_insert__SWIG_2(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long Variables_erase__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native long Variables_erase__SWIG_1(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long Variables_find__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native boolean Variables_include(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native boolean Variables_IsSubsetOf(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native boolean Variables_IsSupersetOf(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native boolean Variables_IsStrictSubsetOf(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native boolean Variables_IsStrictSupersetOf(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native boolean Equal__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native boolean Less__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long InsertOperator__SWIG_2(long jarg1, long jarg2, Variables jarg2_); + public final static native long intersect(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long AddEqual__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long AddEqual__SWIG_1(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native long Add__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long Add__SWIG_1(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native long Add__SWIG_2(long jarg1, Variable jarg1_, long jarg2, Variables jarg2_); + public final static native long SubstractEqual__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long SubstractEqual__SWIG_1(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native long Substract__SWIG_0(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long Substract__SWIG_1(long jarg1, Variables jarg1_, long jarg2, Variable jarg2_); + public final static native long new_Environment__SWIG_0(long jarg1, Environment jarg1_); + public final static native long Environment_AssignOperator__SWIG_0(long jarg1, Environment jarg1_, long jarg2, Environment jarg2_); + public final static native long new_Environment__SWIG_1(); + public final static native void delete_Environment(long jarg1); + public final static native long new_Environment__SWIG_2(long jarg1); + public final static native long new_Environment__SWIG_3(long jarg1); + public final static native long new_Environment__SWIG_4(long jarg1); + public final static native long Environment_begin__SWIG_0(long jarg1, Environment jarg1_); + public final static native long Environment_end__SWIG_0(long jarg1, Environment jarg1_); + public final static native long Environment_cbegin(long jarg1, Environment jarg1_); + public final static native long Environment_cend(long jarg1, Environment jarg1_); + public final static native void Environment_insert(long jarg1, Environment jarg1_, long jarg2, Variable jarg2_, double jarg3); + public final static native boolean Environment_empty(long jarg1, Environment jarg1_); + public final static native long Environment_size(long jarg1, Environment jarg1_); + public final static native long Environment_find__SWIG_0(long jarg1, Environment jarg1_, long jarg2, Variable jarg2_); + public final static native long Environment_domain(long jarg1, Environment jarg1_); + public final static native String Environment_to_string(long jarg1, Environment jarg1_); + public final static native long Environment_Indexing__SWIG_0(long jarg1, Environment jarg1_, long jarg2, Variable jarg2_); + public final static native long InsertOperator__SWIG_3(long jarg1, long jarg2, Environment jarg2_); + public final static native boolean Less__SWIG_1(int jarg1, int jarg2); + public final static native long new_Expression__SWIG_0(long jarg1, Expression jarg1_); + public final static native long Expression_AssignOperator__SWIG_0(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native void delete_Expression(long jarg1); + public final static native long new_Expression__SWIG_1(); + public final static native long new_Expression__SWIG_2(double jarg1); + public final static native long new_Expression__SWIG_3(long jarg1, Variable jarg1_); + public final static native int Expression_get_kind(long jarg1, Expression jarg1_); + public final static native long Expression_get_hash(long jarg1, Expression jarg1_); + public final static native long Expression_GetVariables(long jarg1, Expression jarg1_); + public final static native boolean Expression_EqualTo(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native boolean Expression_Less(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native boolean Expression_is_polynomial(long jarg1, Expression jarg1_); + public final static native boolean Expression_include_ite(long jarg1, Expression jarg1_); + public final static native double Expression_Evaluate__SWIG_0(long jarg1, Expression jarg1_, long jarg2, Environment jarg2_); + public final static native double Expression_Evaluate__SWIG_1(long jarg1, Expression jarg1_); + public final static native long Expression_EvaluatePartial(long jarg1, Expression jarg1_, long jarg2, Environment jarg2_); + public final static native long Expression_Expand(long jarg1, Expression jarg1_); + public final static native long Expression_Substitute__SWIG_0(long jarg1, Expression jarg1_, long jarg2, Variable jarg2_, long jarg3, Expression jarg3_); + public final static native long Expression_Substitute__SWIG_1(long jarg1, Expression jarg1_, long jarg2, long jarg3); + public final static native long Expression_Substitute__SWIG_2(long jarg1, Expression jarg1_, long jarg2); + public final static native long Expression_Substitute__SWIG_3(long jarg1, Expression jarg1_, long jarg2); + public final static native long Expression_Differentiate(long jarg1, Expression jarg1_, long jarg2, Variable jarg2_); + public final static native String Expression_to_string(long jarg1, Expression jarg1_); + public final static native long Expression_Zero(); + public final static native long Expression_One(); + public final static native long Expression_Pi(); + public final static native long Expression_E(); + public final static native long Expression_NaN(); + public final static native long Add__SWIG_3(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long AddEqual__SWIG_2(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long Expression_Increment__SWIG_0(long jarg1, Expression jarg1_); + public final static native long Expression_Increment__SWIG_1(long jarg1, Expression jarg1_, int jarg2); + public final static native long Substract__SWIG_2(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long SubstractEqual__SWIG_2(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long Add__SWIG_7(long jarg1, Expression jarg1_); + public final static native long Substract__SWIG_6(long jarg1, Expression jarg1_); + public final static native long Expression_Decrement__SWIG_0(long jarg1, Expression jarg1_); + public final static native long Expression_Decrement__SWIG_1(long jarg1, Expression jarg1_, int jarg2); + public final static native long Multiply__SWIG_0(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long MultiplyEqual(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long Divide(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long DivideEqual(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long real_constant(double jarg1, double jarg2, boolean jarg3); + public final static native long log(long jarg1, Expression jarg1_); + public final static native long abs(long jarg1, Expression jarg1_); + public final static native long exp(long jarg1, Expression jarg1_); + public final static native long sqrt(long jarg1, Expression jarg1_); + public final static native long pow(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long sin(long jarg1, Expression jarg1_); + public final static native long cos(long jarg1, Expression jarg1_); + public final static native long tan(long jarg1, Expression jarg1_); + public final static native long asin(long jarg1, Expression jarg1_); + public final static native long acos(long jarg1, Expression jarg1_); + public final static native long atan(long jarg1, Expression jarg1_); + public final static native long atan2(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long sinh(long jarg1, Expression jarg1_); + public final static native long cosh(long jarg1, Expression jarg1_); + public final static native long tanh(long jarg1, Expression jarg1_); + public final static native long min(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long max(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long if_then_else(long jarg1, Formula jarg1_, long jarg2, Expression jarg2_, long jarg3, Expression jarg3_); + public final static native long uninterpreted_function(String jarg1, long jarg2, Variables jarg2_); + public final static native long InsertOperator__SWIG_4(long jarg1, long jarg2, Expression jarg2_); + public final static native boolean is_constant__SWIG_0(long jarg1, Expression jarg1_); + public final static native boolean is_real_constant(long jarg1, Expression jarg1_); + public final static native boolean is_variable__SWIG_0(long jarg1, Expression jarg1_); + public final static native boolean is_addition(long jarg1, Expression jarg1_); + public final static native boolean is_multiplication(long jarg1, Expression jarg1_); + public final static native boolean is_division(long jarg1, Expression jarg1_); + public final static native boolean is_log(long jarg1, Expression jarg1_); + public final static native boolean is_abs(long jarg1, Expression jarg1_); + public final static native boolean is_exp(long jarg1, Expression jarg1_); + public final static native boolean is_sqrt(long jarg1, Expression jarg1_); + public final static native boolean is_pow(long jarg1, Expression jarg1_); + public final static native boolean is_sin(long jarg1, Expression jarg1_); + public final static native boolean is_cos(long jarg1, Expression jarg1_); + public final static native boolean is_tan(long jarg1, Expression jarg1_); + public final static native boolean is_asin(long jarg1, Expression jarg1_); + public final static native boolean is_acos(long jarg1, Expression jarg1_); + public final static native boolean is_atan(long jarg1, Expression jarg1_); + public final static native boolean is_atan2(long jarg1, Expression jarg1_); + public final static native boolean is_sinh(long jarg1, Expression jarg1_); + public final static native boolean is_cosh(long jarg1, Expression jarg1_); + public final static native boolean is_tanh(long jarg1, Expression jarg1_); + public final static native boolean is_min(long jarg1, Expression jarg1_); + public final static native boolean is_max(long jarg1, Expression jarg1_); + public final static native boolean is_if_then_else(long jarg1, Expression jarg1_); + public final static native boolean is_uninterpreted_function(long jarg1, Expression jarg1_); + public final static native long Sum(long jarg1, ExpressionVector jarg1_); + public final static native long Prod(long jarg1, ExpressionVector jarg1_); + public final static native void swap(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native boolean is_constant__SWIG_1(long jarg1, Expression jarg1_, double jarg2); + public final static native boolean is_zero(long jarg1, Expression jarg1_); + public final static native boolean is_one(long jarg1, Expression jarg1_); + public final static native boolean is_neg_one(long jarg1, Expression jarg1_); + public final static native boolean is_two(long jarg1, Expression jarg1_); + public final static native boolean is_nan(long jarg1, Expression jarg1_); + public final static native double get_constant_value(long jarg1, Expression jarg1_); + public final static native double get_lb_of_real_constant(long jarg1, Expression jarg1_); + public final static native double get_ub_of_real_constant(long jarg1, Expression jarg1_); + public final static native long get_variable__SWIG_0(long jarg1, Expression jarg1_); + public final static native long get_argument(long jarg1, Expression jarg1_); + public final static native long get_first_argument(long jarg1, Expression jarg1_); + public final static native long get_second_argument(long jarg1, Expression jarg1_); + public final static native double get_constant_in_addition(long jarg1, Expression jarg1_); + public final static native long get_expr_to_coeff_map_in_addition(long jarg1, Expression jarg1_); + public final static native double get_constant_in_multiplication(long jarg1, Expression jarg1_); + public final static native long get_base_to_exponent_map_in_multiplication(long jarg1, Expression jarg1_); + public final static native long get_conditional_formula(long jarg1, Expression jarg1_); + public final static native long get_then_expression(long jarg1, Expression jarg1_); + public final static native long get_else_expression(long jarg1, Expression jarg1_); + public final static native String get_uninterpreted_function_name(long jarg1, Expression jarg1_); + public final static native long Add__SWIG_8(long jarg1, Variable jarg1_); + public final static native long Substract__SWIG_8(long jarg1, Variable jarg1_); + public final static native boolean Less__SWIG_2(int jarg1, int jarg2); + public final static native long new_Formula__SWIG_0(); + public final static native long new_Formula__SWIG_1(long jarg1, Formula jarg1_); + public final static native long Formula_AssignOperator__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native void delete_Formula(long jarg1); + public final static native long new_Formula__SWIG_2(long jarg1, Variable jarg1_); + public final static native int Formula_get_kind(long jarg1, Formula jarg1_); + public final static native long Formula_get_hash(long jarg1, Formula jarg1_); + public final static native long Formula_GetFreeVariables(long jarg1, Formula jarg1_); + public final static native boolean Formula_EqualTo(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native boolean Formula_Less(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native boolean Formula_Evaluate__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Environment jarg2_); + public final static native boolean Formula_Evaluate__SWIG_1(long jarg1, Formula jarg1_); + public final static native long Formula_Substitute__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_, long jarg3, Expression jarg3_); + public final static native long Formula_Substitute__SWIG_1(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_, long jarg3, Formula jarg3_); + public final static native long Formula_Substitute__SWIG_2(long jarg1, Formula jarg1_, long jarg2, long jarg3); + public final static native long Formula_Substitute__SWIG_3(long jarg1, Formula jarg1_, long jarg2); + public final static native long Formula_Substitute__SWIG_4(long jarg1, Formula jarg1_, long jarg2); + public final static native String Formula_to_string(long jarg1, Formula jarg1_); + public final static native long Formula_True(); + public final static native long Formula_False(); + public final static native boolean Formula_BoolOperator(long jarg1, Formula jarg1_); + public final static native long InsertOperator__SWIG_5(long jarg1, long jarg2, Formula jarg2_); + public final static native boolean is_false(long jarg1, Formula jarg1_); + public final static native boolean is_true(long jarg1, Formula jarg1_); + public final static native boolean is_variable__SWIG_1(long jarg1, Formula jarg1_); + public final static native boolean is_equal_to(long jarg1, Formula jarg1_); + public final static native boolean is_not_equal_to(long jarg1, Formula jarg1_); + public final static native boolean is_greater_than(long jarg1, Formula jarg1_); + public final static native boolean is_greater_than_or_equal_to(long jarg1, Formula jarg1_); + public final static native boolean is_less_than(long jarg1, Formula jarg1_); + public final static native boolean is_less_than_or_equal_to(long jarg1, Formula jarg1_); + public final static native boolean is_relational(long jarg1, Formula jarg1_); + public final static native boolean is_conjunction(long jarg1, Formula jarg1_); + public final static native boolean is_disjunction(long jarg1, Formula jarg1_); + public final static native boolean is_negation(long jarg1, Formula jarg1_); + public final static native boolean is_forall(long jarg1, Formula jarg1_); + public final static native long Formula_make_conjunction(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long Formula_make_disjunction(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long Not__SWIG_0(long jarg1, Formula jarg1_); + public final static native long Equal__SWIG_1(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long NotEqual__SWIG_0(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long Less__SWIG_3(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long LessEqual(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long Grater(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native long GraterEqual(long jarg1, Expression jarg1_, long jarg2, Expression jarg2_); + public final static native boolean Formula_include_ite(long jarg1, Formula jarg1_); + public final static native long forall(long jarg1, Variables jarg1_, long jarg2, Formula jarg2_); + public final static native long And__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long And__SWIG_4(long jarg1, Variable jarg1_, long jarg2, Formula jarg2_); + public final static native long And__SWIG_6(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_); + public final static native long And__SWIG_8(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long Or__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long Or__SWIG_4(long jarg1, Variable jarg1_, long jarg2, Formula jarg2_); + public final static native long Or__SWIG_6(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_); + public final static native long Or__SWIG_8(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long Not__SWIG_1(long jarg1, Variable jarg1_); + public final static native long Equal__SWIG_2(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long Equal__SWIG_3(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long Equal__SWIG_4(long jarg1, Variable jarg1_, long jarg2, Formula jarg2_); + public final static native long Equal__SWIG_5(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_); + public final static native long NotEqual__SWIG_1(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long NotEqual__SWIG_2(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long NotEqual__SWIG_3(long jarg1, Variable jarg1_, long jarg2, Formula jarg2_); + public final static native long NotEqual__SWIG_4(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_); + public final static native boolean is_nary(long jarg1, Formula jarg1_); + public final static native long get_variable__SWIG_1(long jarg1, Formula jarg1_); + public final static native long get_lhs_expression(long jarg1, Formula jarg1_); + public final static native long get_rhs_expression(long jarg1, Formula jarg1_); + public final static native long get_operands(long jarg1, Formula jarg1_); + public final static native long get_operand(long jarg1, Formula jarg1_); + public final static native long get_quantified_variables(long jarg1, Formula jarg1_); + public final static native long get_quantified_formula(long jarg1, Formula jarg1_); + public final static native long logic_and(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long imply__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long imply__SWIG_1(long jarg1, Variable jarg1_, long jarg2, Formula jarg2_); + public final static native long imply__SWIG_2(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_); + public final static native long imply__SWIG_3(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long iff__SWIG_0(long jarg1, Formula jarg1_, long jarg2, Formula jarg2_); + public final static native long iff__SWIG_1(long jarg1, Variable jarg1_, long jarg2, Formula jarg2_); + public final static native long iff__SWIG_2(long jarg1, Formula jarg1_, long jarg2, Variable jarg2_); + public final static native long iff__SWIG_3(long jarg1, Variable jarg1_, long jarg2, Variable jarg2_); + public final static native long map(long jarg1, FormulaSet jarg1_, long jarg2); + public final static native boolean is_atomic(long jarg1, Formula jarg1_); + public final static native boolean is_clause(long jarg1, Formula jarg1_); + public final static native long get_clauses(long jarg1, Formula jarg1_); + public final static native boolean is_cnf(long jarg1, Formula jarg1_); + public final static native boolean HaveIntersection(long jarg1, Variables jarg1_, long jarg2, Variables jarg2_); + public final static native long DeltaStrengthen(long jarg1, Formula jarg1_, double jarg2); + public final static native long DeltaWeaken(long jarg1, Formula jarg1_, double jarg2); + public final static native boolean IsDifferentiable__SWIG_0(long jarg1, Formula jarg1_); + public final static native boolean IsDifferentiable__SWIG_1(long jarg1, Expression jarg1_); + public final static native long make_conjunction(long jarg1, FormulaVector jarg1_); + public final static native long make_disjunction(long jarg1, FormulaVector jarg1_); + public final static native long CreateVector__SWIG_0(String jarg1, int jarg2, int jarg3); + public final static native long CreateVector__SWIG_1(String jarg1, int jarg2); + public final static native int Not(int jarg1); + public final static native long InsertOperator__SWIG_6(long jarg1, int jarg2); + public final static native int parse_logic(String jarg1); + public final static native long InsertOperator__SWIG_7(long jarg1, int jarg2); + public final static native long new_Box__SWIG_0(); + public final static native long new_Box__SWIG_1(long jarg1, VariableVector jarg1_); + public final static native long new_Box__SWIG_2(long jarg1, Box jarg1_); + public final static native long Box_AssignOperator__SWIG_0(long jarg1, Box jarg1_, long jarg2, Box jarg2_); + public final static native void delete_Box(long jarg1); + public final static native void Box_Add__SWIG_0(long jarg1, Box jarg1_, long jarg2, Variable jarg2_); + public final static native void Box_Add__SWIG_1(long jarg1, Box jarg1_, long jarg2, Variable jarg2_, double jarg3, double jarg4); + public final static native boolean Box_empty(long jarg1, Box jarg1_); + public final static native void Box_set_empty(long jarg1, Box jarg1_); + public final static native int Box_size(long jarg1, Box jarg1_); + public final static native long Box_Indexing__SWIG_0(long jarg1, Box jarg1_, int jarg2); + public final static native long Box_Indexing__SWIG_1(long jarg1, Box jarg1_, long jarg2, Variable jarg2_); + public final static native long Box_variables(long jarg1, Box jarg1_); + public final static native long Box_variable(long jarg1, Box jarg1_, int jarg2); + public final static native boolean Box_has_variable(long jarg1, Box jarg1_, long jarg2, Variable jarg2_); + public final static native long Box_interval_vector(long jarg1, Box jarg1_); + public final static native long Box_mutable_interval_vector(long jarg1, Box jarg1_); + public final static native int Box_index(long jarg1, Box jarg1_, long jarg2, Variable jarg2_); + public final static native long Box_MaxDiam(long jarg1, Box jarg1_); + public final static native long Box_bisect__SWIG_0(long jarg1, Box jarg1_, int jarg2); + public final static native long Box_bisect__SWIG_1(long jarg1, Box jarg1_, long jarg2, Variable jarg2_); + public final static native long Box_InplaceUnion(long jarg1, Box jarg1_, long jarg2, Box jarg2_); + public final static native long InsertOperator__SWIG_8(long jarg1, long jarg2, Box jarg2_); + public final static native boolean Equal(long jarg1, Box jarg1_, long jarg2, Box jarg2_); + public final static native boolean NotEqual(long jarg1, Box jarg1_, long jarg2, Box jarg2_); + public final static native long DisplayDiff(long jarg1, long jarg2, VariableVector jarg2_, long jarg3, long jarg4); + public final static native long new_OptionValueBool__SWIG_0(boolean jarg1); + public final static native long new_OptionValueBool__SWIG_1(long jarg1, OptionValueBool jarg1_); + public final static native long OptionValueBool_AssignOperator__SWIG_0(long jarg1, OptionValueBool jarg1_, long jarg2, OptionValueBool jarg2_); + public final static native void delete_OptionValueBool(long jarg1); + public final static native long OptionValueBool_AssignOperator__SWIG_2(long jarg1, OptionValueBool jarg1_, boolean jarg2); + public final static native long OptionValueBool_AssignOperator__SWIG_3(long jarg1, OptionValueBool jarg1_, long jarg2); + public final static native boolean OptionValueBool_get(long jarg1, OptionValueBool jarg1_); + public final static native void OptionValueBool_set_from_command_line(long jarg1, OptionValueBool jarg1_, boolean jarg2); + public final static native void OptionValueBool_set_from_file(long jarg1, OptionValueBool jarg1_, boolean jarg2); + public final static native long new_OptionValueInt__SWIG_0(int jarg1); + public final static native long new_OptionValueInt__SWIG_1(long jarg1, OptionValueInt jarg1_); + public final static native long OptionValueInt_AssignOperator__SWIG_0(long jarg1, OptionValueInt jarg1_, long jarg2, OptionValueInt jarg2_); + public final static native void delete_OptionValueInt(long jarg1); + public final static native long OptionValueInt_AssignOperator__SWIG_2(long jarg1, OptionValueInt jarg1_, int jarg2); + public final static native long OptionValueInt_AssignOperator__SWIG_3(long jarg1, OptionValueInt jarg1_, long jarg2); + public final static native int OptionValueInt_get(long jarg1, OptionValueInt jarg1_); + public final static native void OptionValueInt_set_from_command_line(long jarg1, OptionValueInt jarg1_, int jarg2); + public final static native void OptionValueInt_set_from_file(long jarg1, OptionValueInt jarg1_, int jarg2); + public final static native long new_OptionValueDouble__SWIG_0(double jarg1); + public final static native long new_OptionValueDouble__SWIG_1(long jarg1, OptionValueDouble jarg1_); + public final static native long OptionValueDouble_AssignOperator__SWIG_0(long jarg1, OptionValueDouble jarg1_, long jarg2, OptionValueDouble jarg2_); + public final static native void delete_OptionValueDouble(long jarg1); + public final static native long OptionValueDouble_AssignOperator__SWIG_2(long jarg1, OptionValueDouble jarg1_, double jarg2); + public final static native long OptionValueDouble_AssignOperator__SWIG_3(long jarg1, OptionValueDouble jarg1_, long jarg2); + public final static native double OptionValueDouble_get(long jarg1, OptionValueDouble jarg1_); + public final static native void OptionValueDouble_set_from_command_line(long jarg1, OptionValueDouble jarg1_, double jarg2); + public final static native void OptionValueDouble_set_from_file(long jarg1, OptionValueDouble jarg1_, double jarg2); + public final static native long new_OptionValueUnsignedInt__SWIG_0(long jarg1); + public final static native long new_OptionValueUnsignedInt__SWIG_1(long jarg1, OptionValueUnsignedInt jarg1_); + public final static native long OptionValueUnsignedInt_AssignOperator__SWIG_0(long jarg1, OptionValueUnsignedInt jarg1_, long jarg2, OptionValueUnsignedInt jarg2_); + public final static native void delete_OptionValueUnsignedInt(long jarg1); + public final static native long OptionValueUnsignedInt_AssignOperator__SWIG_2(long jarg1, OptionValueUnsignedInt jarg1_, long jarg2); + public final static native long OptionValueUnsignedInt_get(long jarg1, OptionValueUnsignedInt jarg1_); + public final static native void OptionValueUnsignedInt_set_from_command_line(long jarg1, OptionValueUnsignedInt jarg1_, long jarg2); + public final static native void OptionValueUnsignedInt_set_from_file(long jarg1, OptionValueUnsignedInt jarg1_, long jarg2); + public final static native long new_Config__SWIG_0(); + public final static native long new_Config__SWIG_1(long jarg1, Config jarg1_); + public final static native long Config_AssignOperator__SWIG_0(long jarg1, Config jarg1_, long jarg2, Config jarg2_); + public final static native void delete_Config(long jarg1); + public final static native double Config_precision(long jarg1, Config jarg1_); + public final static native long Config_mutable_precision(long jarg1, Config jarg1_); + public final static native boolean Config_produce_models(long jarg1, Config jarg1_); + public final static native long Config_mutable_produce_models(long jarg1, Config jarg1_); + public final static native boolean Config_use_polytope(long jarg1, Config jarg1_); + public final static native long Config_mutable_use_polytope(long jarg1, Config jarg1_); + public final static native boolean Config_use_polytope_in_forall(long jarg1, Config jarg1_); + public final static native long Config_mutable_use_polytope_in_forall(long jarg1, Config jarg1_); + public final static native boolean Config_use_worklist_fixpoint(long jarg1, Config jarg1_); + public final static native long Config_mutable_use_worklist_fixpoint(long jarg1, Config jarg1_); + public final static native boolean Config_use_local_optimization(long jarg1, Config jarg1_); + public final static native long Config_mutable_use_local_optimization(long jarg1, Config jarg1_); + public final static native boolean Config_dump_theory_literals(long jarg1, Config jarg1_); + public final static native long Config_mutable_dump_theory_literals(long jarg1, Config jarg1_); + public final static native int Config_number_of_jobs(long jarg1, Config jarg1_); + public final static native long Config_mutable_number_of_jobs(long jarg1, Config jarg1_); + public final static native boolean Config_stack_left_box_first(long jarg1, Config jarg1_); + public final static native long Config_mutable_stack_left_box_first(long jarg1, Config jarg1_); + public final static native long Config_brancher(long jarg1, Config jarg1_); + public final static native long Config_mutable_brancher(long jarg1, Config jarg1_); + public final static native double Config_nlopt_ftol_rel(long jarg1, Config jarg1_); + public final static native long Config_mutable_nlopt_ftol_rel(long jarg1, Config jarg1_); + public final static native double Config_nlopt_ftol_abs(long jarg1, Config jarg1_); + public final static native long Config_mutable_nlopt_ftol_abs(long jarg1, Config jarg1_); + public final static native int Config_nlopt_maxeval(long jarg1, Config jarg1_); + public final static native long Config_mutable_nlopt_maxeval(long jarg1, Config jarg1_); + public final static native double Config_nlopt_maxtime(long jarg1, Config jarg1_); + public final static native long Config_mutable_nlopt_maxtime(long jarg1, Config jarg1_); + public final static native int Config_SatDefaultPhase_False_get(); + public final static native int Config_SatDefaultPhase_True_get(); + public final static native int Config_SatDefaultPhase_JeroslowWang_get(); + public final static native int Config_SatDefaultPhase_RandomInitialPhase_get(); + public final static native int Config_sat_default_phase(long jarg1, Config jarg1_); + public final static native long Config_mutable_sat_default_phase(long jarg1, Config jarg1_); + public final static native long Config_random_seed(long jarg1, Config jarg1_); + public final static native long Config_mutable_random_seed(long jarg1, Config jarg1_); + public final static native boolean Config_smtlib2_compliant(long jarg1, Config jarg1_); + public final static native long Config_mutable_smtlib2_compliant(long jarg1, Config jarg1_); + public final static native double Config_kDefaultPrecision_get(); + public final static native double Config_kDefaultNloptFtolRel_get(); + public final static native double Config_kDefaultNloptFtolAbs_get(); + public final static native int Config_kDefaultNloptMaxEval_get(); + public final static native double Config_kDefaultNloptMaxTime_get(); + public final static native long InsertOperator__SWIG_9(long jarg1, int jarg2); + public final static native long InsertOperator__SWIG_22(long jarg1, long jarg2, Config jarg2_); + public final static native boolean CheckSatisfiability__SWIG_0(long jarg1, Formula jarg1_, double jarg2, long jarg3, Box jarg3_); + public final static native boolean CheckSatisfiability__SWIG_1(long jarg1, Formula jarg1_, long jarg2, Config jarg2_, long jarg3, Box jarg3_); + public final static native boolean Minimize__SWIG_0(long jarg1, Expression jarg1_, long jarg2, Formula jarg2_, double jarg3, long jarg4, Box jarg4_); + public final static native boolean Minimize__SWIG_1(long jarg1, Expression jarg1_, long jarg2, Formula jarg2_, long jarg3, Config jarg3_, long jarg4, Box jarg4_); + public final static native long new_Context__SWIG_0(); + public final static native long new_Context__SWIG_1(long jarg1, Context jarg1_); + public final static native void delete_Context(long jarg1); + public final static native long new_Context__SWIG_2(long jarg1, Config jarg1_); + public final static native void Context_Assert(long jarg1, Context jarg1_, long jarg2, Formula jarg2_); + public final static native long Context_CheckSat(long jarg1, Context jarg1_); + public final static native void Context_DeclareVariable__SWIG_0(long jarg1, Context jarg1_, long jarg2, Variable jarg2_, boolean jarg3); + public final static native void Context_DeclareVariable__SWIG_1(long jarg1, Context jarg1_, long jarg2, Variable jarg2_); + public final static native void Context_DeclareVariable__SWIG_2(long jarg1, Context jarg1_, long jarg2, Variable jarg2_, long jarg3, Expression jarg3_, long jarg4, Expression jarg4_, boolean jarg5); + public final static native void Context_DeclareVariable__SWIG_3(long jarg1, Context jarg1_, long jarg2, Variable jarg2_, long jarg3, Expression jarg3_, long jarg4, Expression jarg4_); + public final static native void Context_Exit(); + public final static native void Context_Minimize__SWIG_0(long jarg1, Context jarg1_, long jarg2, Expression jarg2_); + public final static native void Context_Minimize__SWIG_1(long jarg1, Context jarg1_, long jarg2, ExpressionVector jarg2_); + public final static native void Context_Maximize(long jarg1, Context jarg1_, long jarg2, Expression jarg2_); + public final static native void Context_Pop(long jarg1, Context jarg1_, int jarg2); + public final static native void Context_Push(long jarg1, Context jarg1_, int jarg2); + public final static native void Context_SetInfo__SWIG_0(long jarg1, Context jarg1_, String jarg2, double jarg3); + public final static native void Context_SetInfo__SWIG_1(long jarg1, Context jarg1_, String jarg2, String jarg3); + public final static native void Context_SetInterval(long jarg1, Context jarg1_, long jarg2, Variable jarg2_, double jarg3, double jarg4); + public final static native void Context_SetLogic(long jarg1, Context jarg1_, int jarg2); + public final static native void Context_SetOption__SWIG_0(long jarg1, Context jarg1_, String jarg2, double jarg3); + public final static native void Context_SetOption__SWIG_1(long jarg1, Context jarg1_, String jarg2, String jarg3); + public final static native long Context_GetOption(long jarg1, Context jarg1_, String jarg2); + public final static native long Context_config(long jarg1, Context jarg1_); + public final static native long Context_mutable_config(long jarg1, Context jarg1_); + public final static native String Context_version(); + public final static native long Context_assertions(long jarg1, Context jarg1_); + public final static native long Context_box(long jarg1, Context jarg1_); + public final static native long Context_get_model(long jarg1, Context jarg1_); + + // self written: + public final static native void Config_mutable_precision_0(double value, long config); + public final static native void Config_mutable_produce_models_0(boolean bool, long config); + public final static native void Config_mutable_use_polytope_0(boolean bool, long config); + public final static native void Config_mutable_use_polytope_in_forall_0(boolean bool, long config); + public final static native void Config_mutable_use_worklist_fixpoint_0(boolean bool, long config); + public final static native void Config_mutable_use_local_optimization_0(boolean bool, long config); + public final static native void Config_mutable_dump_theory_literals_0(boolean bool, long config); + public final static native void Config_mutable_number_of_jobs_0(int i, long config); + public final static native void Config_mutable_stack_left_box_first_0(boolean bool, long config); + public final static native void Config_mutable_nlopt_ftol_rel_0(double value, long config); + public final static native void Config_mutable_nlopt_ftol_abs_0(double value, long config); + public final static native void Config_mutable_nlopt_maxeval_0(int i, long config); + public final static native void Config_mutable_nlopt_maxtime_0(double value, long config); + public final static native void Config_mutable_random_seed_0(long seed, long config); + public final static native void Config_mutable_smtlib2_compliant_0(boolean bool, long config); + + + + // For debuging and testing + public final static native boolean CheckSatisfiability__SWIG_2(long formula); + public final static native boolean CheckSatisfiability__SWIG_3(long formula, double delta, long box); + + public final static native long Context_CheckSatBox(long jarg1); + + public final static native void Context_Test(); + + public final static native void Context_TestCheckSat(); + + public final static native void satCheck(); +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx new file mode 100644 index 0000000000..b72e7852ae --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx @@ -0,0 +1,11840 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + + +#define SWIG_VERSION 0x040101 +#define SWIGJAVA + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if defined(__GNUC__) +# if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + +/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ +#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) +# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 +#endif + +/* Intel's compiler complains if a variable which was never initialised is + * cast to void, which is a common idiom which we use to indicate that we + * are aware a variable isn't used. So we just silence that warning. + * See: https://github.com/swig/swig/issues/192 for more discussion. + */ +#ifdef __INTEL_COMPILER +# pragma warning disable 592 +#endif + + +#include +#include +#include + + +/* Support for throwing Java exceptions */ +typedef enum { + SWIG_JavaOutOfMemoryError = 1, + SWIG_JavaIOException, + SWIG_JavaRuntimeException, + SWIG_JavaIndexOutOfBoundsException, + SWIG_JavaArithmeticException, + SWIG_JavaIllegalArgumentException, + SWIG_JavaNullPointerException, + SWIG_JavaDirectorPureVirtual, + SWIG_JavaUnknownError, + SWIG_JavaIllegalStateException, +} SWIG_JavaExceptionCodes; + +typedef struct { + SWIG_JavaExceptionCodes code; + const char *java_exception; +} SWIG_JavaExceptions_t; + + +static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) { + jclass excep; + static const SWIG_JavaExceptions_t java_exceptions[] = { + { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" }, + { SWIG_JavaIOException, "java/io/IOException" }, + { SWIG_JavaRuntimeException, "java/lang/RuntimeException" }, + { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" }, + { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" }, + { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" }, + { SWIG_JavaNullPointerException, "java/lang/NullPointerException" }, + { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" }, + { SWIG_JavaUnknownError, "java/lang/UnknownError" }, + { SWIG_JavaIllegalStateException, "java/lang/IllegalStateException" }, + { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" } + }; + const SWIG_JavaExceptions_t *except_ptr = java_exceptions; + + while (except_ptr->code != code && except_ptr->code) + except_ptr++; + + jenv->ExceptionClear(); + excep = jenv->FindClass(except_ptr->java_exception); + if (excep) + jenv->ThrowNew(excep, msg); +} + + +/* Contract support */ + +#define SWIG_contract_assert(nullreturn, expr, msg) do { if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } } while (0) + +/* SWIG Errors applicable to all language modules, values are reserved from -1 to -99 */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + +#ifdef __cplusplus +#include +/* SwigValueWrapper is described in swig.swg */ +template class SwigValueWrapper { + struct SwigSmartPointer { + T *ptr; + SwigSmartPointer(T *p) : ptr(p) { } + ~SwigSmartPointer() { delete ptr; } + SwigSmartPointer& operator=(SwigSmartPointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + void reset(T *p) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = p; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); + SwigValueWrapper(const SwigValueWrapper& rhs); +public: + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigSmartPointer tmp(new T(t)); pointer = tmp; return *this; } +#if __cplusplus >=201103L + SwigValueWrapper& operator=(T&& t) { SwigSmartPointer tmp(new T(std::move(t))); pointer = tmp; return *this; } + operator T&&() const { return std::move(*pointer.ptr); } +#else + operator T&() const { return *pointer.ptr; } +#endif + T *operator&() const { return pointer.ptr; } + static void reset(SwigValueWrapper& t, T *p) { t.pointer.reset(p); } +}; + +/* + * SwigValueInit() is a generic initialisation solution as the following approach: + * + * T c_result = T(); + * + * doesn't compile for all types for example: + * + * unsigned int c_result = unsigned int(); + */ +template T SwigValueInit() { + return T(); +} + +#if __cplusplus >=201103L +# define SWIG_STD_MOVE(OBJ) std::move(OBJ) +#else +# define SWIG_STD_MOVE(OBJ) OBJ +#endif + +#endif + + +// #include "dreal/symbolic/symbolic.h" +// #include "dreal/smt2/logic.h" +// #include "dreal/util/box.h" +// #include "/opt/libibex/2.7.4/include/ibex.h" +// #include "/opt/libibex/2.7.4/include/ibex/ibex_Vector.h" +// #include "dreal/solver/config.h" +// #include "dreal/api/api.h" +// #include "dreal/solver/context.h" + +#include "dreal/dreal.h" + + +// using namespace ibex; +// using namespace dreal; +// using namespace dreal::drake::symbolic; + +// include optional?? +//#include + +#include + + +#include +#include + + +#include +#include + + +#include +#include + + +SWIGINTERN void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) { + SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError; + switch(code) { + case SWIG_MemoryError: + exception_code = SWIG_JavaOutOfMemoryError; + break; + case SWIG_IOError: + exception_code = SWIG_JavaIOException; + break; + case SWIG_SystemError: + case SWIG_RuntimeError: + exception_code = SWIG_JavaRuntimeException; + break; + case SWIG_OverflowError: + case SWIG_IndexError: + exception_code = SWIG_JavaIndexOutOfBoundsException; + break; + case SWIG_DivisionByZero: + exception_code = SWIG_JavaArithmeticException; + break; + case SWIG_SyntaxError: + case SWIG_ValueError: + case SWIG_TypeError: + exception_code = SWIG_JavaIllegalArgumentException; + break; + case SWIG_UnknownError: + default: + exception_code = SWIG_JavaUnknownError; + break; + } + SWIG_JavaThrowException(jenv, exception_code, msg); +} + + +#include +#include + + +#include + + +#include +#include + + +#include +#include + +SWIGINTERN void std_set_Sl_dreal_drake_symbolic_Formula_Sg__iterator_incrementUnchecked(std::set< dreal::drake::symbolic::Formula >::iterator *self){ + ++(*self); + } +SWIGINTERN dreal::drake::symbolic::Formula std_set_Sl_dreal_drake_symbolic_Formula_Sg__iterator_derefUnchecked(std::set< dreal::drake::symbolic::Formula >::iterator const *self){ + return **self; + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Formula_Sg__iterator_isNot(std::set< dreal::drake::symbolic::Formula >::iterator const *self,std::set< dreal::drake::symbolic::Formula >::iterator other){ + return (*self != other); + } + +/* Check for overflow converting to Java int (always signed 32-bit) from (unsigned variable-bit) size_t */ +SWIGINTERN jint SWIG_JavaIntFromSize_t(size_t size) { + static const jint JINT_MAX = 0x7FFFFFFF; + return (size > (size_t)JINT_MAX) ? -1 : (jint)size; +} + + + SWIGINTERN jint SWIG_SetSize(size_t size) { + jint sz = SWIG_JavaIntFromSize_t(size); + if (sz == -1) { + throw std::out_of_range("set size is too large to fit into a Java int"); + } + + return sz; + } + +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Formula_Sg__addImpl(std::set< dreal::drake::symbolic::Formula > *self,dreal::drake::symbolic::Formula const &key){ + return self->insert(key).second; + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Formula_Sg__containsImpl(std::set< dreal::drake::symbolic::Formula > *self,dreal::drake::symbolic::Formula const &key){ + return (self->count(key) > 0); + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Formula_Sg__removeImpl(std::set< dreal::drake::symbolic::Formula > *self,dreal::drake::symbolic::Formula const &key){ + return (self->erase(key) > 0); + } +SWIGINTERN jint std_set_Sl_dreal_drake_symbolic_Formula_Sg__sizeImpl(std::set< dreal::drake::symbolic::Formula > const *self){ + return SWIG_SetSize(self->size()); + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Formula_Sg__hasNextImpl(std::set< dreal::drake::symbolic::Formula > const *self,std::set< dreal::drake::symbolic::Formula >::iterator const &itr){ + return (itr != self->end()); + } + +SWIGINTERN jint SWIG_VectorSize(size_t size) { + jint sz = SWIG_JavaIntFromSize_t(size); + if (sz == -1) + throw std::out_of_range("vector size is too large to fit into a Java int"); + return sz; +} + +SWIGINTERN std::vector< dreal::drake::symbolic::Formula > *new_std_vector_Sl_dreal_drake_symbolic_Formula_Sg___SWIG_2(jint count,dreal::drake::symbolic::Formula const &value){ + if (count < 0) + throw std::out_of_range("vector count must be positive"); + return new std::vector< dreal::drake::symbolic::Formula >(static_cast::size_type>(count), value); + } +SWIGINTERN jint std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doSize(std::vector< dreal::drake::symbolic::Formula > const *self){ + return SWIG_VectorSize(self->size()); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doAdd__SWIG_0(std::vector< dreal::drake::symbolic::Formula > *self,std::vector< dreal::drake::symbolic::Formula >::value_type const &x){ + self->push_back(x); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doAdd__SWIG_1(std::vector< dreal::drake::symbolic::Formula > *self,jint index,std::vector< dreal::drake::symbolic::Formula >::value_type const &x){ + jint size = static_cast(self->size()); + if (0 <= index && index <= size) { + self->insert(self->begin() + index, x); + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Formula >::value_type std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doRemove(std::vector< dreal::drake::symbolic::Formula > *self,jint index){ + jint size = static_cast(self->size()); + if (0 <= index && index < size) { + dreal::drake::symbolic::Formula const old_value = (*self)[index]; + self->erase(self->begin() + index); + return old_value; + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Formula >::value_type const &std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doGet(std::vector< dreal::drake::symbolic::Formula > *self,jint index){ + jint size = static_cast(self->size()); + if (index >= 0 && index < size) + return (*self)[index]; + else + throw std::out_of_range("vector index out of range"); + } +SWIGINTERN std::vector< dreal::drake::symbolic::Formula >::value_type std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doSet(std::vector< dreal::drake::symbolic::Formula > *self,jint index,std::vector< dreal::drake::symbolic::Formula >::value_type const &val){ + jint size = static_cast(self->size()); + if (index >= 0 && index < size) { + dreal::drake::symbolic::Formula const old_value = (*self)[index]; + (*self)[index] = val; + return old_value; + } + else + throw std::out_of_range("vector index out of range"); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doRemoveRange(std::vector< dreal::drake::symbolic::Formula > *self,jint fromIndex,jint toIndex){ + jint size = static_cast(self->size()); + if (0 <= fromIndex && fromIndex <= toIndex && toIndex <= size) { + self->erase(self->begin() + fromIndex, self->begin() + toIndex); + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Variable > *new_std_vector_Sl_dreal_drake_symbolic_Variable_Sg___SWIG_2(jint count,dreal::drake::symbolic::Variable const &value){ + if (count < 0) + throw std::out_of_range("vector count must be positive"); + return new std::vector< dreal::drake::symbolic::Variable >(static_cast::size_type>(count), value); + } +SWIGINTERN jint std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doSize(std::vector< dreal::drake::symbolic::Variable > const *self){ + return SWIG_VectorSize(self->size()); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doAdd__SWIG_0(std::vector< dreal::drake::symbolic::Variable > *self,std::vector< dreal::drake::symbolic::Variable >::value_type const &x){ + self->push_back(x); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doAdd__SWIG_1(std::vector< dreal::drake::symbolic::Variable > *self,jint index,std::vector< dreal::drake::symbolic::Variable >::value_type const &x){ + jint size = static_cast(self->size()); + if (0 <= index && index <= size) { + self->insert(self->begin() + index, x); + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Variable >::value_type std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doRemove(std::vector< dreal::drake::symbolic::Variable > *self,jint index){ + jint size = static_cast(self->size()); + if (0 <= index && index < size) { + dreal::drake::symbolic::Variable const old_value = (*self)[index]; + self->erase(self->begin() + index); + return old_value; + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Variable >::value_type const &std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doGet(std::vector< dreal::drake::symbolic::Variable > *self,jint index){ + jint size = static_cast(self->size()); + if (index >= 0 && index < size) + return (*self)[index]; + else + throw std::out_of_range("vector index out of range"); + } +SWIGINTERN std::vector< dreal::drake::symbolic::Variable >::value_type std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doSet(std::vector< dreal::drake::symbolic::Variable > *self,jint index,std::vector< dreal::drake::symbolic::Variable >::value_type const &val){ + jint size = static_cast(self->size()); + if (index >= 0 && index < size) { + dreal::drake::symbolic::Variable const old_value = (*self)[index]; + (*self)[index] = val; + return old_value; + } + else + throw std::out_of_range("vector index out of range"); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doRemoveRange(std::vector< dreal::drake::symbolic::Variable > *self,jint fromIndex,jint toIndex){ + jint size = static_cast(self->size()); + if (0 <= fromIndex && fromIndex <= toIndex && toIndex <= size) { + self->erase(self->begin() + fromIndex, self->begin() + toIndex); + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Expression > *new_std_vector_Sl_dreal_drake_symbolic_Expression_Sg___SWIG_2(jint count,dreal::drake::symbolic::Expression const &value){ + if (count < 0) + throw std::out_of_range("vector count must be positive"); + return new std::vector< dreal::drake::symbolic::Expression >(static_cast::size_type>(count), value); + } +SWIGINTERN jint std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doSize(std::vector< dreal::drake::symbolic::Expression > const *self){ + return SWIG_VectorSize(self->size()); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doAdd__SWIG_0(std::vector< dreal::drake::symbolic::Expression > *self,std::vector< dreal::drake::symbolic::Expression >::value_type const &x){ + self->push_back(x); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doAdd__SWIG_1(std::vector< dreal::drake::symbolic::Expression > *self,jint index,std::vector< dreal::drake::symbolic::Expression >::value_type const &x){ + jint size = static_cast(self->size()); + if (0 <= index && index <= size) { + self->insert(self->begin() + index, x); + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Expression >::value_type std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doRemove(std::vector< dreal::drake::symbolic::Expression > *self,jint index){ + jint size = static_cast(self->size()); + if (0 <= index && index < size) { + dreal::drake::symbolic::Expression const old_value = (*self)[index]; + self->erase(self->begin() + index); + return old_value; + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::vector< dreal::drake::symbolic::Expression >::value_type const &std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doGet(std::vector< dreal::drake::symbolic::Expression > *self,jint index){ + jint size = static_cast(self->size()); + if (index >= 0 && index < size) + return (*self)[index]; + else + throw std::out_of_range("vector index out of range"); + } +SWIGINTERN std::vector< dreal::drake::symbolic::Expression >::value_type std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doSet(std::vector< dreal::drake::symbolic::Expression > *self,jint index,std::vector< dreal::drake::symbolic::Expression >::value_type const &val){ + jint size = static_cast(self->size()); + if (index >= 0 && index < size) { + dreal::drake::symbolic::Expression const old_value = (*self)[index]; + (*self)[index] = val; + return old_value; + } + else + throw std::out_of_range("vector index out of range"); + } +SWIGINTERN void std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doRemoveRange(std::vector< dreal::drake::symbolic::Expression > *self,jint fromIndex,jint toIndex){ + jint size = static_cast(self->size()); + if (0 <= fromIndex && fromIndex <= toIndex && toIndex <= size) { + self->erase(self->begin() + fromIndex, self->begin() + toIndex); + } else { + throw std::out_of_range("vector index out of range"); + } + } +SWIGINTERN std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_getNextUnchecked(std::map< dreal::drake::symbolic::Expression,double >::iterator *self){ + std::map< dreal::drake::symbolic::Expression, double, std::less< dreal::drake::symbolic::Expression > >::iterator copy = (*self); + return ++copy; + } +SWIGINTERN bool std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_isNot(std::map< dreal::drake::symbolic::Expression,double >::iterator const *self,std::map< dreal::drake::symbolic::Expression,double >::iterator other){ + return (*self != other); + } +SWIGINTERN dreal::drake::symbolic::Expression std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_getKey(std::map< dreal::drake::symbolic::Expression,double >::iterator const *self){ + return (*self)->first; + } +SWIGINTERN double std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_getValue(std::map< dreal::drake::symbolic::Expression,double >::iterator const *self){ + return (*self)->second; + } +SWIGINTERN void std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_setValue(std::map< dreal::drake::symbolic::Expression,double >::iterator *self,double const &newValue){ + (*self)->second = newValue; + } + + SWIGINTERN jint SWIG_MapSize(size_t size) { + jint sz = SWIG_JavaIntFromSize_t(size); + if (sz == -1) { + throw std::out_of_range("map size is too large to fit into a Java int"); + } + + return sz; + } + +SWIGINTERN jint std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__sizeImpl(std::map< dreal::drake::symbolic::Expression,double > const *self){ + return SWIG_MapSize(self->size()); + } +SWIGINTERN bool std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__containsImpl(std::map< dreal::drake::symbolic::Expression,double > *self,dreal::drake::symbolic::Expression const &key){ + return (self->count(key) > 0); + } +SWIGINTERN void std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__putUnchecked(std::map< dreal::drake::symbolic::Expression,double > *self,dreal::drake::symbolic::Expression const &key,double const &value){ + (*self)[key] = value; + } +SWIGINTERN void std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__removeUnchecked(std::map< dreal::drake::symbolic::Expression,double > *self,std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator const itr){ + self->erase(itr); + } +SWIGINTERN std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_getNextUnchecked(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *self){ + std::map< dreal::drake::symbolic::Expression, dreal::drake::symbolic::Expression, std::less< dreal::drake::symbolic::Expression > >::iterator copy = (*self); + return ++copy; + } +SWIGINTERN bool std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_isNot(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator const *self,std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator other){ + return (*self != other); + } +SWIGINTERN dreal::drake::symbolic::Expression std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_getKey(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator const *self){ + return (*self)->first; + } +SWIGINTERN dreal::drake::symbolic::Expression std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_getValue(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator const *self){ + return (*self)->second; + } +SWIGINTERN void std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_setValue(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *self,dreal::drake::symbolic::Expression const &newValue){ + (*self)->second = newValue; + } +SWIGINTERN jint std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__sizeImpl(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > const *self){ + return SWIG_MapSize(self->size()); + } +SWIGINTERN bool std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__containsImpl(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *self,dreal::drake::symbolic::Expression const &key){ + return (self->count(key) > 0); + } +SWIGINTERN void std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__putUnchecked(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *self,dreal::drake::symbolic::Expression const &key,dreal::drake::symbolic::Expression const &value){ + (*self)[key] = value; + } +SWIGINTERN void std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__removeUnchecked(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *self,std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator const itr){ + self->erase(itr); + } +SWIGINTERN std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_getNextUnchecked(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *self){ + std::unordered_map< dreal::drake::symbolic::Variable, int >::iterator copy = (*self); + return ++copy; + } +SWIGINTERN bool std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_isNot(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *self,std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator other){ + return (*self != other); + } +SWIGINTERN dreal::drake::symbolic::Variable std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_getKey(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *self){ + return (*self)->first; + } +SWIGINTERN int std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_getValue(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *self){ + return (*self)->second; + } +SWIGINTERN void std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_setValue(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *self,int const &newValue){ + (*self)->second = newValue; + } +SWIGINTERN jint std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__sizeImpl(std::unordered_map< dreal::drake::symbolic::Variable,int > const *self){ + return SWIG_MapSize(self->size()); + } +SWIGINTERN bool std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__containsImpl(std::unordered_map< dreal::drake::symbolic::Variable,int > *self,dreal::drake::symbolic::Variable const &key){ + return (self->count(key) > 0); + } +SWIGINTERN void std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__putUnchecked(std::unordered_map< dreal::drake::symbolic::Variable,int > *self,dreal::drake::symbolic::Variable const &key,int const &value){ + (*self)[key] = value; + } +SWIGINTERN void std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__removeUnchecked(std::unordered_map< dreal::drake::symbolic::Variable,int > *self,std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const itr){ + self->erase(itr); + } + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1Iterator_1incrementUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::set< dreal::drake::symbolic::Formula >::iterator *arg1 = (std::set< dreal::drake::symbolic::Formula >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jarg1; + std_set_Sl_dreal_drake_symbolic_Formula_Sg__iterator_incrementUnchecked(arg1); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1Iterator_1derefUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Formula >::iterator *arg1 = (std::set< dreal::drake::symbolic::Formula >::iterator *) 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jarg1; + result = std_set_Sl_dreal_drake_symbolic_Formula_Sg__iterator_derefUnchecked((std::set< dreal::drake::symbolic::Formula >::iterator const *)arg1); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1Iterator_1isNot(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Formula >::iterator *arg1 = (std::set< dreal::drake::symbolic::Formula >::iterator *) 0 ; + std::set< dreal::drake::symbolic::Formula >::iterator arg2 ; + std::set< dreal::drake::symbolic::Formula >::iterator *argp2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jarg1; + argp2 = *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::set< dreal::drake::symbolic::Formula >::iterator"); + return 0; + } + arg2 = *argp2; + result = (bool)std_set_Sl_dreal_drake_symbolic_Formula_Sg__iterator_isNot((std::set< dreal::drake::symbolic::Formula >::iterator const *)arg1,SWIG_STD_MOVE(arg2)); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1FormulaSet_1Iterator(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::set< dreal::drake::symbolic::Formula >::iterator *arg1 = (std::set< dreal::drake::symbolic::Formula >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1FormulaSet_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::set< dreal::drake::symbolic::Formula > *)new std::set< dreal::drake::symbolic::Formula >(); + *(std::set< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1FormulaSet_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = 0 ; + std::set< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::set< dreal::drake::symbolic::Formula > const & is null"); + return 0; + } + result = (std::set< dreal::drake::symbolic::Formula > *)new std::set< dreal::drake::symbolic::Formula >((std::set< dreal::drake::symbolic::Formula > const &)*arg1); + *(std::set< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + result = (bool)((std::set< dreal::drake::symbolic::Formula > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + std::set< dreal::drake::symbolic::Formula >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + result = (arg1)->begin(); + *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jresult = new std::set< dreal::drake::symbolic::Formula >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1end(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + std::set< dreal::drake::symbolic::Formula >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + result = (arg1)->end(); + *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jresult = new std::set< dreal::drake::symbolic::Formula >::iterator(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1addImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Formula_Sg__addImpl(arg1,(dreal::drake::symbolic::Formula const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1containsImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Formula_Sg__containsImpl(arg1,(dreal::drake::symbolic::Formula const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1removeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Formula_Sg__removeImpl(arg1,(dreal::drake::symbolic::Formula const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1sizeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + try { + result = std_set_Sl_dreal_drake_symbolic_Formula_Sg__sizeImpl((std::set< dreal::drake::symbolic::Formula > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaSet_1hasNextImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + std::set< dreal::drake::symbolic::Formula >::iterator *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = *(std::set< dreal::drake::symbolic::Formula >::iterator **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::set< dreal::drake::symbolic::Formula >::iterator const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Formula_Sg__hasNextImpl((std::set< dreal::drake::symbolic::Formula > const *)arg1,(std::set< dreal::drake::symbolic::Formula >::iterator const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1FormulaSet(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::set< dreal::drake::symbolic::Formula > *arg1 = (std::set< dreal::drake::symbolic::Formula > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1FormulaVector_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::vector< dreal::drake::symbolic::Formula > *)new std::vector< dreal::drake::symbolic::Formula >(); + *(std::vector< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1FormulaVector_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = 0 ; + std::vector< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Formula > const & is null"); + return 0; + } + result = (std::vector< dreal::drake::symbolic::Formula > *)new std::vector< dreal::drake::symbolic::Formula >((std::vector< dreal::drake::symbolic::Formula > const &)*arg1); + *(std::vector< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1capacity(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + std::vector< dreal::drake::symbolic::Formula >::size_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + result = ((std::vector< dreal::drake::symbolic::Formula > const *)arg1)->capacity(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1reserve(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + std::vector< dreal::drake::symbolic::Formula >::size_type arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = (std::vector< dreal::drake::symbolic::Formula >::size_type)jarg2; + try { + (arg1)->reserve(arg2); + } catch(std::length_error &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + result = (bool)((std::vector< dreal::drake::symbolic::Formula > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1FormulaVector_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jint jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + jint arg1 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + std::vector< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + try { + result = (std::vector< dreal::drake::symbolic::Formula > *)new_std_vector_Sl_dreal_drake_symbolic_Formula_Sg___SWIG_2(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Formula const &)*arg2); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doSize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + try { + result = std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doSize((std::vector< dreal::drake::symbolic::Formula > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doAdd_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + std::vector< dreal::drake::symbolic::Formula >::value_type *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = *(std::vector< dreal::drake::symbolic::Formula >::value_type **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Formula >::value_type const & is null"); + return ; + } + std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doAdd__SWIG_0(arg1,(dreal::drake::symbolic::Formula const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doAdd_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jlong jarg3, jobject jarg3_) { + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Formula >::value_type *arg3 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = jarg2; + arg3 = *(std::vector< dreal::drake::symbolic::Formula >::value_type **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Formula >::value_type const & is null"); + return ; + } + try { + std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doAdd__SWIG_1(arg1,SWIG_STD_MOVE(arg2),(dreal::drake::symbolic::Formula const &)*arg3); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doRemove(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Formula >::value_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = jarg2; + try { + result = std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doRemove(arg1,SWIG_STD_MOVE(arg2)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Formula >::value_type **)&jresult = new std::vector< dreal::drake::symbolic::Formula >::value_type(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doGet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Formula >::value_type *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = jarg2; + try { + result = (std::vector< dreal::drake::symbolic::Formula >::value_type *) &std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doGet(arg1,SWIG_STD_MOVE(arg2)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Formula >::value_type **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doSet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Formula >::value_type *arg3 = 0 ; + std::vector< dreal::drake::symbolic::Formula >::value_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = jarg2; + arg3 = *(std::vector< dreal::drake::symbolic::Formula >::value_type **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Formula >::value_type const & is null"); + return 0; + } + try { + result = std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doSet(arg1,SWIG_STD_MOVE(arg2),(dreal::drake::symbolic::Formula const &)*arg3); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Formula >::value_type **)&jresult = new std::vector< dreal::drake::symbolic::Formula >::value_type(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_FormulaVector_1doRemoveRange(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + jint arg2 ; + jint arg3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + arg2 = jarg2; + arg3 = jarg3; + try { + std_vector_Sl_dreal_drake_symbolic_Formula_Sg__doRemoveRange(arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1FormulaVector(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::vector< dreal::drake::symbolic::Formula > *arg1 = (std::vector< dreal::drake::symbolic::Formula > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VariableVector_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::vector< dreal::drake::symbolic::Variable > *)new std::vector< dreal::drake::symbolic::Variable >(); + *(std::vector< dreal::drake::symbolic::Variable > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VariableVector_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = 0 ; + std::vector< dreal::drake::symbolic::Variable > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Variable > const & is null"); + return 0; + } + result = (std::vector< dreal::drake::symbolic::Variable > *)new std::vector< dreal::drake::symbolic::Variable >((std::vector< dreal::drake::symbolic::Variable > const &)*arg1); + *(std::vector< dreal::drake::symbolic::Variable > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1capacity(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + std::vector< dreal::drake::symbolic::Variable >::size_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + result = ((std::vector< dreal::drake::symbolic::Variable > const *)arg1)->capacity(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1reserve(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + std::vector< dreal::drake::symbolic::Variable >::size_type arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = (std::vector< dreal::drake::symbolic::Variable >::size_type)jarg2; + try { + (arg1)->reserve(arg2); + } catch(std::length_error &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + result = (bool)((std::vector< dreal::drake::symbolic::Variable > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VariableVector_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jint jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + jint arg1 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + std::vector< dreal::drake::symbolic::Variable > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + try { + result = (std::vector< dreal::drake::symbolic::Variable > *)new_std_vector_Sl_dreal_drake_symbolic_Variable_Sg___SWIG_2(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Variable const &)*arg2); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Variable > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doSize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + try { + result = std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doSize((std::vector< dreal::drake::symbolic::Variable > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doAdd_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + std::vector< dreal::drake::symbolic::Variable >::value_type *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = *(std::vector< dreal::drake::symbolic::Variable >::value_type **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Variable >::value_type const & is null"); + return ; + } + std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doAdd__SWIG_0(arg1,(dreal::drake::symbolic::Variable const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doAdd_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jlong jarg3, jobject jarg3_) { + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Variable >::value_type *arg3 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = jarg2; + arg3 = *(std::vector< dreal::drake::symbolic::Variable >::value_type **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Variable >::value_type const & is null"); + return ; + } + try { + std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doAdd__SWIG_1(arg1,SWIG_STD_MOVE(arg2),(dreal::drake::symbolic::Variable const &)*arg3); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doRemove(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Variable >::value_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = jarg2; + try { + result = std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doRemove(arg1,SWIG_STD_MOVE(arg2)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Variable >::value_type **)&jresult = new std::vector< dreal::drake::symbolic::Variable >::value_type(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doGet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Variable >::value_type *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = jarg2; + try { + result = (std::vector< dreal::drake::symbolic::Variable >::value_type *) &std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doGet(arg1,SWIG_STD_MOVE(arg2)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Variable >::value_type **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doSet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Variable >::value_type *arg3 = 0 ; + std::vector< dreal::drake::symbolic::Variable >::value_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = jarg2; + arg3 = *(std::vector< dreal::drake::symbolic::Variable >::value_type **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Variable >::value_type const & is null"); + return 0; + } + try { + result = std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doSet(arg1,SWIG_STD_MOVE(arg2),(dreal::drake::symbolic::Variable const &)*arg3); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Variable >::value_type **)&jresult = new std::vector< dreal::drake::symbolic::Variable >::value_type(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableVector_1doRemoveRange(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + jint arg2 ; + jint arg3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = jarg2; + arg3 = jarg3; + try { + std_vector_Sl_dreal_drake_symbolic_Variable_Sg__doRemoveRange(arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1VariableVector(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::vector< dreal::drake::symbolic::Variable > *arg1 = (std::vector< dreal::drake::symbolic::Variable > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionVector_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::vector< dreal::drake::symbolic::Expression > *)new std::vector< dreal::drake::symbolic::Expression >(); + *(std::vector< dreal::drake::symbolic::Expression > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionVector_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = 0 ; + std::vector< dreal::drake::symbolic::Expression > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression > const & is null"); + return 0; + } + result = (std::vector< dreal::drake::symbolic::Expression > *)new std::vector< dreal::drake::symbolic::Expression >((std::vector< dreal::drake::symbolic::Expression > const &)*arg1); + *(std::vector< dreal::drake::symbolic::Expression > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1capacity(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + std::vector< dreal::drake::symbolic::Expression >::size_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + result = ((std::vector< dreal::drake::symbolic::Expression > const *)arg1)->capacity(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1reserve(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + std::vector< dreal::drake::symbolic::Expression >::size_type arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = (std::vector< dreal::drake::symbolic::Expression >::size_type)jarg2; + try { + (arg1)->reserve(arg2); + } catch(std::length_error &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + result = (bool)((std::vector< dreal::drake::symbolic::Expression > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionVector_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jint jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + jint arg1 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + std::vector< dreal::drake::symbolic::Expression > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + try { + result = (std::vector< dreal::drake::symbolic::Expression > *)new_std_vector_Sl_dreal_drake_symbolic_Expression_Sg___SWIG_2(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Expression const &)*arg2); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Expression > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doSize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + try { + result = std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doSize((std::vector< dreal::drake::symbolic::Expression > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doAdd_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + std::vector< dreal::drake::symbolic::Expression >::value_type *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = *(std::vector< dreal::drake::symbolic::Expression >::value_type **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression >::value_type const & is null"); + return ; + } + std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doAdd__SWIG_0(arg1,(dreal::drake::symbolic::Expression const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doAdd_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jlong jarg3, jobject jarg3_) { + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Expression >::value_type *arg3 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = jarg2; + arg3 = *(std::vector< dreal::drake::symbolic::Expression >::value_type **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression >::value_type const & is null"); + return ; + } + try { + std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doAdd__SWIG_1(arg1,SWIG_STD_MOVE(arg2),(dreal::drake::symbolic::Expression const &)*arg3); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doRemove(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Expression >::value_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = jarg2; + try { + result = std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doRemove(arg1,SWIG_STD_MOVE(arg2)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Expression >::value_type **)&jresult = new std::vector< dreal::drake::symbolic::Expression >::value_type(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doGet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Expression >::value_type *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = jarg2; + try { + result = (std::vector< dreal::drake::symbolic::Expression >::value_type *) &std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doGet(arg1,SWIG_STD_MOVE(arg2)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Expression >::value_type **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doSet(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + jint arg2 ; + std::vector< dreal::drake::symbolic::Expression >::value_type *arg3 = 0 ; + std::vector< dreal::drake::symbolic::Expression >::value_type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = jarg2; + arg3 = *(std::vector< dreal::drake::symbolic::Expression >::value_type **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression >::value_type const & is null"); + return 0; + } + try { + result = std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doSet(arg1,SWIG_STD_MOVE(arg2),(dreal::drake::symbolic::Expression const &)*arg3); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + *(std::vector< dreal::drake::symbolic::Expression >::value_type **)&jresult = new std::vector< dreal::drake::symbolic::Expression >::value_type(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionVector_1doRemoveRange(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jint jarg3) { + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + jint arg2 ; + jint arg3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = jarg2; + arg3 = jarg3; + try { + std_vector_Sl_dreal_drake_symbolic_Expression_Sg__doRemoveRange(arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return ; + } +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1ExpressionVector(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::vector< dreal::drake::symbolic::Expression > *arg1 = (std::vector< dreal::drake::symbolic::Expression > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionDoubleMap_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::map< dreal::drake::symbolic::Expression,double > *)new std::map< dreal::drake::symbolic::Expression,double >(); + *(std::map< dreal::drake::symbolic::Expression,double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionDoubleMap_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::map< dreal::drake::symbolic::Expression,double > const & is null"); + return 0; + } + result = (std::map< dreal::drake::symbolic::Expression,double > *)new std::map< dreal::drake::symbolic::Expression,double >((std::map< dreal::drake::symbolic::Expression,double > const &)*arg1); + *(std::map< dreal::drake::symbolic::Expression,double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1Iterator_1getNextUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,double >::iterator *) 0 ; + std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg1; + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_getNextUnchecked(arg1); + *(std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1Iterator_1isNot(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,double >::iterator *) 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator arg2 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator *argp2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg1; + argp2 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::map< dreal::drake::symbolic::Expression,double >::iterator"); + return 0; + } + arg2 = *argp2; + result = (bool)std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_isNot((std::map< dreal::drake::symbolic::Expression,double >::iterator const *)arg1,SWIG_STD_MOVE(arg2)); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1Iterator_1getKey(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,double >::iterator *) 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg1; + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_getKey((std::map< dreal::drake::symbolic::Expression,double >::iterator const *)arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1Iterator_1getValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,double >::iterator *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg1; + result = (double)std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_getValue((std::map< dreal::drake::symbolic::Expression,double >::iterator const *)arg1); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1Iterator_1setValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + std::map< dreal::drake::symbolic::Expression,double >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,double >::iterator *) 0 ; + double *arg2 = 0 ; + double temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg1; + temp2 = (double)jarg2; + arg2 = &temp2; + std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__iterator_setValue(arg1,(double const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1ExpressionDoubleMap_1Iterator(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::map< dreal::drake::symbolic::Expression,double >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,double >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + result = (bool)((std::map< dreal::drake::symbolic::Expression,double > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1find(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (arg1)->find((dreal::drake::symbolic::Expression const &)*arg2); + *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,double >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + result = (arg1)->begin(); + *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,double >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1end(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + std::map< dreal::drake::symbolic::Expression,double >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + result = (arg1)->end(); + *(std::map< dreal::drake::symbolic::Expression,double >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,double >::iterator(result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1sizeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + try { + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__sizeImpl((std::map< dreal::drake::symbolic::Expression,double > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1containsImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__containsImpl(arg1,(dreal::drake::symbolic::Expression const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1putUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jdouble jarg3) { + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + double *arg3 = 0 ; + double temp3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + temp3 = (double)jarg3; + arg3 = &temp3; + std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__putUnchecked(arg1,(dreal::drake::symbolic::Expression const &)*arg2,(double const &)*arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionDoubleMap_1removeUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator arg2 ; + std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator const *argp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + argp2 = *(std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > >::iterator const"); + return ; + } + arg2 = *argp2; + std_map_Sl_dreal_drake_symbolic_Expression_Sc_double_Sg__removeUnchecked(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1ExpressionDoubleMap(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::map< dreal::drake::symbolic::Expression,double > *arg1 = (std::map< dreal::drake::symbolic::Expression,double > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::map< dreal::drake::symbolic::Expression,double > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionExpressionMap_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *)new std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >(); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1ExpressionExpressionMap_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > const & is null"); + return 0; + } + result = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *)new std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >((std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > const &)*arg1); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1Iterator_1getNextUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *) 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg1; + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_getNextUnchecked(arg1); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1Iterator_1isNot(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *) 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator arg2 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *argp2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg1; + argp2 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator"); + return 0; + } + arg2 = *argp2; + result = (bool)std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_isNot((std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator const *)arg1,SWIG_STD_MOVE(arg2)); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1Iterator_1getKey(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *) 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg1; + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_getKey((std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator const *)arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1Iterator_1getValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *) 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg1; + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_getValue((std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator const *)arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1Iterator_1setValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__iterator_setValue(arg1,(dreal::drake::symbolic::Expression const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1ExpressionExpressionMap_1Iterator(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + result = (bool)((std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1find(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (arg1)->find((dreal::drake::symbolic::Expression const &)*arg2); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + result = (arg1)->begin(); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1end(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + result = (arg1)->end(); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator **)&jresult = new std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression >::iterator(result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1sizeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + try { + result = std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__sizeImpl((std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1containsImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__containsImpl(arg1,(dreal::drake::symbolic::Expression const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1putUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *arg3 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + arg3 = *(dreal::drake::symbolic::Expression **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__putUnchecked(arg1,(dreal::drake::symbolic::Expression const &)*arg2,(dreal::drake::symbolic::Expression const &)*arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_ExpressionExpressionMap_1removeUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator arg2 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator const *argp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + argp2 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > >::iterator const"); + return ; + } + arg2 = *argp2; + std_map_Sl_dreal_drake_symbolic_Expression_Sc_dreal_drake_symbolic_Expression_Sg__removeUnchecked(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1ExpressionExpressionMap(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *arg1 = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1DoubleIntPair_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::pair< double,int > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::pair< double,int > *)new std::pair< double,int >(); + *(std::pair< double,int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1DoubleIntPair_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jdouble jarg1, jint jarg2) { + jlong jresult = 0 ; + double arg1 ; + int arg2 ; + std::pair< double,int > *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = (double)jarg1; + arg2 = (int)jarg2; + result = (std::pair< double,int > *)new std::pair< double,int >(arg1,arg2); + *(std::pair< double,int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1DoubleIntPair_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::pair< double,int > *arg1 = 0 ; + std::pair< double,int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< double,int > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::pair< double,int > const & is null"); + return 0; + } + result = (std::pair< double,int > *)new std::pair< double,int >((std::pair< double,int > const &)*arg1); + *(std::pair< double,int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DoubleIntPair_1first_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + std::pair< double,int > *arg1 = (std::pair< double,int > *) 0 ; + double arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< double,int > **)&jarg1; + arg2 = (double)jarg2; + if (arg1) (arg1)->first = arg2; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DoubleIntPair_1first_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + std::pair< double,int > *arg1 = (std::pair< double,int > *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< double,int > **)&jarg1; + result = (double) ((arg1)->first); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DoubleIntPair_1second_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + std::pair< double,int > *arg1 = (std::pair< double,int > *) 0 ; + int arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< double,int > **)&jarg1; + arg2 = (int)jarg2; + if (arg1) (arg1)->second = arg2; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DoubleIntPair_1second_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::pair< double,int > *arg1 = (std::pair< double,int > *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< double,int > **)&jarg1; + result = (int) ((arg1)->second); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1DoubleIntPair(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::pair< double,int > *arg1 = (std::pair< double,int > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::pair< double,int > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1BoxBoxPair_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::pair< dreal::Box,dreal::Box > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::pair< dreal::Box,dreal::Box > *)new std::pair< dreal::Box,dreal::Box >(); + *(std::pair< dreal::Box,dreal::Box > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1BoxBoxPair_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::Box arg1 ; + dreal::Box arg2 ; + dreal::Box *argp1 ; + dreal::Box *argp2 ; + std::pair< dreal::Box,dreal::Box > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + argp1 = *(dreal::Box **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Box"); + return 0; + } + arg1 = *argp1; + argp2 = *(dreal::Box **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Box"); + return 0; + } + arg2 = *argp2; + result = (std::pair< dreal::Box,dreal::Box > *)new std::pair< dreal::Box,dreal::Box >(arg1,arg2); + *(std::pair< dreal::Box,dreal::Box > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1BoxBoxPair_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::pair< dreal::Box,dreal::Box > *arg1 = 0 ; + std::pair< dreal::Box,dreal::Box > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< dreal::Box,dreal::Box > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::pair< dreal::Box,dreal::Box > const & is null"); + return 0; + } + result = (std::pair< dreal::Box,dreal::Box > *)new std::pair< dreal::Box,dreal::Box >((std::pair< dreal::Box,dreal::Box > const &)*arg1); + *(std::pair< dreal::Box,dreal::Box > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_BoxBoxPair_1first_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::pair< dreal::Box,dreal::Box > *arg1 = (std::pair< dreal::Box,dreal::Box > *) 0 ; + dreal::Box *arg2 = (dreal::Box *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::pair< dreal::Box,dreal::Box > **)&jarg1; + arg2 = *(dreal::Box **)&jarg2; + if (arg1) (arg1)->first = *arg2; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_BoxBoxPair_1first_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::pair< dreal::Box,dreal::Box > *arg1 = (std::pair< dreal::Box,dreal::Box > *) 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< dreal::Box,dreal::Box > **)&jarg1; + result = (dreal::Box *)& ((arg1)->first); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_BoxBoxPair_1second_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::pair< dreal::Box,dreal::Box > *arg1 = (std::pair< dreal::Box,dreal::Box > *) 0 ; + dreal::Box *arg2 = (dreal::Box *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::pair< dreal::Box,dreal::Box > **)&jarg1; + arg2 = *(dreal::Box **)&jarg2; + if (arg1) (arg1)->second = *arg2; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_BoxBoxPair_1second_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::pair< dreal::Box,dreal::Box > *arg1 = (std::pair< dreal::Box,dreal::Box > *) 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::pair< dreal::Box,dreal::Box > **)&jarg1; + result = (dreal::Box *)& ((arg1)->second); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1BoxBoxPair(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::pair< dreal::Box,dreal::Box > *arg1 = (std::pair< dreal::Box,dreal::Box > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::pair< dreal::Box,dreal::Box > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VaribaleIntUnorderedMap_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::unordered_map< dreal::drake::symbolic::Variable,int > *)new std::unordered_map< dreal::drake::symbolic::Variable,int >(); + *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VaribaleIntUnorderedMap_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::unordered_map< dreal::drake::symbolic::Variable,int > const & is null"); + return 0; + } + result = (std::unordered_map< dreal::drake::symbolic::Variable,int > *)new std::unordered_map< dreal::drake::symbolic::Variable,int >((std::unordered_map< dreal::drake::symbolic::Variable,int > const &)*arg1); + *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1Iterator_1getNextUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *) 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg1; + result = std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_getNextUnchecked(arg1); + *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jresult = new std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1Iterator_1isNot(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *) 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator arg2 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *argp2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg1; + argp2 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator"); + return 0; + } + arg2 = *argp2; + result = (bool)std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_isNot((std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *)arg1,SWIG_STD_MOVE(arg2)); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1Iterator_1getKey(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *) 0 ; + dreal::drake::symbolic::Variable result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg1; + result = std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_getKey((std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *)arg1); + *(dreal::drake::symbolic::Variable **)&jresult = new dreal::drake::symbolic::Variable(result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1Iterator_1getValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg1; + result = (int)std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_getValue((std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *)arg1); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1Iterator_1setValue(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *) 0 ; + int *arg2 = 0 ; + int temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg1; + temp2 = (int)jarg2; + arg2 = &temp2; + std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__iterator_setValue(arg1,(int const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1VaribaleIntUnorderedMap_1Iterator(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + result = (bool)((std::unordered_map< dreal::drake::symbolic::Variable,int > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1find(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (arg1)->find((dreal::drake::symbolic::Variable const &)*arg2); + *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jresult = new std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + result = (arg1)->begin(); + *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jresult = new std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1end(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + result = (arg1)->end(); + *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jresult = new std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator(result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1sizeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + try { + result = std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__sizeImpl((std::unordered_map< dreal::drake::symbolic::Variable,int > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1containsImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__containsImpl(arg1,(dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1putUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jint jarg3) { + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + int *arg3 = 0 ; + int temp3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + temp3 = (int)jarg3; + arg3 = &temp3; + std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__putUnchecked(arg1,(dreal::drake::symbolic::Variable const &)*arg2,(int const &)*arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VaribaleIntUnorderedMap_1removeUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator arg2 ; + std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const *argp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + argp2 = *(std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const"); + return ; + } + arg2 = *argp2; + std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__removeUnchecked(arg1,SWIG_STD_MOVE(arg2)); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1VaribaleIntUnorderedMap(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::unordered_map< dreal::drake::symbolic::Variable,int > *arg1 = (std::unordered_map< dreal::drake::symbolic::Variable,int > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::unordered_map< dreal::drake::symbolic::Variable,int > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1SharedPointerToVector(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > > *)new std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > >(); + *(std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1SharedPointerToVector(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > > *arg1 = (std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::shared_ptr< std::vector< dreal::drake::symbolic::Variable > > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1SharedPointerToUnorderedMapWithHashValue(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > *)new std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > >(); + *(std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1SharedPointerToUnorderedMapWithHashValue(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > *arg1 = (std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::shared_ptr< std::unordered_map< dreal::drake::symbolic::Variable,int,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1SharedPointerToUnorderedMap(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > > *)new std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > >(); + *(std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1SharedPointerToUnorderedMap(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > > *arg1 = (std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::shared_ptr< std::unordered_map< int,dreal::drake::symbolic::Variable > > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variable_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variable *)new dreal::drake::symbolic::Variable((dreal::drake::symbolic::Variable const &)*arg1); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variable *) &(arg1)->operator =((dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variable_1_1SWIG_11(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::drake::symbolic::Variable *)new dreal::drake::symbolic::Variable(); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Variable(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variable_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jstring jarg1, jint jarg2) { + jlong jresult = 0 ; + std::string arg1 ; + dreal::drake::symbolic::Variable::Type arg2 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + (&arg1)->assign(arg1_pstr); + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + arg2 = (dreal::drake::symbolic::Variable::Type)jarg2; + result = (dreal::drake::symbolic::Variable *)new dreal::drake::symbolic::Variable(arg1,arg2); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variable_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jstring jarg1) { + jlong jresult = 0 ; + std::string arg1 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + (&arg1)->assign(arg1_pstr); + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + result = (dreal::drake::symbolic::Variable *)new dreal::drake::symbolic::Variable(arg1); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variable_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jstring jarg1, jint jarg2, jboolean jarg3) { + jlong jresult = 0 ; + std::string arg1 ; + dreal::drake::symbolic::Variable::Type arg2 ; + bool arg3 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + (&arg1)->assign(arg1_pstr); + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + arg2 = (dreal::drake::symbolic::Variable::Type)jarg2; + arg3 = jarg3 ? true : false; + result = (dreal::drake::symbolic::Variable *)new dreal::drake::symbolic::Variable(arg1,arg2,arg3); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1is_1dummy(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + result = (bool)((dreal::drake::symbolic::Variable const *)arg1)->is_dummy(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1get_1id(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + dreal::drake::symbolic::Variable::Id result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + result = ((dreal::drake::symbolic::Variable const *)arg1)->get_id(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1get_1type(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + dreal::drake::symbolic::Variable::Type result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + result = (dreal::drake::symbolic::Variable::Type)((dreal::drake::symbolic::Variable const *)arg1)->get_type(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1get_1hash(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + result = ((dreal::drake::symbolic::Variable const *)arg1)->get_hash(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1get_1name(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + std::string result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + result = ((dreal::drake::symbolic::Variable const *)arg1)->get_name(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1to_1string(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + std::string result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + result = ((dreal::drake::symbolic::Variable const *)arg1)->to_string(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1equal_1to(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variable const *)arg1)->equal_to((dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variable_1less(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = (dreal::drake::symbolic::Variable *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variable const *)arg1)->less((dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (std::ostream *) &operator <<(*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::drake::symbolic::Variable::Type arg2 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = (dreal::drake::symbolic::Variable::Type)jarg2; + result = (std::ostream *) &dreal::drake::symbolic::operator <<(*arg1,arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variables_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variables *)new dreal::drake::symbolic::Variables((dreal::drake::symbolic::Variables const &)*arg1); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variables *) &(arg1)->operator =((dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variables_1_1SWIG_11(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::drake::symbolic::Variables *)new dreal::drake::symbolic::Variables(); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Variables(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Variables_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + SwigValueWrapper< std::initializer_list< dreal::drake::symbolic::Variable > > arg1 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + + result = (dreal::drake::symbolic::Variables *)new dreal::drake::symbolic::Variables(arg1); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1get_1hash(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->get_hash(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1size(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + //SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::size_type > result; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->size(); + //*(dreal::drake::symbolic::Variables::size_type **)&jresult = new dreal::drake::symbolic::Variables::size_type(result); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1empty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = (bool)((dreal::drake::symbolic::Variables const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1to_1string(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + std::string result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->to_string(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1begin_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = (arg1)->begin(); + *(dreal::drake::symbolic::Variables::iterator **)&jresult = new dreal::drake::symbolic::Variables::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1end_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = (arg1)->end(); + *(dreal::drake::symbolic::Variables::iterator **)&jresult = new dreal::drake::symbolic::Variables::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1cbegin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::const_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->cbegin(); + *(dreal::drake::symbolic::Variables::const_iterator **)&jresult = new dreal::drake::symbolic::Variables::const_iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1cend(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::const_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->cend(); + *(dreal::drake::symbolic::Variables::const_iterator **)&jresult = new dreal::drake::symbolic::Variables::const_iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1rbegin_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::reverse_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = (arg1)->rbegin(); + *(dreal::drake::symbolic::Variables::reverse_iterator **)&jresult = new dreal::drake::symbolic::Variables::reverse_iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1rend_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::reverse_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = (arg1)->rend(); + *(dreal::drake::symbolic::Variables::reverse_iterator **)&jresult = new dreal::drake::symbolic::Variables::reverse_iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1crbegin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::const_reverse_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->crbegin(); + *(dreal::drake::symbolic::Variables::const_reverse_iterator **)&jresult = new dreal::drake::symbolic::Variables::const_reverse_iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1crend(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::const_reverse_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + result = ((dreal::drake::symbolic::Variables const *)arg1)->crend(); + *(dreal::drake::symbolic::Variables::const_reverse_iterator **)&jresult = new dreal::drake::symbolic::Variables::const_reverse_iterator(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1insert_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + (arg1)->insert((dreal::drake::symbolic::Variable const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1insert_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return ; + } + (arg1)->insert((dreal::drake::symbolic::Variables const &)*arg2); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1erase_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + //SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::size_type > result; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (arg1)->erase((dreal::drake::symbolic::Variable const &)*arg2); + //*(dreal::drake::symbolic::Variables::size_type **)&jresult = new dreal::drake::symbolic::Variables::size_type(result); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1erase_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + //SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::size_type > result; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (arg1)->erase((dreal::drake::symbolic::Variables const &)*arg2); + //*(dreal::drake::symbolic::Variables::size_type **)&jresult = new dreal::drake::symbolic::Variables::size_type(result); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1find_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + SwigValueWrapper< std::set< dreal::drake::symbolic::Variable >::iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (arg1)->find((dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Variables::iterator **)&jresult = new dreal::drake::symbolic::Variables::iterator(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1include(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variables const *)arg1)->include((dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1IsSubsetOf(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variables const *)arg1)->IsSubsetOf((dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1IsSupersetOf(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variables const *)arg1)->IsSupersetOf((dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1IsStrictSubsetOf(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variables const *)arg1)->IsStrictSubsetOf((dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Variables_1IsStrictSupersetOf(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = (dreal::drake::symbolic::Variables *) 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Variables const *)arg1)->IsStrictSupersetOf((dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)operator ==((dreal::drake::symbolic::Variables const &)*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Less_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)operator <((dreal::drake::symbolic::Variables const &)*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (std::ostream *) &operator <<(*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_intersect(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = dreal::drake::symbolic::intersect((dreal::drake::symbolic::Variables const &)*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_AddEqual_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator +=(*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_AddEqual_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator +=(*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Add_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables arg1 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Variables *argp1 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + argp1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Variables"); + return 0; + } + arg1 = *argp1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator +(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Add_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables arg1 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Variables *argp1 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + argp1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Variables"); + return 0; + } + arg1 = *argp1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator +(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Add_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variables arg2 ; + dreal::drake::symbolic::Variables *argp2 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + argp2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Variables"); + return 0; + } + arg2 = *argp2; + result = dreal::drake::symbolic::operator +((dreal::drake::symbolic::Variable const &)*arg1,SWIG_STD_MOVE(arg2)); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_SubstractEqual_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator -=(*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_SubstractEqual_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator -=(*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Substract_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables arg1 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Variables *argp1 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + argp1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Variables"); + return 0; + } + arg1 = *argp1; + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator -(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Substract_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables arg1 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Variables *argp1 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + argp1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Variables"); + return 0; + } + arg1 = *argp1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator -(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Environment_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = 0 ; + dreal::drake::symbolic::Environment *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Environment *)new dreal::drake::symbolic::Environment((dreal::drake::symbolic::Environment const &)*arg1); + *(dreal::drake::symbolic::Environment **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + dreal::drake::symbolic::Environment *arg2 = 0 ; + dreal::drake::symbolic::Environment *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Environment *) &(arg1)->operator =((dreal::drake::symbolic::Environment const &)*arg2); + *(dreal::drake::symbolic::Environment **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Environment_1_1SWIG_11(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::drake::symbolic::Environment *)new dreal::drake::symbolic::Environment(); + *(dreal::drake::symbolic::Environment **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Environment(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Environment_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + SwigValueWrapper< std::initializer_list< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > >::value_type > > arg1 ; + dreal::drake::symbolic::Environment *result = 0 ; + + (void)jenv; + (void)jcls; + + result = (dreal::drake::symbolic::Environment *)new dreal::drake::symbolic::Environment(arg1); + *(dreal::drake::symbolic::Environment **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Environment_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + SwigValueWrapper< std::initializer_list< dreal::drake::symbolic::Variable > > arg1 ; + dreal::drake::symbolic::Environment *result = 0 ; + + (void)jenv; + (void)jcls; + + result = (dreal::drake::symbolic::Environment *)new dreal::drake::symbolic::Environment(arg1); + *(dreal::drake::symbolic::Environment **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Environment_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + SwigValueWrapper< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > > > arg1 ; + dreal::drake::symbolic::Environment::map *argp1 ; + dreal::drake::symbolic::Environment *result = 0 ; + + (void)jenv; + (void)jcls; + argp1 = *(dreal::drake::symbolic::Environment::map **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Environment::map"); + return 0; + } + arg1 = *argp1; + result = (dreal::drake::symbolic::Environment *)new dreal::drake::symbolic::Environment(arg1); + *(dreal::drake::symbolic::Environment **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1begin_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + SwigValueWrapper< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > >::iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = (arg1)->begin(); + *(dreal::drake::symbolic::Environment::iterator **)&jresult = new dreal::drake::symbolic::Environment::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1end_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + SwigValueWrapper< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > >::iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = (arg1)->end(); + *(dreal::drake::symbolic::Environment::iterator **)&jresult = new dreal::drake::symbolic::Environment::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1cbegin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + SwigValueWrapper< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > >::const_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = ((dreal::drake::symbolic::Environment const *)arg1)->cbegin(); + *(dreal::drake::symbolic::Environment::const_iterator **)&jresult = new dreal::drake::symbolic::Environment::const_iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1cend(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + SwigValueWrapper< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > >::const_iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = ((dreal::drake::symbolic::Environment const *)arg1)->cend(); + *(dreal::drake::symbolic::Environment::const_iterator **)&jresult = new dreal::drake::symbolic::Environment::const_iterator(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1insert(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jdouble jarg3) { + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + dreal::drake::symbolic::Environment::key_type *arg2 = 0 ; + dreal::drake::symbolic::Environment::mapped_type *arg3 = 0 ; + dreal::drake::symbolic::Environment::mapped_type temp3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment::key_type **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment::key_type const & is null"); + return ; + } + temp3 = (dreal::drake::symbolic::Environment::mapped_type)jarg3; + arg3 = &temp3; + (arg1)->insert((dreal::drake::symbolic::Environment::key_type const &)*arg2,(dreal::drake::symbolic::Environment::mapped_type const &)*arg3); +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1empty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = (bool)((dreal::drake::symbolic::Environment const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1size(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = ((dreal::drake::symbolic::Environment const *)arg1)->size(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1find_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + dreal::drake::symbolic::Environment::key_type *arg2 = 0 ; + SwigValueWrapper< std::unordered_map< dreal::drake::symbolic::Variable,double,dreal::drake::hash_value< dreal::drake::symbolic::Variable > >::iterator > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment::key_type **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment::key_type const & is null"); + return 0; + } + result = (arg1)->find((dreal::drake::symbolic::Environment::key_type const &)*arg2); + *(dreal::drake::symbolic::Environment::iterator **)&jresult = new dreal::drake::symbolic::Environment::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1domain(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + dreal::drake::symbolic::Variables result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = ((dreal::drake::symbolic::Environment const *)arg1)->domain(); + *(dreal::drake::symbolic::Variables **)&jresult = new dreal::drake::symbolic::Variables(result); + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1to_1string(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + std::string result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + result = ((dreal::drake::symbolic::Environment const *)arg1)->to_string(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Environment_1Indexing_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Environment *arg1 = (dreal::drake::symbolic::Environment *) 0 ; + dreal::drake::symbolic::Environment::key_type *arg2 = 0 ; + dreal::drake::symbolic::Environment::mapped_type *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Environment **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment::key_type **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment::key_type const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Environment::mapped_type *) &(arg1)->operator []((dreal::drake::symbolic::Environment::key_type const &)*arg2); + *(dreal::drake::symbolic::Environment::mapped_type **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::drake::symbolic::Environment *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Environment **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment const & is null"); + return 0; + } + result = (std::ostream *) &operator <<(*arg1,(dreal::drake::symbolic::Environment const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Less_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jint jarg1, jint jarg2) { + jboolean jresult = 0 ; + dreal::drake::symbolic::ExpressionKind arg1 ; + dreal::drake::symbolic::ExpressionKind arg2 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = (dreal::drake::symbolic::ExpressionKind)jarg1; + arg2 = (dreal::drake::symbolic::ExpressionKind)jarg2; + result = (bool)dreal::drake::symbolic::operator <(arg1,arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Expression_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *)new dreal::drake::symbolic::Expression((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &(arg1)->operator =((dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Expression(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Expression_1_1SWIG_11(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::drake::symbolic::Expression *)new dreal::drake::symbolic::Expression(); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Expression_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jdouble jarg1) { + jlong jresult = 0 ; + double arg1 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = (double)jarg1; + result = (dreal::drake::symbolic::Expression *)new dreal::drake::symbolic::Expression(arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Expression_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *)new dreal::drake::symbolic::Expression((dreal::drake::symbolic::Variable const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1get_1kind(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::ExpressionKind result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (dreal::drake::symbolic::ExpressionKind)((dreal::drake::symbolic::Expression const *)arg1)->get_kind(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1get_1hash(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = ((dreal::drake::symbolic::Expression const *)arg1)->get_hash(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1GetVariables(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (dreal::drake::symbolic::Variables *) &((dreal::drake::symbolic::Expression const *)arg1)->GetVariables(); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1EqualTo(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Expression const *)arg1)->EqualTo((dreal::drake::symbolic::Expression const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Less(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Expression const *)arg1)->Less((dreal::drake::symbolic::Expression const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1is_1polynomial(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (bool)((dreal::drake::symbolic::Expression const *)arg1)->is_polynomial(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1include_1ite(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (bool)((dreal::drake::symbolic::Expression const *)arg1)->include_ite(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Evaluate_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Environment *arg2 = 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment const & is null"); + return 0; + } + result = (double)((dreal::drake::symbolic::Expression const *)arg1)->Evaluate((dreal::drake::symbolic::Environment const &)*arg2); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Evaluate_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (double)((dreal::drake::symbolic::Expression const *)arg1)->Evaluate(); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1EvaluatePartial(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Environment *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Expression const *)arg1)->EvaluatePartial((dreal::drake::symbolic::Environment const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Expand(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = ((dreal::drake::symbolic::Expression const *)arg1)->Expand(); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Substitute_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Expression *arg3 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg3 = *(dreal::drake::symbolic::Expression **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Expression const *)arg1)->Substitute((dreal::drake::symbolic::Variable const &)*arg2,(dreal::drake::symbolic::Expression const &)*arg3); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Substitute_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jlong jarg3) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::ExpressionSubstitution *arg2 = 0 ; + dreal::drake::symbolic::FormulaSubstitution *arg3 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::ExpressionSubstitution **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::ExpressionSubstitution const & is null"); + return 0; + } + arg3 = *(dreal::drake::symbolic::FormulaSubstitution **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::FormulaSubstitution const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Expression const *)arg1)->Substitute((dreal::drake::symbolic::ExpressionSubstitution const &)*arg2,(dreal::drake::symbolic::FormulaSubstitution const &)*arg3); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Substitute_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::ExpressionSubstitution *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::ExpressionSubstitution **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::ExpressionSubstitution const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Expression const *)arg1)->Substitute((dreal::drake::symbolic::ExpressionSubstitution const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Substitute_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::FormulaSubstitution *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::FormulaSubstitution **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::FormulaSubstitution const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Expression const *)arg1)->Substitute((dreal::drake::symbolic::FormulaSubstitution const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Differentiate(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Expression const *)arg1)->Differentiate((dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1to_1string(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + std::string result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = ((dreal::drake::symbolic::Expression const *)arg1)->to_string(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Zero(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Expression::Zero(); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1One(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Expression::One(); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Pi(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Expression::Pi(); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1E(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Expression::E(); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1NaN(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Expression::NaN(); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Add_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator +((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_AddEqual_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &operator +=(*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Increment_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (dreal::drake::symbolic::Expression *) &(arg1)->operator ++(); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Increment_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + int arg2 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = (int)jarg2; + result = (arg1)->operator ++(arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Substract_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator -((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_SubstractEqual_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &operator -=(*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Add_1_1SWIG_17(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator +((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Substract_1_1SWIG_16(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator -((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Decrement_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + result = (dreal::drake::symbolic::Expression *) &(arg1)->operator --(); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Expression_1Decrement_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = (dreal::drake::symbolic::Expression *) 0 ; + int arg2 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + arg2 = (int)jarg2; + result = (arg1)->operator --(arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Multiply_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator *((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_MultiplyEqual(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &operator *=(*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Divide(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression arg1 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *argp1 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + argp1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::drake::symbolic::Expression"); + return 0; + } + arg1 = *argp1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator /(SWIG_STD_MOVE(arg1),(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DivideEqual(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &operator /=(*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_real_1constant(JNIEnv *jenv, jclass jcls, jdouble jarg1, jdouble jarg2, jboolean jarg3) { + jlong jresult = 0 ; + double arg1 ; + double arg2 ; + bool arg3 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + arg1 = (double)jarg1; + arg2 = (double)jarg2; + arg3 = jarg3 ? true : false; + result = dreal::drake::symbolic::real_constant(arg1,arg2,arg3); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_log(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::log((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_abs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::abs((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_exp(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::exp((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_sqrt(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::sqrt((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_pow(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::pow((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_sin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::sin((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_cos(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::cos((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_tan(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::tan((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_asin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::asin((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_acos(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::acos((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_atan(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::atan((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_atan2(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::atan2((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_sinh(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::sinh((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_cosh(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::cosh((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_tanh(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::tanh((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_min(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::min((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_max(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::max((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_if_1then_1else(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Expression *arg3 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg3 = *(dreal::drake::symbolic::Expression **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = dreal::drake::symbolic::if_then_else((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2,(dreal::drake::symbolic::Expression const &)*arg3); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_uninterpreted_1function(JNIEnv *jenv, jclass jcls, jstring jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::string *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg2_; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + std::string arg1_str(arg1_pstr); + arg1 = &arg1_str; + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = dreal::drake::symbolic::uninterpreted_function((std::string const &)*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (std::ostream *) &operator <<(*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1constant_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_constant((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1real_1constant(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_real_constant((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1variable_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_variable((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1addition(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_addition((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1multiplication(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_multiplication((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1division(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_division((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1log(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_log((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1abs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_abs((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1exp(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_exp((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1sqrt(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_sqrt((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1pow(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_pow((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1sin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_sin((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1cos(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_cos((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1tan(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_tan((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1asin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_asin((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1acos(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_acos((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1atan(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_atan((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1atan2(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_atan2((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1sinh(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_sinh((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1cosh(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_cosh((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1tanh(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_tanh((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1min(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_min((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_max((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1if_1then_1else(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_if_then_else((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1uninterpreted_1function(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_uninterpreted_function((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Sum(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression > const & is null"); + return 0; + } + result = dreal::drake::symbolic::Sum((std::vector< dreal::drake::symbolic::Expression > const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Prod(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression > const & is null"); + return 0; + } + result = dreal::drake::symbolic::Prod((std::vector< dreal::drake::symbolic::Expression > const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_swap(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression & is null"); + return ; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression & is null"); + return ; + } + dreal::drake::symbolic::swap(*arg1,*arg2); +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1constant_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + double arg2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = (double)jarg2; + result = (bool)dreal::drake::symbolic::is_constant((dreal::drake::symbolic::Expression const &)*arg1,arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1zero(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_zero((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1one(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_one((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1neg_1one(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_neg_one((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1two(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_two((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1nan(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_nan((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1constant_1value(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (double)dreal::drake::symbolic::get_constant_value((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1lb_1of_1real_1constant(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (double)dreal::drake::symbolic::get_lb_of_real_constant((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1ub_1of_1real_1constant(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (double)dreal::drake::symbolic::get_ub_of_real_constant((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1variable_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variable *) &dreal::drake::symbolic::get_variable((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1argument(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_argument((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1first_1argument(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_first_argument((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1second_1argument(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_second_argument((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1constant_1in_1addition(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (double)dreal::drake::symbolic::get_constant_in_addition((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1expr_1to_1coeff_1map_1in_1addition(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > > *) &dreal::drake::symbolic::get_expr_to_coeff_map_in_addition((dreal::drake::symbolic::Expression const &)*arg1); + *(std::map< dreal::drake::symbolic::Expression,double,std::less< dreal::drake::symbolic::Expression > > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1constant_1in_1multiplication(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (double)dreal::drake::symbolic::get_constant_in_multiplication((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1base_1to_1exponent_1map_1in_1multiplication(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > > *) &dreal::drake::symbolic::get_base_to_exponent_map_in_multiplication((dreal::drake::symbolic::Expression const &)*arg1); + *(std::map< dreal::drake::symbolic::Expression,dreal::drake::symbolic::Expression,std::less< dreal::drake::symbolic::Expression > > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1conditional_1formula(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Formula *) &dreal::drake::symbolic::get_conditional_formula((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1then_1expression(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_then_expression((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1else_1expression(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_else_expression((dreal::drake::symbolic::Expression const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1uninterpreted_1function_1name(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + std::string *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (std::string *) &dreal::drake::symbolic::get_uninterpreted_function_name((dreal::drake::symbolic::Expression const &)*arg1); + jresult = jenv->NewStringUTF(result->c_str()); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Add_1_1SWIG_18(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator +((dreal::drake::symbolic::Variable const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Substract_1_1SWIG_18(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Expression result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator -((dreal::drake::symbolic::Variable const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = new dreal::drake::symbolic::Expression(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Less_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jint jarg1, jint jarg2) { + jboolean jresult = 0 ; + dreal::drake::symbolic::FormulaKind arg1 ; + dreal::drake::symbolic::FormulaKind arg2 ; + bool result; + + (void)jenv; + (void)jcls; + arg1 = (dreal::drake::symbolic::FormulaKind)jarg1; + arg2 = (dreal::drake::symbolic::FormulaKind)jarg2; + result = (bool)dreal::drake::symbolic::operator <(arg1,arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Formula_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::drake::symbolic::Formula *)new dreal::drake::symbolic::Formula(); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Formula_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Formula *)new dreal::drake::symbolic::Formula((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Formula *) &(arg1)->operator =((dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Formula(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Formula_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Formula *)new dreal::drake::symbolic::Formula((dreal::drake::symbolic::Variable const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1get_1kind(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::FormulaKind result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = (dreal::drake::symbolic::FormulaKind)((dreal::drake::symbolic::Formula const *)arg1)->get_kind(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1get_1hash(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + size_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = ((dreal::drake::symbolic::Formula const *)arg1)->get_hash(); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1GetFreeVariables(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = (dreal::drake::symbolic::Variables *) &((dreal::drake::symbolic::Formula const *)arg1)->GetFreeVariables(); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1EqualTo(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Formula const *)arg1)->EqualTo((dreal::drake::symbolic::Formula const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Less(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Formula const *)arg1)->Less((dreal::drake::symbolic::Formula const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Evaluate_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Environment *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::Environment **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Environment const & is null"); + return 0; + } + result = (bool)((dreal::drake::symbolic::Formula const *)arg1)->Evaluate((dreal::drake::symbolic::Environment const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Evaluate_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = (bool)((dreal::drake::symbolic::Formula const *)arg1)->Evaluate(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Substitute_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Expression *arg3 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg3 = *(dreal::drake::symbolic::Expression **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Formula const *)arg1)->Substitute((dreal::drake::symbolic::Variable const &)*arg2,(dreal::drake::symbolic::Expression const &)*arg3); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Substitute_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula *arg3 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg3 = *(dreal::drake::symbolic::Formula **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Formula const *)arg1)->Substitute((dreal::drake::symbolic::Variable const &)*arg2,(dreal::drake::symbolic::Formula const &)*arg3); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Substitute_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jlong jarg3) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::ExpressionSubstitution *arg2 = 0 ; + dreal::drake::symbolic::FormulaSubstitution *arg3 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::ExpressionSubstitution **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::ExpressionSubstitution const & is null"); + return 0; + } + arg3 = *(dreal::drake::symbolic::FormulaSubstitution **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::FormulaSubstitution const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Formula const *)arg1)->Substitute((dreal::drake::symbolic::ExpressionSubstitution const &)*arg2,(dreal::drake::symbolic::FormulaSubstitution const &)*arg3); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Substitute_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::ExpressionSubstitution *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::ExpressionSubstitution **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::ExpressionSubstitution const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Formula const *)arg1)->Substitute((dreal::drake::symbolic::ExpressionSubstitution const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1Substitute_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + dreal::drake::symbolic::FormulaSubstitution *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + arg2 = *(dreal::drake::symbolic::FormulaSubstitution **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::FormulaSubstitution const & is null"); + return 0; + } + result = ((dreal::drake::symbolic::Formula const *)arg1)->Substitute((dreal::drake::symbolic::FormulaSubstitution const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1to_1string(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + std::string result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = ((dreal::drake::symbolic::Formula const *)arg1)->to_string(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1True(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Formula::True(); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1False(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + result = dreal::drake::symbolic::Formula::False(); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1BoolOperator(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = (bool)((dreal::drake::symbolic::Formula const *)arg1)->operator bool(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_15(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (std::ostream *) &operator <<(*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1false(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_false((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1true(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_true((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1variable_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_variable((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1equal_1to(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_equal_to((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1not_1equal_1to(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_not_equal_to((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1greater_1than(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_greater_than((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1greater_1than_1or_1equal_1to(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_greater_than_or_equal_to((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1less_1than(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_less_than((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1less_1than_1or_1equal_1to(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_less_than_or_equal_to((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1relational(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_relational((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1conjunction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_conjunction((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1disjunction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_disjunction((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1negation(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_negation((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1forall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_forall((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1make_1conjunction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::Formula::make_conjunction(*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1make_1disjunction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::Formula::make_disjunction(*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Not_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = operator !((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator ==((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_NotEqual_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator !=((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Less_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator <((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_LessEqual(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator <=((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Grater(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator >((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_GraterEqual(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = operator >=((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Expression const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1include_1ite(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = (dreal::drake::symbolic::Formula *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + result = (bool)((dreal::drake::symbolic::Formula const *)arg1)->include_ite(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_forall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::forall((dreal::drake::symbolic::Variables const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_And_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator &&((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_And_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator &&((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_And_1_1SWIG_16(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator &&((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_And_1_1SWIG_18(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator &&((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Or_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ||((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Or_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ||((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Or_1_1SWIG_16(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ||((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Or_1_1SWIG_18(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ||((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Not_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator !((dreal::drake::symbolic::Variable const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ==((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ==((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ==((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal_1_1SWIG_15(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator ==((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_NotEqual_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator !=((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_NotEqual_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator !=((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_NotEqual_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator !=((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_NotEqual_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::drake::symbolic::operator !=((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1nary(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::drake::symbolic::is_nary((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1variable_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variable *) &dreal::drake::symbolic::get_variable((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1lhs_1expression(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_lhs_expression((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1rhs_1expression(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Expression *) &dreal::drake::symbolic::get_rhs_expression((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1operands(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + std::set< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (std::set< dreal::drake::symbolic::Formula > *) &dreal::drake::symbolic::get_operands((dreal::drake::symbolic::Formula const &)*arg1); + *(std::set< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1operand(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Formula *) &dreal::drake::symbolic::get_operand((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1quantified_1variables(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variables *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Variables *) &dreal::drake::symbolic::get_quantified_variables((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Variables **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1quantified_1formula(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (dreal::drake::symbolic::Formula *) &dreal::drake::symbolic::get_quantified_formula((dreal::drake::symbolic::Formula const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_logic_1and(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::drake::symbolic::detail::logic_and((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_imply_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::imply((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_imply_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::imply((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_imply_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::imply((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_imply_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::imply((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_iff_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::iff((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_iff_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::iff((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_iff_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::iff((dreal::drake::symbolic::Formula const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_iff_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Variable *arg1 = 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variable **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = dreal::iff((dreal::drake::symbolic::Variable const &)*arg1,(dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_map(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Formula > *arg1 = 0 ; + std::function< dreal::drake::symbolic::Formula (dreal::drake::symbolic::Formula const &) > *arg2 = 0 ; + std::set< dreal::drake::symbolic::Formula > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Formula > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::set< dreal::drake::symbolic::Formula > const & is null"); + return 0; + } + arg2 = *(std::function< dreal::drake::symbolic::Formula (dreal::drake::symbolic::Formula const &) > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::function< dreal::drake::symbolic::Formula (dreal::drake::symbolic::Formula const &) > const & is null"); + return 0; + } + result = dreal::map((std::set< dreal::drake::symbolic::Formula > const &)*arg1,(std::function< dreal::drake::symbolic::Formula (dreal::drake::symbolic::Formula const &) > const &)*arg2); + *(std::set< dreal::drake::symbolic::Formula > **)&jresult = new std::set< dreal::drake::symbolic::Formula >(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1atomic(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::is_atomic((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1clause(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::is_clause((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_get_1clauses(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + std::set< dreal::drake::symbolic::Formula > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = dreal::get_clauses((dreal::drake::symbolic::Formula const &)*arg1); + *(std::set< dreal::drake::symbolic::Formula > **)&jresult = new std::set< dreal::drake::symbolic::Formula >(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_is_1cnf(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::is_cnf((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_HaveIntersection(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Variables *arg1 = 0 ; + dreal::drake::symbolic::Variables *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::drake::symbolic::Variables **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Variables **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variables const & is null"); + return 0; + } + result = (bool)dreal::HaveIntersection((dreal::drake::symbolic::Variables const &)*arg1,(dreal::drake::symbolic::Variables const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DeltaStrengthen(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + double arg2 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = (double)jarg2; + result = dreal::DeltaStrengthen((dreal::drake::symbolic::Formula const &)*arg1,arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DeltaWeaken(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + jlong jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + double arg2 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = (double)jarg2; + result = dreal::DeltaWeaken((dreal::drake::symbolic::Formula const &)*arg1,arg2); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_IsDifferentiable_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + result = (bool)dreal::IsDifferentiable((dreal::drake::symbolic::Formula const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_IsDifferentiable_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + result = (bool)dreal::IsDifferentiable((dreal::drake::symbolic::Expression const &)*arg1); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_make_1conjunction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Formula > const & is null"); + return 0; + } + result = dreal::make_conjunction((std::vector< dreal::drake::symbolic::Formula > const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_make_1disjunction(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Formula > *arg1 = 0 ; + dreal::drake::symbolic::Formula result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Formula > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Formula > const & is null"); + return 0; + } + result = dreal::make_disjunction((std::vector< dreal::drake::symbolic::Formula > const &)*arg1); + *(dreal::drake::symbolic::Formula **)&jresult = new dreal::drake::symbolic::Formula(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CreateVector_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jstring jarg1, jint jarg2, jint jarg3) { + jlong jresult = 0 ; + std::string *arg1 = 0 ; + int arg2 ; + dreal::drake::symbolic::Variable::Type arg3 ; + std::vector< dreal::drake::symbolic::Variable > result; + + (void)jenv; + (void)jcls; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + std::string arg1_str(arg1_pstr); + arg1 = &arg1_str; + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + arg2 = (int)jarg2; + arg3 = (dreal::drake::symbolic::Variable::Type)jarg3; + result = dreal::CreateVector((std::string const &)*arg1,arg2,arg3); + *(std::vector< dreal::drake::symbolic::Variable > **)&jresult = new std::vector< dreal::drake::symbolic::Variable >(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CreateVector_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jstring jarg1, jint jarg2) { + jlong jresult = 0 ; + std::string *arg1 = 0 ; + int arg2 ; + std::vector< dreal::drake::symbolic::Variable > result; + + (void)jenv; + (void)jcls; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + std::string arg1_str(arg1_pstr); + arg1 = &arg1_str; + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + arg2 = (int)jarg2; + result = dreal::CreateVector((std::string const &)*arg1,arg2); + *(std::vector< dreal::drake::symbolic::Variable > **)&jresult = new std::vector< dreal::drake::symbolic::Variable >(result); + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Not(JNIEnv *jenv, jclass jcls, jint jarg1) { + jint jresult = 0 ; + dreal::RelationalOperator arg1 ; + dreal::RelationalOperator result; + + (void)jenv; + (void)jcls; + arg1 = (dreal::RelationalOperator)jarg1; + result = (dreal::RelationalOperator)dreal::operator !(arg1); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_16(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::RelationalOperator arg2 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = (dreal::RelationalOperator)jarg2; + result = (std::ostream *) &dreal::operator <<(*arg1,arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_parse_1logic(JNIEnv *jenv, jclass jcls, jstring jarg1) { + jint jresult = 0 ; + std::string *arg1 = 0 ; + dreal::Logic result; + + (void)jenv; + (void)jcls; + if(!jarg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1_pstr) return 0; + std::string arg1_str(arg1_pstr); + arg1 = &arg1_str; + jenv->ReleaseStringUTFChars(jarg1, arg1_pstr); + result = (dreal::Logic)dreal::parse_logic((std::string const &)*arg1); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_17(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::Logic *arg2 = 0 ; + dreal::Logic temp2 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + temp2 = (dreal::Logic)jarg2; + arg2 = &temp2; + result = (std::ostream *) &dreal::operator <<(*arg1,(enum dreal::Logic const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Box_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::Box *)new dreal::Box(); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Box_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg1 = 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Variable > const & is null"); + return 0; + } + result = (dreal::Box *)new dreal::Box((std::vector< dreal::drake::symbolic::Variable > const &)*arg1); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Box_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Box *arg1 = 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + result = (dreal::Box *)new dreal::Box((dreal::Box const &)*arg1); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::Box *arg2 = 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::Box **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + result = (dreal::Box *) &(arg1)->operator =((dreal::Box const &)*arg2); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Box(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::Box *arg1 = (dreal::Box *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::Box **)&jarg1; + delete arg1; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1Add_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + (arg1)->Add((dreal::drake::symbolic::Variable const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1Add_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jdouble jarg3, jdouble jarg4) { + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + double arg3 ; + double arg4 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + arg3 = (double)jarg3; + arg4 = (double)jarg4; + (arg1)->Add((dreal::drake::symbolic::Variable const &)*arg2,arg3,arg4); +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1empty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + result = (bool)((dreal::Box const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1set_1empty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + dreal::Box *arg1 = (dreal::Box *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + (arg1)->set_empty(); +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1size(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + result = (int)((dreal::Box const *)arg1)->size(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1Indexing_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + int arg2 ; + dreal::Box::Interval *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = (int)jarg2; + result = (dreal::Box::Interval *) &(arg1)->operator [](arg2); + *(dreal::Box::Interval **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1Indexing_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::Box::Interval *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (dreal::Box::Interval *) &(arg1)->operator []((dreal::drake::symbolic::Variable const &)*arg2); + *(dreal::Box::Interval **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1variables(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + std::vector< dreal::drake::symbolic::Variable > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + result = (std::vector< dreal::drake::symbolic::Variable > *) &((dreal::Box const *)arg1)->variables(); + *(std::vector< dreal::drake::symbolic::Variable > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1variable(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + int arg2 ; + dreal::drake::symbolic::Variable *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = (int)jarg2; + result = (dreal::drake::symbolic::Variable *) &((dreal::Box const *)arg1)->variable(arg2); + *(dreal::drake::symbolic::Variable **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1has_1variable(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)((dreal::Box const *)arg1)->has_variable((dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1interval_1vector(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::Box::IntervalVector *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + result = (dreal::Box::IntervalVector *) &((dreal::Box const *)arg1)->interval_vector(); + *(dreal::Box::IntervalVector **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1mutable_1interval_1vector(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::Box::IntervalVector *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + result = (dreal::Box::IntervalVector *) &(arg1)->mutable_interval_vector(); + *(dreal::Box::IntervalVector **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1index(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jint jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (int)((dreal::Box const *)arg1)->index((dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1MaxDiam(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + std::pair< double,int > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + result = ((dreal::Box const *)arg1)->MaxDiam(); + *(std::pair< double,int > **)&jresult = new std::pair< double,int >(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1bisect_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + int arg2 ; + std::pair< dreal::Box,dreal::Box > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = (int)jarg2; + result = ((dreal::Box const *)arg1)->bisect(arg2); + *(std::pair< dreal::Box,dreal::Box > **)&jresult = new std::pair< dreal::Box,dreal::Box >(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1bisect_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + std::pair< dreal::Box,dreal::Box > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = ((dreal::Box const *)arg1)->bisect((dreal::drake::symbolic::Variable const &)*arg2); + *(std::pair< dreal::Box,dreal::Box > **)&jresult = new std::pair< dreal::Box,dreal::Box >(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Box_1InplaceUnion(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::Box *arg1 = (dreal::Box *) 0 ; + dreal::Box *arg2 = 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + arg2 = *(dreal::Box **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + result = (dreal::Box *) &(arg1)->InplaceUnion((dreal::Box const &)*arg2); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_18(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::Box *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::Box **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + result = (std::ostream *) &operator <<(*arg1,(dreal::Box const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Equal(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::Box *arg1 = 0 ; + dreal::Box *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + arg2 = *(dreal::Box **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + result = (bool)dreal::operator ==((dreal::Box const &)*arg1,(dreal::Box const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_NotEqual(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + dreal::Box *arg1 = 0 ; + dreal::Box *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Box **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + arg2 = *(dreal::Box **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box const & is null"); + return 0; + } + result = (bool)dreal::operator !=((dreal::Box const &)*arg1,(dreal::Box const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_DisplayDiff(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_, jlong jarg3, jlong jarg4) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + std::vector< dreal::drake::symbolic::Variable > *arg2 = 0 ; + dreal::Box::IntervalVector *arg3 = 0 ; + dreal::Box::IntervalVector *arg4 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(std::vector< dreal::drake::symbolic::Variable > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Variable > const & is null"); + return 0; + } + arg3 = *(dreal::Box::IntervalVector **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box::IntervalVector const & is null"); + return 0; + } + arg4 = *(dreal::Box::IntervalVector **)&jarg4; + if (!arg4) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Box::IntervalVector const & is null"); + return 0; + } + result = (std::ostream *) &dreal::DisplayDiff(*arg1,(std::vector< dreal::drake::symbolic::Variable > const &)*arg2,(ibex::IntervalVector const &)*arg3,(ibex::IntervalVector const &)*arg4); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueBool_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jboolean jarg1) { + jlong jresult = 0 ; + bool arg1 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = jarg1 ? true : false; + result = (dreal::OptionValue< bool > *)new dreal::OptionValue< bool >(arg1); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueBool_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::OptionValue< bool > *arg1 = 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< bool > const & is null"); + return 0; + } + result = (dreal::OptionValue< bool > *)new dreal::OptionValue< bool >((dreal::OptionValue< bool > const &)*arg1); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueBool_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + dreal::OptionValue< bool > *arg2 = 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + arg2 = *(dreal::OptionValue< bool > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< bool > const & is null"); + return 0; + } + result = (dreal::OptionValue< bool > *) &(arg1)->operator =((dreal::OptionValue< bool > const &)*arg2); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1OptionValueBool(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueBool_1AssignOperator_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + bool *arg2 = 0 ; + bool temp2 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + temp2 = jarg2 ? true : false; + arg2 = &temp2; + result = (dreal::OptionValue< bool > *) &(arg1)->operator =((bool const &)*arg2); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueBool_1AssignOperator_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + bool *arg2 = 0 ; + std::unique_ptr< bool > rvrdeleter2 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + arg2 = *(bool **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "bool && is null"); + return 0; + } + rvrdeleter2.reset(arg2); + result = (dreal::OptionValue< bool > *) &(arg1)->operator =((bool &&)*arg2); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueBool_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + bool *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + result = (bool *) &((dreal::OptionValue< bool > const *)arg1)->get(); + jresult = (jboolean)*result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueBool_1set_1from_1command_1line(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + bool *arg2 = 0 ; + bool temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + temp2 = jarg2 ? true : false; + arg2 = &temp2; + (arg1)->set_from_command_line((bool const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueBool_1set_1from_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) { + dreal::OptionValue< bool > *arg1 = (dreal::OptionValue< bool > *) 0 ; + bool *arg2 = 0 ; + bool temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< bool > **)&jarg1; + temp2 = jarg2 ? true : false; + arg2 = &temp2; + (arg1)->set_from_file((bool const &)*arg2); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueInt_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jint jarg1) { + jlong jresult = 0 ; + int arg1 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = (int)jarg1; + result = (dreal::OptionValue< int > *)new dreal::OptionValue< int >(arg1); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueInt_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::OptionValue< int > *arg1 = 0 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< int > const & is null"); + return 0; + } + result = (dreal::OptionValue< int > *)new dreal::OptionValue< int >((dreal::OptionValue< int > const &)*arg1); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueInt_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + dreal::OptionValue< int > *arg2 = 0 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + arg2 = *(dreal::OptionValue< int > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< int > const & is null"); + return 0; + } + result = (dreal::OptionValue< int > *) &(arg1)->operator =((dreal::OptionValue< int > const &)*arg2); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1OptionValueInt(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueInt_1AssignOperator_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + int *arg2 = 0 ; + int temp2 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + temp2 = (int)jarg2; + arg2 = &temp2; + result = (dreal::OptionValue< int > *) &(arg1)->operator =((int const &)*arg2); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueInt_1AssignOperator_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + int *arg2 = 0 ; + std::unique_ptr< int > rvrdeleter2 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + arg2 = *(int **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "int && is null"); + return 0; + } + rvrdeleter2.reset(arg2); + result = (dreal::OptionValue< int > *) &(arg1)->operator =((int &&)*arg2); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueInt_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + int *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + result = (int *) &((dreal::OptionValue< int > const *)arg1)->get(); + jresult = (jint)*result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueInt_1set_1from_1command_1line(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + int *arg2 = 0 ; + int temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + temp2 = (int)jarg2; + arg2 = &temp2; + (arg1)->set_from_command_line((int const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueInt_1set_1from_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + dreal::OptionValue< int > *arg1 = (dreal::OptionValue< int > *) 0 ; + int *arg2 = 0 ; + int temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< int > **)&jarg1; + temp2 = (int)jarg2; + arg2 = &temp2; + (arg1)->set_from_file((int const &)*arg2); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueDouble_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jdouble jarg1) { + jlong jresult = 0 ; + double arg1 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = (double)jarg1; + result = (dreal::OptionValue< double > *)new dreal::OptionValue< double >(arg1); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueDouble_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::OptionValue< double > *arg1 = 0 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< double > const & is null"); + return 0; + } + result = (dreal::OptionValue< double > *)new dreal::OptionValue< double >((dreal::OptionValue< double > const &)*arg1); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueDouble_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + dreal::OptionValue< double > *arg2 = 0 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + arg2 = *(dreal::OptionValue< double > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< double > const & is null"); + return 0; + } + result = (dreal::OptionValue< double > *) &(arg1)->operator =((dreal::OptionValue< double > const &)*arg2); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1OptionValueDouble(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueDouble_1AssignOperator_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + double *arg2 = 0 ; + double temp2 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + temp2 = (double)jarg2; + arg2 = &temp2; + result = (dreal::OptionValue< double > *) &(arg1)->operator =((double const &)*arg2); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueDouble_1AssignOperator_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + double *arg2 = 0 ; + std::unique_ptr< double > rvrdeleter2 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + arg2 = *(double **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "double && is null"); + return 0; + } + rvrdeleter2.reset(arg2); + result = (dreal::OptionValue< double > *) &(arg1)->operator =((double &&)*arg2); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueDouble_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + double *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + result = (double *) &((dreal::OptionValue< double > const *)arg1)->get(); + jresult = (jdouble)*result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueDouble_1set_1from_1command_1line(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + double *arg2 = 0 ; + double temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + temp2 = (double)jarg2; + arg2 = &temp2; + (arg1)->set_from_command_line((double const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueDouble_1set_1from_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2) { + dreal::OptionValue< double > *arg1 = (dreal::OptionValue< double > *) 0 ; + double *arg2 = 0 ; + double temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< double > **)&jarg1; + temp2 = (double)jarg2; + arg2 = &temp2; + (arg1)->set_from_file((double const &)*arg2); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueUnsignedInt_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + uint32_t arg1 ; + uint32_t *argp1 ; + dreal::OptionValue< uint32_t > *result = 0 ; + + (void)jenv; + (void)jcls; + argp1 = *(uint32_t **)&jarg1; + if (!argp1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null uint32_t"); + return 0; + } + arg1 = *argp1; + result = (dreal::OptionValue< uint32_t > *)new dreal::OptionValue< uint32_t >(arg1); + *(dreal::OptionValue< uint32_t > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1OptionValueUnsignedInt_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::OptionValue< uint32_t > *arg1 = 0 ; + dreal::OptionValue< uint32_t > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< uint32_t > const & is null"); + return 0; + } + result = (dreal::OptionValue< uint32_t > *)new dreal::OptionValue< uint32_t >((dreal::OptionValue< uint32_t > const &)*arg1); + *(dreal::OptionValue< uint32_t > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueUnsignedInt_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::OptionValue< uint32_t > *arg1 = (dreal::OptionValue< uint32_t > *) 0 ; + dreal::OptionValue< uint32_t > *arg2 = 0 ; + dreal::OptionValue< uint32_t > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + arg2 = *(dreal::OptionValue< uint32_t > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::OptionValue< uint32_t > const & is null"); + return 0; + } + result = (dreal::OptionValue< uint32_t > *) &(arg1)->operator =((dreal::OptionValue< uint32_t > const &)*arg2); + *(dreal::OptionValue< uint32_t > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1OptionValueUnsignedInt(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::OptionValue< uint32_t > *arg1 = (dreal::OptionValue< uint32_t > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueUnsignedInt_1AssignOperator_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + jlong jresult = 0 ; + dreal::OptionValue< uint32_t > *arg1 = (dreal::OptionValue< uint32_t > *) 0 ; + uint32_t *arg2 = 0 ; + dreal::OptionValue< uint32_t > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + arg2 = *(uint32_t **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "uint32_t const & is null"); + return 0; + } + result = (dreal::OptionValue< uint32_t > *) &(arg1)->operator =((uint32_t const &)*arg2); + *(dreal::OptionValue< uint32_t > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueUnsignedInt_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::OptionValue< uint32_t > *arg1 = (dreal::OptionValue< uint32_t > *) 0 ; + uint32_t *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + result = (uint32_t *) &((dreal::OptionValue< uint32_t > const *)arg1)->get(); + *(uint32_t **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueUnsignedInt_1set_1from_1command_1line(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + dreal::OptionValue< uint32_t > *arg1 = (dreal::OptionValue< uint32_t > *) 0 ; + uint32_t *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + arg2 = *(uint32_t **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "uint32_t const & is null"); + return ; + } + (arg1)->set_from_command_line((uint32_t const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_OptionValueUnsignedInt_1set_1from_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + dreal::OptionValue< uint32_t > *arg1 = (dreal::OptionValue< uint32_t > *) 0 ; + uint32_t *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::OptionValue< uint32_t > **)&jarg1; + arg2 = *(uint32_t **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "uint32_t const & is null"); + return ; + } + (arg1)->set_from_file((uint32_t const &)*arg2); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Config_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::Config *result = 0 ; + + dreal::Config *config = new dreal::Config(); + // To create the right default configuration + config->mutable_precision() = 0.001; + config->mutable_produce_models() = false; + config->mutable_use_polytope() = false; + config->mutable_use_polytope_in_forall() = false; + config->mutable_use_worklist_fixpoint() = false; + config->mutable_use_local_optimization() = false; + //config->mutable_dump_theory_literals() = false; + config->mutable_number_of_jobs() = 1; + config->mutable_stack_left_box_first() = false; + config->mutable_smtlib2_compliant() = false; + + config->mutable_nlopt_ftol_rel() = 1e-6; + config->mutable_nlopt_ftol_abs() = 1e-6; + config->mutable_nlopt_maxeval() = 100; + config->mutable_nlopt_maxtime() = 0.01; + + config->mutable_sat_default_phase() = dreal::Config::SatDefaultPhase::JeroslowWang; + config->mutable_random_seed() = 0; + + config->mutable_brancher() = dreal::BranchLargestFirst; + + (void)jenv; + (void)jcls; + //result = (dreal::Config *)new dreal::Config(); + //*(dreal::Config **)&jresult = result; + *(dreal::Config **)&jresult = config; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Config_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = 0 ; + dreal::Config *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Config const & is null"); + return 0; + } + result = (dreal::Config *)new dreal::Config((dreal::Config const &)*arg1); + *(dreal::Config **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1AssignOperator_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::Config *arg2 = 0 ; + dreal::Config *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Config **)&jarg1; + arg2 = *(dreal::Config **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Config const & is null"); + return 0; + } + result = (dreal::Config *) &(arg1)->operator =((dreal::Config const &)*arg2); + *(dreal::Config **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Config(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::Config *arg1 = (dreal::Config *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::Config **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1precision(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (double)((dreal::Config const *)arg1)->precision(); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1precision(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< double > *) &(arg1)->mutable_precision(); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1produce_1models(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->produce_models(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1produce_1models(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_produce_models(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1use_1polytope(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->use_polytope(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1polytope(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_use_polytope(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1use_1polytope_1in_1forall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->use_polytope_in_forall(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1polytope_1in_1forall(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_use_polytope_in_forall(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1use_1worklist_1fixpoint(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->use_worklist_fixpoint(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1worklist_1fixpoint(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_use_worklist_fixpoint(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1use_1local_1optimization(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->use_local_optimization(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1local_1optimization(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_use_local_optimization(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +// SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1dump_1theory_1literals(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { +// jboolean jresult = 0 ; +// dreal::Config *arg1 = (dreal::Config *) 0 ; +// bool result; +// +// (void)jenv; +// (void)jcls; +// (void)jarg1_; +// arg1 = *(dreal::Config **)&jarg1; +// result = (bool)((dreal::Config const *)arg1)->dump_theory_literals(); +// jresult = (jboolean)result; +// return jresult; +// } +// +// +// SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1dump_1theory_1literals(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { +// jlong jresult = 0 ; +// dreal::Config *arg1 = (dreal::Config *) 0 ; +// dreal::OptionValue< bool > *result = 0 ; +// +// (void)jenv; +// (void)jcls; +// (void)jarg1_; +// arg1 = *(dreal::Config **)&jarg1; +// result = (dreal::OptionValue< bool > *) &(arg1)->mutable_dump_theory_literals(); +// *(dreal::OptionValue< bool > **)&jresult = result; +// return jresult; +// } + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1number_1of_1jobs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (int)((dreal::Config const *)arg1)->number_of_jobs(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1number_1of_1jobs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< int > *) &(arg1)->mutable_number_of_jobs(); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1stack_1left_1box_1first(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->stack_left_box_first(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1stack_1left_1box_1first(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_stack_left_box_first(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1brancher(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::Config::Brancher *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::Config::Brancher *) &((dreal::Config const *)arg1)->brancher(); + *(dreal::Config::Brancher **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1brancher(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< dreal::Config::Brancher > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< dreal::Config::Brancher > *) &(arg1)->mutable_brancher(); + *(dreal::OptionValue< dreal::Config::Brancher > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1nlopt_1ftol_1rel(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (double)((dreal::Config const *)arg1)->nlopt_ftol_rel(); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1ftol_1rel(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< double > *) &(arg1)->mutable_nlopt_ftol_rel(); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1nlopt_1ftol_1abs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (double)((dreal::Config const *)arg1)->nlopt_ftol_abs(); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1ftol_1abs(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< double > *) &(arg1)->mutable_nlopt_ftol_abs(); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1nlopt_1maxeval(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (int)((dreal::Config const *)arg1)->nlopt_maxeval(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1maxeval(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< int > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< int > *) &(arg1)->mutable_nlopt_maxeval(); + *(dreal::OptionValue< int > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1nlopt_1maxtime(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jdouble jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + double result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (double)((dreal::Config const *)arg1)->nlopt_maxtime(); + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1maxtime(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< double > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< double > *) &(arg1)->mutable_nlopt_maxtime(); + *(dreal::OptionValue< double > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1SatDefaultPhase_1False_1get(JNIEnv *jenv, jclass jcls) { + jint jresult = 0 ; + dreal::Config::SatDefaultPhase result; + + (void)jenv; + (void)jcls; + result = (dreal::Config::SatDefaultPhase)dreal::Config::SatDefaultPhase::False; + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1SatDefaultPhase_1True_1get(JNIEnv *jenv, jclass jcls) { + jint jresult = 0 ; + dreal::Config::SatDefaultPhase result; + + (void)jenv; + (void)jcls; + result = (dreal::Config::SatDefaultPhase)dreal::Config::SatDefaultPhase::True; + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1SatDefaultPhase_1JeroslowWang_1get(JNIEnv *jenv, jclass jcls) { + jint jresult = 0 ; + dreal::Config::SatDefaultPhase result; + + (void)jenv; + (void)jcls; + result = (dreal::Config::SatDefaultPhase)dreal::Config::SatDefaultPhase::JeroslowWang; + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1SatDefaultPhase_1RandomInitialPhase_1get(JNIEnv *jenv, jclass jcls) { + jint jresult = 0 ; + dreal::Config::SatDefaultPhase result; + + (void)jenv; + (void)jcls; + result = (dreal::Config::SatDefaultPhase)dreal::Config::SatDefaultPhase::RandomInitialPhase; + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1sat_1default_1phase(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::Config::SatDefaultPhase result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::Config::SatDefaultPhase)((dreal::Config const *)arg1)->sat_default_phase(); + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1sat_1default_1phase(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< dreal::Config::SatDefaultPhase > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< dreal::Config::SatDefaultPhase > *) &(arg1)->mutable_sat_default_phase(); + *(dreal::OptionValue< dreal::Config::SatDefaultPhase > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1random_1seed(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + uint32_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = ((dreal::Config const *)arg1)->random_seed(); + //*(uint32_t **)&jresult = new uint32_t(result); + jresult = (jlong)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1random_1seed(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< uint32_t > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< uint32_t > *) &(arg1)->mutable_random_seed(); + *(dreal::OptionValue< uint32_t > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1smtlib2_1compliant(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (bool)((dreal::Config const *)arg1)->smtlib2_compliant(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1smtlib2_1compliant(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = (dreal::Config *) 0 ; + dreal::OptionValue< bool > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + result = (dreal::OptionValue< bool > *) &(arg1)->mutable_smtlib2_compliant(); + *(dreal::OptionValue< bool > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1kDefaultPrecision_1get(JNIEnv *jenv, jclass jcls) { + jdouble jresult = 0 ; + double result; + + (void)jenv; + (void)jcls; + result = (double)dreal::Config::kDefaultPrecision; + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1kDefaultNloptFtolRel_1get(JNIEnv *jenv, jclass jcls) { + jdouble jresult = 0 ; + double result; + + (void)jenv; + (void)jcls; + result = (double)dreal::Config::kDefaultNloptFtolRel; + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1kDefaultNloptFtolAbs_1get(JNIEnv *jenv, jclass jcls) { + jdouble jresult = 0 ; + double result; + + (void)jenv; + (void)jcls; + result = (double)dreal::Config::kDefaultNloptFtolAbs; + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1kDefaultNloptMaxEval_1get(JNIEnv *jenv, jclass jcls) { + jint jresult = 0 ; + int result; + + (void)jenv; + (void)jcls; + result = (int)dreal::Config::kDefaultNloptMaxEval; + jresult = (jint)result; + return jresult; +} + + +SWIGEXPORT jdouble JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1kDefaultNloptMaxTime_1get(JNIEnv *jenv, jclass jcls) { + jdouble jresult = 0 ; + double result; + + (void)jenv; + (void)jcls; + result = (double)dreal::Config::kDefaultNloptMaxTime; + jresult = (jdouble)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_19(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::Config::SatDefaultPhase *arg2 = 0 ; + dreal::Config::SatDefaultPhase temp2 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + temp2 = (dreal::Config::SatDefaultPhase)jarg2; + arg2 = &temp2; + result = (std::ostream *) &dreal::operator <<(*arg1,(enum dreal::Config::SatDefaultPhase const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_InsertOperator_1_1SWIG_122(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg2_) { + jlong jresult = 0 ; + std::ostream *arg1 = 0 ; + dreal::Config *arg2 = 0 ; + std::ostream *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg2_; + arg1 = *(std::ostream **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::ostream & is null"); + return 0; + } + arg2 = *(dreal::Config **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Config const & is null"); + return 0; + } + result = (std::ostream *) &dreal::operator <<(*arg1,(dreal::Config const &)*arg2); + *(std::ostream **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CheckSatisfiability_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jdouble jarg2, jlong jarg3, jobject jarg3_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *arg1 = 0 ; + double arg2 ; + dreal::Box *arg3 = (dreal::Box *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg3_; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg2 = (double)jarg2; + arg3 = *(dreal::Box **)&jarg3; + result = (bool)dreal::CheckSatisfiability((dreal::drake::symbolic::Formula const &)*arg1,arg2,arg3); + jresult = (jboolean)result; + return jresult; +} + +// rewritten +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CheckSatisfiability_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Formula *f = 0 ; + dreal::Box *box = (dreal::Box *) 0 ; + dreal::Config *config = (dreal::Config *) 0; + + + // dreal::Config *config = new dreal::Config(); + // config->mutable_precision() = 0.001; + // config->mutable_produce_models() = false; + // config->mutable_use_polytope() = false; + // config->mutable_use_polytope_in_forall() = false; + // config->mutable_use_worklist_fixpoint() = false; + // config->mutable_use_local_optimization() = false; + // //config->mutable_dump_theory_literals() = false; + // config->mutable_number_of_jobs() = 1; + // config->mutable_stack_left_box_first() = false; + // config->mutable_smtlib2_compliant() = false; + + // config->mutable_nlopt_ftol_rel() = 1e-6; + // config->mutable_nlopt_ftol_abs() = 1e-6; + // config->mutable_nlopt_maxeval() = 100; + // config->mutable_nlopt_maxtime() = 0.01; + + // config->mutable_sat_default_phase() = dreal::Config::SatDefaultPhase::JeroslowWang; + // config->mutable_random_seed() = 0; + + // config->mutable_brancher() = dreal::BranchLargestFirst; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + f = *(dreal::drake::symbolic::Formula **)&jarg1; + if (!f) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + config = *(dreal::Config **)&jarg2; + if (!config) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Config"); + return 0; + } + //arg2 = *argp2; + + box = *(dreal::Box **)&jarg3; + + // std::cerr << "Now Config is used from java" << std::endl; + // //std::cerr << argconfig->precision() << std::endl; + // std::cerr << argconfig->number_of_jobs() << std::endl; + + dreal::Context *context = new dreal::Context(*config); + for (dreal::Variable v : f->GetFreeVariables()) { + context->DeclareVariable(v); + } + context->Assert(*f); + dreal::optional result = context->CheckSat(); + if (result) { + DREAL_ASSERT(box); + *box = *result; + //std::cerr << *box << std::endl; + jresult = (jboolean)true; + } else { + jresult = (jboolean)false; + } + return jresult; + //return true; +} + + +// SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CheckSatisfiability_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_) { +// jboolean jresult = 0 ; +// dreal::drake::symbolic::Formula *arg1 = 0 ; +// dreal::Config arg2 ; +// dreal::Box *arg3 = (dreal::Box *) 0 ; +// dreal::Config *argp2 ; +// bool result; + +// (void)jenv; +// (void)jcls; +// (void)jarg1_; +// (void)jarg2_; +// (void)jarg3_; +// arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; +// if (!arg1) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); +// return 0; +// } +// argp2 = *(dreal::Config **)&jarg2; +// if (!argp2) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Config"); +// return 0; +// } +// arg2 = *argp2; +// arg3 = *(dreal::Box **)&jarg3; +// result = (bool)dreal::CheckSatisfiability((dreal::drake::symbolic::Formula const &)*arg1,SWIG_STD_MOVE(arg2),arg3); +// jresult = (jboolean)result; +// return jresult; +// } + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Minimize_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jdouble jarg3, jlong jarg4, jobject jarg4_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + double arg3 ; + dreal::Box *arg4 = (dreal::Box *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg4_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + arg3 = (double)jarg3; + arg4 = *(dreal::Box **)&jarg4; + result = (bool)dreal::Minimize((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2,arg3,arg4); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Minimize_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_, jlong jarg4, jobject jarg4_) { + jboolean jresult = 0 ; + dreal::drake::symbolic::Expression *arg1 = 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + dreal::Config arg3 ; + dreal::Box *arg4 = (dreal::Box *) 0 ; + dreal::Config *argp3 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + (void)jarg4_; + arg1 = *(dreal::drake::symbolic::Expression **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return 0; + } + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return 0; + } + argp3 = *(dreal::Config **)&jarg3; + if (!argp3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Config"); + return 0; + } + arg3 = *argp3; + arg4 = *(dreal::Box **)&jarg4; + result = (bool)dreal::Minimize((dreal::drake::symbolic::Expression const &)*arg1,(dreal::drake::symbolic::Formula const &)*arg2,SWIG_STD_MOVE(arg3),arg4); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Context_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + dreal::Context *result = 0 ; + + (void)jenv; + (void)jcls; + result = (dreal::Context *)new dreal::Context(); + *(dreal::Context **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Context_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = 0 ; + std::unique_ptr< dreal::Context > rvrdeleter1 ; + dreal::Context *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Context && is null"); + return 0; + } + rvrdeleter1.reset(arg1); + result = (dreal::Context *)new dreal::Context((dreal::Context &&)*arg1); + *(dreal::Context **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1Context(JNIEnv *jenv, jclass jcls, jlong jarg1) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(dreal::Context **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Context_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Config *arg1 = 0 ; + dreal::Context *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Config **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::Config const & is null"); + return 0; + } + result = (dreal::Context *)new dreal::Context((dreal::Config const &)*arg1); + *(dreal::Context **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Assert(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Formula *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Formula **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return ; + } + (arg1)->Assert((dreal::drake::symbolic::Formula const &)*arg2); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1CheckSat(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + SwigValueWrapper< dreal::optional< dreal::Box > > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + result = (arg1)->CheckSat(); + *(dreal::optional< dreal::Box > **)&jresult = new dreal::optional< dreal::Box >(result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1DeclareVariable_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jboolean jarg3) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool arg3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + arg3 = jarg3 ? true : false; + (arg1)->DeclareVariable((dreal::drake::symbolic::Variable const &)*arg2,arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1DeclareVariable_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + (arg1)->DeclareVariable((dreal::drake::symbolic::Variable const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1DeclareVariable_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_, jlong jarg4, jobject jarg4_, jboolean jarg5) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Expression *arg3 = 0 ; + dreal::drake::symbolic::Expression *arg4 = 0 ; + bool arg5 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + (void)jarg4_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + arg3 = *(dreal::drake::symbolic::Expression **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + arg4 = *(dreal::drake::symbolic::Expression **)&jarg4; + if (!arg4) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + arg5 = jarg5 ? true : false; + (arg1)->DeclareVariable((dreal::drake::symbolic::Variable const &)*arg2,(dreal::drake::symbolic::Expression const &)*arg3,(dreal::drake::symbolic::Expression const &)*arg4,arg5); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1DeclareVariable_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jlong jarg3, jobject jarg3_, jlong jarg4, jobject jarg4_) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + dreal::drake::symbolic::Expression *arg3 = 0 ; + dreal::drake::symbolic::Expression *arg4 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + (void)jarg3_; + (void)jarg4_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + arg3 = *(dreal::drake::symbolic::Expression **)&jarg3; + if (!arg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + arg4 = *(dreal::drake::symbolic::Expression **)&jarg4; + if (!arg4) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + (arg1)->DeclareVariable((dreal::drake::symbolic::Variable const &)*arg2,(dreal::drake::symbolic::Expression const &)*arg3,(dreal::drake::symbolic::Expression const &)*arg4); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Exit(JNIEnv *jenv, jclass jcls) { + (void)jenv; + (void)jcls; + dreal::Context::Exit(); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Minimize_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + (arg1)->Minimize((dreal::drake::symbolic::Expression const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Minimize_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + std::vector< dreal::drake::symbolic::Expression > *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(std::vector< dreal::drake::symbolic::Expression > **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::vector< dreal::drake::symbolic::Expression > const & is null"); + return ; + } + (arg1)->Minimize((std::vector< dreal::drake::symbolic::Expression > const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Maximize(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Expression *arg2 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Expression **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Expression const & is null"); + return ; + } + (arg1)->Maximize((dreal::drake::symbolic::Expression const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Pop(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + int arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = (int)jarg2; + (arg1)->Pop(arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Push(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + int arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = (int)jarg2; + (arg1)->Push(arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1SetInfo_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jdouble jarg3) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + std::string *arg2 = 0 ; + double arg3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + if(!jarg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return ; + } + const char *arg2_pstr = (const char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2_pstr) return ; + std::string arg2_str(arg2_pstr); + arg2 = &arg2_str; + jenv->ReleaseStringUTFChars(jarg2, arg2_pstr); + arg3 = (double)jarg3; + (arg1)->SetInfo((std::string const &)*arg2,arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1SetInfo_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + std::string *arg2 = 0 ; + std::string *arg3 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + if(!jarg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return ; + } + const char *arg2_pstr = (const char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2_pstr) return ; + std::string arg2_str(arg2_pstr); + arg2 = &arg2_str; + jenv->ReleaseStringUTFChars(jarg2, arg2_pstr); + if(!jarg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return ; + } + const char *arg3_pstr = (const char *)jenv->GetStringUTFChars(jarg3, 0); + if (!arg3_pstr) return ; + std::string arg3_str(arg3_pstr); + arg3 = &arg3_str; + jenv->ReleaseStringUTFChars(jarg3, arg3_pstr); + (arg1)->SetInfo((std::string const &)*arg2,(std::string const &)*arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1SetInterval(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_, jdouble jarg3, jdouble jarg4) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + double arg3 ; + double arg4 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(dreal::Context **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return ; + } + arg3 = (double)jarg3; + arg4 = (double)jarg4; + (arg1)->SetInterval((dreal::drake::symbolic::Variable const &)*arg2,arg3,arg4); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1SetLogic(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::Logic *arg2 = 0 ; + dreal::Logic temp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + temp2 = (dreal::Logic)jarg2; + arg2 = &temp2; + (arg1)->SetLogic((dreal::Logic const &)*arg2); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1SetOption_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jdouble jarg3) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + std::string *arg2 = 0 ; + double arg3 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + if(!jarg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return ; + } + const char *arg2_pstr = (const char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2_pstr) return ; + std::string arg2_str(arg2_pstr); + arg2 = &arg2_str; + jenv->ReleaseStringUTFChars(jarg2, arg2_pstr); + arg3 = (double)jarg3; + (arg1)->SetOption((std::string const &)*arg2,arg3); +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1SetOption_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) { + dreal::Context *arg1 = (dreal::Context *) 0 ; + std::string *arg2 = 0 ; + std::string *arg3 = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + if(!jarg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return ; + } + const char *arg2_pstr = (const char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2_pstr) return ; + std::string arg2_str(arg2_pstr); + arg2 = &arg2_str; + jenv->ReleaseStringUTFChars(jarg2, arg2_pstr); + if(!jarg3) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return ; + } + const char *arg3_pstr = (const char *)jenv->GetStringUTFChars(jarg3, 0); + if (!arg3_pstr) return ; + std::string arg3_str(arg3_pstr); + arg3 = &arg3_str; + jenv->ReleaseStringUTFChars(jarg3, arg3_pstr); + (arg1)->SetOption((std::string const &)*arg2,(std::string const &)*arg3); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1GetOption(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + std::string *arg2 = 0 ; + SwigValueWrapper< dreal::optional< std::string > > result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + if(!jarg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string"); + return 0; + } + const char *arg2_pstr = (const char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2_pstr) return 0; + std::string arg2_str(arg2_pstr); + arg2 = &arg2_str; + jenv->ReleaseStringUTFChars(jarg2, arg2_pstr); + result = ((dreal::Context const *)arg1)->GetOption((std::string const &)*arg2); + *(dreal::optional< std::string > **)&jresult = new dreal::optional< std::string >(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1config(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::Config *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + result = (dreal::Config *) &((dreal::Context const *)arg1)->config(); + *(dreal::Config **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1mutable_1config(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::Config *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + result = (dreal::Config *) &(arg1)->mutable_config(); + *(dreal::Config **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1version(JNIEnv *jenv, jclass jcls) { + jstring jresult = 0 ; + std::string result; + + (void)jenv; + (void)jcls; + result = dreal::Context::version(); + jresult = jenv->NewStringUTF((&result)->c_str()); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1assertions(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::ScopedVector< dreal::drake::symbolic::Formula > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + result = (dreal::ScopedVector< dreal::drake::symbolic::Formula > *) &((dreal::Context const *)arg1)->assertions(); + *(dreal::ScopedVector< dreal::drake::symbolic::Formula > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1box(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + result = (dreal::Box *) &((dreal::Context const *)arg1)->box(); + *(dreal::Box **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1get_1model(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::Box *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(dreal::Context **)&jarg1; + result = (dreal::Box *) &((dreal::Context const *)arg1)->get_model(); + *(dreal::Box **)&jresult = result; + return jresult; +} + +//Start of self written JNI calls + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1precision_10(JNIEnv *jenv, jclass jcls, jdouble value, jlong config) { + double val = (double)value; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_precision() = val; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1produce_1models_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_produce_models() = binary; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1polytope_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_use_polytope() = binary; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1polytope_1in_1forall_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_use_polytope_in_forall() = binary; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1worklist_1fixpoint_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_use_worklist_fixpoint() = binary; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1use_1local_1optimization_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_use_local_optimization() = binary; +} + +// SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1dump_1theory_1literals_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { +// bool binary = (bool)boolean; +// dreal::Config *configure = (dreal::Config *) 0; +// configure = *(dreal::Config **)&config; +// configure->mutable_dump_theory_literals() = binary; +// } + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1number_1of_1jobs_10(JNIEnv *jenv, jclass jcls, jint value, jlong config) { + int val = (int)value; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_number_of_jobs() = val; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1stack_1left_1box_1first_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_stack_left_box_first() = binary; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1ftol_1rel_10(JNIEnv *jenv, jclass jcls, jdouble value, jlong config) { + double val = (double)value; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_nlopt_ftol_rel() = val; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1ftol_1abs_10(JNIEnv *jenv, jclass jcls, jdouble value, jlong config) { + double val = (double)value; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_nlopt_ftol_abs() = val; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1maxeval_10(JNIEnv *jenv, jclass jcls, jint value, jlong config) { + int val = (int)value; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_nlopt_maxeval() = val; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1nlopt_1maxtime_10(JNIEnv *jenv, jclass jcls, jdouble value, jlong config) { + double val = (double)value; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_nlopt_maxtime() = val; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1random_1seed_10(JNIEnv *jenv, jclass jcls, jlong seed, jlong config) { + uint32_t stone = (uint32_t)seed; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_random_seed() = stone; +} + +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1smtlib2_1compliant_10(JNIEnv *jenv, jclass jcls, jboolean boolean, jlong config) { + bool binary = (bool)boolean; + dreal::Config *configure = (dreal::Config *) 0; + configure = *(dreal::Config **)&config; + configure->mutable_smtlib2_compliant() = binary; +} + +// Functions for debugging and trying to figure stuff out + +// trying to figure out how CheckSatisfiability works and why it does not work +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CheckSatisfiability_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jboolean jresult = 0 ; + printf("HIer wird gleich aufgerufen"); + dreal::drake::symbolic::Formula *arg1 = 0; + dreal::Config arg2; + dreal::Config *argp2; + //bool result; + (void) jarg1; + (void)jenv; + (void)jcls; + arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; +// if (!arg1) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); +// return 0; +// } +// argp2 = *(dreal::Config **)&jarg2; +// if (!argp2) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Config"); +// return 0; +// } + + arg2 = *argp2; + dreal::Box *box; + dreal::Config config; + config.mutable_use_polytope_in_forall() = true; + //dreal::drake::symbolic::Variable x{"x"}; + //dreal::drake::symbolic::Formula f = (0 <= x) && (x <= 3.141592) && (sin(x) >= 0.99); + //optional result{CheckSatisfiability(f, std::move(config))}; + bool result = CheckSatisfiability((dreal::drake::symbolic::Formula&)arg1, arg2, box); + + //const auto result = dreal::CheckSatisfiability((dreal::drake::symbolic::Formula const &)arg1, config); + //result = true; +// if (result) { +// jresult = true; +// } else { +// jresult = false; +// } + //jresult = (jboolean)result; + jresult = true; + return jresult; +} +// jlong jresult = 0 ; +// Formula *arg1 = 0 ; +// double arg2 ; +// SwigValueWrapper< optional< dreal::Box > > result; +// +// (void)jenv; +// (void)jcls; +// arg1 = *(Formula **)&jarg1; +// if (!arg1) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Formula const & is null"); +// return 0; +// } +// arg2 = (double)jarg2; +// result = dreal::CheckSatisfiability((Formula const &)*arg1,arg2); +// *(optional< dreal::Box > **)&jresult = new optional< dreal::Box >(result); +// return jresult; + +// +// jboolean jresult = 0 ; +// dreal::drake::symbolic::Formula *arg1 = 0 ; +// dreal::Config arg2 ; +// dreal::Box *arg3 = (dreal::Box *) 0 ; +// dreal::Config *argp2 ; +// bool result; +// +// (void)jenv; +// (void)jcls; +// (void)jarg1_; +// (void)jarg2_; +// (void)jarg3_; +// arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; +// if (!arg1) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); +// return 0; +// } +// argp2 = *(dreal::Config **)&jarg2; +// if (!argp2) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null dreal::Config"); +// return 0; +// } +// arg2 = *argp2; +// arg3 = *(dreal::Box **)&jarg3; +// //result = (bool)dreal::CheckSatisfiability((dreal::drake::symbolic::Formula const &)*arg1,SWIG_STD_MOVE(arg2),arg3); +// result = (bool)dreal::CheckSatisfiability((dreal::drake::symbolic::Formula const &)arg1,SWIG_STD_MOVE(arg2),SWIG_STD_MOVE(arg3)); +// jresult = (jboolean)result; +// return jresult; + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_CheckSatisfiability_1_1SWIG_13(JNIEnv *jenv, jclass jcls, jlong jarg1, jdouble jarg2, jlong jarg3) { + jboolean jresult = 0 ; + //dreal::drake::symbolic::Formula arg1 = *(dreal::drake::symbolic::Formula*) jarg1; + //double arg2 ; + //double *arg2 = *(double**)& jarg2; + //dreal::Box arg3 = *(dreal::Box *) jarg3; + bool result; + + (void) jarg1; + (void) jarg2; + (void) jarg3; + (void)jenv; + (void)jcls; +// arg1 = *(dreal::drake::symbolic::Formula **)&jarg1; +// if (!arg1) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); +// return 0; +// } +// arg2 = (double)jarg2; + //arg3 = *(dreal::Box **)&jarg3; + printf("Test"); + dreal::Box *box; + dreal::Config config; + dreal::drake::symbolic::Variable x{"x"}; + dreal::Formula f = (0 <= x) && (x <= 3.141592) && (sin(x) >= 0.99); + //result = true; + result = dreal::CheckSatisfiability(f,0.001,box); + if (result) { + std::cerr << *box << std::endl; + } + printf("Test nach kritischer stelle??"); + jresult = (jboolean)result; + return jresult; + + //dreal::Config configure = *(dreal::Config*)config; +} + +// SWIGEXPORT jlong JNICALL Java_drealapiJNI_CheckSatisfiability_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1, jdouble jarg2) { +// jlong jresult = 0 ; +// Formula *arg1 = 0 ; +// double arg2 ; +// SwigValueWrapper< optional< dreal::Box > > result; +// +// (void)jenv; +// (void)jcls; +// arg1 = *(Formula **)&jarg1; +// if (!arg1) { +// SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Formula const & is null"); +// return 0; +// } +// arg2 = (double)jarg2; +// result = dreal::CheckSatisfiability((Formula const &)*arg1,arg2); +// *(optional< dreal::Box > **)&jresult = new optional< dreal::Box >(result); +// return jresult; +// } + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1CheckSatBox(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + dreal::Context *arg1 = (dreal::Context *) 0 ; + dreal::optional result; + dreal::Box *box; + //SwigValueWrapper< optional< dreal::Box > > result; + + (void)jenv; + (void)jcls; + + arg1 = *(dreal::Context **)&jarg1; + result = (arg1)->CheckSat(); + //*(optional< dreal::Box > **)&jresult = new optional< dreal::Box >(result); + if (result) { + *box = *result; + *(dreal::Box**)&jresult = box; + } + else { + *(dreal::Box**)&jresult = box; + } + return jresult; +} + + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1Test(JNIEnv *jenv, jclass jcls) { + + (void)jenv; + (void)jcls; + + dreal::Variable *x = new dreal::Variable("x"); + std::cerr << x->get_name() << std::endl; + dreal::Config *config = new dreal::Config(); + config->mutable_precision() = 0.001; + config->mutable_use_polytope_in_forall() = true; + config->mutable_use_local_optimization() = true; + std::cerr << config->precision() << std::endl; + + dreal::Formula *f = new dreal::Formula((0 <= *x) && (*x <= 0)); + std::cerr << *f << std::endl; + + const auto result = dreal::CheckSatisfiability(*f, *config); + + if (result) { + std::cerr << *result << std::endl; + } else { + std::cerr << "Failed!" << std::endl; + } + + // dreal::Config *config = new dreal::Config(); + // dreal::Box *box = new dreal::Box(); + // //dreal::Context context{std::move(config)}; + // dreal::Variable x{"x"}; + // dreal::Formula f{(x>=0) && (0>=x)}; + // bool result = dreal::CheckSatisfiability(f, *config, box); +// context.DeclareVariable(x); +// context.Assert(f); + //optional result = context.CheckSat(); + + +// if (result) { +// return true; +// } else { +// return false; +// } +} + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1TestCheckSat(JNIEnv *jenv, jclass jcls) { + + (void)jenv; + (void)jcls; + + // dreal::Config *config = new dreal::Config(); + // std::cerr << config->precision() << std::endl; + + // dreal::Box *box = new dreal::Box(); + // std::cerr << *box << std::endl; + + // dreal::Variable *x = new dreal::Variable("x"); + // std::cerr << x->get_name() << std::endl; + // box->Add(*x); + // std::cerr << *box << std::endl; + + // dreal::Formula *f = new Formula(0 <= *x && *x <= 0); + // std::cerr << *f << std::endl; + + // dreal::Context *context; + // std::cerr << context->version() << std::endl; + + // context->DeclareVariable(*x); + // //context->Assert(*f); + + dreal::Config config; + std::cerr << config.precision() << std::endl; + + dreal::Box box; + std::cerr << box << std::endl; + + dreal::Variable x{"x"}; + std::cerr << x.get_name() << std::endl; + box.Add(x); + std::cerr << box << std::endl; + + dreal::Formula f{1 <= x && x <= 0}; + std::cerr << f << std::endl; + + dreal::Context context; + std::cerr << context.version() << std::endl; + + context.DeclareVariable(x); + context.Assert(f); + + dreal::optional result = context.CheckSat(); + + if (result) { + std::cerr << *result << std::endl; + } else { + std::cerr << "Failed!" << std::endl; + } + +} + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_satCheck(JNIEnv *jenv, jclass jcls) { + + (void)jenv; + (void)jcls; + + dreal::Config *config = new dreal::Config(); + // To create the right default configuration + config->mutable_precision() = 0.001; + config->mutable_produce_models() = false; + config->mutable_use_polytope() = false; + config->mutable_use_polytope_in_forall() = false; + config->mutable_use_worklist_fixpoint() = false; + config->mutable_use_local_optimization() = false; + //config->mutable_dump_theory_literals() = false; + config->mutable_number_of_jobs() = 1; + config->mutable_stack_left_box_first() = false; + config->mutable_smtlib2_compliant() = false; + + config->mutable_nlopt_ftol_rel() = 1e-6; + config->mutable_nlopt_ftol_abs() = 1e-6; + config->mutable_nlopt_maxeval() = 100; + config->mutable_nlopt_maxtime() = 0.01; + + config->mutable_sat_default_phase() = dreal::Config::SatDefaultPhase::JeroslowWang; + config->mutable_random_seed() = 0; + + config->mutable_brancher() = dreal::BranchLargestFirst; + + dreal::Box *box = new dreal::Box(); + + dreal::Variable *var_x = new dreal::Variable("x"); + dreal::Expression *x = new dreal::Expression(*var_x); + dreal::Formula *f = new dreal::Formula((0 <= *x) && (*x <= 3.14) && (dreal::sin(*x) <= 0.99)); + + dreal::Context *context = new dreal::Context(*config); + for (dreal::Variable v : f->GetFreeVariables()) { + context->DeclareVariable(v); + } + context->Assert(*f); + dreal::optional result = context->CheckSat(); + if (result) { + std::cerr << true << std::endl; + std::cerr << *result << std::endl; + } + + //bool res = dreal::CheckSatisfiability(*f, *config , box); + // std::cerr << result << std::endl; + // std::cerr << *box << std::endl; + +} + +#ifdef __cplusplus +} +#endif + diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o new file mode 100644 index 0000000000000000000000000000000000000000..bf2ffb6db012ccd22e0f0ebb95faf065b43d2cd0 GIT binary patch literal 1736592 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

y<19;D8@u?0FVldf{k+xYJ=YW?J;f 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 }3R(c!l2_J3`w_ZX%e=2-f?$Zf> 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%0A@;LY$~+AKbIDBd{)};Z$GZ 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�Dp0KM>y;>Z10B3bu`mqJ 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

_77W|1p98Eb+Da9~Ssw;=A?F2mH8;aQ#)++WNKi zSKH`O{V|(u{qFwpEZ~n8_+5PR?-Ka&fS(Qc9}E0@iLb5y4+MT9;4c9DCe3jEkNe~| zG>sc+ug@++~8C6Dxp73lxH|1a{_O^hD(Kbz_g(?9gC{}+S$ zR}1`7;wMBv^cchb{D#0!ct3jodkygS3jEl0w*MM`r@+r5e$c5u7w}IA{6wGpzXX0h z;4cUKMwj6Jhln4~^5*&1H+t0nQsO5&^{)W@8wGwQ@kF>E6wm)kpY_)^dNluG;=A>4 z2K-*c=kr%Wd~N=^3H$=$yYu$};7<_hk6&;5e}giAV+DTNCpP~O>An4D3*f&b@W&Bf zo4*ADzmWKD{)K?QmH0gWT;gljUmptma^i=b`nLl9pF;g5#Mk!U-voZvr#64L{!anF zVGBI}wcho&{_7b%n*V&j-wyaaiO=&-CVmp-7kS|OZ&!g|N_=ClWtSng6;*kLE8-e0TnS0Q^^oeG{9s`JWK{r;-04p}h0wufTsJ;`977h+pkLtEc}L=U*xK&+_TNgVCe; z$p-$90{^Lk|7@TBCkp;^efm!q{1*cMe*phW1pfuZ=ific=V7Pdzl8MK{#PXUFDL&Y zXMW0o|C56M`1kDk#XkLy6a2@2X-TgCSm1xY z;J=jk+V#UK!GF0=|0@LlDZqbi;D49kKlXoi{c8FDBlu4sJ?|HvpFaivnZSQt;6JV{ zp8rJRYx%b)J)i$%pZwfe|AxT- zD}w(p@%jGE{eL3(&-Lkli{L+YrzHg`KX3nO4E!Gz{1*^k+du1Hfv?|+efqCs^k{yP zfd8hze<$Me>xWX}pU38hufLlG|K&dY4;1{T1OFET|I-Ekv77DwVTe79wL4&b8u8~T{2E4&_{GG}b?R>i_)7%--^AB` z|8|bR&)jYMA9DB|06)1Su0QmF&7Z&jj_2RY=u!P8#E+~$Z~Y_!{?`J38u9t(7wPRB z|KF8jfnN^zodN&4L|lI^@%i&_oWEYsuP43s{gH1OJ<2b(*!IuOuPgB1qLcN{ufIx& zZ-2`F$MygB&yl~m*ys^If%xwF?GE@i5}%(x%ZMNGAK`I7Qw9GqAKLlj|DNyP_Y3}0 zf&ZSs{|AEqc;fT#kBg5KLXXutG|JBbdkTm%IMEEe_-u1Z&tDEKR)sg=`k{Qk-r{Be6Eitee4YtiCjO}=ufY|$Pc8) zILa^Pe5?2JyAkB){lA>;{fJ<_b58%H^iKBwy~$|zRE~cB()?A_+Vg}tDc0$pN6tR| fb0Yt#SWO_{-QV)H>;2pKBlgbsUQ?fYaQ*)Q3`&C2 literal 0 HcmV?d00001 From 531966cc4e66b97a1e05287424d33beadca8a9eb Mon Sep 17 00:00:00 2001 From: Julius Date: Mon, 17 Jul 2023 16:30:08 +0200 Subject: [PATCH 002/155] added QuantifiedFormulaManager --- .../DReal4QuantifiedFormulaManager.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java new file mode 100644 index 0000000000..2edd80b3b6 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java @@ -0,0 +1,70 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import java.util.List; +import org.sosy_lab.java_smt.api.SolverException; +import org.sosy_lab.java_smt.basicimpl.AbstractQuantifiedFormulaManager; +import org.sosy_lab.java_smt.basicimpl.FormulaCreator; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; + +public class DReal4QuantifiedFormulaManager extends AbstractQuantifiedFormulaManager { + + protected DReal4QuantifiedFormulaManager(FormulaCreator pFormulaCreator) { + super(pFormulaCreator); + } + + @Override + protected DRealTerm eliminateQuantifiers(DRealTerm pExtractInfo) + throws SolverException, InterruptedException { + throw new UnsupportedOperationException("dReal can not eliminate quantifiers."); + } + + @Override + public DRealTerm mkQuantifier(Quantifier pQ, List pVars, DRealTerm pBody) { + if (pVars.isEmpty()) { + throw new IllegalArgumentException("Empty variable llist for quantifier."); + } else if (pQ == Quantifier.EXISTS) { + // Doch eigentlich schon, aber noch nicht gefunden?? + throw new UnsupportedOperationException("dReal does not support exist??"); + } else { + Variables vars = new Variables(); + for (DRealTerm term : pVars) { + if (term.isVar()) { + vars.insert(term.getVariable()); + } else { + throw new IllegalArgumentException("This term is not a Variable and will be " + + "skipped."); + } + } + if (pBody.isFormula()) { + return new DRealTerm(null, null, dreal.forall(vars, pBody.getFormula())); + } else { + throw new IllegalArgumentException("The given Formula is not a Formula."); + } + } + } + +} From dacfc777703dd268f45a865d441da955d439dfda Mon Sep 17 00:00:00 2001 From: Julius Date: Mon, 17 Jul 2023 16:32:46 +0200 Subject: [PATCH 003/155] Updated to use QuantifiedFormulaManager and implemented the rest of NumeralFormulaManager --- .../dreal4/DReal4BooleanFormulaManager.java | 5 +- .../solvers/dreal4/DReal4Formula.java | 1 + .../solvers/dreal4/DReal4FormulaManager.java | 5 +- .../dreal4/DReal4NumeralFormulaManager.java | 47 ++++++++++++++++--- .../solvers/dreal4/DReal4SolverContext.java | 3 +- 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java index 8aeb8fbd4a..4914c7c8e9 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -53,10 +53,9 @@ protected DRealTerm makeBooleanImpl(boolean value) { protected DRealTerm not(DRealTerm pParam1) { if (pParam1.isFormula()) { return new DRealTerm(null, null, dreal.Not(pParam1.getFormula())); - } else if (pParam1.isVar()) { - return new DRealTerm(null, null, dreal.Not(pParam1.getVariable())); } else { - throw new UnsupportedOperationException("dReal does not support not on Expressions."); + throw new UnsupportedOperationException("dReal does not support not on Variabele " + + "or Expressions."); } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java index 912bed2087..2c57857b44 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java @@ -19,6 +19,7 @@ */ package org.sosy_lab.java_smt.solvers.dreal4; +import de.uni_freiburg.informatik.ultimate.logic.QuantifiedFormula; import org.sosy_lab.java_smt.api.BooleanFormula; import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula; diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java index 47ed4245b1..3bb4ae4941 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java @@ -32,7 +32,8 @@ public class DReal4FormulaManager extends AbstractFormulaManager pNumbers) { - return null; + // dReal does not directly support this method, so we need to build the whole term + Formula andFormula = helperFunction(pNumbers.get(1), pNumbers.get(0)); + for (int i = 2; i < pNumbers.size(); i++) { + for (int j = 0; j < i; j++) { + andFormula = dreal.And(andFormula, helperFunction(pNumbers.get(i), pNumbers.get(j))); + } + } + return new DRealTerm(null, null, andFormula); + } + + // Takes two DRealTerms and creates a NotEqual Formula to use in distinctImpl + private Formula helperFunction(DRealTerm pTerm1, DRealTerm pTerm2) { + if (pTerm1.isVar() && pTerm2.isVar()) { + return dreal.NotEqual(pTerm1.getVariable(), pTerm2.getVariable()); + } else if (pTerm1.isExp() && pTerm2.isVar()) { + return dreal.NotEqual(pTerm1.getExpression(), + new Expression(pTerm2.getVariable())); + } else if (pTerm1.isVar() && pTerm2.isExp()) { + return dreal.NotEqual(new Expression(pTerm1.getVariable()), + pTerm2.getExpression()); + } else if (pTerm1.isExp() && pTerm1.isExp()) { + return dreal.NotEqual(pTerm1.getExpression(), + pTerm2.getExpression()); + } else { + throw new UnsupportedOperationException("dReal does not support distinctImpl on Formulas."); + } } @Override diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java index 8004d5284f..960babac05 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java @@ -70,8 +70,9 @@ public static DReal4SolverContext create( pNonLinearArithmetic); DReal4RationalFormulaManager rationalTheory = new DReal4RationalFormulaManager(creator, pNonLinearArithmetic); + DReal4QuantifiedFormulaManager quantifierTheory = new DReal4QuantifiedFormulaManager(creator); DReal4FormulaManager manager = new DReal4FormulaManager(creator, functionTheory, - booleanTheory, integerTheory, rationalTheory); + booleanTheory, integerTheory, rationalTheory, quantifierTheory); return new DReal4SolverContext(manager, creator, pShutdownNotifier); } From 9a4d26df61f776f115d4e433f4350599feec1b96 Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 21 Jul 2023 17:51:33 +0200 Subject: [PATCH 004/155] added getType to DRealTerm --- .../dreal4/DReal4BooleanFormulaManager.java | 50 +++++------ .../solvers/dreal4/DReal4Formula.java | 4 +- .../dreal4/DReal4NumeralFormulaManager.java | 85 ++++++++++--------- .../DReal4QuantifiedFormulaManager.java | 2 +- .../java_smt/solvers/dreal4/DRealTerm.java | 19 ++++- .../dreal4/drealjni/Program_synthesis.java | 18 ++++ 6 files changed, 108 insertions(+), 70 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java index 4914c7c8e9..dd1208669c 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -43,16 +43,16 @@ protected DRealTerm makeVariableImpl(String pVar) { @Override protected DRealTerm makeBooleanImpl(boolean value) { if (value) { - return new DRealTerm(null, null, Formula.True()); + return new DRealTerm(null, null, Formula.True(), Type.BOOLEAN); } else { - return new DRealTerm(null, null, Formula.False()); + return new DRealTerm(null, null, Formula.False(), Type.BOOLEAN); } } @Override protected DRealTerm not(DRealTerm pParam1) { if (pParam1.isFormula()) { - return new DRealTerm(null, null, dreal.Not(pParam1.getFormula())); + return new DRealTerm(null, null, dreal.Not(pParam1.getFormula()), Type.BOOLEAN); } else { throw new UnsupportedOperationException("dReal does not support not on Variabele " + "or Expressions."); @@ -62,13 +62,13 @@ protected DRealTerm not(DRealTerm pParam1) { @Override protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getFormula())); + return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getVariable())); + return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getVariable())); + return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getFormula())); + return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN); } else { throw new UnsupportedOperationException("dReal does not support and on Expressions."); } @@ -77,13 +77,13 @@ protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getFormula())); + return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getVariable())); + return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getVariable())); + return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getFormula())); + return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN); } else { throw new UnsupportedOperationException("dReal does not support or on Expressions."); } @@ -96,22 +96,22 @@ protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), - dreal.Not(pParam2.getFormula()))))); + dreal.Not(pParam2.getFormula())))), Type.BOOLEAN); } else if (pParam1.isFormula() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), - dreal.Not(pParam2.getVariable()))))); + dreal.Not(pParam2.getVariable())))), Type.BOOLEAN); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), - dreal.Not(pParam2.getVariable()))))); + dreal.Not(pParam2.getVariable())))), Type.BOOLEAN); } else if (pParam1.isFormula() && pParam2.isFormula()) { return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), - dreal.Not(pParam2.getFormula()))))); + dreal.Not(pParam2.getFormula())))), Type.BOOLEAN); } else { throw new UnsupportedOperationException("dReal does not support xor on Expressions."); } @@ -120,13 +120,13 @@ protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm equivalence(DRealTerm bits1, DRealTerm bits2) { if (bits1.isVar() && bits2.isFormula()) { - return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getFormula())); + return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getFormula()), Type.BOOLEAN); } else if (bits1.isFormula() && bits2.isVar()) { - return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getVariable())); + return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getVariable()), Type.BOOLEAN); } else if (bits1.isVar() && bits2.isVar()) { - return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getVariable())); + return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getVariable()), Type.BOOLEAN); } else if (bits1.isFormula() && bits2.isFormula()) { - return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getFormula())); + return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getFormula()), Type.BOOLEAN); } else { throw new UnsupportedOperationException("dReal does not support iff on Expressions."); } @@ -157,19 +157,19 @@ protected DRealTerm ifThenElse(DRealTerm cond, DRealTerm f1, DRealTerm f2) { if (cond.isFormula()) { if (dreal.is_true(cond.getFormula())) { if (f1.isVar()) { - return new DRealTerm(f1.getVariable(), null, null); + return new DRealTerm(f1.getVariable(), null, null, Type.BOOLEAN); } else if (f1.isExp()) { - return new DRealTerm(null, f1.getExpression(), null); + return new DRealTerm(null, f1.getExpression(), null, Type.BOOLEAN); } else { - return new DRealTerm(null, null, f1.getFormula()); + return new DRealTerm(null, null, f1.getFormula(), Type.BOOLEAN); } } else { if (f2.isVar()) { - return new DRealTerm(f2.getVariable(), null, null); + return new DRealTerm(f2.getVariable(), null, null, Type.BOOLEAN); } else if (f2.isExp()) { - return new DRealTerm(null, f2.getExpression(), null); + return new DRealTerm(null, f2.getExpression(), null, Type.BOOLEAN); } else { - return new DRealTerm(null, null, f2.getFormula()); + return new DRealTerm(null, null, f2.getFormula(), Type.BOOLEAN); } } } else { diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java index 2c57857b44..0ef17d362c 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java @@ -76,8 +76,8 @@ static final class DReal4BooleanFormula extends DReal4Formula implements Boolean } } - static final class DReal4RelationalFormula extends DReal4Formula implements RationalFormula { - DReal4RelationalFormula(DRealTerm pTerm) { + static final class DReal4RationalFormula extends DReal4Formula implements RationalFormula { + DReal4RationalFormula(DRealTerm pTerm) { super(pTerm); } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index a2429fee3e..22b6991775 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -60,7 +60,7 @@ protected boolean isNumeral(DRealTerm val) { @Override protected DRealTerm makeNumberImpl(long i) { - return new DRealTerm(null, new Expression((double) i), null); + return new DRealTerm(null, new Expression((double) i), null, getNumeralType()); } @Override @@ -70,14 +70,14 @@ protected DRealTerm makeNumberImpl(BigInteger i) { @Override protected DRealTerm makeNumberImpl(String i) { - return new DRealTerm(null, new Expression(Double.parseDouble(i)), null); + return new DRealTerm(null, new Expression(Double.parseDouble(i)), null, getNumeralType()); } protected abstract Type getNumeralType(); @Override protected DRealTerm makeNumberImpl(double pNumber) { - return new DRealTerm(null, new Expression(pNumber), null); + return new DRealTerm(null, new Expression(pNumber), null, getNumeralType()); } @Override @@ -92,22 +92,23 @@ protected DRealTerm makeVariableImpl(String i) { @Override protected DRealTerm negate(DRealTerm pParam1) { - return new DRealTerm(null, null, dreal.Not(pParam1.getVariable())); + return new DRealTerm(null, null, dreal.Not(pParam1.getVariable()), pParam1.getType()); } @Override protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Add(pParam1.getExpression(), pParam2.getExpression()), null); + return new DRealTerm(null, dreal.Add(pParam1.getExpression(), pParam2.getExpression()), + null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, dreal.Add(new Expression(pParam1.getVariable()), - new Expression(pParam1.getVariable())), null); + new Expression(pParam1.getVariable())), null, pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, dreal.Add(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null); + new Expression(pParam2.getVariable())), null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, dreal.Add(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null); + pParam2.getExpression()), null, pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support add on Formulas."); } @@ -116,16 +117,17 @@ protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Substract(pParam1.getExpression(), pParam2.getExpression()), null); + return new DRealTerm(null, dreal.Substract(pParam1.getExpression(), + pParam2.getExpression()), null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, dreal.Substract(new Expression(pParam1.getVariable()), - new Expression(pParam1.getVariable())), null); + new Expression(pParam1.getVariable())), null, pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, dreal.Substract(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null); + new Expression(pParam2.getVariable())), null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, dreal.Substract(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null); + pParam2.getExpression()), null, pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support subtract on Variables or " + "Formulas."); @@ -136,16 +138,16 @@ protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, dreal.Divide(pParam1.getExpression(), pParam2.getExpression()), - null); + null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, dreal.Divide(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null); + pParam2.getExpression()), null, pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, dreal.Divide(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null); + new Expression(pParam2.getVariable())), null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, dreal.Divide(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), null); + new Expression(pParam2.getVariable())), null, pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support divide with Formulas."); } @@ -155,16 +157,16 @@ public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, dreal.Multiply(pParam1.getExpression(), pParam2.getExpression()), - null); + null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, dreal.Multiply(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null); + pParam2.getExpression()), null, pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, dreal.Multiply(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null); + new Expression(pParam2.getVariable())), null, pParam1.getType()); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, dreal.Multiply(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), null); + new Expression(pParam2.getVariable())), null, pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support multiply with Formulas."); } @@ -175,16 +177,16 @@ public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.Equal(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if (pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support equal on Formulas."); } @@ -194,13 +196,14 @@ protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm distinctImpl(List pNumbers) { // dReal does not directly support this method, so we need to build the whole term + Type type = pNumbers.get(0).getType(); Formula andFormula = helperFunction(pNumbers.get(1), pNumbers.get(0)); for (int i = 2; i < pNumbers.size(); i++) { for (int j = 0; j < i; j++) { andFormula = dreal.And(andFormula, helperFunction(pNumbers.get(i), pNumbers.get(j))); } } - return new DRealTerm(null, null, andFormula); + return new DRealTerm(null, null, andFormula, type); } // Takes two DRealTerms and creates a NotEqual Formula to use in distinctImpl @@ -225,16 +228,16 @@ private Formula helperFunction(DRealTerm pTerm1, DRealTerm pTerm2) { protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.Grater(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.Grater(new Expression(pParam1.getVariable()), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.Grater(pParam1.getExpression(), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.Grater(pParam1.getExpression(), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support greaterThan on Formulas."); } @@ -244,16 +247,16 @@ protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.GraterEqual(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.GraterEqual(new Expression(pParam1.getVariable()), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.GraterEqual(pParam1.getExpression(), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.GraterEqual(pParam1.getExpression(), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support greaterOrEquals on Formulas" + "."); @@ -264,16 +267,16 @@ protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.Less(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.Less(new Expression(pParam1.getVariable()), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.Less(pParam1.getExpression(), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.Less(pParam1.getExpression(), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support lessThan on Formulas."); } @@ -283,16 +286,16 @@ protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { protected DRealTerm lessOrEquals(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.LessEqual(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.LessEqual(new Expression(pParam1.getVariable()), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm(null, null, dreal.LessEqual(pParam1.getExpression(), - new Expression(pParam2.getVariable()))); + new Expression(pParam2.getVariable())), pParam1.getType()); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm(null, null, dreal.LessEqual(pParam1.getExpression(), - pParam2.getExpression())); + pParam2.getExpression()), pParam1.getType()); } else { throw new UnsupportedOperationException("dReal does not support lessOrEquals on Formulas."); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java index 2edd80b3b6..c281a75631 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java @@ -60,7 +60,7 @@ public DRealTerm mkQuantifier(Quantifier pQ, List pVars, DRealTerm pB } } if (pBody.isFormula()) { - return new DRealTerm(null, null, dreal.forall(vars, pBody.getFormula())); + return new DRealTerm(null, null, dreal.forall(vars, pBody.getFormula()), pBody.getType()); } else { throw new IllegalArgumentException("The given Formula is not a Formula."); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java index bae8afe39b..07d1c27c58 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java @@ -37,10 +37,13 @@ public class DRealTerm { @Nullable private Formula formula; - public DRealTerm(Variable pVar, Expression pExp, Formula pFormula) { + private Type type; + + public DRealTerm(Variable pVar, Expression pExp, Formula pFormula, Type pType) { this.var = pVar; this.exp = pExp; this.formula = pFormula; + this.type = pType; } public boolean isVar() { @@ -67,6 +70,10 @@ public Formula getFormula() { return formula; } + public Type getType() { + return type; + } + public Type getVariableKind() { return var.get_type(); } @@ -78,4 +85,14 @@ public ExpressionKind getExpressionKind() { public FormulaKind getFormulaKind() { return formula.get_kind(); } + + public String to_string() { + if (isVar()) { + return getVariable().to_string(); + } else if (isExp()) { + return getExpression().to_string(); + } else { + return getFormula().to_string(); + } + } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java index bdf42fa232..e205376531 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Program_synthesis.java @@ -20,6 +20,9 @@ package org.sosy_lab.java_smt.solvers.dreal4.drealjni; +import java.util.Iterator; +import java.util.Map.Entry; + public class Program_synthesis { static { try { @@ -45,6 +48,21 @@ public static void main(String[] args) { Expression nh = new Expression(-100.0); Expression h = new Expression(100.0); + Expression test = new Expression(dreal.Multiply(dreal.Multiply(b, b), dreal.pow(x, + new Expression(1.0)))); + System.out.println(test.to_string()); + + ExpressionExpressionMap map = dreal.get_base_to_exponent_map_in_multiplication(test); + java.util.Set> set = map.entrySet(); + Iterator> entry = set.iterator(); + Entry entry1; + for (int i = 0; i < map.size(); i++) { + entry1 = entry.next(); + System.out.println(entry1.getKey().to_string()); + System.out.println(entry1.getValue().to_string()); + } + + Formula sndimply = new Formula(dreal.imply(dreal.GraterEqual(x, c), dreal.Equal(dreal.abs(x), dreal.Multiply(a, x)))); Formula thrdimply = new Formula(dreal.imply(dreal.Less(x, c), dreal.Equal(dreal.abs(x), dreal.Multiply(b, x)))); From f3e49bfc8e0b1c7b2fceb756ee6fad39e8459324 Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 21 Jul 2023 17:52:06 +0200 Subject: [PATCH 005/155] implemented visit-Method --- .../solvers/dreal4/DReal4FormulaCreator.java | 268 +++++++++++++++++- 1 file changed, 262 insertions(+), 6 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index b566c6d668..d78570a3e5 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -19,16 +19,37 @@ */ package org.sosy_lab.java_smt.solvers.dreal4; +import static java.lang.Double.parseDouble; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Map.Entry; +import java.util.Set; import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType; +import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.api.visitors.FormulaVisitor; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; +import org.sosy_lab.java_smt.basicimpl.FunctionDeclarationImpl; +import org.sosy_lab.java_smt.solvers.dreal4.DReal4Formula.DReal4BooleanFormula; +import org.sosy_lab.java_smt.solvers.dreal4.DReal4Formula.DReal4IntegerFormula; +import org.sosy_lab.java_smt.solvers.dreal4.DReal4Formula.DReal4RationalFormula; + import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionDoubleMap; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionExpressionMap; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaSet; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4FormulaCreator extends FormulaCreator getFormulaType(DRealTerm formula) { - return null; + if (formula.getType() == Type.BOOLEAN) { + return FormulaType.BooleanType; + } else if (formula.getType() == Type.INTEGER) { + return FormulaType.IntegerType; + } else + return FormulaType.RationalType; } + @SuppressWarnings("unchecked") + @Override + public T encapsulate(FormulaType pType, DRealTerm pTerm) { + assert FormulaType.IntegerType.equals(pType) + || (FormulaType.RationalType.equals(pType) + && FormulaType.IntegerType.equals(getFormulaType(pTerm))) + || pType.equals(getFormulaType(pTerm)) + : String.format( + "Trying to encapsulate formula %s of type %s as %s", + pTerm.to_string(), getFormulaType(pTerm), pType); + if (pType.isBooleanType()) { + return (T) new DReal4BooleanFormula(pTerm); + } else if (pType.isIntegerType()) { + return (T) new DReal4IntegerFormula(pTerm); + } else if (pType.isRationalType()) { + return (T) new DReal4RationalFormula(pTerm); + } + throw new IllegalArgumentException("Cannot create formulas of type " + pType + " in dReal."); + } @Override public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { - return null; + + FunctionDeclarationKind functionKind = null; + List functionArgs = null; + + if (f.isVar()) { + return visitor.visitFreeVariable(formula, f.getVariable().to_string()); + } else if (f.isExp()) { + ExpressionKind kind = f.getExpressionKind(); + if (kind == ExpressionKind.Constant) { + // not possible to create an Expression from a boolean Variable + if (f.getType() == Type.INTEGER) { + return visitor.visitConstant(formula, new BigInteger(f.getExpression().to_string())); + } else { + // ich habe nur double? + //return visitor.visitConstant(formula, new ); + } + } else if (kind == ExpressionKind.Var) { + return visitor.visitFreeVariable(formula, f.getExpression().to_string()); + } else if (kind == ExpressionKind.IfThenElse) { + functionKind = FunctionDeclarationKind.ITE; + functionArgs = getExpressionFromITE(f); + } else if (kind == ExpressionKind.Pow) { + // this should be changed if pow is supported in JavaSMT + functionKind = FunctionDeclarationKind.MUL; + } else if (kind == ExpressionKind.Add){ + functionKind = FunctionDeclarationKind.ADD; + functionArgs = getExpressionFromAdd(f); + } else if (kind == ExpressionKind.Mul) { + // hier muss noch was passieren + functionKind = FunctionDeclarationKind.MUL; + functionArgs = getExpressionFromMul(f); + } else { + functionKind = FunctionDeclarationKind.DIV; + functionArgs = getExpressionsFromDiv(f); + } + // hier weiter geben der Expression + } else { + FormulaKind kind = f.getFormulaKind(); + if (kind == FormulaKind.Forall) { + // Problem dass man an die boundVariablen nicht ran kommt -> SWIG Wrapper funktion schreiben + throw new UnsupportedOperationException("Not supported."); + } else if (kind == FormulaKind.And) { + functionKind = FunctionDeclarationKind.AND; + functionArgs = getFormulaArgs(f); + } else if (kind == FormulaKind.Or) { + functionKind = FunctionDeclarationKind.OR; + functionArgs = getFormulaArgs(f); + } else if (kind == FormulaKind.Not) { + functionKind = FunctionDeclarationKind.NOT; + functionArgs = getFormulaFromNot(f); + } else if (kind == FormulaKind.Eq) { + functionKind = FunctionDeclarationKind.EQ; + } else if (kind == FormulaKind.Geq) { + functionKind = FunctionDeclarationKind.GTE; + } else if (kind == FormulaKind.Gt) { + functionKind = FunctionDeclarationKind.GT; + } else if (kind == FormulaKind.Leq) { + functionKind = FunctionDeclarationKind.LT; + } else if (kind == FormulaKind.Lt) { + functionKind = FunctionDeclarationKind.LTE; + } else if (kind == FormulaKind.Neq) { + // lhs ≠ rhs -> (lhs > rhs) ∨ (lhs < rhs) + Expression lhs = dreal.get_lhs_expression(f.getFormula()); + Expression rhs = dreal.get_rhs_expression(f.getFormula()); + DRealTerm neqTerm = new DRealTerm(null, null, + new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(dreal.Or(dreal.Grater(lhs, + rhs), dreal.Less(lhs, rhs))), Type.BOOLEAN); + functionKind = FunctionDeclarationKind.OR; + functionArgs = getFormulaArgs(neqTerm); + } else if (kind == FormulaKind.Var) { + return visitor.visitConstant(formula, false); + } else if (kind == FormulaKind.True) { + return visitor.visitConstant(formula, true); + } else { + return visitor.visitFreeVariable(formula, f.getFormula().to_string()); + } + } + + String functionName = functionKind.toString(); + if (functionArgs == null) { + functionArgs = getExpressionArgs(f); + } + + final ImmutableList> argTypes = ImmutableList.copyOf(toType(functionArgs)); + + final ImmutableList.Builder argsBuilder = ImmutableList.builder(); + for (int i = 0; i < functionArgs.size(); i++) { + argsBuilder.add(encapsulate(argTypes.get(i), functionArgs.get(i))); + } + final ImmutableList args = argsBuilder.build(); + + return visitor.visitFunction(formula, args, FunctionDeclarationImpl.of(functionName, + functionKind, argTypes, f.getType(), )); + + } + + private List> toType(final List args) { + return Lists.transform(args, this::getFormulaType); } + private static List getFormulaArgs(DRealTerm pTerm) { + List formulas = new ArrayList<>(); + + if (pTerm.isFormula()) { + FormulaSet set = dreal.get_operands(pTerm.getFormula()); + Iterator iter = set.iterator(); + for (int i = 0; i < set.size(); i++) { + formulas.add(new DRealTerm(null, null, iter.next(), pTerm.getType())); + } + return formulas; + } else { + throw new IllegalArgumentException("Term is not a Formula."); + } + } + + private static List getExpressionArgs(DRealTerm parent) { + List children = new ArrayList<>(); + if (parent.isExp()) { + throw new IllegalArgumentException("Term is Expression."); + } else if (parent.isFormula()) { + children.add(new DRealTerm(null, dreal.get_lhs_expression(parent.getFormula()), null, + parent.getType())); + children.add(new DRealTerm(null, dreal.get_rhs_expression(parent.getFormula()), null, + parent.getType())); + return children; + } else { + throw new IllegalArgumentException("Term is Variable."); + } + } + + private static List getFormulaFromNot(DRealTerm pTerm) { + List formula = new ArrayList<>(); + if (pTerm.isVar() || pTerm.isExp()) { + throw new IllegalArgumentException("Term is Expression or Variable."); + } else { + formula.add(new DRealTerm(null, null, dreal.get_operand(pTerm.getFormula()), Type.BOOLEAN)); + return formula; + } + } + + private static List getExpressionsFromDiv(DRealTerm pTerm) { + List children = new ArrayList<>(); + if (pTerm.isVar() || pTerm.isExp()) { + throw new IllegalArgumentException("Term is Variable or Expression"); + } else { + children.add(new DRealTerm(null, dreal.get_first_argument(pTerm.getExpression()), null, pTerm.getType())); + children.add(new DRealTerm(null, dreal.get_second_argument(pTerm.getExpression()), null, + pTerm.getType())); + return children; + } + } + + private static List getExpressionFromITE(DRealTerm pTerm) { + List children = new ArrayList<>(); + if (pTerm.isFormula() || pTerm.isVar()) { + throw new IllegalArgumentException("Term is Variable or Formula"); + } else { + children.add(new DRealTerm(null, null, dreal.get_conditional_formula(pTerm.getExpression()), + pTerm.getType())); + children.add(new DRealTerm(null, dreal.get_then_expression(pTerm.getExpression()), null, + pTerm.getType())); + children.add(new DRealTerm(null, dreal.get_else_expression(pTerm.getExpression()), null, + pTerm.getType())); + return children; + } + } + + private static List getExpressionFromAdd(DRealTerm pTerm) { + List terms = new ArrayList<>(); + if (pTerm.isVar() || pTerm.isFormula()) { + throw new IllegalArgumentException("Term is Variable or Formula."); + } else { + terms.add(new DRealTerm(null, new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), null, + pTerm.getType())); + ExpressionDoubleMap map = dreal.get_expr_to_coeff_map_in_addition(pTerm.getExpression()); + Set> set = map.entrySet(); + Iterator> iterator = set.iterator(); + Entry entry; + for (int i = 0; i < map.size(); i++) { + entry = iterator.next(); + terms.add(new DRealTerm(null, dreal.Multiply(entry.getKey(), + new Expression(entry.getValue())), null, pTerm.getType())); + } + return terms; + } + } + + private static List getExpressionFromMul(DRealTerm pTerm) { + List terms = new ArrayList<>(); + if (pTerm.isFormula() || pTerm.isVar()) { + throw new IllegalArgumentException("Term is Variable or Formula"); + } else { + terms.add(new DRealTerm(null, + new Expression(dreal.get_constant_in_multiplication(pTerm.getExpression())), null, + pTerm.getType())); + ExpressionExpressionMap map = + dreal.get_base_to_exponent_map_in_multiplication(pTerm.getExpression()); + Set> set = map.entrySet(); + Iterator> iterator = set.iterator(); + Entry entry; + for (int i = 0; i < map.size(); i++) { + entry = iterator.next(); + // it is possible to create an Expression like (x*x*x), therefore pow will always have an + // int as exponent -> convert back multiplication + // this should be changed if pow is supported in JavaSMT + for (double j = 0; j < parseDouble(entry.getValue().to_string()); j++) { + terms.add(new DRealTerm(null, new Expression(entry.getKey()), null, pTerm.getType())); + } + } + return terms; + } + } + + @Override public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { return null; From 346d7f748a499c57313e921497fa18a6a32e83ab Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 21 Jul 2023 17:54:24 +0200 Subject: [PATCH 006/155] remove wrong Documentation --- .../java_smt/solvers/dreal4/Documentation.md | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md b/src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md deleted file mode 100644 index b478b1e8b8..0000000000 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/Documentation.md +++ /dev/null @@ -1,39 +0,0 @@ -#### Fragen: -- Soll jetzt nur noch mit Pointer gearbeitet werden oder sollen auch die interface Klassen - verwendet werden? -> z.b TheoremProver mit Conifg und Context -- oder bei Dreal4Formula mit toString Methode - -- Not in BooleanFormulaManager - - -- UFManager, FormulaCreator welche Types? -- BooleanFormulaManger mit Variable erstellen von Typ Boolean und dann zu Formula umwandeln? -- Was sind die Types, bei BooleanFormulaManager bei ifThenElse, geht nur mit Expression - -### SolverContext: -- newOptimizationProverEnvironment: man kann in config optimization wählen, vllt damit? - - -### DRealTerm -- eventuell Variable hinzufügen? Erstmal ohne probieren - -### Not and negate: -- not bei BooleanFormula nur auf Formula? nur gucken, dass ganze formel nicht wahr wird? -- negate nur auf Variablen? Also nur Variable negieren - - -### FormulaManagers: -- Ich muss darauf achten, dass aus Variablen Expression erstellt werden können, um auch mit - Variables zu addieren usw. -- Gucken wie das mit erstellen von Variablen ist -> Expression oder Variable -- Ãœberall wo Expression verwendet wird, kann auch Variable verwendet werden, vorher zu - Expression machen - - -- Equal(==) und iff das selbe in dREal bei Formals? und Equal(==) bei Variable oder Expression ist - dann x + 2 = 10 -- Ãœberladene Operatoren aufpassen, sind blöd - - -### Type: -- Type ist von Variable? Reicht das? Wir haben Boolean, Integer, Continous(double), Binary \ No newline at end of file From 1328bbc1e691abe92eb5885914eceb788ab6ea9c Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 21 Jul 2023 18:01:36 +0200 Subject: [PATCH 007/155] added explaination to why that class is needed --- src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java index 07d1c27c58..3061afbe63 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java @@ -28,6 +28,13 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + +/* +This is a wrapper class to use the different classes of dReal to create Formulas. In dReal we +have Variables, Expression and Formulas. To create a Formula, Variables and Expressions are +needed. Because in FormulaCreator there is only one excepted type, this wrapper class is needed, +so that all three types are available. + */ public class DRealTerm { @Nullable From ca3c95feb378764447facf6207835b270113b3e8 Mon Sep 17 00:00:00 2001 From: Julius Date: Sat, 22 Jul 2023 15:00:53 +0200 Subject: [PATCH 008/155] implemented callFunctionImpl --- .../solvers/dreal4/DReal4FormulaCreator.java | 79 +++++++++++++++++-- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index d78570a3e5..59984c6ea9 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -53,7 +53,7 @@ public class DReal4FormulaCreator extends FormulaCreator { + FunctionDeclarationKind> { public DReal4FormulaCreator(Context context) { super(context, Type.BOOLEAN, Type.INTEGER, Type.CONTINUOUS, null, null); @@ -202,7 +202,7 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { final ImmutableList args = argsBuilder.build(); return visitor.visitFunction(formula, args, FunctionDeclarationImpl.of(functionName, - functionKind, argTypes, f.getType(), )); + functionKind, argTypes, getFormulaType(f), functionKind)); } @@ -325,17 +325,84 @@ private static List getExpressionFromMul(DRealTerm pTerm) { @Override - public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { - return null; + public DRealTerm callFunctionImpl(FunctionDeclarationKind declaration, List args) { + if (args.isEmpty()) { + throw new IllegalArgumentException("dReal does not support UFs without argmuents."); + } else { + Expression expression; + org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula formula; + switch (declaration) { + case ITE: + return new DRealTerm(null, dreal.if_then_else(args.get(0).getFormula(), args.get(1).getExpression(), + args.get(2).getExpression()), + null, + args.get(2).getType()); + case DIV: + return new DRealTerm(null, dreal.Divide(args.get(0).getExpression(), + args.get(1).getExpression()), null, args.get(0).getType()); + case MUL: + expression = dreal.Multiply(args.get(0).getExpression(), args.get(1).getExpression()); + if (args.size() > 2) { + for (int i = 2; i < args.size(); i++) { + expression = (dreal.Multiply(expression, args.get(i).getExpression())); + } + } + return new DRealTerm(null, expression, null, args.get(0).getType()); + case ADD: + expression = dreal.Add(args.get(0).getExpression(), args.get(1).getExpression()); + if (args.size() > 2) { + for (int i = 2; i < args.size(); i++) { + expression = (dreal.Add(expression, args.get(i).getExpression())); + } + } + return new DRealTerm(null, expression, null, args.get(0).getType()); + case NOT: + return new DRealTerm(null, null, dreal.Not(args.get(0).getFormula()), + args.get(0).getType()); + case EQ: + return new DRealTerm(null, null, dreal.Equal(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType()); + case GT: + return new DRealTerm(null, null, dreal.Grater(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType()); + case GTE: + return new DRealTerm(null, null, dreal.GraterEqual(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType()); + case LT: + return new DRealTerm(null, null, dreal.Less(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType()); + case LTE: + return new DRealTerm(null, null, dreal.LessEqual(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType()); + case AND: + formula = dreal.And(args.get(0).getFormula(), args.get(1).getFormula()); + if (args.size() > 2) { + for (int i = 2; i < args.size(); i++) { + formula = dreal.And(formula, args.get(i).getFormula()); + } + } + return new DRealTerm(null, null, formula, Type.BOOLEAN); + case OR: + formula = dreal.Or(args.get(0).getFormula(), args.get(1).getFormula()); + if (args.size() > 2) { + for (int i = 2; i < args.size(); i++) { + formula = dreal.Or(formula, args.get(i).getFormula()); + } + } + return new DRealTerm(null, null, formula, Type.BOOLEAN); + default: + throw new IllegalArgumentException("Unknown function declaration."); + } + } } @Override - public DRealTerm declareUFImpl(String pName, Type pReturnType, List pArgTypes) { + public FunctionDeclarationKind declareUFImpl(String pName, Type pReturnType, List pArgTypes) { return null; } @Override - protected DRealTerm getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { + protected FunctionDeclarationKind getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { return null; } } From 7073df5f8b4babf46c8f4c91d91fae6fbeefff97 Mon Sep 17 00:00:00 2001 From: Julius Date: Sat, 22 Jul 2023 15:02:38 +0200 Subject: [PATCH 009/155] changed TFunctDecl from DRealTerm to FunctionDeclarationKind --- .../java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java | 3 ++- .../java_smt/solvers/dreal4/DReal4FormulaManager.java | 3 ++- .../java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java | 3 ++- .../solvers/dreal4/DReal4QuantifiedFormulaManager.java | 5 +++-- .../sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java | 3 ++- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java index dd1208669c..bc001baf73 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -20,6 +20,7 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.basicimpl.AbstractBooleanFormulaManager; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; @@ -29,7 +30,7 @@ public class DReal4BooleanFormulaManager - extends AbstractBooleanFormulaManager { + extends AbstractBooleanFormulaManager { protected DReal4BooleanFormulaManager(FormulaCreator pCreator) { super(pCreator); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java index 3bb4ae4941..ecebc4f326 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java @@ -22,12 +22,13 @@ import org.sosy_lab.common.Appender; import org.sosy_lab.java_smt.api.BooleanFormula; +import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; public class DReal4FormulaManager extends AbstractFormulaManager { + FunctionDeclarationKind> { DReal4FormulaManager(DReal4FormulaCreator pFormulaCreator, DReal4UFManager pFunctionManager, DReal4BooleanFormulaManager pBooleanManager, diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index 22b6991775..5947748702 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -24,6 +24,7 @@ import java.math.BigInteger; import java.util.List; import org.sosy_lab.java_smt.api.FormulaType; +import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.api.NumeralFormula; import org.sosy_lab.java_smt.basicimpl.AbstractNumeralFormulaManager; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; @@ -36,7 +37,7 @@ public abstract class DReal4NumeralFormulaManager< ParamFormulaType extends NumeralFormula, ResultFormulaType extends NumeralFormula> extends AbstractNumeralFormulaManager< - DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, DRealTerm> { + DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, FunctionDeclarationKind> { DReal4NumeralFormulaManager( DReal4FormulaCreator pCreator, NonLinearArithmetic pNonLinearArithmetic) { diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java index c281a75631..fa44010048 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java @@ -21,6 +21,7 @@ package org.sosy_lab.java_smt.solvers.dreal4; import java.util.List; +import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.api.SolverException; import org.sosy_lab.java_smt.basicimpl.AbstractQuantifiedFormulaManager; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; @@ -30,9 +31,9 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4QuantifiedFormulaManager extends AbstractQuantifiedFormulaManager { + Type, Context, FunctionDeclarationKind> { - protected DReal4QuantifiedFormulaManager(FormulaCreator pFormulaCreator) { + protected DReal4QuantifiedFormulaManager(FormulaCreator pFormulaCreator) { super(pFormulaCreator); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java index 5c538f20d3..360f7cf268 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java @@ -20,11 +20,12 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.basicimpl.AbstractUFManager; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; -public class DReal4UFManager extends AbstractUFManager { +public class DReal4UFManager extends AbstractUFManager { DReal4UFManager(DReal4FormulaCreator pCreator) { super(pCreator); From 2d9b8ca45399db017c9e62153e4d08169aca5ae6 Mon Sep 17 00:00:00 2001 From: Julius Date: Sun, 23 Jul 2023 13:53:54 +0200 Subject: [PATCH 010/155] added Method to get the type when splitting formula into Expressions --- .../solvers/dreal4/DReal4FormulaCreator.java | 61 +++++++++++++++++-- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index 59984c6ea9..14fc2cf605 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -230,10 +230,14 @@ private static List getExpressionArgs(DRealTerm parent) { if (parent.isExp()) { throw new IllegalArgumentException("Term is Expression."); } else if (parent.isFormula()) { + Type type = getTypeForExpressions(dreal.get_lhs_expression(parent.getFormula())); + if (type == null) { + type = getTypeForExpressions(dreal.get_rhs_expression(parent.getFormula())); + } children.add(new DRealTerm(null, dreal.get_lhs_expression(parent.getFormula()), null, - parent.getType())); + type)); children.add(new DRealTerm(null, dreal.get_rhs_expression(parent.getFormula()), null, - parent.getType())); + type)); return children; } else { throw new IllegalArgumentException("Term is Variable."); @@ -282,7 +286,8 @@ private static List getExpressionFromAdd(DRealTerm pTerm) { if (pTerm.isVar() || pTerm.isFormula()) { throw new IllegalArgumentException("Term is Variable or Formula."); } else { - terms.add(new DRealTerm(null, new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), null, + terms.add(new DRealTerm(null, + new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), null, pTerm.getType())); ExpressionDoubleMap map = dreal.get_expr_to_coeff_map_in_addition(pTerm.getExpression()); Set> set = map.entrySet(); @@ -316,13 +321,58 @@ private static List getExpressionFromMul(DRealTerm pTerm) { // int as exponent -> convert back multiplication // this should be changed if pow is supported in JavaSMT for (double j = 0; j < parseDouble(entry.getValue().to_string()); j++) { - terms.add(new DRealTerm(null, new Expression(entry.getKey()), null, pTerm.getType())); + terms.add(new DRealTerm(null, new Expression(entry.getKey()), null, + pTerm.getType())); } } return terms; } } + /* + Needed if we split a formula. For example, we have x + 2 < 10. In visit we will + extract the first and second expression and need the type for the Expression. Because we + have only the parent to get the type from, it will always return Boolean Type, but the + expression should be some kind of NumeralFormula Type + */ + private static Type getTypeForExpressions(Expression pExpression) { + // If the Expression is Constant we return null, because from constant we cannot get the + // type, but this function is always called from a formula, so this is called two times, and + // one of them has a Variable, else this Formula would have been a True or False formula + if (pExpression.get_kind() == ExpressionKind.Constant) { + return null; + } else if (pExpression.get_kind() == ExpressionKind.Var) { + return dreal.get_variable(pExpression).get_type(); + } else if (pExpression.get_kind() == ExpressionKind.Div) { + Expression lhs = dreal.get_first_argument(pExpression); + Expression rhs = dreal.get_second_argument(pExpression); + // Division has at least one Variable, else it would be a constant; + if (lhs.get_kind() == ExpressionKind.Var) { + return dreal.get_variable(lhs).get_type(); + } else { + return dreal.get_variable(rhs).get_type(); + } + } else if (pExpression.get_kind() == ExpressionKind.Mul) { + // we will always get a Variable, else it would be a constant 3*3 -> 9 + ExpressionExpressionMap map = + dreal.get_base_to_exponent_map_in_multiplication(pExpression); + Set> set = map.entrySet(); + Iterator> iterator = set.iterator(); + // we only need one, because the type is the same from all of them + Entry entry = iterator.next(); + return dreal.get_variable(entry.getKey()).get_type(); + } else if (pExpression.get_kind() == ExpressionKind.Add) { + ExpressionDoubleMap map = dreal.get_expr_to_coeff_map_in_addition(pExpression); + Set> set = map.entrySet(); + Iterator> iterator = set.iterator(); + // we only need one, because the type is the same from all of them + Entry entry = iterator.next(); + return dreal.get_variable(entry.getKey()).get_type(); + } + else { + throw new AssertionError("Kind not known, this should not be possible."); + } + } @Override public DRealTerm callFunctionImpl(FunctionDeclarationKind declaration, List args) { @@ -403,6 +453,9 @@ public FunctionDeclarationKind declareUFImpl(String pName, Type pReturnType, Lis @Override protected FunctionDeclarationKind getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { + // FunctionDeclarationKind wieder ändern zu DRealTerm + // return pDrealTerm , weil ich dann in den DRealTerm die Funktion schreibe getType, aslo neu + // implementiere? return null; } } From fdbc1852b9872d9b34d177cca884c2c081c82f16 Mon Sep 17 00:00:00 2001 From: Julius Date: Mon, 24 Jul 2023 14:01:40 +0200 Subject: [PATCH 011/155] Changed DRealTerm to generic class --- .../dreal4/DReal4BooleanFormulaManager.java | 80 +++++---- .../solvers/dreal4/DReal4Formula.java | 6 +- .../solvers/dreal4/DReal4FormulaManager.java | 2 +- .../dreal4/DReal4NumeralFormulaManager.java | 164 +++++++++--------- .../DReal4QuantifiedFormulaManager.java | 8 +- .../solvers/dreal4/DReal4UFManager.java | 2 +- .../java_smt/solvers/dreal4/DRealTerm.java | 80 ++++++--- 7 files changed, 193 insertions(+), 149 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java index bc001baf73..8a9fe6059d 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -25,12 +25,13 @@ import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4BooleanFormulaManager - extends AbstractBooleanFormulaManager { + extends AbstractBooleanFormulaManager { protected DReal4BooleanFormulaManager(FormulaCreator pCreator) { super(pCreator); @@ -44,16 +45,17 @@ protected DRealTerm makeVariableImpl(String pVar) { @Override protected DRealTerm makeBooleanImpl(boolean value) { if (value) { - return new DRealTerm(null, null, Formula.True(), Type.BOOLEAN); + return new DRealTerm(Formula.True(), Type.BOOLEAN, FormulaKind.True); } else { - return new DRealTerm(null, null, Formula.False(), Type.BOOLEAN); + return new DRealTerm(Formula.False(), Type.BOOLEAN, FormulaKind.False); } } @Override protected DRealTerm not(DRealTerm pParam1) { if (pParam1.isFormula()) { - return new DRealTerm(null, null, dreal.Not(pParam1.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.Not(pParam1.getFormula()), Type.BOOLEAN, + FunctionDeclarationKind.NOT); } else { throw new UnsupportedOperationException("dReal does not support not on Variabele " + "or Expressions."); @@ -63,13 +65,17 @@ protected DRealTerm not(DRealTerm pParam1) { @Override protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.And(pParam1.getVariable(), pParam2.getFormula()), + Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN); + return new DRealTerm(dreal.And(pParam1.getFormula(), pParam2.getVariable()), + Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.And(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN); + return new DRealTerm(dreal.And(pParam1.getVariable(), pParam2.getVariable()), + Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.And(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.And(pParam1.getFormula(), pParam2.getFormula()), + Type.BOOLEAN, FormulaKind.And); } else { throw new UnsupportedOperationException("dReal does not support and on Expressions."); } @@ -78,13 +84,17 @@ protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.Or(pParam1.getVariable(), pParam2.getFormula()), + Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN); + return new DRealTerm(dreal.Or(pParam1.getFormula(), pParam2.getVariable()), + Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN); + return new DRealTerm(dreal.Or(pParam1.getVariable(), pParam2.getVariable()), + Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.Or(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.Or(pParam1.getFormula(), pParam2.getFormula()), + Type.BOOLEAN, FormulaKind.Or); } else { throw new UnsupportedOperationException("dReal does not support or on Expressions."); } @@ -94,25 +104,25 @@ protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), + return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), - dreal.Not(pParam2.getFormula())))), Type.BOOLEAN); + dreal.Not(pParam2.getFormula())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), + return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), - dreal.Not(pParam2.getVariable())))), Type.BOOLEAN); + dreal.Not(pParam2.getVariable())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), + return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), - dreal.Not(pParam2.getVariable())))), Type.BOOLEAN); + dreal.Not(pParam2.getVariable())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(null, null, dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), + return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), - dreal.Not(pParam2.getFormula())))), Type.BOOLEAN); + dreal.Not(pParam2.getFormula())))), Type.BOOLEAN, FormulaKind.And); } else { throw new UnsupportedOperationException("dReal does not support xor on Expressions."); } @@ -121,13 +131,17 @@ protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm equivalence(DRealTerm bits1, DRealTerm bits2) { if (bits1.isVar() && bits2.isFormula()) { - return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.iff(bits1.getVariable(), bits2.getFormula()), + Type.BOOLEAN, FormulaKind.And); } else if (bits1.isFormula() && bits2.isVar()) { - return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getVariable()), Type.BOOLEAN); + return new DRealTerm(dreal.iff(bits1.getFormula(), bits2.getVariable()), + Type.BOOLEAN, FormulaKind.And); } else if (bits1.isVar() && bits2.isVar()) { - return new DRealTerm(null, null, dreal.iff(bits1.getVariable(), bits2.getVariable()), Type.BOOLEAN); + return new DRealTerm(dreal.iff(bits1.getVariable(), bits2.getVariable()), + Type.BOOLEAN, FormulaKind.And); } else if (bits1.isFormula() && bits2.isFormula()) { - return new DRealTerm(null, null, dreal.iff(bits1.getFormula(), bits2.getFormula()), Type.BOOLEAN); + return new DRealTerm(dreal.iff(bits1.getFormula(), bits2.getFormula()), + Type.BOOLEAN, FormulaKind.And); } else { throw new UnsupportedOperationException("dReal does not support iff on Expressions."); } @@ -158,19 +172,25 @@ protected DRealTerm ifThenElse(DRealTerm cond, DRealTerm f1, DRealTerm f2) { if (cond.isFormula()) { if (dreal.is_true(cond.getFormula())) { if (f1.isVar()) { - return new DRealTerm(f1.getVariable(), null, null, Type.BOOLEAN); + return new DRealTerm(f1.getVariable(), Type.BOOLEAN, + f1.getDeclaration()); } else if (f1.isExp()) { - return new DRealTerm(null, f1.getExpression(), null, Type.BOOLEAN); + return new DRealTerm( f1.getExpression(), Type.BOOLEAN, + f1.getDeclaration()); } else { - return new DRealTerm(null, null, f1.getFormula(), Type.BOOLEAN); + return new DRealTerm(f1.getFormula(), Type.BOOLEAN, + f1.getDeclaration()); } } else { if (f2.isVar()) { - return new DRealTerm(f2.getVariable(), null, null, Type.BOOLEAN); + return new DRealTerm(f2.getVariable(), Type.BOOLEAN, + f2.getDeclaration()); } else if (f2.isExp()) { - return new DRealTerm(null, f2.getExpression(), null, Type.BOOLEAN); + return new DRealTerm(f2.getExpression(), Type.BOOLEAN, + f2.getDeclaration()); } else { - return new DRealTerm(null, null, f2.getFormula(), Type.BOOLEAN); + return new DRealTerm(f2.getFormula(), Type.BOOLEAN, + f2.getDeclaration()); } } } else { diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java index 0ef17d362c..aee7b38b26 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java @@ -51,11 +51,11 @@ public final boolean equals(Object o) { @Override public final String toString() { if (term.isExp()) { - return term.getExpression().toString(); + return term.getExpression().to_string(); } else if (term.isFormula()){ - return term.getFormula().toString(); + return term.getFormula().to_string(); } else { - return term.getVariable().toString(); + return term.getVariable().to_string(); } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java index ecebc4f326..5ede525d74 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java @@ -28,7 +28,7 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; public class DReal4FormulaManager extends AbstractFormulaManager { + DRealTerm> { DReal4FormulaManager(DReal4FormulaCreator pFormulaCreator, DReal4UFManager pFunctionManager, DReal4BooleanFormulaManager pBooleanManager, diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index 5947748702..c3b0d5004e 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -22,6 +22,7 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.text.Normalizer.Form; import java.util.List; import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.api.FunctionDeclarationKind; @@ -31,24 +32,20 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public abstract class DReal4NumeralFormulaManager< ParamFormulaType extends NumeralFormula, ResultFormulaType extends NumeralFormula> extends AbstractNumeralFormulaManager< - DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, FunctionDeclarationKind> { + DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, DRealTerm> { DReal4NumeralFormulaManager( DReal4FormulaCreator pCreator, NonLinearArithmetic pNonLinearArithmetic) { super(pCreator, pNonLinearArithmetic); } - @Override - public FormulaType getFormulaType() { - return null; - } - @Override protected boolean isNumeral(DRealTerm val) { if (val.isExp()) { @@ -61,7 +58,7 @@ protected boolean isNumeral(DRealTerm val) { @Override protected DRealTerm makeNumberImpl(long i) { - return new DRealTerm(null, new Expression((double) i), null, getNumeralType()); + return new DRealTerm(new Expression((double) i), getNumeralType(), ExpressionKind.Constant); } @Override @@ -71,14 +68,15 @@ protected DRealTerm makeNumberImpl(BigInteger i) { @Override protected DRealTerm makeNumberImpl(String i) { - return new DRealTerm(null, new Expression(Double.parseDouble(i)), null, getNumeralType()); + return new DRealTerm(new Expression(Double.parseDouble(i)), getNumeralType(), + ExpressionKind.Constant); } protected abstract Type getNumeralType(); @Override protected DRealTerm makeNumberImpl(double pNumber) { - return new DRealTerm(null, new Expression(pNumber), null, getNumeralType()); + return new DRealTerm(new Expression(pNumber), getNumeralType(), ExpressionKind.Constant); } @Override @@ -93,23 +91,23 @@ protected DRealTerm makeVariableImpl(String i) { @Override protected DRealTerm negate(DRealTerm pParam1) { - return new DRealTerm(null, null, dreal.Not(pParam1.getVariable()), pParam1.getType()); + return new DRealTerm(dreal.Not(pParam1.getVariable()), pParam1.getType(), FormulaKind.Not); } @Override protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Add(pParam1.getExpression(), pParam2.getExpression()), - null, pParam1.getType()); + return new DRealTerm(dreal.Add(pParam1.getExpression(), pParam2.getExpression()), + pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Add(new Expression(pParam1.getVariable()), - new Expression(pParam1.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Add(new Expression(pParam1.getVariable()), + new Expression(pParam1.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Add(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Add(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Add(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null, pParam1.getType()); + return new DRealTerm(dreal.Add(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else { throw new UnsupportedOperationException("dReal does not support add on Formulas."); } @@ -118,17 +116,17 @@ protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Substract(pParam1.getExpression(), - pParam2.getExpression()), null, pParam1.getType()); + return new DRealTerm(dreal.Substract(pParam1.getExpression(), + pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Substract(new Expression(pParam1.getVariable()), - new Expression(pParam1.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Substract(new Expression(pParam1.getVariable()), + new Expression(pParam1.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Substract(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Substract(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Substract(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null, pParam1.getType()); + return new DRealTerm(dreal.Substract(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else { throw new UnsupportedOperationException("dReal does not support subtract on Variables or " + "Formulas."); @@ -138,17 +136,17 @@ protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { @Override public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Divide(pParam1.getExpression(), pParam2.getExpression()), - null, pParam1.getType()); + return new DRealTerm(dreal.Divide(pParam1.getExpression(), pParam2.getExpression()), + pParam1.getType(), ExpressionKind.Div); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Divide(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null, pParam1.getType()); + return new DRealTerm(dreal.Divide(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), ExpressionKind.Div); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Divide(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Divide(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Div); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Divide(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Divide(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Div); } else { throw new UnsupportedOperationException("dReal does not support divide with Formulas."); } @@ -157,17 +155,17 @@ public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { @Override public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Multiply(pParam1.getExpression(), pParam2.getExpression()), - null, pParam1.getType()); + return new DRealTerm(dreal.Multiply(pParam1.getExpression(), pParam2.getExpression()), + pParam1.getType(), ExpressionKind.Mul); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, dreal.Multiply(new Expression(pParam1.getVariable()), - pParam2.getExpression()), null, pParam1.getType()); + return new DRealTerm(dreal.Multiply(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), ExpressionKind.Mul); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Multiply(pParam1.getExpression(), - new Expression(pParam2.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Multiply(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Mul); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, dreal.Multiply(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), null, pParam1.getType()); + return new DRealTerm(dreal.Multiply(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Mul); } else { throw new UnsupportedOperationException("dReal does not support multiply with Formulas."); } @@ -177,17 +175,17 @@ public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.Equal(pParam1.getExpression(), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Eq); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Equal(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Equal(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Equal(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.Equal(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Equal(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); } else { throw new UnsupportedOperationException("dReal does not support equal on Formulas."); } @@ -204,7 +202,7 @@ protected DRealTerm distinctImpl(List pNumbers) { andFormula = dreal.And(andFormula, helperFunction(pNumbers.get(i), pNumbers.get(j))); } } - return new DRealTerm(null, null, andFormula, type); + return new DRealTerm(andFormula, type, FormulaKind.And); } // Takes two DRealTerms and creates a NotEqual Formula to use in distinctImpl @@ -228,17 +226,17 @@ private Formula helperFunction(DRealTerm pTerm1, DRealTerm pTerm2) { @Override protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Grater(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Grater(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Gt); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.Grater(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.Grater(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Gt); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Grater(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Grater(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Gt); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.Grater(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.Grater(pParam1.getExpression(), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Gt); } else { throw new UnsupportedOperationException("dReal does not support greaterThan on Formulas."); } @@ -247,17 +245,17 @@ protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.GraterEqual(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.GraterEqual(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Geq); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.GraterEqual(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.GraterEqual(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Geq); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.GraterEqual(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.GraterEqual(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Geq); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.GraterEqual(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.GraterEqual(pParam1.getExpression(), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Geq); } else { throw new UnsupportedOperationException("dReal does not support greaterOrEquals on Formulas" + "."); @@ -267,17 +265,17 @@ protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Less(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Less(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Lt); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.Less(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.Less(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Lt); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.Less(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.Less(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Lt); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.Less(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.Less(pParam1.getExpression(), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Lt); } else { throw new UnsupportedOperationException("dReal does not support lessThan on Formulas."); } @@ -286,17 +284,17 @@ protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { @Override protected DRealTerm lessOrEquals(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.LessEqual(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.LessEqual(new Expression(pParam1.getVariable()), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Leq); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.LessEqual(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.LessEqual(new Expression(pParam1.getVariable()), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Leq); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(null, null, dreal.LessEqual(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType()); + return new DRealTerm(dreal.LessEqual(pParam1.getExpression(), + new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Leq); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(null, null, dreal.LessEqual(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType()); + return new DRealTerm(dreal.LessEqual(pParam1.getExpression(), + pParam2.getExpression()), pParam1.getType(), FormulaKind.Leq); } else { throw new UnsupportedOperationException("dReal does not support lessOrEquals on Formulas."); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java index fa44010048..e8dd37f01d 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java @@ -26,14 +26,15 @@ import org.sosy_lab.java_smt.basicimpl.AbstractQuantifiedFormulaManager; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4QuantifiedFormulaManager extends AbstractQuantifiedFormulaManager { + Type, Context, DRealTerm> { - protected DReal4QuantifiedFormulaManager(FormulaCreator pFormulaCreator) { + protected DReal4QuantifiedFormulaManager(FormulaCreator pFormulaCreator) { super(pFormulaCreator); } @@ -61,7 +62,8 @@ public DRealTerm mkQuantifier(Quantifier pQ, List pVars, DRealTerm pB } } if (pBody.isFormula()) { - return new DRealTerm(null, null, dreal.forall(vars, pBody.getFormula()), pBody.getType()); + return new DRealTerm(dreal.forall(vars, pBody.getFormula()), pBody.getType(), + FormulaKind.Forall); } else { throw new IllegalArgumentException("The given Formula is not a Formula."); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java index 360f7cf268..961a3e00b4 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java @@ -25,7 +25,7 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; -public class DReal4UFManager extends AbstractUFManager { +public class DReal4UFManager extends AbstractUFManager { DReal4UFManager(DReal4FormulaCreator pCreator) { super(pCreator); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java index 3061afbe63..e0dbb73460 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java @@ -20,7 +20,6 @@ package org.sosy_lab.java_smt.solvers.dreal4; -import javax.annotation.Nullable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; @@ -29,77 +28,102 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + /* This is a wrapper class to use the different classes of dReal to create Formulas. In dReal we have Variables, Expression and Formulas. To create a Formula, Variables and Expressions are needed. Because in FormulaCreator there is only one excepted type, this wrapper class is needed, so that all three types are available. */ -public class DRealTerm { +public class DRealTerm { + +// @Nullable +// private Variable var; +// @Nullable +// private Expression exp; +// @Nullable +// private Formula formula; - @Nullable - private Variable var; - @Nullable - private Expression exp; - @Nullable - private Formula formula; + private final Term term; + private final Kind declaration; - private Type type; + private final Type type; - public DRealTerm(Variable pVar, Expression pExp, Formula pFormula, Type pType) { - this.var = pVar; - this.exp = pExp; - this.formula = pFormula; + public DRealTerm(Term pTerm, Type pType, Kind pKind) { + this.term = pTerm; this.type = pType; + this.declaration = pKind; } public boolean isVar() { - return var != null; + return term instanceof Variable; } public boolean isExp() { - return exp != null; + return term instanceof Expression; } public boolean isFormula() { - return formula != null; + return term instanceof Formula; } public Variable getVariable() { - return var; + if (isVar()) { + return (Variable) term; + } else { + throw new IllegalArgumentException("Not a Variable."); + } } public Expression getExpression() { - return exp; + if (isExp()) { + return (Expression) term; + } else { + throw new IllegalArgumentException("Not a Variable."); + } } public Formula getFormula() { - return formula; + if (isFormula()) { + return (Formula) term; + } else { + throw new IllegalArgumentException("Not a Variable."); + } } public Type getType() { return type; } - public Type getVariableKind() { - return var.get_type(); - } - public ExpressionKind getExpressionKind() { - return exp.get_kind(); + if (isExp()) { + Expression exp = (Expression) term; + return exp.get_kind(); + } else { + throw new IllegalArgumentException("Not an Expression."); + } } public FormulaKind getFormulaKind() { - return formula.get_kind(); + if (isFormula()) { + Formula formula = (Formula) term; + return formula.get_kind(); + } else { + throw new IllegalArgumentException("Not an Expression."); + } } public String to_string() { if (isVar()) { - return getVariable().to_string(); + Variable var = (Variable) term; + return var.to_string(); } else if (isExp()) { - return getExpression().to_string(); + Expression exp = (Expression) term; + return exp.to_string(); } else { - return getFormula().to_string(); + Formula formula = (Formula) term; + return formula.to_string(); } } + } From 075e00ef91ca545eaf24d55f4b1efe459d0a83f4 Mon Sep 17 00:00:00 2001 From: Julius Date: Mon, 24 Jul 2023 14:02:18 +0200 Subject: [PATCH 012/155] implemented FormulaCreator --- .../solvers/dreal4/DReal4FormulaCreator.java | 216 +++++++++++------- 1 file changed, 130 insertions(+), 86 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index 14fc2cf605..3c293027c9 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -20,15 +20,18 @@ package org.sosy_lab.java_smt.solvers.dreal4; import static java.lang.Double.parseDouble; +import static java.lang.String.valueOf; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import java.math.BigInteger; +import java.text.Normalizer.Form; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import java.util.Set; +import java.util.function.Function; import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType; @@ -49,11 +52,12 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaSet; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4FormulaCreator extends FormulaCreator { + DRealTerm> { public DReal4FormulaCreator(Context context) { super(context, Type.BOOLEAN, Type.INTEGER, Type.CONTINUOUS, null, null); @@ -76,7 +80,8 @@ public Type getArrayType(Type indexType, Type elementType) { @Override public DRealTerm makeVariable(Type pType, String varName) { - return new DRealTerm(new Variable(varName, pType), null, null, pType); + return new DRealTerm(new Variable(varName, pType), pType, + pType); } @Override @@ -108,6 +113,7 @@ public T encapsulate(FormulaType pType, DRealTerm pTerm) } throw new IllegalArgumentException("Cannot create formulas of type " + pType + " in dReal."); } + @Override public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { @@ -123,7 +129,7 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { if (f.getType() == Type.INTEGER) { return visitor.visitConstant(formula, new BigInteger(f.getExpression().to_string())); } else { - // ich habe nur double? + // TODO: visitConstant from Rational //return visitor.visitConstant(formula, new ); } } else if (kind == ExpressionKind.Var) { @@ -134,7 +140,7 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { } else if (kind == ExpressionKind.Pow) { // this should be changed if pow is supported in JavaSMT functionKind = FunctionDeclarationKind.MUL; - } else if (kind == ExpressionKind.Add){ + } else if (kind == ExpressionKind.Add) { functionKind = FunctionDeclarationKind.ADD; functionArgs = getExpressionFromAdd(f); } else if (kind == ExpressionKind.Mul) { @@ -145,11 +151,10 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { functionKind = FunctionDeclarationKind.DIV; functionArgs = getExpressionsFromDiv(f); } - // hier weiter geben der Expression } else { FormulaKind kind = f.getFormulaKind(); if (kind == FormulaKind.Forall) { - // Problem dass man an die boundVariablen nicht ran kommt -> SWIG Wrapper funktion schreiben + // TODO: Need to implement a wrapper to get the bounded variables throw new UnsupportedOperationException("Not supported."); } else if (kind == FormulaKind.And) { functionKind = FunctionDeclarationKind.AND; @@ -174,9 +179,10 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { // lhs ≠ rhs -> (lhs > rhs) ∨ (lhs < rhs) Expression lhs = dreal.get_lhs_expression(f.getFormula()); Expression rhs = dreal.get_rhs_expression(f.getFormula()); - DRealTerm neqTerm = new DRealTerm(null, null, - new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(dreal.Or(dreal.Grater(lhs, - rhs), dreal.Less(lhs, rhs))), Type.BOOLEAN); + DRealTerm neqTerm = + new DRealTerm( + new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(dreal.Or(dreal.Grater(lhs, + rhs), dreal.Less(lhs, rhs))), Type.BOOLEAN, FormulaKind.Or); functionKind = FunctionDeclarationKind.OR; functionArgs = getFormulaArgs(neqTerm); } else if (kind == FormulaKind.Var) { @@ -193,6 +199,19 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { functionArgs = getExpressionArgs(f); } + DRealTerm pDeclaration; + + if (f.isExp()) { + pDeclaration = new DRealTerm(new Expression(), f.getType(),f.getExpressionKind()); + } else if (f.isFormula()) { + pDeclaration = new DRealTerm(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), + f.getType(), f.getFormulaKind()); + } else { + throw new AssertionError("We should not get a Variable, the function should have already " + + "returned visitFreeVariable."); + } + + final ImmutableList> argTypes = ImmutableList.copyOf(toType(functionArgs)); final ImmutableList.Builder argsBuilder = ImmutableList.builder(); @@ -202,22 +221,23 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { final ImmutableList args = argsBuilder.build(); return visitor.visitFunction(formula, args, FunctionDeclarationImpl.of(functionName, - functionKind, argTypes, getFormulaType(f), functionKind)); + functionKind, argTypes, getFormulaType(f), pDeclaration)); } - private List> toType(final List args) { return Lists.transform(args, this::getFormulaType); } private static List getFormulaArgs(DRealTerm pTerm) { List formulas = new ArrayList<>(); + org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula formula; if (pTerm.isFormula()) { FormulaSet set = dreal.get_operands(pTerm.getFormula()); Iterator iter = set.iterator(); for (int i = 0; i < set.size(); i++) { - formulas.add(new DRealTerm(null, null, iter.next(), pTerm.getType())); + formula = iter.next(); + formulas.add(new DRealTerm(formula, pTerm.getType(), formula.get_kind())); } return formulas; } else { @@ -234,10 +254,10 @@ private static List getExpressionArgs(DRealTerm parent) { if (type == null) { type = getTypeForExpressions(dreal.get_rhs_expression(parent.getFormula())); } - children.add(new DRealTerm(null, dreal.get_lhs_expression(parent.getFormula()), null, - type)); - children.add(new DRealTerm(null, dreal.get_rhs_expression(parent.getFormula()), null, - type)); + children.add(new DRealTerm(dreal.get_lhs_expression(parent.getFormula()), type, + dreal.get_lhs_expression(parent.getFormula()).get_kind())); + children.add(new DRealTerm(dreal.get_rhs_expression(parent.getFormula()), type, + dreal.get_rhs_expression(parent.getFormula()).get_kind())); return children; } else { throw new IllegalArgumentException("Term is Variable."); @@ -249,7 +269,8 @@ private static List getFormulaFromNot(DRealTerm pTerm) { if (pTerm.isVar() || pTerm.isExp()) { throw new IllegalArgumentException("Term is Expression or Variable."); } else { - formula.add(new DRealTerm(null, null, dreal.get_operand(pTerm.getFormula()), Type.BOOLEAN)); + formula.add(new DRealTerm(dreal.get_operand(pTerm.getFormula()), Type.BOOLEAN, + dreal.get_operand(pTerm.getFormula()).get_kind())); return formula; } } @@ -259,11 +280,12 @@ private static List getExpressionsFromDiv(DRealTerm pTerm) { if (pTerm.isVar() || pTerm.isExp()) { throw new IllegalArgumentException("Term is Variable or Expression"); } else { - children.add(new DRealTerm(null, dreal.get_first_argument(pTerm.getExpression()), null, pTerm.getType())); - children.add(new DRealTerm(null, dreal.get_second_argument(pTerm.getExpression()), null, - pTerm.getType())); - return children; - } + children.add(new DRealTerm(dreal.get_first_argument(pTerm.getExpression()), + pTerm.getType(), dreal.get_first_argument(pTerm.getExpression()).get_kind())); + children.add(new DRealTerm(dreal.get_second_argument(pTerm.getExpression()), + pTerm.getType(), dreal.get_second_argument(pTerm.getExpression()).get_kind())); + return children; + } } private static List getExpressionFromITE(DRealTerm pTerm) { @@ -271,12 +293,12 @@ private static List getExpressionFromITE(DRealTerm pTerm) { if (pTerm.isFormula() || pTerm.isVar()) { throw new IllegalArgumentException("Term is Variable or Formula"); } else { - children.add(new DRealTerm(null, null, dreal.get_conditional_formula(pTerm.getExpression()), - pTerm.getType())); - children.add(new DRealTerm(null, dreal.get_then_expression(pTerm.getExpression()), null, - pTerm.getType())); - children.add(new DRealTerm(null, dreal.get_else_expression(pTerm.getExpression()), null, - pTerm.getType())); + children.add(new DRealTerm(dreal.get_conditional_formula(pTerm.getExpression()), + pTerm.getType(), dreal.get_conditional_formula(pTerm.getExpression()).get_kind())); + children.add(new DRealTerm(dreal.get_then_expression(pTerm.getExpression()), + pTerm.getType(), dreal.get_then_expression(pTerm.getExpression()).get_kind())); + children.add(new DRealTerm(dreal.get_else_expression(pTerm.getExpression()), + pTerm.getType(), dreal.get_else_expression(pTerm.getExpression()).get_kind())); return children; } } @@ -286,17 +308,16 @@ private static List getExpressionFromAdd(DRealTerm pTerm) { if (pTerm.isVar() || pTerm.isFormula()) { throw new IllegalArgumentException("Term is Variable or Formula."); } else { - terms.add(new DRealTerm(null, - new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), null, - pTerm.getType())); + terms.add(new DRealTerm(new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), + pTerm.getType(), ExpressionKind.Constant)); ExpressionDoubleMap map = dreal.get_expr_to_coeff_map_in_addition(pTerm.getExpression()); Set> set = map.entrySet(); Iterator> iterator = set.iterator(); Entry entry; for (int i = 0; i < map.size(); i++) { entry = iterator.next(); - terms.add(new DRealTerm(null, dreal.Multiply(entry.getKey(), - new Expression(entry.getValue())), null, pTerm.getType())); + terms.add(new DRealTerm(dreal.Multiply(entry.getKey(), + new Expression(entry.getValue())), pTerm.getType(), ExpressionKind.Mul)); } return terms; } @@ -307,9 +328,9 @@ private static List getExpressionFromMul(DRealTerm pTerm) { if (pTerm.isFormula() || pTerm.isVar()) { throw new IllegalArgumentException("Term is Variable or Formula"); } else { - terms.add(new DRealTerm(null, - new Expression(dreal.get_constant_in_multiplication(pTerm.getExpression())), null, - pTerm.getType())); + terms.add(new DRealTerm( + new Expression(dreal.get_constant_in_multiplication(pTerm.getExpression())), + pTerm.getType(), ExpressionKind.Constant)); ExpressionExpressionMap map = dreal.get_base_to_exponent_map_in_multiplication(pTerm.getExpression()); Set> set = map.entrySet(); @@ -321,8 +342,8 @@ private static List getExpressionFromMul(DRealTerm pTerm) { // int as exponent -> convert back multiplication // this should be changed if pow is supported in JavaSMT for (double j = 0; j < parseDouble(entry.getValue().to_string()); j++) { - terms.add(new DRealTerm(null, new Expression(entry.getKey()), null, - pTerm.getType())); + terms.add(new DRealTerm(new Expression(entry.getKey()), + pTerm.getType(), ExpressionKind.Var)); } } return terms; @@ -368,94 +389,117 @@ private static Type getTypeForExpressions(Expression pExpression) { // we only need one, because the type is the same from all of them Entry entry = iterator.next(); return dreal.get_variable(entry.getKey()).get_type(); - } - else { + } else { throw new AssertionError("Kind not known, this should not be possible."); } } @Override - public DRealTerm callFunctionImpl(FunctionDeclarationKind declaration, List args) { + public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { if (args.isEmpty()) { - throw new IllegalArgumentException("dReal does not support UFs without argmuents."); + // Or Variable? + throw new IllegalArgumentException("dReal does not support UFs without arguments."); } else { Expression expression; org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula formula; - switch (declaration) { - case ITE: - return new DRealTerm(null, dreal.if_then_else(args.get(0).getFormula(), args.get(1).getExpression(), - args.get(2).getExpression()), - null, - args.get(2).getType()); - case DIV: - return new DRealTerm(null, dreal.Divide(args.get(0).getExpression(), - args.get(1).getExpression()), null, args.get(0).getType()); - case MUL: + if (declaration.isExp()) { + ExpressionKind expressionKind = declaration.getExpressionKind(); + if (expressionKind.equals(ExpressionKind.IfThenElse)) { + return new DRealTerm( + dreal.if_then_else(args.get(0).getFormula(), args.get(1).getExpression(), + args.get(2).getExpression()), args.get(2).getType(), ExpressionKind.IfThenElse); + } else if (expressionKind.equals(ExpressionKind.Div)) { + return new DRealTerm(dreal.Divide(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType(), ExpressionKind.Div); + } else if (expressionKind.equals(ExpressionKind.Mul)) { expression = dreal.Multiply(args.get(0).getExpression(), args.get(1).getExpression()); if (args.size() > 2) { for (int i = 2; i < args.size(); i++) { expression = (dreal.Multiply(expression, args.get(i).getExpression())); } } - return new DRealTerm(null, expression, null, args.get(0).getType()); - case ADD: + return new DRealTerm(expression, args.get(0).getType(), ExpressionKind.Mul); + } else if (expressionKind.equals(ExpressionKind.Add)) { expression = dreal.Add(args.get(0).getExpression(), args.get(1).getExpression()); if (args.size() > 2) { for (int i = 2; i < args.size(); i++) { expression = (dreal.Add(expression, args.get(i).getExpression())); } } - return new DRealTerm(null, expression, null, args.get(0).getType()); - case NOT: - return new DRealTerm(null, null, dreal.Not(args.get(0).getFormula()), - args.get(0).getType()); - case EQ: - return new DRealTerm(null, null, dreal.Equal(args.get(0).getExpression(), - args.get(1).getExpression()), args.get(0).getType()); - case GT: - return new DRealTerm(null, null, dreal.Grater(args.get(0).getExpression(), - args.get(1).getExpression()), args.get(0).getType()); - case GTE: - return new DRealTerm(null, null, dreal.GraterEqual(args.get(0).getExpression(), - args.get(1).getExpression()), args.get(0).getType()); - case LT: - return new DRealTerm(null, null, dreal.Less(args.get(0).getExpression(), - args.get(1).getExpression()), args.get(0).getType()); - case LTE: - return new DRealTerm(null, null, dreal.LessEqual(args.get(0).getExpression(), - args.get(1).getExpression()), args.get(0).getType()); - case AND: + return new DRealTerm(expression, args.get(0).getType(), ExpressionKind.Add); + } + } else if (declaration.isFormula()) { + FormulaKind formulaKind = declaration.getFormulaKind(); + if (formulaKind.equals(FormulaKind.Not)) { + return new DRealTerm(dreal.Not(args.get(0).getFormula()), args.get(0).getType(), + FormulaKind.Not); + } else if (formulaKind.equals(FormulaKind.Eq)) { + return new DRealTerm(dreal.Equal(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Eq); + } else if (formulaKind.equals(FormulaKind.Gt)) { + return new DRealTerm(dreal.Grater(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Gt); + } else if (formulaKind.equals(FormulaKind.Geq)) { + return new DRealTerm(dreal.GraterEqual(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Geq); + } else if (formulaKind.equals(FormulaKind.Lt)) { + return new DRealTerm(dreal.Less(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Lt); + } else if (formulaKind.equals(FormulaKind.Leq)) { + return new DRealTerm(dreal.LessEqual(args.get(0).getExpression(), + args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Leq); + } else if (formulaKind.equals(FormulaKind.And)) { formula = dreal.And(args.get(0).getFormula(), args.get(1).getFormula()); if (args.size() > 2) { for (int i = 2; i < args.size(); i++) { formula = dreal.And(formula, args.get(i).getFormula()); } } - return new DRealTerm(null, null, formula, Type.BOOLEAN); - case OR: + return new DRealTerm(formula, Type.BOOLEAN, FormulaKind.And); + } else if (formulaKind.equals(FormulaKind.Or)) { formula = dreal.Or(args.get(0).getFormula(), args.get(1).getFormula()); if (args.size() > 2) { for (int i = 2; i < args.size(); i++) { formula = dreal.Or(formula, args.get(i).getFormula()); } } - return new DRealTerm(null, null, formula, Type.BOOLEAN); - default: - throw new IllegalArgumentException("Unknown function declaration."); + return new DRealTerm(formula, Type.BOOLEAN, FormulaKind.Or); + } + } else { + // Variable? + return null; } + throw new IllegalArgumentException("Unknown function declaration."); } } @Override - public FunctionDeclarationKind declareUFImpl(String pName, Type pReturnType, List pArgTypes) { - return null; + public DRealTerm declareUFImpl(String pName, Type pReturnType, List pArgTypes) { + if (pArgTypes.isEmpty()) { + // einfach Variable zurückgeben? + return new DRealTerm(new Variable(pName, pReturnType), pReturnType, + pReturnType); + } else { + Variables vars = new Variables(); + for (int i = 0; i < pArgTypes.size(); i++) { + vars.insert(new Variable(valueOf(i), pArgTypes.get(i))); + } + return new DRealTerm(dreal.uninterpreted_function(pName, vars), pReturnType, + ExpressionKind.UninterpretedFunction); + } } @Override - protected FunctionDeclarationKind getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { - // FunctionDeclarationKind wieder ändern zu DRealTerm - // return pDrealTerm , weil ich dann in den DRealTerm die Funktion schreibe getType, aslo neu - // implementiere? - return null; + protected DRealTerm getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { + // create DRealTerm with dummy Variable, Expression, Formula, only to save declaration in + // DRealTerm + if (pDRealTerm.isVar()) { + return new DRealTerm(new Variable(), pDRealTerm.getType(), pDRealTerm.getType()); + } else if (pDRealTerm.isExp()) { + return new DRealTerm(new Expression(), pDRealTerm.getType(), pDRealTerm.getExpressionKind()); + } else { + return new DRealTerm(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), pDRealTerm.getType(), pDRealTerm.getFormulaKind()); + } } + } From 053b3c734c53067c31a054c232c4d6302bda7f42 Mon Sep 17 00:00:00 2001 From: Julius Date: Tue, 25 Jul 2023 16:22:27 +0200 Subject: [PATCH 013/155] Use Wildcard Operator, so that there are no raw types --- .../dreal4/DReal4BooleanFormulaManager.java | 91 +++++------ .../solvers/dreal4/DReal4Formula.java | 16 +- .../solvers/dreal4/DReal4FormulaCreator.java | 148 ++++++++++-------- .../solvers/dreal4/DReal4FormulaManager.java | 15 +- .../dreal4/DReal4NumeralFormulaManager.java | 131 ++++++++-------- .../DReal4QuantifiedFormulaManager.java | 18 ++- .../solvers/dreal4/DReal4TheoremProver.java | 34 +++- .../solvers/dreal4/DReal4UFManager.java | 3 +- .../java_smt/solvers/dreal4/DRealTerm.java | 7 - 9 files changed, 263 insertions(+), 200 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java index 8a9fe6059d..a13d475965 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -26,36 +26,37 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4BooleanFormulaManager - extends AbstractBooleanFormulaManager { + extends AbstractBooleanFormulaManager, Type, Context, DRealTerm> { - protected DReal4BooleanFormulaManager(FormulaCreator pCreator) { + protected DReal4BooleanFormulaManager(DReal4FormulaCreator pCreator) { super(pCreator); } @Override - protected DRealTerm makeVariableImpl(String pVar) { + protected DRealTerm makeVariableImpl(String pVar) { return formulaCreator.makeVariable(getFormulaCreator().getBoolType(), pVar); } @Override - protected DRealTerm makeBooleanImpl(boolean value) { + protected DRealTerm makeBooleanImpl(boolean value) { if (value) { - return new DRealTerm(Formula.True(), Type.BOOLEAN, FormulaKind.True); + return new DRealTerm<>(Formula.True(), Type.BOOLEAN, FormulaKind.True); } else { - return new DRealTerm(Formula.False(), Type.BOOLEAN, FormulaKind.False); + return new DRealTerm<>(Formula.False(), Type.BOOLEAN, FormulaKind.False); } } @Override - protected DRealTerm not(DRealTerm pParam1) { + protected DRealTerm not(DRealTerm pParam1) { if (pParam1.isFormula()) { - return new DRealTerm(dreal.Not(pParam1.getFormula()), Type.BOOLEAN, - FunctionDeclarationKind.NOT); + return new DRealTerm<>(dreal.Not(pParam1.getFormula()), Type.BOOLEAN, + FormulaKind.Not); } else { throw new UnsupportedOperationException("dReal does not support not on Variabele " + "or Expressions."); @@ -63,18 +64,18 @@ protected DRealTerm not(DRealTerm pParam1) { } @Override - protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(dreal.And(pParam1.getVariable(), pParam2.getFormula()), + return new DRealTerm<>(dreal.And(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(dreal.And(pParam1.getFormula(), pParam2.getVariable()), + return new DRealTerm<>(dreal.And(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.And(pParam1.getVariable(), pParam2.getVariable()), + return new DRealTerm<>(dreal.And(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(dreal.And(pParam1.getFormula(), pParam2.getFormula()), + return new DRealTerm<>(dreal.And(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else { throw new UnsupportedOperationException("dReal does not support and on Expressions."); @@ -82,18 +83,18 @@ protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { } @Override - protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(dreal.Or(pParam1.getVariable(), pParam2.getFormula()), + return new DRealTerm<>(dreal.Or(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(dreal.Or(pParam1.getFormula(), pParam2.getVariable()), + return new DRealTerm<>(dreal.Or(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Or(pParam1.getVariable(), pParam2.getVariable()), + return new DRealTerm<>(dreal.Or(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(dreal.Or(pParam1.getFormula(), pParam2.getFormula()), + return new DRealTerm<>(dreal.Or(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.Or); } else { throw new UnsupportedOperationException("dReal does not support or on Expressions."); @@ -102,24 +103,24 @@ protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { // a xor b = (NOT(A AND B)) AND (NOT(NOT A AND NOT B)) @Override - protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { - return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), + return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), dreal.Not(pParam2.getFormula())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isVar()) { - return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), + return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), dreal.Not(pParam2.getVariable())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), + return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), dreal.Not(pParam2.getVariable())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isFormula()) { - return new DRealTerm(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), + return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), dreal.Not(pParam2.getFormula())))), Type.BOOLEAN, FormulaKind.And); @@ -129,18 +130,19 @@ protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { } @Override - protected DRealTerm equivalence(DRealTerm bits1, DRealTerm bits2) { + protected DRealTerm equivalence(DRealTerm bits1, + DRealTerm bits2) { if (bits1.isVar() && bits2.isFormula()) { - return new DRealTerm(dreal.iff(bits1.getVariable(), bits2.getFormula()), + return new DRealTerm<>(dreal.iff(bits1.getVariable(), bits2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else if (bits1.isFormula() && bits2.isVar()) { - return new DRealTerm(dreal.iff(bits1.getFormula(), bits2.getVariable()), + return new DRealTerm<>(dreal.iff(bits1.getFormula(), bits2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (bits1.isVar() && bits2.isVar()) { - return new DRealTerm(dreal.iff(bits1.getVariable(), bits2.getVariable()), + return new DRealTerm<>(dreal.iff(bits1.getVariable(), bits2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (bits1.isFormula() && bits2.isFormula()) { - return new DRealTerm(dreal.iff(bits1.getFormula(), bits2.getFormula()), + return new DRealTerm<>(dreal.iff(bits1.getFormula(), bits2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else { throw new UnsupportedOperationException("dReal does not support iff on Expressions."); @@ -148,7 +150,7 @@ protected DRealTerm equivalence(DRealTerm bits1, DRealTerm bits2) { } @Override - protected boolean isTrue(DRealTerm bits) { + protected boolean isTrue(DRealTerm bits) { if (bits.isFormula()) { return dreal.is_true(bits.getFormula()); } else { @@ -158,7 +160,7 @@ protected boolean isTrue(DRealTerm bits) { } @Override - protected boolean isFalse(DRealTerm bits) { + protected boolean isFalse(DRealTerm bits) { if (bits.isFormula()) { return dreal.is_false(bits.getFormula()); } else { @@ -168,29 +170,30 @@ protected boolean isFalse(DRealTerm bits) { } @Override - protected DRealTerm ifThenElse(DRealTerm cond, DRealTerm f1, DRealTerm f2) { + protected DRealTerm ifThenElse(DRealTerm cond, DRealTerm f1, + DRealTerm f2) { if (cond.isFormula()) { if (dreal.is_true(cond.getFormula())) { if (f1.isVar()) { - return new DRealTerm(f1.getVariable(), Type.BOOLEAN, - f1.getDeclaration()); + return new DRealTerm<>(f1.getVariable(), Type.BOOLEAN, + Type.BOOLEAN); } else if (f1.isExp()) { - return new DRealTerm( f1.getExpression(), Type.BOOLEAN, - f1.getDeclaration()); + return new DRealTerm<>(f1.getExpression(), Type.BOOLEAN, + f1.getExpressionKind()); } else { - return new DRealTerm(f1.getFormula(), Type.BOOLEAN, - f1.getDeclaration()); + return new DRealTerm<>(f1.getFormula(), Type.BOOLEAN, + f1.getFormulaKind()); } } else { if (f2.isVar()) { - return new DRealTerm(f2.getVariable(), Type.BOOLEAN, - f2.getDeclaration()); + return new DRealTerm<>(f2.getVariable(), Type.BOOLEAN, + Type.BOOLEAN); } else if (f2.isExp()) { - return new DRealTerm(f2.getExpression(), Type.BOOLEAN, - f2.getDeclaration()); + return new DRealTerm<>(f2.getExpression(), Type.BOOLEAN, + f2.getExpressionKind()); } else { - return new DRealTerm(f2.getFormula(), Type.BOOLEAN, - f2.getDeclaration()); + return new DRealTerm<>(f2.getFormula(), Type.BOOLEAN, + f2.getFormulaKind()); } } } else { diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java index aee7b38b26..e8a31468b5 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java @@ -24,16 +24,17 @@ import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula; import org.sosy_lab.java_smt.api.NumeralFormula.RationalFormula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; abstract class DReal4Formula implements Formula { - private final DRealTerm term; + private final DRealTerm term; - DReal4Formula(DRealTerm pTerm) { + DReal4Formula(DRealTerm pTerm) { this.term = pTerm; } - final DRealTerm getTerm() { + final DRealTerm getTerm() { return term; } @@ -45,7 +46,8 @@ public final boolean equals(Object o) { if (!(o instanceof DRealTerm)) { return false; } - return term == ((DReal4Formula) o).term; + // ? + return term == o; } @Override @@ -71,19 +73,19 @@ public final int hashCode() { } static final class DReal4BooleanFormula extends DReal4Formula implements BooleanFormula { - DReal4BooleanFormula(DRealTerm pTerm) { + DReal4BooleanFormula(DRealTerm pTerm) { super(pTerm); } } static final class DReal4RationalFormula extends DReal4Formula implements RationalFormula { - DReal4RationalFormula(DRealTerm pTerm) { + DReal4RationalFormula(DRealTerm pTerm) { super(pTerm); } } static final class DReal4IntegerFormula extends DReal4Formula implements IntegerFormula { - DReal4IntegerFormula(DRealTerm pTerm) { + DReal4IntegerFormula(DRealTerm pTerm) { super(pTerm); } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index 3c293027c9..000fe3cba8 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -25,13 +25,11 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import java.math.BigInteger; -import java.text.Normalizer.Form; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import java.util.Set; -import java.util.function.Function; import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType; @@ -56,8 +54,8 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; -public class DReal4FormulaCreator extends FormulaCreator { +public class DReal4FormulaCreator extends FormulaCreator, Type, Context, + DRealTerm> { public DReal4FormulaCreator(Context context) { super(context, Type.BOOLEAN, Type.INTEGER, Type.CONTINUOUS, null, null); @@ -79,13 +77,18 @@ public Type getArrayType(Type indexType, Type elementType) { } @Override - public DRealTerm makeVariable(Type pType, String varName) { - return new DRealTerm(new Variable(varName, pType), pType, + public DRealTerm makeVariable(Type pType, String varName) { + return new DRealTerm<>(new Variable(varName, pType), pType, pType); } @Override - public FormulaType getFormulaType(DRealTerm formula) { + public DRealTerm extractInfo(Formula pT) { + return DReal4FormulaManager.getDReal4Formula(pT); + } + + @Override + public FormulaType getFormulaType(DRealTerm formula) { if (formula.getType() == Type.BOOLEAN) { return FormulaType.BooleanType; } else if (formula.getType() == Type.INTEGER) { @@ -96,7 +99,7 @@ public FormulaType getFormulaType(DRealTerm formula) { @SuppressWarnings("unchecked") @Override - public T encapsulate(FormulaType pType, DRealTerm pTerm) { + public T encapsulate(FormulaType pType, DRealTerm pTerm) { assert FormulaType.IntegerType.equals(pType) || (FormulaType.RationalType.equals(pType) && FormulaType.IntegerType.equals(getFormulaType(pTerm))) @@ -115,10 +118,10 @@ public T encapsulate(FormulaType pType, DRealTerm pTerm) } @Override - public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { + public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { - FunctionDeclarationKind functionKind = null; - List functionArgs = null; + final FunctionDeclarationKind functionKind; + List> functionArgs = null; if (f.isVar()) { return visitor.visitFreeVariable(formula, f.getVariable().to_string()); @@ -131,6 +134,7 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { } else { // TODO: visitConstant from Rational //return visitor.visitConstant(formula, new ); + return null; } } else if (kind == ExpressionKind.Var) { return visitor.visitFreeVariable(formula, f.getExpression().to_string()); @@ -138,13 +142,24 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { functionKind = FunctionDeclarationKind.ITE; functionArgs = getExpressionFromITE(f); } else if (kind == ExpressionKind.Pow) { - // this should be changed if pow is supported in JavaSMT + // the exponent should only be an int i >= 2, because the only way to get an + // expression with an exponent is to create an expression like (x*x*x), because pow is + // not supported in JavaSMT functionKind = FunctionDeclarationKind.MUL; + Expression lhs = dreal.get_first_argument(f.getExpression()); + Expression rhs = dreal.get_second_argument(f.getExpression()); + double exponent = parseDouble(rhs.to_string()); + Expression exp = dreal.Multiply(lhs, lhs); + for (int i = 2; i < exponent; i++) { + exp = dreal.Multiply(exp, lhs); + } + DRealTerm pow = new DRealTerm<>(exp, + dreal.get_variable(lhs).get_type(), ExpressionKind.Mul); + functionArgs = getExpressionFromMul(pow); } else if (kind == ExpressionKind.Add) { functionKind = FunctionDeclarationKind.ADD; functionArgs = getExpressionFromAdd(f); } else if (kind == ExpressionKind.Mul) { - // hier muss noch was passieren functionKind = FunctionDeclarationKind.MUL; functionArgs = getExpressionFromMul(f); } else { @@ -179,8 +194,8 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { // lhs ≠ rhs -> (lhs > rhs) ∨ (lhs < rhs) Expression lhs = dreal.get_lhs_expression(f.getFormula()); Expression rhs = dreal.get_rhs_expression(f.getFormula()); - DRealTerm neqTerm = - new DRealTerm( + DRealTerm neqTerm = + new DRealTerm<>( new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(dreal.Or(dreal.Grater(lhs, rhs), dreal.Less(lhs, rhs))), Type.BOOLEAN, FormulaKind.Or); functionKind = FunctionDeclarationKind.OR; @@ -199,12 +214,12 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { functionArgs = getExpressionArgs(f); } - DRealTerm pDeclaration; + DRealTerm pDeclaration; if (f.isExp()) { - pDeclaration = new DRealTerm(new Expression(), f.getType(),f.getExpressionKind()); + pDeclaration = new DRealTerm<>(new Expression(), f.getType(),f.getExpressionKind()); } else if (f.isFormula()) { - pDeclaration = new DRealTerm(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), + pDeclaration = new DRealTerm<>(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), f.getType(), f.getFormulaKind()); } else { throw new AssertionError("We should not get a Variable, the function should have already " @@ -224,12 +239,12 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { functionKind, argTypes, getFormulaType(f), pDeclaration)); } - private List> toType(final List args) { + private List> toType(final List> args) { return Lists.transform(args, this::getFormulaType); } - private static List getFormulaArgs(DRealTerm pTerm) { - List formulas = new ArrayList<>(); + private static List> getFormulaArgs(DRealTerm pTerm) { + List> formulas = new ArrayList<>(); org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula formula; if (pTerm.isFormula()) { @@ -237,7 +252,7 @@ private static List getFormulaArgs(DRealTerm pTerm) { Iterator iter = set.iterator(); for (int i = 0; i < set.size(); i++) { formula = iter.next(); - formulas.add(new DRealTerm(formula, pTerm.getType(), formula.get_kind())); + formulas.add(new DRealTerm<>(formula, pTerm.getType(), formula.get_kind())); } return formulas; } else { @@ -245,8 +260,8 @@ private static List getFormulaArgs(DRealTerm pTerm) { } } - private static List getExpressionArgs(DRealTerm parent) { - List children = new ArrayList<>(); + private static List> getExpressionArgs(DRealTerm parent) { + List> children = new ArrayList<>(); if (parent.isExp()) { throw new IllegalArgumentException("Term is Expression."); } else if (parent.isFormula()) { @@ -254,9 +269,9 @@ private static List getExpressionArgs(DRealTerm parent) { if (type == null) { type = getTypeForExpressions(dreal.get_rhs_expression(parent.getFormula())); } - children.add(new DRealTerm(dreal.get_lhs_expression(parent.getFormula()), type, + children.add(new DRealTerm<>(dreal.get_lhs_expression(parent.getFormula()), type, dreal.get_lhs_expression(parent.getFormula()).get_kind())); - children.add(new DRealTerm(dreal.get_rhs_expression(parent.getFormula()), type, + children.add(new DRealTerm<>(dreal.get_rhs_expression(parent.getFormula()), type, dreal.get_rhs_expression(parent.getFormula()).get_kind())); return children; } else { @@ -264,51 +279,51 @@ private static List getExpressionArgs(DRealTerm parent) { } } - private static List getFormulaFromNot(DRealTerm pTerm) { - List formula = new ArrayList<>(); + private static List> getFormulaFromNot(DRealTerm pTerm) { + List> formula = new ArrayList<>(); if (pTerm.isVar() || pTerm.isExp()) { throw new IllegalArgumentException("Term is Expression or Variable."); } else { - formula.add(new DRealTerm(dreal.get_operand(pTerm.getFormula()), Type.BOOLEAN, + formula.add(new DRealTerm<>(dreal.get_operand(pTerm.getFormula()), Type.BOOLEAN, dreal.get_operand(pTerm.getFormula()).get_kind())); return formula; } } - private static List getExpressionsFromDiv(DRealTerm pTerm) { - List children = new ArrayList<>(); + private static List> getExpressionsFromDiv(DRealTerm pTerm) { + List> children = new ArrayList<>(); if (pTerm.isVar() || pTerm.isExp()) { throw new IllegalArgumentException("Term is Variable or Expression"); } else { - children.add(new DRealTerm(dreal.get_first_argument(pTerm.getExpression()), + children.add(new DRealTerm<>(dreal.get_first_argument(pTerm.getExpression()), pTerm.getType(), dreal.get_first_argument(pTerm.getExpression()).get_kind())); - children.add(new DRealTerm(dreal.get_second_argument(pTerm.getExpression()), + children.add(new DRealTerm<>(dreal.get_second_argument(pTerm.getExpression()), pTerm.getType(), dreal.get_second_argument(pTerm.getExpression()).get_kind())); return children; } } - private static List getExpressionFromITE(DRealTerm pTerm) { - List children = new ArrayList<>(); + private static List> getExpressionFromITE(DRealTerm pTerm) { + List> children = new ArrayList<>(); if (pTerm.isFormula() || pTerm.isVar()) { throw new IllegalArgumentException("Term is Variable or Formula"); } else { - children.add(new DRealTerm(dreal.get_conditional_formula(pTerm.getExpression()), + children.add(new DRealTerm<>(dreal.get_conditional_formula(pTerm.getExpression()), pTerm.getType(), dreal.get_conditional_formula(pTerm.getExpression()).get_kind())); - children.add(new DRealTerm(dreal.get_then_expression(pTerm.getExpression()), + children.add(new DRealTerm<>(dreal.get_then_expression(pTerm.getExpression()), pTerm.getType(), dreal.get_then_expression(pTerm.getExpression()).get_kind())); - children.add(new DRealTerm(dreal.get_else_expression(pTerm.getExpression()), + children.add(new DRealTerm<>(dreal.get_else_expression(pTerm.getExpression()), pTerm.getType(), dreal.get_else_expression(pTerm.getExpression()).get_kind())); return children; } } - private static List getExpressionFromAdd(DRealTerm pTerm) { - List terms = new ArrayList<>(); + private static List> getExpressionFromAdd(DRealTerm pTerm) { + List> terms = new ArrayList<>(); if (pTerm.isVar() || pTerm.isFormula()) { throw new IllegalArgumentException("Term is Variable or Formula."); } else { - terms.add(new DRealTerm(new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), + terms.add(new DRealTerm<>(new Expression(dreal.get_constant_in_addition(pTerm.getExpression())), pTerm.getType(), ExpressionKind.Constant)); ExpressionDoubleMap map = dreal.get_expr_to_coeff_map_in_addition(pTerm.getExpression()); Set> set = map.entrySet(); @@ -316,19 +331,19 @@ private static List getExpressionFromAdd(DRealTerm pTerm) { Entry entry; for (int i = 0; i < map.size(); i++) { entry = iterator.next(); - terms.add(new DRealTerm(dreal.Multiply(entry.getKey(), + terms.add(new DRealTerm<>(dreal.Multiply(entry.getKey(), new Expression(entry.getValue())), pTerm.getType(), ExpressionKind.Mul)); } return terms; } } - private static List getExpressionFromMul(DRealTerm pTerm) { - List terms = new ArrayList<>(); + private static List> getExpressionFromMul(DRealTerm pTerm) { + List> terms = new ArrayList<>(); if (pTerm.isFormula() || pTerm.isVar()) { throw new IllegalArgumentException("Term is Variable or Formula"); } else { - terms.add(new DRealTerm( + terms.add(new DRealTerm<>( new Expression(dreal.get_constant_in_multiplication(pTerm.getExpression())), pTerm.getType(), ExpressionKind.Constant)); ExpressionExpressionMap map = @@ -342,7 +357,7 @@ private static List getExpressionFromMul(DRealTerm pTerm) { // int as exponent -> convert back multiplication // this should be changed if pow is supported in JavaSMT for (double j = 0; j < parseDouble(entry.getValue().to_string()); j++) { - terms.add(new DRealTerm(new Expression(entry.getKey()), + terms.add(new DRealTerm<>(new Expression(entry.getKey()), pTerm.getType(), ExpressionKind.Var)); } } @@ -395,7 +410,7 @@ private static Type getTypeForExpressions(Expression pExpression) { } @Override - public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { + public DRealTerm callFunctionImpl(DRealTerm declaration, List> args) { if (args.isEmpty()) { // Or Variable? throw new IllegalArgumentException("dReal does not support UFs without arguments."); @@ -405,11 +420,11 @@ public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { if (declaration.isExp()) { ExpressionKind expressionKind = declaration.getExpressionKind(); if (expressionKind.equals(ExpressionKind.IfThenElse)) { - return new DRealTerm( + return new DRealTerm<>( dreal.if_then_else(args.get(0).getFormula(), args.get(1).getExpression(), args.get(2).getExpression()), args.get(2).getType(), ExpressionKind.IfThenElse); } else if (expressionKind.equals(ExpressionKind.Div)) { - return new DRealTerm(dreal.Divide(args.get(0).getExpression(), + return new DRealTerm<>(dreal.Divide(args.get(0).getExpression(), args.get(1).getExpression()), args.get(0).getType(), ExpressionKind.Div); } else if (expressionKind.equals(ExpressionKind.Mul)) { expression = dreal.Multiply(args.get(0).getExpression(), args.get(1).getExpression()); @@ -418,7 +433,7 @@ public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { expression = (dreal.Multiply(expression, args.get(i).getExpression())); } } - return new DRealTerm(expression, args.get(0).getType(), ExpressionKind.Mul); + return new DRealTerm<>(expression, args.get(0).getType(), ExpressionKind.Mul); } else if (expressionKind.equals(ExpressionKind.Add)) { expression = dreal.Add(args.get(0).getExpression(), args.get(1).getExpression()); if (args.size() > 2) { @@ -426,27 +441,27 @@ public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { expression = (dreal.Add(expression, args.get(i).getExpression())); } } - return new DRealTerm(expression, args.get(0).getType(), ExpressionKind.Add); + return new DRealTerm<>(expression, args.get(0).getType(), ExpressionKind.Add); } } else if (declaration.isFormula()) { FormulaKind formulaKind = declaration.getFormulaKind(); if (formulaKind.equals(FormulaKind.Not)) { - return new DRealTerm(dreal.Not(args.get(0).getFormula()), args.get(0).getType(), + return new DRealTerm<>(dreal.Not(args.get(0).getFormula()), args.get(0).getType(), FormulaKind.Not); } else if (formulaKind.equals(FormulaKind.Eq)) { - return new DRealTerm(dreal.Equal(args.get(0).getExpression(), + return new DRealTerm<>(dreal.Equal(args.get(0).getExpression(), args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Eq); } else if (formulaKind.equals(FormulaKind.Gt)) { - return new DRealTerm(dreal.Grater(args.get(0).getExpression(), + return new DRealTerm<>(dreal.Grater(args.get(0).getExpression(), args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Gt); } else if (formulaKind.equals(FormulaKind.Geq)) { - return new DRealTerm(dreal.GraterEqual(args.get(0).getExpression(), + return new DRealTerm<>(dreal.GraterEqual(args.get(0).getExpression(), args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Geq); } else if (formulaKind.equals(FormulaKind.Lt)) { - return new DRealTerm(dreal.Less(args.get(0).getExpression(), + return new DRealTerm<>(dreal.Less(args.get(0).getExpression(), args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Lt); } else if (formulaKind.equals(FormulaKind.Leq)) { - return new DRealTerm(dreal.LessEqual(args.get(0).getExpression(), + return new DRealTerm<>(dreal.LessEqual(args.get(0).getExpression(), args.get(1).getExpression()), args.get(0).getType(), FormulaKind.Leq); } else if (formulaKind.equals(FormulaKind.And)) { formula = dreal.And(args.get(0).getFormula(), args.get(1).getFormula()); @@ -455,7 +470,7 @@ public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { formula = dreal.And(formula, args.get(i).getFormula()); } } - return new DRealTerm(formula, Type.BOOLEAN, FormulaKind.And); + return new DRealTerm<>(formula, Type.BOOLEAN, FormulaKind.And); } else if (formulaKind.equals(FormulaKind.Or)) { formula = dreal.Or(args.get(0).getFormula(), args.get(1).getFormula()); if (args.size() > 2) { @@ -463,7 +478,7 @@ public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { formula = dreal.Or(formula, args.get(i).getFormula()); } } - return new DRealTerm(formula, Type.BOOLEAN, FormulaKind.Or); + return new DRealTerm<>(formula, Type.BOOLEAN, FormulaKind.Or); } } else { // Variable? @@ -474,31 +489,32 @@ public DRealTerm callFunctionImpl(DRealTerm declaration, List args) { } @Override - public DRealTerm declareUFImpl(String pName, Type pReturnType, List pArgTypes) { + public DRealTerm declareUFImpl(String pName, Type pReturnType, List pArgTypes) { if (pArgTypes.isEmpty()) { // einfach Variable zurückgeben? - return new DRealTerm(new Variable(pName, pReturnType), pReturnType, + return new DRealTerm<>(new Variable(pName, pReturnType), pReturnType, pReturnType); } else { Variables vars = new Variables(); for (int i = 0; i < pArgTypes.size(); i++) { vars.insert(new Variable(valueOf(i), pArgTypes.get(i))); } - return new DRealTerm(dreal.uninterpreted_function(pName, vars), pReturnType, + return new DRealTerm<>(dreal.uninterpreted_function(pName, vars), pReturnType, ExpressionKind.UninterpretedFunction); } } @Override - protected DRealTerm getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { + protected DRealTerm getBooleanVarDeclarationImpl(DRealTerm pDRealTerm) { // create DRealTerm with dummy Variable, Expression, Formula, only to save declaration in // DRealTerm if (pDRealTerm.isVar()) { - return new DRealTerm(new Variable(), pDRealTerm.getType(), pDRealTerm.getType()); + return new DRealTerm<>(new Variable(), pDRealTerm.getType(), pDRealTerm.getType()); } else if (pDRealTerm.isExp()) { - return new DRealTerm(new Expression(), pDRealTerm.getType(), pDRealTerm.getExpressionKind()); + return new DRealTerm<>(new Expression(), pDRealTerm.getType(), pDRealTerm.getExpressionKind()); } else { - return new DRealTerm(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), pDRealTerm.getType(), pDRealTerm.getFormulaKind()); + return new DRealTerm<>(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), + pDRealTerm.getType(), pDRealTerm.getFormulaKind()); } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java index 5ede525d74..29bd7bc171 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java @@ -22,13 +22,12 @@ import org.sosy_lab.common.Appender; import org.sosy_lab.java_smt.api.BooleanFormula; -import org.sosy_lab.java_smt.api.FunctionDeclarationKind; import org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; -public class DReal4FormulaManager extends AbstractFormulaManager { +public class DReal4FormulaManager extends AbstractFormulaManager, Type, Context, + DRealTerm> { DReal4FormulaManager(DReal4FormulaCreator pFormulaCreator, DReal4UFManager pFunctionManager, DReal4BooleanFormulaManager pBooleanManager, @@ -50,13 +49,21 @@ public class DReal4FormulaManager extends AbstractFormulaManager getDReal4Formula(org.sosy_lab.java_smt.api.Formula pT) { + if (pT instanceof DReal4Formula) { + return ((DReal4Formula) pT).getTerm(); + } + throw new IllegalArgumentException( + "Cannot get the formula info of type " + pT.getClass().getSimpleName() + " in the Solver!"); + } + @Override public BooleanFormula parse(String s) throws IllegalArgumentException { return null; } @Override - public Appender dumpFormula(DRealTerm t) { + public Appender dumpFormula(DRealTerm t) { return null; } } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index c3b0d5004e..9cd930e371 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -33,13 +33,14 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public abstract class DReal4NumeralFormulaManager< ParamFormulaType extends NumeralFormula, ResultFormulaType extends NumeralFormula> extends AbstractNumeralFormulaManager< - DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, DRealTerm> { + DRealTerm, Type, Context, ParamFormulaType, ResultFormulaType, DRealTerm> { DReal4NumeralFormulaManager( DReal4FormulaCreator pCreator, NonLinearArithmetic pNonLinearArithmetic) { @@ -47,7 +48,7 @@ public abstract class DReal4NumeralFormulaManager< } @Override - protected boolean isNumeral(DRealTerm val) { + protected boolean isNumeral(DRealTerm val) { if (val.isExp()) { return val.getExpression().get_kind() == ExpressionKind.Constant; } else { @@ -57,56 +58,57 @@ protected boolean isNumeral(DRealTerm val) { } @Override - protected DRealTerm makeNumberImpl(long i) { - return new DRealTerm(new Expression((double) i), getNumeralType(), ExpressionKind.Constant); + protected DRealTerm makeNumberImpl(long i) { + return new DRealTerm<>(new Expression((double) i), getNumeralType(), ExpressionKind.Constant); } @Override - protected DRealTerm makeNumberImpl(BigInteger i) { + protected DRealTerm makeNumberImpl(BigInteger i) { return makeNumberImpl(i.toString()); } @Override - protected DRealTerm makeNumberImpl(String i) { - return new DRealTerm(new Expression(Double.parseDouble(i)), getNumeralType(), + protected DRealTerm makeNumberImpl(String i) { + return new DRealTerm<>(new Expression(Double.parseDouble(i)), getNumeralType(), ExpressionKind.Constant); } protected abstract Type getNumeralType(); @Override - protected DRealTerm makeNumberImpl(double pNumber) { - return new DRealTerm(new Expression(pNumber), getNumeralType(), ExpressionKind.Constant); + protected DRealTerm makeNumberImpl(double pNumber) { + return new DRealTerm<>(new Expression(pNumber), getNumeralType(), ExpressionKind.Constant); } @Override - protected DRealTerm makeNumberImpl(BigDecimal pNumber) { + protected DRealTerm makeNumberImpl(BigDecimal pNumber) { return makeNumberImpl(pNumber.toString()); } @Override - protected DRealTerm makeVariableImpl(String i) { + protected DRealTerm makeVariableImpl(String i) { return getFormulaCreator().makeVariable(getNumeralType(), i); } @Override - protected DRealTerm negate(DRealTerm pParam1) { - return new DRealTerm(dreal.Not(pParam1.getVariable()), pParam1.getType(), FormulaKind.Not); + protected DRealTerm negate(DRealTerm pParam1) { + return new DRealTerm<>(dreal.Not(pParam1.getVariable()), pParam1.getType(), FormulaKind.Not); } @Override - protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm add(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Add(pParam1.getExpression(), pParam2.getExpression()), + return new DRealTerm<>(dreal.Add(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Add(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Add(new Expression(pParam1.getVariable()), new Expression(pParam1.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Add(pParam1.getExpression(), + return new DRealTerm<>(dreal.Add(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Add(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Add(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else { throw new UnsupportedOperationException("dReal does not support add on Formulas."); @@ -114,18 +116,19 @@ protected DRealTerm add(DRealTerm pParam1, DRealTerm pParam2) { } @Override - protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm subtract(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Substract(pParam1.getExpression(), + return new DRealTerm<>(dreal.Substract(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Substract(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Substract(new Expression(pParam1.getVariable()), new Expression(pParam1.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Substract(pParam1.getExpression(), + return new DRealTerm<>(dreal.Substract(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Substract(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Substract(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else { throw new UnsupportedOperationException("dReal does not support subtract on Variables or " @@ -134,18 +137,19 @@ protected DRealTerm subtract(DRealTerm pParam1, DRealTerm pParam2) { } @Override - public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { + public DRealTerm divide(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Divide(pParam1.getExpression(), pParam2.getExpression()), + return new DRealTerm<>(dreal.Divide(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Div); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Divide(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Divide(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Div); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Divide(pParam1.getExpression(), + return new DRealTerm<>(dreal.Divide(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Div); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Divide(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Divide(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Div); } else { throw new UnsupportedOperationException("dReal does not support divide with Formulas."); @@ -153,18 +157,19 @@ public DRealTerm divide(DRealTerm pParam1, DRealTerm pParam2) { } @Override - public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { + public DRealTerm multiply(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Multiply(pParam1.getExpression(), pParam2.getExpression()), + return new DRealTerm<>(dreal.Multiply(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Mul); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Multiply(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Multiply(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), ExpressionKind.Mul); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Multiply(pParam1.getExpression(), + return new DRealTerm<>(dreal.Multiply(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Mul); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Multiply(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Multiply(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Mul); } else { throw new UnsupportedOperationException("dReal does not support multiply with Formulas."); @@ -173,18 +178,18 @@ public DRealTerm multiply(DRealTerm pParam1, DRealTerm pParam2) { // only use Equal(Expression exp1, Expression exp2), Equal with Formulas is same as iff @Override - protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Equal(pParam1.getExpression(), + return new DRealTerm<>(dreal.Equal(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), FormulaKind.Eq); } else if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Equal(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Equal(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Equal(pParam1.getExpression(), + return new DRealTerm<>(dreal.Equal(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Equal(pParam1.getExpression(), + return new DRealTerm<>(dreal.Equal(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); } else { throw new UnsupportedOperationException("dReal does not support equal on Formulas."); @@ -193,7 +198,7 @@ protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { @Override - protected DRealTerm distinctImpl(List pNumbers) { + protected DRealTerm distinctImpl(List> pNumbers) { // dReal does not directly support this method, so we need to build the whole term Type type = pNumbers.get(0).getType(); Formula andFormula = helperFunction(pNumbers.get(1), pNumbers.get(0)); @@ -202,11 +207,11 @@ protected DRealTerm distinctImpl(List pNumbers) { andFormula = dreal.And(andFormula, helperFunction(pNumbers.get(i), pNumbers.get(j))); } } - return new DRealTerm(andFormula, type, FormulaKind.And); + return new DRealTerm<>(andFormula, type, FormulaKind.And); } // Takes two DRealTerms and creates a NotEqual Formula to use in distinctImpl - private Formula helperFunction(DRealTerm pTerm1, DRealTerm pTerm2) { + private Formula helperFunction(DRealTerm pTerm1, DRealTerm pTerm2) { if (pTerm1.isVar() && pTerm2.isVar()) { return dreal.NotEqual(pTerm1.getVariable(), pTerm2.getVariable()); } else if (pTerm1.isExp() && pTerm2.isVar()) { @@ -224,18 +229,19 @@ private Formula helperFunction(DRealTerm pTerm1, DRealTerm pTerm2) { } @Override - protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm greaterThan(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Grater(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Grater(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Gt); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Grater(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Grater(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), FormulaKind.Gt); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Grater(pParam1.getExpression(), + return new DRealTerm<>(dreal.Grater(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Gt); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Grater(pParam1.getExpression(), + return new DRealTerm<>(dreal.Grater(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), FormulaKind.Gt); } else { throw new UnsupportedOperationException("dReal does not support greaterThan on Formulas."); @@ -243,18 +249,19 @@ protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { } @Override - protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm greaterOrEquals(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.GraterEqual(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.GraterEqual(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Geq); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.GraterEqual(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.GraterEqual(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), FormulaKind.Geq); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.GraterEqual(pParam1.getExpression(), + return new DRealTerm<>(dreal.GraterEqual(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Geq); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.GraterEqual(pParam1.getExpression(), + return new DRealTerm<>(dreal.GraterEqual(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), FormulaKind.Geq); } else { throw new UnsupportedOperationException("dReal does not support greaterOrEquals on Formulas" @@ -263,18 +270,19 @@ protected DRealTerm greaterOrEquals(DRealTerm pParam1, DRealTerm pParam2) { } @Override - protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm lessThan(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.Less(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Less(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Lt); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.Less(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.Less(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), FormulaKind.Lt); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.Less(pParam1.getExpression(), + return new DRealTerm<>(dreal.Less(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Lt); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.Less(pParam1.getExpression(), + return new DRealTerm<>(dreal.Less(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), FormulaKind.Lt); } else { throw new UnsupportedOperationException("dReal does not support lessThan on Formulas."); @@ -282,18 +290,19 @@ protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { } @Override - protected DRealTerm lessOrEquals(DRealTerm pParam1, DRealTerm pParam2) { + protected DRealTerm lessOrEquals(DRealTerm pParam1, + DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { - return new DRealTerm(dreal.LessEqual(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.LessEqual(new Expression(pParam1.getVariable()), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Leq); } else if(pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm(dreal.LessEqual(new Expression(pParam1.getVariable()), + return new DRealTerm<>(dreal.LessEqual(new Expression(pParam1.getVariable()), pParam2.getExpression()), pParam1.getType(), FormulaKind.Leq); } else if (pParam1.isExp() && pParam2.isVar()) { - return new DRealTerm(dreal.LessEqual(pParam1.getExpression(), + return new DRealTerm<>(dreal.LessEqual(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Leq); } else if (pParam1.isExp() && pParam2.isExp()) { - return new DRealTerm(dreal.LessEqual(pParam1.getExpression(), + return new DRealTerm<>(dreal.LessEqual(pParam1.getExpression(), pParam2.getExpression()), pParam1.getType(), FormulaKind.Leq); } else { throw new UnsupportedOperationException("dReal does not support lessOrEquals on Formulas."); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java index e8dd37f01d..d5200eba0f 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4QuantifiedFormulaManager.java @@ -26,26 +26,30 @@ import org.sosy_lab.java_smt.basicimpl.AbstractQuantifiedFormulaManager; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; -public class DReal4QuantifiedFormulaManager extends AbstractQuantifiedFormulaManager { +public class DReal4QuantifiedFormulaManager extends AbstractQuantifiedFormulaManager, Type, Context, DRealTerm> { - protected DReal4QuantifiedFormulaManager(FormulaCreator pFormulaCreator) { + protected DReal4QuantifiedFormulaManager(FormulaCreator, Type, Context, + DRealTerm> pFormulaCreator) { super(pFormulaCreator); } @Override - protected DRealTerm eliminateQuantifiers(DRealTerm pExtractInfo) + protected DRealTerm eliminateQuantifiers(DRealTerm pExtractInfo) throws SolverException, InterruptedException { throw new UnsupportedOperationException("dReal can not eliminate quantifiers."); } @Override - public DRealTerm mkQuantifier(Quantifier pQ, List pVars, DRealTerm pBody) { + public DRealTerm mkQuantifier(Quantifier pQ, + List> pVars, + DRealTerm pBody) { if (pVars.isEmpty()) { throw new IllegalArgumentException("Empty variable llist for quantifier."); } else if (pQ == Quantifier.EXISTS) { @@ -53,7 +57,7 @@ public DRealTerm mkQuantifier(Quantifier pQ, List pVars, DRealTerm pB throw new UnsupportedOperationException("dReal does not support exist??"); } else { Variables vars = new Variables(); - for (DRealTerm term : pVars) { + for (DRealTerm term : pVars) { if (term.isVar()) { vars.insert(term.getVariable()); } else { @@ -62,7 +66,7 @@ public DRealTerm mkQuantifier(Quantifier pQ, List pVars, DRealTerm pB } } if (pBody.isFormula()) { - return new DRealTerm(dreal.forall(vars, pBody.getFormula()), pBody.getType(), + return new DRealTerm<>(dreal.forall(vars, pBody.getFormula()), pBody.getType(), FormulaKind.Forall); } else { throw new IllegalArgumentException("The given Formula is not a Formula."); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java index 7ae3c05846..c2effa114f 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java @@ -21,7 +21,11 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import com.google.common.base.Preconditions; +import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Collection; +import java.util.Deque; import java.util.List; import java.util.Optional; import org.checkerframework.checker.nullness.qual.Nullable; @@ -34,44 +38,68 @@ import org.sosy_lab.java_smt.api.SolverException; import org.sosy_lab.java_smt.basicimpl.AbstractProverWithAllSat; import java.util.Set; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Box; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Config; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; + class DReal4TheoremProver extends AbstractProverWithAllSat implements ProverEnvironment { private final DReal4FormulaCreator creator; private final Config curCfg; private final Context curCnt; + + protected final Deque>> assertedFormulas = new ArrayDeque<>(); + + // use Box to save result? + private Box model; + protected DReal4TheoremProver(DReal4FormulaCreator creator, Set pOptions, DReal4FormulaManager pFmgr, ShutdownNotifier pShutdownNotifier) { super(pOptions, pFmgr.getBooleanFormulaManager(), pShutdownNotifier); this.creator = creator; curCfg = new Config(); curCnt = new Context(curCfg); + model = new Box(); } @Override public void pop() { - + Preconditions.checkState(!closed); + Preconditions.checkState(size() > 0); + assertedFormulas.pop(); + curCnt.Pop(1); } @Override public @Nullable Void addConstraint(BooleanFormula constraint) throws InterruptedException { + Preconditions.checkState(!closed); + DRealTerm formula = creator.extractInfo(constraint); + assertedFormulas.peek().add(formula); + //TODO: declare Variables of formula + curCnt.Assert(formula.getFormula()); return null; } @Override public void push() throws InterruptedException { - + Preconditions.checkState(!closed); + assertedFormulas.push(new ArrayList<>()); + curCnt.Push(1); } @Override public int size() { - return 0; + Preconditions.checkState(!closed); + return assertedFormulas.size() - 1; } @Override public boolean isUnsat() throws SolverException, InterruptedException { + Preconditions.checkState(!closed); + //TODO: CheckSat() return optional -> write CheckSat() that returns a boolean and saves + // the model to a box (s. Api call CheckSatisfiability) + return false; } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java index 961a3e00b4..7565cdbee5 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4UFManager.java @@ -25,7 +25,8 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; -public class DReal4UFManager extends AbstractUFManager { +public class DReal4UFManager extends AbstractUFManager, DRealTerm, Type, + Context> { DReal4UFManager(DReal4FormulaCreator pCreator) { super(pCreator); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java index e0dbb73460..9a6aa20836 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java @@ -37,13 +37,6 @@ */ public class DRealTerm { -// @Nullable -// private Variable var; -// @Nullable -// private Expression exp; -// @Nullable -// private Formula formula; - private final Term term; private final Kind declaration; From 6ccb73914c650e6fbe05e06b7d6ebbc0bbaa72f3 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 26 Jul 2023 18:07:15 +0200 Subject: [PATCH 014/155] Added VariableSet to getQuantifiedVariabes and modified CheckSat, so that it does not use optional --- .../solvers/dreal4/drealjni/Context.java | 10 + .../solvers/dreal4/drealjni/Documentation.md | 2 - .../solvers/dreal4/drealjni/Formula.java | 7 + .../solvers/dreal4/drealjni/VariableSet.java | 238 ++++++++++++ .../solvers/dreal4/drealjni/drealJNI.java | 22 +- .../solvers/dreal4/drealjni/dreal_wrap.cxx | 350 ++++++++++++++++++ .../solvers/dreal4/drealjni/dreal_wrap.o | Bin 1736592 -> 1749632 bytes 7 files changed, 626 insertions(+), 3 deletions(-) create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableSet.java diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java index 0726af43af..f885813fc3 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Context.java @@ -182,6 +182,16 @@ public Box get_model() { } // self written + public boolean CheckSat(Box box) { + return drealJNI.Context_CheckSat_0(Context.getCPtr(this), Box.getCPtr(box)); + } + + // This is only needed, if it is not possible to retrieve a Variable from Variables + public void declareVaribales(Formula f) { + drealJNI.Context_declareVariables(Context.getCPtr(this), Formula.getCPtr(f)); + } + + // For Testing public Box CheckSatBox() { return new Box(drealJNI.Context_CheckSatBox(Context.getCPtr(this)), true); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md index 2b335fffd6..323a29db9f 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Documentation.md @@ -6,8 +6,6 @@ c++### Fragen: ### TODO: - Generell Box printen? Bisher keine möglichkeit Ergebnis auszugeben -- mutable_... zum laufen kriegen -- tests schreiben ##### Config: - uint32_t needs to be changed to long -> per Hand und mit Exceptions diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java index 9d2d75078e..0db25c6eac 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Formula.java @@ -161,4 +161,11 @@ public boolean include_ite() { return drealJNI.Formula_include_ite(swigCPtr, this); } + // self written + public VariableSet getQuantifiedVariables() { + VariableSet set = new VariableSet(); + drealJNI.Formula_getQuantifiedVariables(VariableSet.getCPtr(set), Formula.getCPtr(this)); + return set; + } + } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableSet.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableSet.java new file mode 100644 index 0000000000..e67f721f0a --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/VariableSet.java @@ -0,0 +1,238 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (https://www.swig.org). + * Version 4.1.1 + * + * Do not make changes to this file unless you know what you are doing - modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package org.sosy_lab.java_smt.solvers.dreal4.drealjni; +public class VariableSet extends java.util.AbstractSet { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected VariableSet(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(VariableSet obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(VariableSet obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_VariableSet(swigCPtr); + } + swigCPtr = 0; + } + } + + public VariableSet(java.util.Collection collection) { + this(); + addAll(collection); + } + + public int size() { + return sizeImpl(); + } + + public boolean add(Variable key) { + return addImpl(key); + } + + public boolean addAll(java.util.Collection collection) { + boolean didAddElement = false; + for (java.lang.Object object : collection) { + didAddElement |= add((Variable)object); + } + + return didAddElement; + } + + public java.util.Iterator iterator() { + return new java.util.Iterator() { + private Iterator curr; + private Iterator end; + + private java.util.Iterator init() { + curr = VariableSet.this.begin(); + end = VariableSet.this.end(); + return this; + } + + public Variable next() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + + // Save the current position, increment it, + // then return the value at the position before the increment. + final Variable currValue = curr.derefUnchecked(); + curr.incrementUnchecked(); + return currValue; + } + + public boolean hasNext() { + return curr.isNot(end); + } + + public void remove() { + throw new java.lang.UnsupportedOperationException(); + } + }.init(); + } + + public boolean containsAll(java.util.Collection collection) { + for (java.lang.Object object : collection) { + if (!contains(object)) { + return false; + } + } + + return true; + } + + public boolean contains(java.lang.Object object) { + if (!(object instanceof Variable)) { + return false; + } + + return containsImpl((Variable)object); + } + + public boolean removeAll(java.util.Collection collection) { + boolean didRemoveElement = false; + for (java.lang.Object object : collection) { + didRemoveElement |= remove(object); + } + + return didRemoveElement; + } + + public boolean remove(java.lang.Object object) { + if (!(object instanceof Variable)) { + return false; + } + + return removeImpl((Variable)object); + } + + static protected class Iterator { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected Iterator(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(Iterator obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected static long swigRelease(Iterator obj) { + long ptr = 0; + if (obj != null) { + if (!obj.swigCMemOwn) + throw new RuntimeException("Cannot release ownership as memory is not owned"); + ptr = obj.swigCPtr; + obj.swigCMemOwn = false; + obj.delete(); + } + return ptr; + } + + @SuppressWarnings("deprecation") + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + drealJNI.delete_VariableSet_Iterator(swigCPtr); + } + swigCPtr = 0; + } + } + + private void incrementUnchecked() { + drealJNI.VariableSet_Iterator_incrementUnchecked(swigCPtr, this); + } + + private Variable derefUnchecked() { + return new Variable(drealJNI.VariableSet_Iterator_derefUnchecked(swigCPtr, this), true); + } + + private boolean isNot(VariableSet.Iterator other) { + return drealJNI.VariableSet_Iterator_isNot(swigCPtr, this, VariableSet.Iterator.getCPtr(other), other); + } + + } + + public VariableSet() { + this(drealJNI.new_VariableSet__SWIG_0(), true); + } + + public VariableSet(VariableSet other) { + this(drealJNI.new_VariableSet__SWIG_1(VariableSet.getCPtr(other), other), true); + } + + public boolean isEmpty() { + return drealJNI.VariableSet_isEmpty(swigCPtr, this); + } + + public void clear() { + drealJNI.VariableSet_clear(swigCPtr, this); + } + + private VariableSet.Iterator begin() { + return new VariableSet.Iterator(drealJNI.VariableSet_begin(swigCPtr, this), true); + } + + private VariableSet.Iterator end() { + return new VariableSet.Iterator(drealJNI.VariableSet_end(swigCPtr, this), true); + } + + public boolean addImpl(Variable key) { + return drealJNI.VariableSet_addImpl(swigCPtr, this, Variable.getCPtr(key), key); + } + + private boolean containsImpl(Variable key) { + return drealJNI.VariableSet_containsImpl(swigCPtr, this, Variable.getCPtr(key), key); + } + + private boolean removeImpl(Variable key) { + return drealJNI.VariableSet_removeImpl(swigCPtr, this, Variable.getCPtr(key), key); + } + + private int sizeImpl() { + return drealJNI.VariableSet_sizeImpl(swigCPtr, this); + } + + private boolean hasNextImpl(VariableSet.Iterator itr) { + return drealJNI.VariableSet_hasNextImpl(swigCPtr, this, VariableSet.Iterator.getCPtr(itr), itr); + } + +} diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java index 3c2a9498bc..0ff7ea72df 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java @@ -600,6 +600,24 @@ public class drealJNI { public final static native long Context_box(long jarg1, Context jarg1_); public final static native long Context_get_model(long jarg1, Context jarg1_); + // for VariableSet, added later + public final static native void VariableSet_Iterator_incrementUnchecked(long jarg1, VariableSet.Iterator jarg1_); + public final static native long VariableSet_Iterator_derefUnchecked(long jarg1, VariableSet.Iterator jarg1_); + public final static native boolean VariableSet_Iterator_isNot(long jarg1, VariableSet.Iterator jarg1_, long jarg2, VariableSet.Iterator jarg2_); + public final static native void delete_VariableSet_Iterator(long jarg1); + public final static native long new_VariableSet__SWIG_0(); + public final static native long new_VariableSet__SWIG_1(long jarg1, VariableSet jarg1_); + public final static native boolean VariableSet_isEmpty(long jarg1, VariableSet jarg1_); + public final static native void VariableSet_clear(long jarg1, VariableSet jarg1_); + public final static native long VariableSet_begin(long jarg1, VariableSet jarg1_); + public final static native long VariableSet_end(long jarg1, VariableSet jarg1_); + public final static native boolean VariableSet_addImpl(long jarg1, VariableSet jarg1_, long jarg2, Variable jarg2_); + public final static native boolean VariableSet_containsImpl(long jarg1, VariableSet jarg1_, long jarg2, Variable jarg2_); + public final static native boolean VariableSet_removeImpl(long jarg1, VariableSet jarg1_, long jarg2, Variable jarg2_); + public final static native int VariableSet_sizeImpl(long jarg1, VariableSet jarg1_); + public final static native boolean VariableSet_hasNextImpl(long jarg1, VariableSet jarg1_, long jarg2, VariableSet.Iterator jarg2_); + public final static native void delete_VariableSet(long jarg1); + // self written: public final static native void Config_mutable_precision_0(double value, long config); public final static native void Config_mutable_produce_models_0(boolean bool, long config); @@ -616,7 +634,9 @@ public class drealJNI { public final static native void Config_mutable_nlopt_maxtime_0(double value, long config); public final static native void Config_mutable_random_seed_0(long seed, long config); public final static native void Config_mutable_smtlib2_compliant_0(boolean bool, long config); - + public final static native void Context_declareVariables(long context, long formula); + public final static native boolean Context_CheckSat_0(long context, long box); + public final static native long Formula_getQuantifiedVariables(long set, long formula); // For debuging and testing diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx index b72e7852ae..15a858948a 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx @@ -643,6 +643,30 @@ SWIGINTERN void std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__pu SWIGINTERN void std_unordered_map_Sl_dreal_drake_symbolic_Variable_Sc_int_Sg__removeUnchecked(std::unordered_map< dreal::drake::symbolic::Variable,int > *self,std::unordered_map< dreal::drake::symbolic::Variable,int >::iterator const itr){ self->erase(itr); } +SWIGINTERN void std_set_Sl_dreal_drake_symbolic_Variable_Sg__iterator_incrementUnchecked(std::set< dreal::drake::symbolic::Variable >::iterator *self){ + ++(*self); + } +SWIGINTERN dreal::drake::symbolic::Variable std_set_Sl_dreal_drake_symbolic_Variable_Sg__iterator_derefUnchecked(std::set< dreal::drake::symbolic::Variable >::iterator const *self){ + return **self; + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Variable_Sg__iterator_isNot(std::set< dreal::drake::symbolic::Variable >::iterator const *self,std::set< dreal::drake::symbolic::Variable >::iterator other){ + return (*self != other); + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Variable_Sg__addImpl(std::set< dreal::drake::symbolic::Variable > *self,dreal::drake::symbolic::Variable const &key){ + return self->insert(key).second; + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Variable_Sg__containsImpl(std::set< dreal::drake::symbolic::Variable > *self,dreal::drake::symbolic::Variable const &key){ + return (self->count(key) > 0); + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Variable_Sg__removeImpl(std::set< dreal::drake::symbolic::Variable > *self,dreal::drake::symbolic::Variable const &key){ + return (self->erase(key) > 0); + } +SWIGINTERN jint std_set_Sl_dreal_drake_symbolic_Variable_Sg__sizeImpl(std::set< dreal::drake::symbolic::Variable > const *self){ + return SWIG_SetSize(self->size()); + } +SWIGINTERN bool std_set_Sl_dreal_drake_symbolic_Variable_Sg__hasNextImpl(std::set< dreal::drake::symbolic::Variable > const *self,std::set< dreal::drake::symbolic::Variable >::iterator const &itr){ + return (itr != self->end()); + } #include @@ -11407,6 +11431,273 @@ SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_dr return jresult; } +// VariableSet added later + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1Iterator_1incrementUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::set< dreal::drake::symbolic::Variable >::iterator *arg1 = (std::set< dreal::drake::symbolic::Variable >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jarg1; + std_set_Sl_dreal_drake_symbolic_Variable_Sg__iterator_incrementUnchecked(arg1); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1Iterator_1derefUnchecked(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Variable >::iterator *arg1 = (std::set< dreal::drake::symbolic::Variable >::iterator *) 0 ; + dreal::drake::symbolic::Variable result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jarg1; + result = std_set_Sl_dreal_drake_symbolic_Variable_Sg__iterator_derefUnchecked((std::set< dreal::drake::symbolic::Variable >::iterator const *)arg1); + *(dreal::drake::symbolic::Variable **)&jresult = new dreal::drake::symbolic::Variable(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1Iterator_1isNot(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Variable >::iterator *arg1 = (std::set< dreal::drake::symbolic::Variable >::iterator *) 0 ; + std::set< dreal::drake::symbolic::Variable >::iterator arg2 ; + std::set< dreal::drake::symbolic::Variable >::iterator *argp2 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jarg1; + argp2 = *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null std::set< dreal::drake::symbolic::Variable >::iterator"); + return 0; + } + arg2 = *argp2; + result = (bool)std_set_Sl_dreal_drake_symbolic_Variable_Sg__iterator_isNot((std::set< dreal::drake::symbolic::Variable >::iterator const *)arg1,SWIG_STD_MOVE(arg2)); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1VariableSet_1Iterator(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::set< dreal::drake::symbolic::Variable >::iterator *arg1 = (std::set< dreal::drake::symbolic::Variable >::iterator *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jarg1; + delete arg1; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VariableSet_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *result = 0 ; + + (void)jenv; + (void)jcls; + result = (std::set< dreal::drake::symbolic::Variable > *)new std::set< dreal::drake::symbolic::Variable >(); + *(std::set< dreal::drake::symbolic::Variable > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1VariableSet_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = 0 ; + std::set< dreal::drake::symbolic::Variable > *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + if (!arg1) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::set< dreal::drake::symbolic::Variable > const & is null"); + return 0; + } + result = (std::set< dreal::drake::symbolic::Variable > *)new std::set< dreal::drake::symbolic::Variable >((std::set< dreal::drake::symbolic::Variable > const &)*arg1); + *(std::set< dreal::drake::symbolic::Variable > **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1isEmpty(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + result = (bool)((std::set< dreal::drake::symbolic::Variable > const *)arg1)->empty(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1clear(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + (arg1)->clear(); +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + std::set< dreal::drake::symbolic::Variable >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + result = (arg1)->begin(); + *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jresult = new std::set< dreal::drake::symbolic::Variable >::iterator(result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1end(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + std::set< dreal::drake::symbolic::Variable >::iterator result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + result = (arg1)->end(); + *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jresult = new std::set< dreal::drake::symbolic::Variable >::iterator(result); + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1addImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Variable_Sg__addImpl(arg1,(dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1containsImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Variable_Sg__containsImpl(arg1,(dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1removeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + dreal::drake::symbolic::Variable *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = *(dreal::drake::symbolic::Variable **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Variable const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Variable_Sg__removeImpl(arg1,(dreal::drake::symbolic::Variable const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jint JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1sizeImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jint jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + jint result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + try { + result = std_set_Sl_dreal_drake_symbolic_Variable_Sg__sizeImpl((std::set< dreal::drake::symbolic::Variable > const *)arg1); + } catch(std::out_of_range &_e) { + SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what()); + return 0; + } + jresult = result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_VariableSet_1hasNextImpl(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + jboolean jresult = 0 ; + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + std::set< dreal::drake::symbolic::Variable >::iterator *arg2 = 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + arg2 = *(std::set< dreal::drake::symbolic::Variable >::iterator **)&jarg2; + if (!arg2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "std::set< dreal::drake::symbolic::Variable >::iterator const & is null"); + return 0; + } + result = (bool)std_set_Sl_dreal_drake_symbolic_Variable_Sg__hasNextImpl((std::set< dreal::drake::symbolic::Variable > const *)arg1,(std::set< dreal::drake::symbolic::Variable >::iterator const &)*arg2); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_delete_1VariableSet(JNIEnv *jenv, jclass jcls, jlong jarg1) { + std::set< dreal::drake::symbolic::Variable > *arg1 = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(std::set< dreal::drake::symbolic::Variable > **)&jarg1; + delete arg1; +} + + //Start of self written JNI calls SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Config_1mutable_1precision_10(JNIEnv *jenv, jclass jcls, jdouble value, jlong config) { @@ -11514,6 +11805,65 @@ SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Co configure->mutable_smtlib2_compliant() = binary; } +SWIGEXPORT void Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1declareVariables(JNIEnv *jenv, jclass jcls, jlong cntxt, jlong f) { + dreal::Context *context = (dreal::Context *) 0; + context = *(dreal::Context **)&cntxt; + dreal::drake::symbolic::Formula *formula = (dreal::drake::symbolic::Formula *) 0; + formula = *(dreal::drake::symbolic::Formula **)&f; + + (void)jenv; + (void)jcls; + + if (!f) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "dreal::drake::symbolic::Formula const & is null"); + return; + } + + for (const dreal::drake::symbolic::Variable& v: formula->GetFreeVariables()) { + context->DeclareVariable(v); + } +} + +SWIGEXPORT jboolean JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Context_1CheckSat_10(JNIEnv *jenv, jclass jcls, jlong cntxt, jlong b) { + jboolean jresult = 0 ; + dreal::Box *box = (dreal::Box *) 0 ; + box = *(dreal::Box **)&b; + dreal::Context *context = (dreal::Context *) 0; + context = *(dreal::Context **)&cntxt; + + (void)jenv; + (void)jcls; + + dreal::optional result = context->CheckSat(); + + if (result) { + DREAL_ASSERT(box); + *box = *result; + jresult = (jboolean)true; + } else { + jresult = (jboolean)false; + } + return jresult; +} + +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_Formula_1getQuantifiedVariables(JNIEnv *jenv, jclass jcls, jlong set, jlong f) { + jlong returnSet = 0; + + dreal::drake::symbolic::Formula *formula = (dreal::drake::symbolic::Formula *) 0; + formula = *(dreal::drake::symbolic::Formula **)&f; + std::set< dreal::drake::symbolic::Variable > *s = (std::set< dreal::drake::symbolic::Variable > *) 0 ; + s = *(std::set< dreal::drake::symbolic::Variable > **)&set; + + for (dreal::drake::symbolic::Variable v : dreal::drake::symbolic::get_quantified_variables(*formula)) { + s->insert(v); + } + + *(std::set< dreal::drake::symbolic::Variable > **)&returnSet = s; + + return returnSet; +} + + // Functions for debugging and trying to figure stuff out // trying to figure out how CheckSatisfiability works and why it does not work diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o index bf2ffb6db012ccd22e0f0ebb95faf065b43d2cd0..81051be31a8d68df7c52c73bbef42723465b5a14 100644 GIT binary patch literal 1749632 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�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ⅇ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

?N#~(C^cfR}FrQ&{*+%rid>i2fF<+ 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 F{{zQQhYtV% literal 1736592 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

y<19;D8@u?0FVldf{k+xYJ=YW?J;f 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 }3R(c!l2_J3`w_ZX%e=2-f?$Zf> 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%0A@;LY$~+AKbIDBd{)};Z$GZ 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�Dp0KM>y;>Z10B3bu`mqJ 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

_77W|1p98Eb+Da9~Ssw;=A?F2mH8;aQ#)++WNKi zSKH`O{V|(u{qFwpEZ~n8_+5PR?-Ka&fS(Qc9}E0@iLb5y4+MT9;4c9DCe3jEkNe~| zG>sc+ug@++~8C6Dxp73lxH|1a{_O^hD(Kbz_g(?9gC{}+S$ zR}1`7;wMBv^cchb{D#0!ct3jodkygS3jEl0w*MM`r@+r5e$c5u7w}IA{6wGpzXX0h z;4cUKMwj6Jhln4~^5*&1H+t0nQsO5&^{)W@8wGwQ@kF>E6wm)kpY_)^dNluG;=A>4 z2K-*c=kr%Wd~N=^3H$=$yYu$};7<_hk6&;5e}giAV+DTNCpP~O>An4D3*f&b@W&Bf zo4*ADzmWKD{)K?QmH0gWT;gljUmptma^i=b`nLl9pF;g5#Mk!U-voZvr#64L{!anF zVGBI}wcho&{_7b%n*V&j-wyaaiO=&-CVmp-7kS|OZ&!g|N_=ClWtSng6;*kLE8-e0TnS0Q^^oeG{9s`JWK{r;-04p}h0wufTsJ;`977h+pkLtEc}L=U*xK&+_TNgVCe; z$p-$90{^Lk|7@TBCkp;^efm!q{1*cMe*phW1pfuZ=ific=V7Pdzl8MK{#PXUFDL&Y zXMW0o|C56M`1kDk#XkLy6a2@2X-TgCSm1xY z;J=jk+V#UK!GF0=|0@LlDZqbi;D49kKlXoi{c8FDBlu4sJ?|HvpFaivnZSQt;6JV{ zp8rJRYx%b)J)i$%pZwfe|AxT- zD}w(p@%jGE{eL3(&-Lkli{L+YrzHg`KX3nO4E!Gz{1*^k+du1Hfv?|+efqCs^k{yP zfd8hze<$Me>xWX}pU38hufLlG|K&dY4;1{T1OFET|I-Ekv77DwVTe79wL4&b8u8~T{2E4&_{GG}b?R>i_)7%--^AB` z|8|bR&)jYMA9DB|06)1Su0QmF&7Z&jj_2RY=u!P8#E+~$Z~Y_!{?`J38u9t(7wPRB z|KF8jfnN^zodN&4L|lI^@%i&_oWEYsuP43s{gH1OJ<2b(*!IuOuPgB1qLcN{ufIx& zZ-2`F$MygB&yl~m*ys^If%xwF?GE@i5}%(x%ZMNGAK`I7Qw9GqAKLlj|DNyP_Y3}0 zf&ZSs{|AEqc;fT#kBg5KLXXutG|JBbdkTm%IMEEe_-u1Z&tDEKR)sg=`k{Qk-r{Be6Eitee4YtiCjO}=ufY|$Pc8) zILa^Pe5?2JyAkB){lA>;{fJ<_b58%H^iKBwy~$|zRE~cB()?A_+Vg}tDc0$pN6tR| fb0Yt#SWO_{-QV)H>;2pKBlgbsUQ?fYaQ*)Q3`&C2 From db32be5c6311ea0e61241bdf5a6809e00ea29fd0 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 26 Jul 2023 18:08:39 +0200 Subject: [PATCH 015/155] added visitQuantified in visit-method --- .../solvers/dreal4/DReal4FormulaCreator.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index 000fe3cba8..0736d9caf1 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -24,16 +24,19 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import edu.stanford.CVC4.Expr; import java.math.BigInteger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import java.util.Set; +import org.sosy_lab.java_smt.api.BooleanFormula; import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType; import org.sosy_lab.java_smt.api.FunctionDeclarationKind; +import org.sosy_lab.java_smt.api.QuantifiedFormulaManager.Quantifier; import org.sosy_lab.java_smt.api.visitors.FormulaVisitor; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.basicimpl.FunctionDeclarationImpl; @@ -50,6 +53,7 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaSet; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.VariableSet; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; @@ -117,6 +121,13 @@ public T encapsulate(FormulaType pType, DRealTerm p throw new IllegalArgumentException("Cannot create formulas of type " + pType + " in dReal."); } + @Override + public BooleanFormula encapsulateBoolean(DRealTerm pTerm) { + assert getFormulaType(pTerm).isBooleanType() + : String.format( + "%s is not boolean, but %s (%s)", pTerm.to_string(), pTerm.getType(), getFormulaType(pTerm)); + return new DReal4BooleanFormula(pTerm); + } @Override public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f) { @@ -169,7 +180,19 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f } else { FormulaKind kind = f.getFormulaKind(); if (kind == FormulaKind.Forall) { - // TODO: Need to implement a wrapper to get the bounded variables + VariableSet set = f.getFormula().getQuantifiedVariables(); + List boundVariables = new ArrayList<>(); + DRealTerm var; + Iterator iter = set.iterator(); + for (int i = 0; i < set.size(); i++) { + var = new DRealTerm<>(iter.next(), iter.next().get_type(), iter.next().get_type()); + boundVariables.add(encapsulate(getFormulaType(var), var)); + } + DRealTerm quantifiedFormula = + new DRealTerm<>(dreal.get_quantified_formula(f.getFormula()), + Type.BOOLEAN, dreal.get_quantified_formula(f.getFormula()).get_kind()); + visitor.visitQuantifier((BooleanFormula) formula, Quantifier.FORALL, boundVariables, + encapsulateBoolean(quantifiedFormula)); throw new UnsupportedOperationException("Not supported."); } else if (kind == FormulaKind.And) { functionKind = FunctionDeclarationKind.AND; From a817e9d02404e4099fb9e5973c1fe1b4897fb308 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 26 Jul 2023 18:10:27 +0200 Subject: [PATCH 016/155] added isUnsat and addConstraint to TheoremProver --- .../java_smt/solvers/dreal4/DReal4TheoremProver.java | 8 +++----- src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java | 9 ++++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java index c2effa114f..987b8f5809 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java @@ -76,7 +76,7 @@ public void pop() { Preconditions.checkState(!closed); DRealTerm formula = creator.extractInfo(constraint); assertedFormulas.peek().add(formula); - //TODO: declare Variables of formula + curCnt.declareVaribales(formula.getFormula()); curCnt.Assert(formula.getFormula()); return null; } @@ -97,10 +97,8 @@ public int size() { @Override public boolean isUnsat() throws SolverException, InterruptedException { Preconditions.checkState(!closed); - //TODO: CheckSat() return optional -> write CheckSat() that returns a boolean and saves - // the model to a box (s. Api call CheckSatisfiability) - - return false; + boolean unsat = curCnt.CheckSat(model); + return unsat; } @Override diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java index 9a6aa20836..c6c5f6f167 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DRealTerm.java @@ -37,9 +37,12 @@ */ public class DRealTerm { + // This is the term, so a Variable, an Expression or a Formula. private final Term term; + // Here the declarationKind is stored, (3 * x) the kind is multiplication. private final Kind declaration; + // Type of the Variable, Expression or Formula private final Type type; public DRealTerm(Term pTerm, Type pType, Kind pKind) { @@ -72,7 +75,7 @@ public Expression getExpression() { if (isExp()) { return (Expression) term; } else { - throw new IllegalArgumentException("Not a Variable."); + throw new IllegalArgumentException("Not an Expression."); } } @@ -80,7 +83,7 @@ public Formula getFormula() { if (isFormula()) { return (Formula) term; } else { - throw new IllegalArgumentException("Not a Variable."); + throw new IllegalArgumentException("Not a Formula."); } } @@ -102,7 +105,7 @@ public FormulaKind getFormulaKind() { Formula formula = (Formula) term; return formula.get_kind(); } else { - throw new IllegalArgumentException("Not an Expression."); + throw new IllegalArgumentException("Not a Formula."); } } From ab59f77db8cafefa32c22d88e90229088f4958c8 Mon Sep 17 00:00:00 2001 From: Julius Date: Thu, 27 Jul 2023 16:11:59 +0200 Subject: [PATCH 017/155] init NativeAPITest --- .../solvers/dreal4/DReal4NativeAPITest.java | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NativeAPITest.java diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NativeAPITest.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NativeAPITest.java new file mode 100644 index 0000000000..cf5df43bbb --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NativeAPITest.java @@ -0,0 +1,267 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.After; +import org.junit.AssumptionViolatedException; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Box; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Config; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; + +public class DReal4NativeAPITest { + + private Context context; + private Box model; + + @BeforeClass + public static void loadDReal() { + try { + System.loadLibrary("dreal4"); + } catch (UnsatisfiedLinkError e) { + throw new AssumptionViolatedException("dReal is not available", e); + } + } + + @Before + public void createEnvironment() { + Config config = new Config(); + model = new Box(); + config.mutable_precision(0.001); + config.mutable_use_polytope_in_forall(true); + config.mutable_use_local_optimization(true); + + context = new Context(config); + } + + @After + public void exitEnvironment() { + Context.Exit(); + } + + @Test + public void simpleUNSAT() { + Formula fTrue = Formula.True(); + Formula fFalse = Formula.False(); + Formula formula = dreal.And(fTrue, fFalse); + context.declareVaribales(formula); + context.Assert(formula); + assertFalse(context.CheckSat(model)); + } + + @Test + public void simpleSAT() { + Formula fTrue = Formula.True(); + Formula formula = dreal.And(fTrue, fTrue); + context.declareVaribales(formula); + context.Assert(formula); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simlpeEqualUNSAT() { + Expression zero = Expression.Zero(); + Expression one = Expression.One(); + Formula f = new Formula(dreal.Equal(zero, one)); + context.declareVaribales(f); + context.Assert(f); + assertFalse(context.CheckSat(model)); + } + + @Test + public void simpleEqualSAT() { + Expression zero = Expression.Zero(); + Formula f = new Formula(dreal.Equal(zero, zero)); + context.declareVaribales(f); + context.Assert(f); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simpleUnEqualUNSAT() { + Expression zero = Expression.Zero(); + Formula f = new Formula(dreal.NotEqual(zero, zero)); + context.declareVaribales(f); + context.Assert(f); + assertFalse(context.CheckSat(model)); + } + + @Test + public void simlpeUnEqualSAT() { + Expression zero = Expression.Zero(); + Expression one = Expression.One(); + Formula f = new Formula(dreal.NotEqual(zero, one)); + context.declareVaribales(f); + context.Assert(f); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simpleAddUNSAT() { + Expression one = Expression.One(); + Formula f = new Formula(dreal.Equal(dreal.Add(one, one), one)); + context.declareVaribales(f); + context.Assert(f); + assertFalse(context.CheckSat(model)); + } + + @Test + public void simpleAddSAT() { + Expression zero = Expression.Zero(); + Expression one = Expression.One(); + Formula f = new Formula(dreal.Equal(dreal.Add(zero, one), one)); + context.declareVaribales(f); + context.Assert(f); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simpleMulAddSAT() { + Expression one = Expression.One(); + Expression zero = Expression.Zero(); + Expression x = new Expression(new Variable("x")); + Expression y = new Expression(new Variable(("y"))); + Formula assertion1 = new Formula(dreal.Equal(dreal.Add(x, y), new Expression(4))); + Formula assertion2 = new Formula(dreal.Equal(dreal.Multiply(x, y), new Expression(4))); + context.declareVaribales(assertion1); + context.Assert(assertion1); + context.declareVaribales(assertion2); + context.Assert(assertion2); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simpleMulAddUNSAT() { + Expression one = Expression.One(); + Expression zero = Expression.Zero(); + Expression x = new Expression(new Variable("x")); + Expression y = new Expression(new Variable(("y"))); + Formula assertion1 = new Formula(dreal.Equal(dreal.Add(x, y), new Expression(1))); + Formula assertion2 = new Formula(dreal.Equal(dreal.Multiply(x, y), new Expression(1))); + context.declareVaribales(assertion1); + context.Assert(assertion1); + context.declareVaribales(assertion2); + context.Assert(assertion2); + assertFalse(context.CheckSat(model)); + } + + @Test + public void simpleRationalSAT() { + Expression zero = Expression.Zero(); + Expression eightFith = new Expression(dreal.Divide(new Expression(8), new Expression(5))); + Expression x = new Expression(new Variable("x")); + Expression y = new Expression(new Variable(("y"))); + Formula f = new Formula(dreal.And(dreal.Grater(y, zero), dreal.Grater(x, zero))); + Formula g = new Formula(dreal.And(dreal.Less(x, eightFith), dreal.Less(y, eightFith))); + Formula k = new Formula(dreal.And(f, g)); + Formula assertion = new Formula(dreal.And(k, dreal.Equal(dreal.Add(x, y), eightFith))); + context.declareVaribales(assertion); + context.Assert(assertion); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simpleOrSAT() { + Expression zero = Expression.Zero(); + Expression one = Expression.One(); + Formula f = new Formula(dreal.Or(dreal.Grater(zero, zero), dreal.Grater(one, zero))); + context.declareVaribales(f); + context.Assert(f); + assertTrue(context.CheckSat(model)); + } + + @Test + public void simpleOrUNSAT() { + Expression zero = Expression.Zero(); + Formula f = new Formula(dreal.Or(dreal.Grater(zero, zero), dreal.Grater(zero, zero))); + context.declareVaribales(f); + context.Assert(f); + assertFalse(context.CheckSat(model)); + } + +/* @Test + public void simpleIncrementalSolving() { + Expression zero = Expression.Zero(); + Expression one = Expression.One(); + Expression threeHalf = new Expression(dreal.Divide(new Expression(3), new Expression(2))); + Expression x = new Expression(new Variable("x")); + Expression y = new Expression(new Variable("y")); + Formula assertion1 = new Formula(dreal.Equal(dreal.Add(x, y), dreal.Multiply(x, y))); + Formula assertion2 = new Formula(dreal.Equal(dreal.Add(x, y), threeHalf)); + Formula assertion3 = new Formula(dreal.Equal(dreal.Multiply(x, y), threeHalf)); + context.Push(1); + context.declareVaribales(assertion1); + context.Assert(assertion1); + assertTrue(context.CheckSat(model)); + context.Push(1); + context.declareVaribales(assertion2); + context.Assert(assertion2); + System.out.println(context.CheckSat(new Box())); + }*/ + + @Test + public void programSynthesis() { + Variable var_x = new Variable("x"); + Variable var_a = new Variable("a"); + Variable var_b = new Variable("b"); + Variable var_c = new Variable("c"); + + Expression x = new Expression(var_x); + Expression a = new Expression(var_a); + Expression b = new Expression(var_b); + Expression c = new Expression(var_c); + Expression nt = new Expression(-1000.0); + Expression t = new Expression(1000.0); + Expression nh = new Expression(-100.0); + Expression h = new Expression(100.0); + + Formula sndimply = new Formula(dreal.imply(dreal.GraterEqual(x, c), dreal.Equal(dreal.abs(x), dreal.Multiply(a, x)))); + Formula thrdimply = new Formula(dreal.imply(dreal.Less(x, c), dreal.Equal(dreal.abs(x), dreal.Multiply(b, x)))); + + Formula nested = new Formula(dreal.imply(dreal.And(dreal.LessEqual(nt, x), dreal.LessEqual(x, t)), dreal.And(sndimply, thrdimply))); + + Formula quantified = new Formula(dreal.forall(new Variables(new Variable[] {var_x}), nested)); + + Formula f1 = new Formula(dreal.And(dreal.LessEqual(nh, a), dreal.LessEqual(a, h))); + Formula f2 = new Formula(dreal.And(dreal.LessEqual(nh, b), dreal.LessEqual(b, h))); + Formula f3 = new Formula(dreal.And(dreal.LessEqual(nh, c), dreal.LessEqual(c, h))); + + Formula f1f2 = new Formula(dreal.And(f1, f2)); + Formula f3quantified = new Formula(dreal.And(f3, quantified)); + + Formula check = new Formula(dreal.And(f1f2, f3quantified)); + + context.declareVaribales(check); + context.Assert(check); + assertTrue(context.CheckSat(model)); + } + +} From 7898073ae8e861c9fd77b66f56c043a42aee5a69 Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 28 Jul 2023 17:08:59 +0200 Subject: [PATCH 018/155] init Model --- .../java_smt/solvers/dreal4/DReal4Model.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java new file mode 100644 index 0000000000..220de6d322 --- /dev/null +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java @@ -0,0 +1,54 @@ +/* + * JavaSMT is an API wrapper for a collection of SMT solvers. + * This file is part of JavaSMT. + * + * Copyright (C) 2007-2016 Dirk Beyer + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.sosy_lab.java_smt.solvers.dreal4; + +import com.google.common.collect.ImmutableList; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.sosy_lab.java_smt.basicimpl.AbstractModel; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Box; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; + + +public class DReal4Model extends AbstractModel, Type, Context> { + + private final Box model; + private final DReal4FormulaCreator formulaCreator; + private final DReal4TheoremProver prover; + + DReal4Model(DReal4TheoremProver prover, DReal4FormulaCreator pCreator, Box model) { + super(prover, pCreator); + this.model = model; + this.prover = prover; + this.formulaCreator = pCreator; + } + + @Override + public ImmutableList asList() { + return null; + } + + @Override + protected @Nullable DRealTerm evalImpl(DRealTerm formula) { + return null; + } + +} \ No newline at end of file From c9a0e15c61e84d8d220755b68f5f4ff08aadf84e Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 28 Jul 2023 17:10:20 +0200 Subject: [PATCH 019/155] added dReal to SolverContextFactory --- src/org/sosy_lab/java_smt/SolverContextFactory.java | 5 +++++ .../java_smt/solvers/dreal4/DReal4SolverContext.java | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/org/sosy_lab/java_smt/SolverContextFactory.java b/src/org/sosy_lab/java_smt/SolverContextFactory.java index 695f81d203..a2832bd062 100644 --- a/src/org/sosy_lab/java_smt/SolverContextFactory.java +++ b/src/org/sosy_lab/java_smt/SolverContextFactory.java @@ -32,6 +32,7 @@ import org.sosy_lab.java_smt.solvers.boolector.BoolectorSolverContext; import org.sosy_lab.java_smt.solvers.cvc4.CVC4SolverContext; import org.sosy_lab.java_smt.solvers.cvc5.CVC5SolverContext; +import org.sosy_lab.java_smt.solvers.dreal4.DReal4SolverContext; import org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5SolverContext; import org.sosy_lab.java_smt.solvers.princess.PrincessSolverContext; import org.sosy_lab.java_smt.solvers.smtinterpol.SmtInterpolSolverContext; @@ -283,6 +284,10 @@ private SolverContext generateContext0(Solvers solverToCreate) case BOOLECTOR: return BoolectorSolverContext.create(config, shutdownNotifier, logfile, randomSeed, loader); + case DREAL4: + return DReal4SolverContext.create(logger, shutdownNotifier, (int) randomSeed, + nonLinearArithmetic); + default: throw new AssertionError("no solver selected"); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java index 960babac05..58daeb9e61 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java @@ -52,8 +52,7 @@ public static DReal4SolverContext create( LogManager pLogger, ShutdownNotifier pShutdownNotifier, int randomSeed, - NonLinearArithmetic pNonLinearArithmetic, - FloatingPointRoundingMode pFloatingPointRoundingMode + NonLinearArithmetic pNonLinearArithmetic ) { // Create config From 2860dde096b741734b5dadfa773c0f2f71eb6218 Mon Sep 17 00:00:00 2001 From: Julius Date: Fri, 28 Jul 2023 17:44:18 +0200 Subject: [PATCH 020/155] corrected add and substract methods --- .../java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index 9cd930e371..96c74dd46a 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -103,7 +103,7 @@ protected DRealTerm add(DRealTerm pParam1, pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.Add(new Expression(pParam1.getVariable()), - new Expression(pParam1.getVariable())), pParam1.getType(), ExpressionKind.Add); + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.Add(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); @@ -123,7 +123,7 @@ protected DRealTerm subtract(DRealTerm pParam1 pParam2.getExpression()), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.Substract(new Expression(pParam1.getVariable()), - new Expression(pParam1.getVariable())), pParam1.getType(), ExpressionKind.Add); + new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.Substract(pParam1.getExpression(), new Expression(pParam2.getVariable())), pParam1.getType(), ExpressionKind.Add); From 6e5b0ab5c057f3f49fa7c3d10c454bbc40430631 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 2 Aug 2023 09:38:55 +0200 Subject: [PATCH 021/155] addded HashMap to store Variables for only creating new Variables --- .idea/libraries/x86_64_linux.xml | 10 +++++++ .../solvers/dreal4/DReal4FormulaCreator.java | 30 ++++++++++++++----- 2 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 .idea/libraries/x86_64_linux.xml diff --git a/.idea/libraries/x86_64_linux.xml b/.idea/libraries/x86_64_linux.xml new file mode 100644 index 0000000000..e89847a0f1 --- /dev/null +++ b/.idea/libraries/x86_64_linux.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index 0736d9caf1..47da569c4d 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -22,13 +22,16 @@ import static java.lang.Double.parseDouble; import static java.lang.String.valueOf; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import edu.stanford.CVC4.Expr; import java.math.BigInteger; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.sosy_lab.java_smt.api.BooleanFormula; @@ -56,11 +59,11 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.VariableSet; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variables; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; - - public class DReal4FormulaCreator extends FormulaCreator, Type, Context, DRealTerm> { + private final Map> variablesCache = new HashMap<>(); + public DReal4FormulaCreator(Context context) { super(context, Type.BOOLEAN, Type.INTEGER, Type.CONTINUOUS, null, null); } @@ -82,8 +85,20 @@ public Type getArrayType(Type indexType, Type elementType) { @Override public DRealTerm makeVariable(Type pType, String varName) { - return new DRealTerm<>(new Variable(varName, pType), pType, - pType); + if (variablesCache.get(varName) == null) { + DRealTerm var = + new DRealTerm<>(new Variable(varName, pType), pType, pType); + variablesCache.put(varName, var); + return var; + } else { + DRealTerm var = variablesCache.get(varName); + if (var.getVariable().get_type() == pType) { + return var; + } else { + throw new IllegalArgumentException("Symbol name already in use for different type " + + var.getType()); + } + } } @Override @@ -239,14 +254,13 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f DRealTerm pDeclaration; + // Variable should be handled above, just to be sure + Preconditions.checkState(f.isExp() || f.isFormula()); if (f.isExp()) { pDeclaration = new DRealTerm<>(new Expression(), f.getType(),f.getExpressionKind()); - } else if (f.isFormula()) { + } else { pDeclaration = new DRealTerm<>(new org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula(), f.getType(), f.getFormulaKind()); - } else { - throw new AssertionError("We should not get a Variable, the function should have already " - + "returned visitFreeVariable."); } From f7afde7eee4f3d03fb9bec73242eb3f821d25e11 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 2 Aug 2023 09:41:27 +0200 Subject: [PATCH 022/155] changed Type when creating Formulas from Expression in <, <=, etc. --- .../dreal4/DReal4NumeralFormulaManager.java | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index 96c74dd46a..08e02d74ca 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -181,16 +181,16 @@ public DRealTerm multiply(DRealTerm pParam1, protected DRealTerm equal(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm<>(dreal.Equal(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Eq); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Eq); } else if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.Equal(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Eq); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.Equal(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Eq); } else if (pParam1.isVar() && pParam2.isExp()) { - return new DRealTerm<>(dreal.Equal(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Eq); + return new DRealTerm<>(dreal.Equal(new Expression(pParam1.getVariable()), + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Eq); } else { throw new UnsupportedOperationException("dReal does not support equal on Formulas."); } @@ -200,14 +200,13 @@ protected DRealTerm equal(DRealTerm pParam1, DRealTe @Override protected DRealTerm distinctImpl(List> pNumbers) { // dReal does not directly support this method, so we need to build the whole term - Type type = pNumbers.get(0).getType(); Formula andFormula = helperFunction(pNumbers.get(1), pNumbers.get(0)); for (int i = 2; i < pNumbers.size(); i++) { for (int j = 0; j < i; j++) { andFormula = dreal.And(andFormula, helperFunction(pNumbers.get(i), pNumbers.get(j))); } } - return new DRealTerm<>(andFormula, type, FormulaKind.And); + return new DRealTerm<>(andFormula, Type.BOOLEAN, FormulaKind.And); } // Takes two DRealTerms and creates a NotEqual Formula to use in distinctImpl @@ -233,16 +232,16 @@ protected DRealTerm greaterThan(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.Grater(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Gt); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Gt); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm<>(dreal.Grater(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Gt); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Gt); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.Grater(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Gt); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Gt); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm<>(dreal.Grater(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Gt); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Gt); } else { throw new UnsupportedOperationException("dReal does not support greaterThan on Formulas."); } @@ -253,16 +252,16 @@ protected DRealTerm greaterOrEquals(DRealTerm pParam DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.GraterEqual(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Geq); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Geq); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm<>(dreal.GraterEqual(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Geq); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Geq); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.GraterEqual(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Geq); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Geq); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm<>(dreal.GraterEqual(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Geq); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Geq); } else { throw new UnsupportedOperationException("dReal does not support greaterOrEquals on Formulas" + "."); @@ -274,16 +273,16 @@ protected DRealTerm lessThan(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.Less(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Lt); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Lt); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm<>(dreal.Less(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Lt); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Lt); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.Less(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Lt); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Lt); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm<>(dreal.Less(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Lt); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Lt); } else { throw new UnsupportedOperationException("dReal does not support lessThan on Formulas."); } @@ -294,16 +293,16 @@ protected DRealTerm lessOrEquals(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isVar()) { return new DRealTerm<>(dreal.LessEqual(new Expression(pParam1.getVariable()), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Leq); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Leq); } else if(pParam1.isVar() && pParam2.isExp()) { return new DRealTerm<>(dreal.LessEqual(new Expression(pParam1.getVariable()), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Leq); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Leq); } else if (pParam1.isExp() && pParam2.isVar()) { return new DRealTerm<>(dreal.LessEqual(pParam1.getExpression(), - new Expression(pParam2.getVariable())), pParam1.getType(), FormulaKind.Leq); + new Expression(pParam2.getVariable())), Type.BOOLEAN, FormulaKind.Leq); } else if (pParam1.isExp() && pParam2.isExp()) { return new DRealTerm<>(dreal.LessEqual(pParam1.getExpression(), - pParam2.getExpression()), pParam1.getType(), FormulaKind.Leq); + pParam2.getExpression()), Type.BOOLEAN, FormulaKind.Leq); } else { throw new UnsupportedOperationException("dReal does not support lessOrEquals on Formulas."); } From a6ba7cc77049c4b7166101c3ada7325e6f4d54eb Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 2 Aug 2023 09:42:02 +0200 Subject: [PATCH 023/155] corrected equals method --- .../java_smt/solvers/dreal4/DReal4Formula.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java index e8a31468b5..3a0781dec2 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Formula.java @@ -46,8 +46,17 @@ public final boolean equals(Object o) { if (!(o instanceof DRealTerm)) { return false; } - // ? - return term == o; + if (term.isVar() && ((DRealTerm) o).isVar()) { + return term.getVariable().equal_to(((DRealTerm) o).getVariable()); + } else if (term.isExp() && ((DRealTerm) o).isExp()) { + return term.getExpression().EqualTo(((DRealTerm) o).getExpression()); + } else if (term.isFormula() && ((DRealTerm) o).isFormula()) { + return term.getFormula().EqualTo(((DRealTerm) o).getFormula()); + } else { + return false; + } +/* // ? + return term == o;*/ } @Override From f3555ddba9f364a99c54c2bc01b9d5d1b1ff53f1 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 2 Aug 2023 09:43:39 +0200 Subject: [PATCH 024/155] added pLoader dreal --- src/org/sosy_lab/java_smt/SolverContextFactory.java | 2 +- .../java_smt/solvers/dreal4/DReal4SolverContext.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/org/sosy_lab/java_smt/SolverContextFactory.java b/src/org/sosy_lab/java_smt/SolverContextFactory.java index a2832bd062..0ddc2d3439 100644 --- a/src/org/sosy_lab/java_smt/SolverContextFactory.java +++ b/src/org/sosy_lab/java_smt/SolverContextFactory.java @@ -286,7 +286,7 @@ private SolverContext generateContext0(Solvers solverToCreate) case DREAL4: return DReal4SolverContext.create(logger, shutdownNotifier, (int) randomSeed, - nonLinearArithmetic); + nonLinearArithmetic, loader); default: throw new AssertionError("no solver selected"); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java index 58daeb9e61..e6b61f538a 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4SolverContext.java @@ -20,6 +20,7 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import java.util.function.Consumer; import org.sosy_lab.common.ShutdownNotifier; import org.sosy_lab.common.log.LogManager; import org.sosy_lab.java_smt.api.FloatingPointRoundingMode; @@ -52,9 +53,12 @@ public static DReal4SolverContext create( LogManager pLogger, ShutdownNotifier pShutdownNotifier, int randomSeed, - NonLinearArithmetic pNonLinearArithmetic + NonLinearArithmetic pNonLinearArithmetic, + Consumer pLoader ) { + pLoader.accept("dreal4"); + // Create config Config config = new Config(); config.mutable_random_seed(randomSeed); @@ -95,12 +99,12 @@ protected ProverEnvironment newProverEnvironment0(Set pOptions) { @Override protected InterpolatingProverEnvironment newProverEnvironmentWithInterpolation0(Set pSet) { - throw new UnsupportedOperationException("dReal does not support interpolation"); + throw new UnsupportedOperationException("dReal does not support interpolation."); } @Override protected OptimizationProverEnvironment newOptimizationProverEnvironment0(Set pSet) { - return null; + throw new UnsupportedOperationException("dReal does not support optimization."); } @Override From f2d784bee09d634887d8c4c7e864119cd9f1d7b3 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 2 Aug 2023 09:45:16 +0200 Subject: [PATCH 025/155] overwritte addImpl and orImpl --- .../dreal4/DReal4BooleanFormulaManager.java | 95 ++++++++++++++++--- 1 file changed, 82 insertions(+), 13 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java index a13d475965..3776a61c94 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4BooleanFormulaManager.java @@ -20,13 +20,12 @@ package org.sosy_lab.java_smt.solvers.dreal4; -import org.sosy_lab.java_smt.api.FunctionDeclarationKind; +import com.google.common.base.Preconditions; +import java.util.Collection; import org.sosy_lab.java_smt.basicimpl.AbstractBooleanFormulaManager; -import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; -import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; @@ -57,40 +56,78 @@ protected DRealTerm not(DRealTerm pParam1) { if (pParam1.isFormula()) { return new DRealTerm<>(dreal.Not(pParam1.getFormula()), Type.BOOLEAN, FormulaKind.Not); + } else if (pParam1.isVar()) { + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); + return new DRealTerm<>(dreal.Not(new Formula(pParam1.getVariable())), Type.BOOLEAN, + FormulaKind.Not); } else { - throw new UnsupportedOperationException("dReal does not support not on Variabele " - + "or Expressions."); + throw new UnsupportedOperationException("dReal does not support not on Expressions."); } } @Override protected DRealTerm and(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.And(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.And(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isVar() && pParam2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); + Preconditions.checkState(pParam2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.And(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isFormula()) { + DRealTerm test = new DRealTerm<>(dreal.And(pParam1.getFormula(), pParam2.getFormula()), + Type.BOOLEAN, FormulaKind.And); return new DRealTerm<>(dreal.And(pParam1.getFormula(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else { throw new UnsupportedOperationException("dReal does not support and on Expressions."); } } + @Override + protected DRealTerm andImpl(Collection> pParams) { + Formula result = Formula.True(); + for (DRealTerm formula : pParams) { + if (formula.isFormula()) { + if (formula.getFormula().get_kind() == FormulaKind.True) { + return new DRealTerm<>(Formula.True(), Type.BOOLEAN, FormulaKind.True); + } + result = dreal.And(result, formula.getFormula()); + } else if (formula.isVar() && formula.getVariable().get_type() == Type.BOOLEAN) { + result = dreal.And(result, formula.getVariable()); + } else { + throw new IllegalArgumentException("Expression and Variable of not type boolean are not " + + "supported to create an And-Formula."); + } + } + return new DRealTerm<>(result, Type.BOOLEAN, FormulaKind.And); + } + @Override protected DRealTerm or(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.Or(pParam1.getVariable(), pParam2.getFormula()), Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isFormula() && pParam2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.Or(pParam1.getFormula(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isVar() && pParam2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); + Preconditions.checkState(pParam2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.Or(pParam1.getVariable(), pParam2.getVariable()), Type.BOOLEAN, FormulaKind.Or); } else if (pParam1.isFormula() && pParam2.isFormula()) { @@ -101,20 +138,45 @@ protected DRealTerm or(DRealTerm pParam1, DRealTerm< } } + @Override + protected DRealTerm orImpl(Collection> pParams) { + Formula result = Formula.False(); + for (DRealTerm formula : pParams) { + // Only Formulas or Variables of boolean type are accepted when creating an Or-Formula + Preconditions.checkState(formula.isFormula() || (formula.isVar()) && (formula.getVariable().get_type() == Type.BOOLEAN)); + if (formula.isFormula()) { + if (formula.getFormula().get_kind() == FormulaKind.True) { + return new DRealTerm<>(Formula.True(), Type.BOOLEAN, FormulaKind.True); + } + result = dreal.Or(result, formula.getFormula()); + } else if (formula.isVar() && formula.getVariable().get_type() == Type.BOOLEAN) { + result = dreal.Or(result, formula.getVariable()); + } + } + return new DRealTerm<>(result, Type.BOOLEAN, FormulaKind.Or); + } + // a xor b = (NOT(A AND B)) AND (NOT(NOT A AND NOT B)) @Override protected DRealTerm xor(DRealTerm pParam1, DRealTerm pParam2) { if (pParam1.isVar() && pParam2.isFormula()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getFormula())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), dreal.Not(pParam2.getFormula())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isFormula() && pParam2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getFormula(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getFormula()), dreal.Not(pParam2.getVariable())))), Type.BOOLEAN, FormulaKind.And); } else if (pParam1.isVar() && pParam2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(pParam1.getVariable().get_type() == Type.BOOLEAN); + Preconditions.checkState(pParam2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.And(dreal.Not(dreal.And(pParam1.getVariable(), pParam2.getVariable())), dreal.Not(dreal.And(dreal.Not(pParam1.getVariable()), @@ -133,12 +195,19 @@ protected DRealTerm xor(DRealTerm pParam1, DRealTerm protected DRealTerm equivalence(DRealTerm bits1, DRealTerm bits2) { if (bits1.isVar() && bits2.isFormula()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(bits1.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.iff(bits1.getVariable(), bits2.getFormula()), Type.BOOLEAN, FormulaKind.And); } else if (bits1.isFormula() && bits2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(bits2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.iff(bits1.getFormula(), bits2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (bits1.isVar() && bits2.isVar()) { + // Only Variables with type boolean are allowed + Preconditions.checkState(bits1.getVariable().get_type() == Type.BOOLEAN); + Preconditions.checkState(bits2.getVariable().get_type() == Type.BOOLEAN); return new DRealTerm<>(dreal.iff(bits1.getVariable(), bits2.getVariable()), Type.BOOLEAN, FormulaKind.And); } else if (bits1.isFormula() && bits2.isFormula()) { @@ -175,24 +244,24 @@ protected boolean isFalse(DRealTerm bits) { if (cond.isFormula()) { if (dreal.is_true(cond.getFormula())) { if (f1.isVar()) { - return new DRealTerm<>(f1.getVariable(), Type.BOOLEAN, - Type.BOOLEAN); + return new DRealTerm<>(f1.getVariable(), f1.getType(), + f1.getType()); } else if (f1.isExp()) { - return new DRealTerm<>(f1.getExpression(), Type.BOOLEAN, + return new DRealTerm<>(f1.getExpression(), f1.getType(), f1.getExpressionKind()); } else { - return new DRealTerm<>(f1.getFormula(), Type.BOOLEAN, + return new DRealTerm<>(f1.getFormula(), f1.getType(), f1.getFormulaKind()); } } else { if (f2.isVar()) { - return new DRealTerm<>(f2.getVariable(), Type.BOOLEAN, - Type.BOOLEAN); + return new DRealTerm<>(f2.getVariable(), f2.getType(), + f2.getType()); } else if (f2.isExp()) { - return new DRealTerm<>(f2.getExpression(), Type.BOOLEAN, + return new DRealTerm<>(f2.getExpression(), f2.getType(), f2.getExpressionKind()); } else { - return new DRealTerm<>(f2.getFormula(), Type.BOOLEAN, + return new DRealTerm<>(f2.getFormula(), f2.getType(), f2.getFormulaKind()); } } From 19f75efea8dff4be17c635ce249b5b85d6776b53 Mon Sep 17 00:00:00 2001 From: Julius Date: Wed, 2 Aug 2023 09:45:55 +0200 Subject: [PATCH 026/155] implemented rest of TheoremProver --- .../solvers/dreal4/DReal4TheoremProver.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java index 987b8f5809..55835a7bf7 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java @@ -38,6 +38,7 @@ import org.sosy_lab.java_smt.api.SolverException; import org.sosy_lab.java_smt.basicimpl.AbstractProverWithAllSat; import java.util.Set; +import org.sosy_lab.java_smt.basicimpl.CachingModel; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Box; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Config; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; @@ -61,6 +62,7 @@ protected DReal4TheoremProver(DReal4FormulaCreator creator, Set p curCfg = new Config(); curCnt = new Context(curCfg); model = new Box(); + assertedFormulas.push(new ArrayList<>()); } @Override @@ -93,12 +95,11 @@ public int size() { Preconditions.checkState(!closed); return assertedFormulas.size() - 1; } - @Override public boolean isUnsat() throws SolverException, InterruptedException { Preconditions.checkState(!closed); boolean unsat = curCnt.CheckSat(model); - return unsat; + return !unsat; } @Override @@ -109,7 +110,9 @@ public boolean isUnsatWithAssumptions(Collection assumptions) @Override public Model getModel() throws SolverException { - return null; + Preconditions.checkState(!closed); + checkGenerateModels(); + return new CachingModel(getEvaluatorWithoutChecks()); } @Override @@ -124,7 +127,7 @@ public Optional> unsatCoreOverAssumptions(Collection Date: Sat, 5 Aug 2023 16:34:33 +0200 Subject: [PATCH 027/155] override substitute-method --- .../solvers/dreal4/DReal4FormulaManager.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java index 29bd7bc171..6c33eac21a 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaManager.java @@ -20,10 +20,16 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import com.google.common.base.Preconditions; +import java.util.Map; import org.sosy_lab.common.Appender; import org.sosy_lab.java_smt.api.BooleanFormula; +import org.sosy_lab.java_smt.api.Formula; +import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.basicimpl.AbstractFormulaManager; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.FormulaKind; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; public class DReal4FormulaManager extends AbstractFormulaManager, Type, Context, @@ -66,4 +72,42 @@ public BooleanFormula parse(String s) throws IllegalArgumentException { public Appender dumpFormula(DRealTerm t) { return null; } + + @Override + public T substitute( + final T pF, final Map pFromToMapping) { + DRealTerm[] changeFrom = new DRealTerm[pFromToMapping.size()]; + DRealTerm[] changeTo = new DRealTerm[pFromToMapping.size()]; + int idx = 0; + for (Map.Entry e : pFromToMapping.entrySet()) { + changeFrom[idx] = extractInfo(e.getKey()); + changeTo[idx] = extractInfo(e.getValue()); + idx++; + } + DRealTerm f = extractInfo(pF); + // Expected is a formula + Preconditions.checkState(f.isFormula()); + org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula formula = f.getFormula(); + for (int i = 0; i < changeFrom.length; i++) { + DRealTerm changeFromTerm = changeFrom[i]; + DRealTerm changeToTerm = changeTo[i]; + // Only Variables can be substituted + Preconditions.checkState(changeFromTerm.isVar()); + if (changeToTerm.isVar()) { + formula = formula.Substitute(changeFromTerm.getVariable(), + new Expression(changeToTerm.getVariable())); + } else if (changeToTerm.isExp()) { + formula = formula.Substitute(changeFromTerm.getVariable(), changeToTerm.getExpression()); + } else { + formula = formula.Substitute(changeFromTerm.getVariable(), changeToTerm.getFormula()); + } + } + FormulaType type = getFormulaType(pF); + return getFormulaCreator().encapsulate(type, new DRealTerm<>(formula, f.getType(), + formula.get_kind())); + } + } + + + From 4e7a4a9d35870b80a76a0fb18d7f0460576ea3ec Mon Sep 17 00:00:00 2001 From: Julius Date: Sat, 5 Aug 2023 16:39:52 +0200 Subject: [PATCH 028/155] fixed iterater used in visit and added pow(x,-1) in visit, when negate is called --- .idea/JavaSMT.iml | 522 ------------------ .idea/ant.xml | 19 - .idea/checkstyle-idea.xml | 28 - .idea/codeStyleSettings.xml | 192 ------- .idea/codeStyles/Project.xml | 185 ------- .idea/codeStyles/codeStyleConfig.xml | 5 - .idea/compiler.xml | 33 -- .idea/copyright/JavaSMT.xml | 16 - .idea/copyright/profiles_settings.xml | 13 - .idea/encodings.xml | 17 - .idea/inspectionProfiles/Project_Default.xml | 67 --- .../inspectionProfiles/profiles_settings.xml | 17 - .idea/junitgenerator-prj-settings.xml | 17 - .idea/libraries/x86_64_linux.xml | 10 - .idea/misc.xml | 57 -- .idea/modules.xml | 19 - .idea/vcs.xml | 17 - .../solvers/dreal4/DReal4FormulaCreator.java | 72 ++- 18 files changed, 45 insertions(+), 1261 deletions(-) delete mode 100644 .idea/JavaSMT.iml delete mode 100644 .idea/ant.xml delete mode 100644 .idea/checkstyle-idea.xml delete mode 100644 .idea/codeStyleSettings.xml delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/copyright/JavaSMT.xml delete mode 100644 .idea/copyright/profiles_settings.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/junitgenerator-prj-settings.xml delete mode 100644 .idea/libraries/x86_64_linux.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/JavaSMT.iml b/.idea/JavaSMT.iml deleted file mode 100644 index 4857c85527..0000000000 --- a/.idea/JavaSMT.iml +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.idea/ant.xml b/.idea/ant.xml deleted file mode 100644 index 3e3b7e7277..0000000000 --- a/.idea/ant.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml deleted file mode 100644 index a1e7fbf3b3..0000000000 --- a/.idea/checkstyle-idea.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml deleted file mode 100644 index 9a4d556d44..0000000000 --- a/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 2e6e4da19a..0000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c2b..0000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 1214f58eab..0000000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/.idea/copyright/JavaSMT.xml b/.idea/copyright/JavaSMT.xml deleted file mode 100644 index df2eba2f32..0000000000 --- a/.idea/copyright/JavaSMT.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index 3cfcc9878e..0000000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index db30d8ee89..0000000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index be8f53a4b2..0000000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 1807f46726..0000000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/junitgenerator-prj-settings.xml b/.idea/junitgenerator-prj-settings.xml deleted file mode 100644 index 5d18b2a084..0000000000 --- a/.idea/junitgenerator-prj-settings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - diff --git a/.idea/libraries/x86_64_linux.xml b/.idea/libraries/x86_64_linux.xml deleted file mode 100644 index e89847a0f1..0000000000 --- a/.idea/libraries/x86_64_linux.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index ce7f947e76..0000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index e70e3fe729..0000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 8f55ae7820..0000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java index 47da569c4d..eeb5dd203f 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4FormulaCreator.java @@ -25,7 +25,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import edu.stanford.CVC4.Expr; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; @@ -34,19 +33,19 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.math.BigDecimal; +import org.sosy_lab.common.rationals.Rational; import org.sosy_lab.java_smt.api.BooleanFormula; import org.sosy_lab.java_smt.api.Formula; import org.sosy_lab.java_smt.api.FormulaType; import org.sosy_lab.java_smt.api.FormulaType.FloatingPointType; import org.sosy_lab.java_smt.api.FunctionDeclarationKind; -import org.sosy_lab.java_smt.api.QuantifiedFormulaManager.Quantifier; import org.sosy_lab.java_smt.api.visitors.FormulaVisitor; import org.sosy_lab.java_smt.basicimpl.FormulaCreator; import org.sosy_lab.java_smt.basicimpl.FunctionDeclarationImpl; import org.sosy_lab.java_smt.solvers.dreal4.DReal4Formula.DReal4BooleanFormula; import org.sosy_lab.java_smt.solvers.dreal4.DReal4Formula.DReal4IntegerFormula; import org.sosy_lab.java_smt.solvers.dreal4.DReal4Formula.DReal4RationalFormula; - import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.ExpressionDoubleMap; @@ -63,6 +62,7 @@ public class DReal4FormulaCreator extends FormulaCreator, Type, DRealTerm> { private final Map> variablesCache = new HashMap<>(); + private final Map> functionCache = new HashMap<>(); public DReal4FormulaCreator(Context context) { super(context, Type.BOOLEAN, Type.INTEGER, Type.CONTINUOUS, null, null); @@ -158,9 +158,8 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f if (f.getType() == Type.INTEGER) { return visitor.visitConstant(formula, new BigInteger(f.getExpression().to_string())); } else { - // TODO: visitConstant from Rational - //return visitor.visitConstant(formula, new ); - return null; + return visitor.visitConstant(formula, + BigDecimal.valueOf(parseDouble(f.getExpression().to_string()))); } } else if (kind == ExpressionKind.Var) { return visitor.visitFreeVariable(formula, f.getExpression().to_string()); @@ -170,17 +169,23 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f } else if (kind == ExpressionKind.Pow) { // the exponent should only be an int i >= 2, because the only way to get an // expression with an exponent is to create an expression like (x*x*x), because pow is - // not supported in JavaSMT - functionKind = FunctionDeclarationKind.MUL; + // not supported in JavaSMT or if a variable gets negated, so pow(x,-1) + DRealTerm pow; Expression lhs = dreal.get_first_argument(f.getExpression()); Expression rhs = dreal.get_second_argument(f.getExpression()); double exponent = parseDouble(rhs.to_string()); - Expression exp = dreal.Multiply(lhs, lhs); - for (int i = 2; i < exponent; i++) { - exp = dreal.Multiply(exp, lhs); + if (exponent < 0) { + functionKind = FunctionDeclarationKind.DIV; + pow = new DRealTerm<>(dreal.Divide(Expression.One(), lhs), + dreal.get_variable(lhs).get_type(), ExpressionKind.Div); + } else { + functionKind = FunctionDeclarationKind.MUL; + Expression exp = dreal.Multiply(lhs, lhs); + for (int i = 2; i < exponent; i++) { + exp = dreal.Multiply(exp, lhs); + } + pow = new DRealTerm<>(exp, dreal.get_variable(lhs).get_type(), ExpressionKind.Mul); } - DRealTerm pow = new DRealTerm<>(exp, - dreal.get_variable(lhs).get_type(), ExpressionKind.Mul); functionArgs = getExpressionFromMul(pow); } else if (kind == ExpressionKind.Add) { functionKind = FunctionDeclarationKind.ADD; @@ -199,15 +204,17 @@ public R visit(FormulaVisitor visitor, Formula formula, DRealTerm f List boundVariables = new ArrayList<>(); DRealTerm var; Iterator iter = set.iterator(); + Variable next; for (int i = 0; i < set.size(); i++) { - var = new DRealTerm<>(iter.next(), iter.next().get_type(), iter.next().get_type()); + next = iter.next(); + var = new DRealTerm<>(next, next.get_type(), next.get_type()); boundVariables.add(encapsulate(getFormulaType(var), var)); } DRealTerm quantifiedFormula = new DRealTerm<>(dreal.get_quantified_formula(f.getFormula()), Type.BOOLEAN, dreal.get_quantified_formula(f.getFormula()).get_kind()); - visitor.visitQuantifier((BooleanFormula) formula, Quantifier.FORALL, boundVariables, - encapsulateBoolean(quantifiedFormula)); +/* return visitor.visitQuantifier((BooleanFormula) formula, Quantifier.FORALL, boundVariables, + encapsulateBoolean(quantifiedFormula));*/ throw new UnsupportedOperationException("Not supported."); } else if (kind == FormulaKind.And) { functionKind = FunctionDeclarationKind.AND; @@ -449,7 +456,7 @@ private static Type getTypeForExpressions(Expression pExpression) { @Override public DRealTerm callFunctionImpl(DRealTerm declaration, List> args) { if (args.isEmpty()) { - // Or Variable? + // Variable erstellen throw new IllegalArgumentException("dReal does not support UFs without arguments."); } else { Expression expression; @@ -479,6 +486,10 @@ private static Type getTypeForExpressions(Expression pExpression) { } } return new DRealTerm<>(expression, args.get(0).getType(), ExpressionKind.Add); + } else if (expressionKind.equals(ExpressionKind.UninterpretedFunction)) { + //TODO: Was soll passieren? + return new DRealTerm<>(args.get(0).getExpression(), args.get(0).getType(), + args.get(0).getExpressionKind()); } } else if (declaration.isFormula()) { FormulaKind formulaKind = declaration.getFormulaKind(); @@ -527,17 +538,24 @@ private static Type getTypeForExpressions(Expression pExpression) { @Override public DRealTerm declareUFImpl(String pName, Type pReturnType, List pArgTypes) { - if (pArgTypes.isEmpty()) { - // einfach Variable zurückgeben? - return new DRealTerm<>(new Variable(pName, pReturnType), pReturnType, - pReturnType); - } else { - Variables vars = new Variables(); - for (int i = 0; i < pArgTypes.size(); i++) { - vars.insert(new Variable(valueOf(i), pArgTypes.get(i))); + DRealTerm term = functionCache.get(pName); + if (term == null) { + if (pArgTypes.isEmpty()) { + // einfach Variable zurückgeben? + return new DRealTerm<>(new Variable(pName, pReturnType), pReturnType, + pReturnType); + } else { + Variables vars = new Variables(); + for (int i = 0; i < pArgTypes.size(); i++) { + vars.insert(new Variable(valueOf(i), pArgTypes.get(i))); + } + return new DRealTerm<>(dreal.uninterpreted_function(pName, vars), pReturnType, + ExpressionKind.UninterpretedFunction); } - return new DRealTerm<>(dreal.uninterpreted_function(pName, vars), pReturnType, - ExpressionKind.UninterpretedFunction); + } else if (term.getType() == pReturnType) { + return term; + } else { + throw new IllegalArgumentException("symbol already exist for UF with different type."); } } From 4af6a01fec61dd586c5ad85ae6ce3f8d0fe7c0b1 Mon Sep 17 00:00:00 2001 From: Julius Date: Sat, 5 Aug 2023 16:40:24 +0200 Subject: [PATCH 029/155] added evalImpl --- .../java_smt/solvers/dreal4/DReal4Model.java | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java index 220de6d322..91d5405b48 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4Model.java @@ -20,12 +20,19 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import java.util.HashMap; +import java.util.Map; import org.checkerframework.checker.nullness.qual.Nullable; import org.sosy_lab.java_smt.basicimpl.AbstractModel; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Box; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Expression; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.dreal; public class DReal4Model extends AbstractModel, Type, Context> { @@ -46,9 +53,61 @@ public ImmutableList asList() { return null; } + // This will always return True, different solution? @Override protected @Nullable DRealTerm evalImpl(DRealTerm formula) { - return null; + Preconditions.checkState(formula.isFormula()); + Formula f = formula.getFormula(); + HashMap result = extractResults(); + for (Map.Entry entry : result.entrySet()) { + Variable var = entry.getKey(); + Double res = entry.getValue(); + if (res.isNaN()) { + // When is result "EMPTY"? + return null; + } else { + if (var.get_type() == Type.BOOLEAN) { + if (res > 0) { + f.Substitute(var, Formula.True()); + } else { + f.Substitute(var, Formula.False()); + } + } else { + f.Substitute(var, new Expression(res)); + } + } + } + return new DRealTerm<>(f, formula.getType(), formula.getFormulaKind()); + } + + + /** + * This function extracts the results. The function iterates through the model (Box) and gets the + * variable and calls getResult to get the value associated with the variable + * @return HashMap with variable as key and result as Double as value + */ + private HashMap extractResults() { + HashMap result = new HashMap<>(); + Variable var; + String res; + for (int i = 0; i < model.size(); i++) { + var = model.variable(i); + res = dreal.getResult(model, i); + result.put(var, parseResult(res)); + } + return result; } + private double parseResult(String string) { + if (string.equals("EMPTY")) { + return Double.NaN; + } else if (string.equals("ENTIRE")) { + // probably unnecassary, and what should I return? + return new Double(1); + } else { + String[] numbers = string.split(","); + return new Double(numbers[0] + "." + numbers[1]); + + } + } } \ No newline at end of file From 318bf7dab059c68c0b870279b9073d5dab4aabc5 Mon Sep 17 00:00:00 2001 From: Julius Date: Sat, 5 Aug 2023 16:41:42 +0200 Subject: [PATCH 030/155] corrected negate method to inverse variable/number --- .../dreal4/DReal4NumeralFormulaManager.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java index 08e02d74ca..54e73f75ba 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4NumeralFormulaManager.java @@ -20,6 +20,7 @@ package org.sosy_lab.java_smt.solvers.dreal4; +import com.google.common.base.Preconditions; import java.math.BigDecimal; import java.math.BigInteger; import java.text.Normalizer.Form; @@ -52,14 +53,13 @@ protected boolean isNumeral(DRealTerm val) { if (val.isExp()) { return val.getExpression().get_kind() == ExpressionKind.Constant; } else { - throw new UnsupportedOperationException("dReal does not support isNumeral on Variable or " - + "Formula."); + return false; } } @Override protected DRealTerm makeNumberImpl(long i) { - return new DRealTerm<>(new Expression((double) i), getNumeralType(), ExpressionKind.Constant); + return new DRealTerm<>(new Expression(i), getNumeralType(), ExpressionKind.Constant); } @Override @@ -69,7 +69,15 @@ protected DRealTerm makeNumberImpl(BigInteger i) { @Override protected DRealTerm makeNumberImpl(String i) { - return new DRealTerm<>(new Expression(Double.parseDouble(i)), getNumeralType(), + double d; + if (i.contains("/")) { + String[] rat = i.split("/"); + d = Double.parseDouble(rat[0]) / Double.parseDouble(rat[1]); + + } else { + d = Double.parseDouble(i); + } + return new DRealTerm<>(new Expression(d), getNumeralType(), ExpressionKind.Constant); } @@ -91,8 +99,16 @@ protected DRealTerm makeNumberImpl(BigDecimal pNumbe } @Override - protected DRealTerm negate(DRealTerm pParam1) { - return new DRealTerm<>(dreal.Not(pParam1.getVariable()), pParam1.getType(), FormulaKind.Not); + protected DRealTerm negate(DRealTerm pParam1) { + // Only Expression or Variables are expected + Preconditions.checkState(pParam1.isVar() || pParam1.isExp()); + if (pParam1.isVar()) { + return new DRealTerm<>(dreal.pow(new Expression(pParam1.getVariable()), new Expression(-1)) + , pParam1.getType(), ExpressionKind.Pow); + } else { + return new DRealTerm<>(dreal.pow(pParam1.getExpression(), new Expression(-1)), + pParam1.getType(), ExpressionKind.Constant); + } } @Override From 48aec6f65e4640735292c3692e4df5866bac2f63 Mon Sep 17 00:00:00 2001 From: Julius Date: Sat, 5 Aug 2023 16:42:09 +0200 Subject: [PATCH 031/155] added close() --- .../solvers/dreal4/DReal4TheoremProver.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java index 55835a7bf7..5d2b72de71 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/DReal4TheoremProver.java @@ -42,6 +42,8 @@ import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Box; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Config; import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Context; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Formula; +import org.sosy_lab.java_smt.solvers.dreal4.drealjni.Variable.Type; class DReal4TheoremProver extends AbstractProverWithAllSat implements ProverEnvironment { @@ -78,11 +80,22 @@ public void pop() { Preconditions.checkState(!closed); DRealTerm formula = creator.extractInfo(constraint); assertedFormulas.peek().add(formula); - curCnt.declareVaribales(formula.getFormula()); - curCnt.Assert(formula.getFormula()); - return null; + // It is not possible to assert an Expression, only Variable of type boolean or a formula + Preconditions.checkState(!formula.isExp()); + if (formula.isVar()) { + Preconditions.checkState(formula.getType() == Type.BOOLEAN); + Formula f = new Formula(formula.getVariable()); + curCnt.declareVaribales(f); + curCnt.Assert(f); + return null; + } else { + curCnt.declareVaribales(formula.getFormula()); + curCnt.Assert(formula.getFormula()); + return null; + } } + @Override public void push() throws InterruptedException { Preconditions.checkState(!closed); @@ -130,4 +143,13 @@ public Optional> unsatCoreOverAssumptions(Collection Date: Sat, 5 Aug 2023 16:43:10 +0200 Subject: [PATCH 032/155] added method to retrieve the results of the box/model --- .../solvers/dreal4/drealjni/Expression.java | 5 +++ .../solvers/dreal4/drealjni/dreal.java | 34 ++++++++++++++++++ .../solvers/dreal4/drealjni/drealJNI.java | 2 ++ .../solvers/dreal4/drealjni/dreal_wrap.cxx | 34 ++++++++++++++++++ .../solvers/dreal4/drealjni/dreal_wrap.o | Bin 1749632 -> 1765032 bytes 5 files changed, 75 insertions(+) diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java index e31150dc1d..08d812a4d5 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/Expression.java @@ -84,6 +84,11 @@ public Expression(double d) { this(drealJNI.new_Expression__SWIG_2(d), true); } + public Expression(long l) { + this(drealJNI.new_Expression__SWIG_4(l), true); + } + + public Expression(Variable var) { this(drealJNI.new_Expression__SWIG_3(Variable.getCPtr(var), var), true); } diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java index eb7c08562b..5fc8af5039 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal.java @@ -130,6 +130,7 @@ public static Expression MultiplyEqual(Expression lhs, Expression rhs) { } public static Expression Divide(Expression lhs, Expression rhs) { + return new Expression(drealJNI.Divide(Expression.getCPtr(lhs), lhs, Expression.getCPtr(rhs), rhs), true); } @@ -773,6 +774,39 @@ public static boolean Minimize(Expression objective, Formula constraint, Config public static boolean CheckSatisfiability(Formula f) { return drealJNI.CheckSatisfiability__SWIG_2(Formula.getCPtr(f)); } + + /** + * This function reads the result of one variable from the model(Box). It should be known what + * variable is called, to save the String with the associated variable. + * @param box to read the values of the variables + * @param i to get the i-th value associated with a variable of the box + * @return String with the value, value is the lower-bound or ENTIRE or EMPTY + */ + public static String getResult(Box box, int i) { + // returns EMPTY or lower-bound; upperbound as String + String result = drealJNI.getResult(Box.getCPtr(box), i); + if (result.equals("EMPTY")) { + return "EMPTY"; + } + String[] bounds = result.split("; "); + if (bounds[0].equals(bounds[1])) { + return bounds[0]; + // Probably not needed, because it is already evaluated to True e.g. x * 1 == x is + // evaluated to True and variable x does not exist in result anymore + } else if (bounds[0].equals("-inf") && bounds[1].equals("inf")) { + return "ENTIRE"; + } else if (bounds[0].equals("-inf") || bounds[1].equals("inf")){ + if (bounds[0].equals("-inf")) { + return bounds[1]; + } else { + return bounds[0]; + } + } else { + return bounds[0]; + } + } + + // Zum testen public static boolean CheckSatisfiabilityTest(Formula f, double delta, Box box) { System.out.println("Aufruf von Main und jetzt wird drealJNI und dann wrapper aufgerufen"); return drealJNI.CheckSatisfiability__SWIG_3(Formula.getCPtr(f), delta, Box.getCPtr(box)); diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java index 0ff7ea72df..e41ed68c78 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/drealJNI.java @@ -637,6 +637,8 @@ public class drealJNI { public final static native void Context_declareVariables(long context, long formula); public final static native boolean Context_CheckSat_0(long context, long box); public final static native long Formula_getQuantifiedVariables(long set, long formula); + public final static native long new_Expression__SWIG_4(long jarg1); + public final static native String getResult(long box, int i); // For debuging and testing diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx index 15a858948a..8937165d6a 100644 --- a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx +++ b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.cxx @@ -11863,7 +11863,41 @@ SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_dr return returnSet; } +SWIGEXPORT jlong JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_new_1Expression_1_1SWIG_14(JNIEnv *jenv, jclass jcls, jlong jarg1) { + jlong jresult = 0 ; + long arg1 ; + dreal::drake::symbolic::Expression *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = (long)jarg1; + result = (dreal::drake::symbolic::Expression *)new dreal::drake::symbolic::Expression(arg1); + *(dreal::drake::symbolic::Expression **)&jresult = result; + return jresult; +} + +SWIGEXPORT jstring JNICALL Java_org_sosy_1lab_java_1smt_solvers_dreal4_drealjni_drealJNI_getResult(JNIEnv *jenv, jclass jcls, jlong model, jint index) { + jstring result = 0; + dreal::Box *box = (dreal::Box *) 0; + int i; + + i = (int)index; + box = *(dreal::Box **)&model; + dreal::Box copyBox{*box}; + std::string res; + //dreal::Box::Interval interval{box->values_[i]}; + dreal::Box::Interval interval = copyBox[i]; + if (interval.is_empty()) { + res = "EMPTY"; + } else { + std::string lb = std::to_string(interval.lb()); + std::string ub = std::to_string(interval.ub()); + res = lb + "; " + ub; + } + result = jenv->NewStringUTF((&res)->c_str()); + return result; +} // Functions for debugging and trying to figure stuff out // trying to figure out how CheckSatisfiability works and why it does not work diff --git a/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o b/src/org/sosy_lab/java_smt/solvers/dreal4/drealjni/dreal_wrap.o index 81051be31a8d68df7c52c73bbef42723465b5a14..9fd18556a68fe06465f1017803c0283246c5ea3c 100644 GIT binary patch literal 1765032 zcmeF44SdzpAIC>U^00+Ss60gS&?6!=>T;toF%`uS%42BcVOiF+>vlB{F%&~;D2B?U zhpVOyVMqbPy?9nWW|LqZVPShUy9~Ne(w=w<|D^+Y%W}9c)h~KW-J4zl?M1D(tM}AMPCVwP< z0)M7nNB%;t2RBfckQ>2YsRQID@Hgts>kuHm7a@?nS*f*phl5uod;b;C|Hmg9qRfjZX}}YfT;q9z=aG z*an|N@Hv#e zNz^BUr{L3-|Lz8Mr|v=a1bb1R3Z6!NI@p`~4Dd|qKHyo@XM^Y9(-)sues?Z-9zOl} z@BXBVJRiJ(+6@lC=R*GbB61)Z2VP8l2^dd(DL4q9%lPlh!32D+;J*ihL+}~Oe_sh+ zh0ieldpLPDcnv;@_*~2Ht^=>fX9PYs;BzBBqK@4Jj-(z%-b~&C-b#HNcsunS;ArYQ z!MmvM2FFk*f%j0~3y!6}54@lH0q{ZUWN;il58;!-@5X}<Nmhy)U&}isow%~sNV+Pp?(*fLp>LqNBtg{OZ`4LpZWuE z0rf&~5%prwPyHddgnB8MNBt4Fj5;4Ip#B*Ag!)r(IrV4Y=hR<-h16eyUr~PzuAu$~ zTuHqOETaAv{Eqs2a5eQ0;2P?+U@`TN;7`;)gX^e&0oPM+086Mhg1_Pu;J-J4zfo@n zw@{aYzf*4o|DxUoZl^8-|EB&2{FizM_#gF7a2IvdKB$M{gSxmU*o?Y4*n)a5aBu3C z;6Bu?zf^xUsXK!wP@FMDgU>x;2Q{XBfuM|Zv=0m9tn=3z8SoQ`d08Z z>f6CPs7Hf$Qr`vMO+5xoqP_>bmwGICANBp<1Jn_OFaqnQ9lMwrp_QA2cMvR5`2n!3ivejGhin5v*2^o&x2E`r-3g}zX)bg zzXZNa{R%jp`c-fS^-M6E`Ze%%>Nmhy)U&}isow%~sNW{v0pF#b1J0$M2fjz03%*Z1 zAN+uN0l1KQ5xAJz4}M6!1YAm;2Yy7o49ur406(Vw1pJhGIrtg%=inFAh2WReUx8m! zuK>THUJ0(EE&{)${to<}dNue1^%`(3busuO^-ti>)a$@ssMmuVs7t_&)W3oO>P_Hp z)SJOA)TQ9>)PInFf?KKoBDaCtsms8>ss920rQQMlN4=BWMMkwkJ0L!yEdZNQHwRl# z?*;Bn-ICmgY(?%%?g#EqeE=9u9Rs$eK9D>JJeax-cnCg+;?tJj9R{|eKAb!PJd(OS z*nzqucog-~;4#$4f}N<3Baa6=<8uN&UHILJ;7QacgQrk;1-nsq2YXQWBzu9UQlAE% zPTdbROQ_?) zOQ{Eemr-91CQx4i4yGOg4yC>lyo!1lIGp-w@EYnw@LKBY$m_uo)Hi@PQr`rQq#gy{ zOnnP@EA?&Q?bLUGqp9yC?;`I8$51DM_fX#pj-|ejydQjk`av+6dK~x=bqYA1`e8B^ zoIsrhK0-Z_Ob0#GkAhz6NuZDVF>o?<2KhMn1oe~PQ`A$yr>UO-GpU~ipQC;roJu_n ze1ZB!FpK&n@@4Q9>gnLC)HA@D)Y;%`)UShYP|qS~gKtv51?Et{4ZcJDE;xsJE;x_+ zJu(-3pL#y{0rdiKA@w3~F|{B3ka`KZ6wIUk2wX;;4;D~=41PlWDY%^aGw^fjFTg_T zFUhaKuc=pn-%zgvS5X&%-%@`Eeowuc`~h4;y%sE{{t^6%`e$+-_zU%Va07J-xRLr- zFhIQt{Ed1uxP`iu{2ly*`cH5x^g`||_21w>)c=AzsQ)8(g1e}r_C-4(KBBDv zn^89hTTt%>?oHhi+=sdqxG(j7;QrJHkkMoe*qZu4@F41g!8X)~fQM4I1rMWc2Ods+ z1b8HMd$0p_NAM`>qrqdSk0m>S$59^-cBVc7>_UAac@lUs^(kOi>TY0n>KR#lj z;AzySgT1NG0MDfE1D-{FHh2zoUoe*XT<|>VeqeuU7kNH-0ks<(Kz$*25%oYYj{0Ko z66$#HQtCnAWz?603Dj4RgUKP_Q0gnetEh*8!>O+Zuc1x^ucf{Yyqb36W5N5V?Ii=g8;5 zsnpZJ7pPwZv#4JJU#5NqoKF2JID>j7m`(i}_&W6);4JFd;G5KMfjQJ~gYQtk3(ldQ z3(li{kIV(%r=CxK04|_jNG<{wQ~Sve$tB=Y>OAlx>SbU)bpiM>^(Ww`)XTxos6Pk4 zpe_Wzr2Y#0ntBEJ4fRTJ6?GB#E%kTc_tdMwAE?)WYpILDAE|!=f2LkX{sOM2-T;Lrq|D@gu{zbiw+)kE}f0O@!|5EP&|D)as?xK#`Pqi0& zkb9EN$mU=R>b=0dsat~kP`4uYCHEuuCl4T_$r!RVcp&vb;K9^wz(c4H1=~^|2DYO< z96W;hNU}ZIf$Rt#MSV1Q4E3>KC+g$CQ{XBfuM|Zv=0m z9tn=Z=Vp9v;di%!w^82?-a$PYyp#Ga@NVicU=sB`ifX^sUH9zq)rCMQ9lHx zP>%;6rcNa%fN9i^kQ2dlY7h7*wU?Yk`oPDiCxaQ(kAqK8KM6iXJq3K4`WY~j`dRQf z>gU0!)YHHhs9z+rz?Z0B24A6`4!%k~1Dr{n4ZcSGI`{_lEOIvZCiPoj4)xpQJK($2 zbHKUO^T_weT=IQ#KKKFk0&pSqB5*OapZpM9LcJ8sqy7k7Mx759P=5@5Lj5VZ9Q=&> zbMgzako*$-iu!AC1@$-JO6pZ$5%ss=chuj5tEqn=*N|($V(K5kpQwKZ*HQlhuBYAr zmQZg5f29t9o2Y*yH-lTKOTpi%{{a7_-b(&OZUeVdmw|s%{{#L@y#xG@dMCJxI%A!IYMIoN`FFK}<_mf$|rt-yV$_XGE*J^+lSjsaU!A4nbq9!%W^JcRmCur2jr zU_0u=$s@=k!S>W0z>d^Mfk#sx10GA=2|SMac(60|31k=YMDQf)lfhG{yMo=QyMsNb zdxE{FPX$k-J{{~$eFk_Ybsz97>a)RfsQZGk)aR1tf&HlagD&dx$qPU?^#Jlh@FMDg zU>xdU~(sT05}s0Winz@gMvf>%)wBZq@mQ(r?Sg4a@C2VPG-g1iB| zk@_ZZB=sopX6jqOTd8j&ZwK$79u3|}eHVB)^%yXT`X2ILa4hwG=>KWin>TL2g@OA1pz**F@$v45bsB^%#sow$L zrJe)MrJe`AN1Y44Pd%Uf09-)55L`sPnDm1mQZE6QQs6++k%Ht zw*wESJ_0AL_Hfv#HM^`;xKbx#W3dKd?Wwi#(sa0CZCiATI=b zffrL>0>)Ec3J#*ajJzC7puPeeOg)4gN?r+GMLmoh4qi=t4VXxMEqNVzJvjorf%-=B zCUPV>3cQ*67V=i|Ht=@pJIK-Go#0*6cavklB~P_mTIL4}cF+Cxhdt9|BXT z$Ab@3r-Box)5u4_iPY(!hx$>_OFaqnQ9njb1~aH12cMvR5`2n!3ivejGh`U#-tEh{}Z^7@VzXw-S{{XI`UJDje{|Np>{WG|Z`WJ9L^#-tn zdL#HNb%5Li{zknS+(KOn{!aY|`6sy*{EK=Uxt%N{{|5h|{+HZA{zvWvcTq=0qb(92 zF}5L_k754OT8btKX?FjG#LZ7raq87h&&in9@&vLAcp~*l;K|gdfL*D(f!(QlfIX>u zfu~ZRMxIXgCeHxRr0xTrMSV7T4%wHCCC??#1N%|;2VKH*+|)E9vRspG(l zsV@QJsV@ZwQC|jLPMrW=K|L58LOm3`lKLue81-=SYVsN~5xkcAI`Dex5#$Zzjo?kx zBf(MBH-ooO-wNJFeLHvu^=R-;>bt7y4K0*B?`4l*X`f2bP>P+xi>gT}c zsi%_D$QQ^L!7S>Rz?Z3CA*YkCf-|URg4xusfv;1)LCzv)gKtv51?Et{O}+!ZOFf62 z3(li{kIW_CC+CA7P%i)%QZE7*Q~SXWsh5CDsq@H>z-83=U;*{V23Jsj1FocA1r||%3w}raJ-C|s2XYO#mb#ey5&VhzXK)?$FW`FW4PXiN zM(|ha0Jw?zH*hoc7O<51ckmDDKf$fke}UVmw}WNWe}n%}|4Z&5|08#TyQrgLIOYNO zq;3W_r*1*+1@2AV65NNn6}T_;e&GJp2Y}JkF<@)z1Hpr+4+h&%9|9gq-4;BIx*d2p z^%3Ba)a}U*U`Ohsz@w>;0gt8b1Rh6yJlL7~1h5PBiQq}pCxfR@cLlpqcPD$0J;`3= zso-hUr-Qwz&mhkv`+#RrpG}?v_N9&`&n3?z`;q-Y7xnqz1=MbG0C*wwMdUy*j{0Kq z5;7jVlzI?&8TI900`(Q-U~&jJl=@2WD(Ye2aO$hUYp4^+Yr*TNuLnm^-vHi7eG@qn z97TOIc?)>O0B1$h*NY)Jfz$;Jwsi!TYH1Cm#SGq)rCMQ9lHxP>&}c zCR4!))M?-&)DyvUY7h7*wHKU3?IRxpCsSvTkAqK8KS@3XPN9C9e1^;fpQU~de4ctL zIF0%R@I~q@@FnV($ydPX)USdwsAq!N)UScBQ@;VuqMl8@3BE<0L%t2ZL;Wr}2b@bi z4}6b07kr<3KKKFk0&pSqB5*OaAN-Jd3Aq%^qyC6o2If;2kROAeP=5+8r~VB5ocar} zkorsTE9$So71ZB=E2&q3MbzJt-;v*gtEqng*HEtoi>ZGEf1>`GTnGL_y&l{^T|#ao ze+2{7o50_wH-lTKOTpi%{{a7_-b(%jZlm4~mQnu={zLsQxP$sXa3}RHGO9J&81WHf z8L%03bFc;VUf|yNw8Up0e%A`zmwG>Nf9eCkXzCcSHT8kuLDUD6ZNNjQ4+Yy&9|pFg zJ{&xP`be-nbqBH|c@%jxcntNiU?=M1z~iYqlP7>(s80k>qCS~Ch3pD;qwWs&pzaCw zqCS;8jXWLfO??JEUoSA*A3CxX{fUq@aKj-b8)ypj4Q za3u98@Mh{;$XmhNsBb6l07p~b3EoA0H#r7OqP_>bmwGICANBp@1K@+y$>ccjA?g%z zJozx0N=^XNs2>3*Qm2C+>PJa0IEmT^K1My6%m5#!egb@w`YCV<_0!}tU?%mm;B(Z^ zlT*oQnw}7S8zmtD}e^PG+|DxVTZYRsYzp4KL|E1mm{zttN+(jLAAjdD@ zp4832=F}~~y{PvFTT<^swgUI1-VfZL`T#JRItFY_eIR)dcrbMv@DS=l!M4MIH?vLwzjRiTXJ3c`L7Y>`vW->-uWFPP>>a)RfsQZGk)aQcdQTGG;Q@g@G|Pl!363n$id(c>Y?D3)K`JSsE31BQ(prnQeO*RM}0jwg8ByVM(Ufu zk<_EWo2hRhZzXRdZzt~{M}v1#-v!=HJqApoz6ZRQdMtP!_5I)j)DM!$;5h1sz!d87 z9|gVClSm)=7&w_a1ALtN3Ghkkr^qSb)6~y^nbgmM&rv@Q zPNkj(zCisVnFYQ?{WACp^>p%8a0c~EFq`@{@OA1p$XVcQ>Nm-^z#Qtg!FQ;ge}Y@7|01`6+o{XIzp4Kr{{?qY{|D}*-UUV-#P$T- zle!t$oVo?M7q~ZdOK>0RR^YzW`+@sY9{@&E$B?bb1IdHHgQ?qqhfp61wxvD{Y)5@K zc?5YR*&ggb-4Q&B`e^VN>SMu9)W?y>lby*Ez%JA$f+ta*44y*W73@ac9qd8f6YNEO zDtQ`sI(2XI4Dd|qKHyo@XM^WZ_XT6A&jrt;?g#d#c9G|U7f`#w0n`_g7l8w*Td4BkS0D|j3A?cg2Mqrp3=?;`I8$51DM_fX#pj-|d2yr233@ImTia2)kRU<&nk z@?kKQdIFe6{RlXbIvw;-KMH!OCy_qzG3v=+2KD3M6Vy+FPf_C>X*S+sHcOkQqLe~g4xusfv;1)0nVbH4ZcbJ7MVl74ZcJDE;xsJ zE;x_+JusL0eQ-YY2jBwgh2SFU#h{=1LvRW8QZf(xhz3vw@TZ|audKGdzieW~{Y_oqGpjHZqOTT>rM9z-5YwgC^JJ``+AeHhq| z`f%_F>LbDS)E&r<;8D~^lgEI^Qg_b4xt_jUP*lwISd?5eKmLubs~5z^>yI&)FZ$fsBZ*s zq8Hr)RRCT^<(5@FoXJW@(J)s>Ziyl;M3I4fSJ_Kg3nPu zPfjJLfiFdwKhtx~JrPO)kN8mE*e6j%inEDg&Q|jg5XVjmA zUr-lgBz$z zz>U=0ziS2VOT8bsKRyTG6V2~pz}D0Uf(KC_47Q;@ z1U!_wEqEApJMeJoBful6+k+jbJAy}19}ONueJt3C`Z(}->dxc|U>E8W$&+{XOC3v|3!X>akL(Y+sLv-a0NvCB z$P2-Xs0Wg9;KkIJkn!N9)Pu;&z{{x<$Sc6X)I-Rj;FZ)@k;A~@)K`<&fQi)ClGlOP zQ;#5T0B@wei5v-zqQ05D1-zB|Hu84x4tz%Ab0@#M3%r|p446cH4|p&2SnxjT`@sjO zA0(5(anuiiDb(Z1hrv|p31k}h2=zqrQP4|03G`7v22RH3&*=95B)C1lxKlTEb9<6Y zJW1=^o`fQ|uLUY#l-uJf4YY8lx=Lf*URS9%>I~PqF|CwL^Czu`Dsg-AOXP3y1GhK6 zrTT8A@wLZQ=1xs6iyCvN+lv!>`$P8qN&K%DYb%dEOIDzfP z&EtFt;#i#C__5`OxOOfQn&LjgRd)AY;&*`-xx4V+a3dGbz5Fs1XGbIx+3hM4X;_FK zcwC!OlQ->3>LbYkcRzB{G<8%9w<;yvx=~87ow5<`6AzY0jcFk>(>!;GQaK(Mua8n;Qas74aifLS z8!hSXPfcDObzgOC#O-r!&;~Kkcf*FoZ7t^Jb*)By^(GV!^!(`d7t zIV5mtc$4E_7Kw|P7Ws2vZ}A7Wux~Rp;>@g&%F@G{tHVlqJFTQVqqcYpmC^Aqsa#Le z95~i&M`pvSa&?kCuH~u8bE3xH=5@{K<68dE4Q}u7ThH zw(#06hdpNFNPK1FGyI!NkDxo_^Da-;9q^N0_!*4;W;==Wu9@?NHWisamd~R zRSL#6Gt?DT>*vVW`vZ4ZGh>zM;*Qw5nxi=P_v{WED_s5h&WE&CEgCA1otD1Mx&R*T;_ zzr}M^T>J&d*4QvLFWZwe-II_NoTJ(LRy?jbsmarkqwmXHoZiQk6+L;j)LDI8bD}4| z1P#}e?R90T+GQMy+EpMbh21s5TO|mOWzY8M!N=y}N4fT6(cMeHN0_Twh+bJ1_^Khf zwT?}#sk1U0oj*rw`s+4FpDPCSy$tmo-QJ)sVpD6%u6k&fJ{nn1WuXLwzcRGl@>iu#_7%9(AivpJ}< z_=t{;c}CgKG3u+V)m|48ZvMjO!Ub#9n;Pej$eU)un~o0QO*`%;jcFp%2@jo=qbhgN@mb#p~-Q&K~NHMR{C`*_aUd5_$j} zV&cQh8Bc=95afZ%o#GG!X#CApj7*BMh+d-7|o zbVZH`H)38moXJz~p$J~f=C}-2fPBv{$ysY#Qs9^t z6SIVf(*%X+^IZk3Vch+i9KCx68|7H_At ztOgLjGe%nYU4h#J!yPW-`sVeVGqmRfPUoOZyz??D%si~^cwSv)x-(FK3{6Ca;@U}m zjQU{a-Zb&W~StMQp zEHd(s)w_0yl@(Ee)A46?I`Azz!q!uIl+*S05Whcn&8}VPuC>wgTx-)^Yk)Ns_OH6x zj3kVKr1{6}&s=0Q)b8GT>x{8lG3M=&2}L6LV6ouhZupG!<;jLSHYBHT+TAr zW>I)5bId|CGRE*GYB8I1A@Hhp7xGq-w#uVK?x@_9PIuFH!dYxVsc%VlZ3Z^m3cq%f z)i!LhQtC5V<5z{tt+wSPOZ2VW+68Lg;&6SY50QO9QI)rTD~5opvHS>YWxT_SJVk+9 zMa_4o{=ioSyV{n$!F-UZRce<+w&=XJEVWcQ z6{1}Va=UPA>c`r>h4uHsW0j%TgF<$dm<~#m;t*$*6WuYKxk#A4S>Mn-z}KSRWGvD! zI-P-$HB#X&{2IMyc|(CiD_hyRA@!)f7!r!X7<%XR)>ezW9EsHAA~j+KoapHzD>H*D zM}f@Qd{-eUa~dn!urLn!ouyjrLiCXeRUZkfXY8%fQD4zB1-jw@EZ0?@2rdoFFEJRv zzXRW3cpw)KiY|c28aO)i^_~6uyDM;(%FSAxC34zumbr$reC$h`vwS8@`6+X?c}$US zZl?`u^V6LhqmfqW!3`b*KUgbnKd;bsCzW>lqITLW5rvQSQgNb(=Inf+GDV?uL>QOe zmz|GxqJBDyy9ZJfILOiO7=Qw{SLCtU_)rzHh4uCKxTYcj@Z7E#TrEA=5^WZU#AMU< zFy)UmtM~%PiiEPmek9HmWQ{n7tF`tY!FyKVB`Rxa$KrYw zdI{@NShZZ+-h8Q%%xL5oaw;hcIhKhW%Rr6=t+mN_`K|R-78xrXbS5(hOK7mh0$*TR zBWokN)M8K)hq@=9H~0d1fL?Z?I)mXn<*#^*rB^Q3Hy2o27P*+BE$+jw&Y(N#V#bjpz<(BQil5QV9x)|ExUo!he@q6KfT}7Vn zl>7Mvy{l@uU~^>j(#JL6f<+eehHb+=GPt38vqqy>g5q}!N!sGRbe|cGlQrP4PYC<^ z{}__AD`*;$WUJOpPQSpC3_nwWrNgqsSg67nz74P%thZYr{W>W8r)#53`x4%@1y|?NnTtU zVo1^)_un9fBzqur6%I*KFpj9eOO)SDHV40tFR6r=sAx!XnS1=EY}vXk6kR&EXYOc; zDI+C(i9ml(+AtuvgOD!Tdki!)Bt;N`Jp#8cO&%{hb{SrIxW_dC-GmAHCkTOx9+npa zMb%RngPg%YMGP}=9>b-|U-7hyJK{pBYa<6L_?@-umae82)72Tw5rBQ5;>9^Oj>rG( z1C^_E!r&}2;ivJj_~}gim9bjc^)<#S`+aDu?h|ZdmA&~dXM%V;>P~`s6C>dRQ1_E^ zYI8gy?65A~;=0AQe2T~|j^9*(;&OWyDw~`uY|`zSGDN}`55PhP0s}q1Sn;KdJf!u8 z47S-6oJ!bidA2LhENwU4D^Ki6dr+L$m!?jSv>-;2nw$}pbhO*6Ox+PI+qy`%Ot;`L zd9>~=n}+XAg30EWO#NJ(yE>MiqAWkfX=pWU`6B-f%Rf-xp)}(_O<4XAXX{tHW0N7s z_iFiKb8ONA8zNLYJfw#bMNMN9QA5@6Gbk2Y-ZcKW51Pg%*>FziLe$pSJ}jE*rXT2T6Nh7U!#+xTy{i_aFxa;x8eqCWo$C#JzIC80gO$WAw@ycB~Ku> z*C56wH_WTV*yI4Dwp#6>IX3xgZY8`#MPrltm@a9HJlM^qOFVOIbs_Qqa)CMYLDxf# zo1}*bdQw^RQ0ioOvY#l1I-D+Xy=%+E2s~p$oG!Wd9o_U)FkKRdkUFe=cbYDF{%u=H zMQ-hWZQ_<^(P-`UKV5PV3Zz;t*c_7Fl~V&QxPFHu-7r*FMbr3J9Dn_$IaIOTXVq7B ziPPv=sw%DQvPMfHU*tO{U;6CoE%Hrth5)dhrB;{eUo=~nL*_Um7PZpoOBEk!)9R3xq$ZdX3riJn23 zcnlH$!xNlBm4tcbGv0X}aYU{)^Oc<|FB5cWdG1_sjL3RqyLgU6KAKd*{GN&#D9i}E z#L{(cg6G_*F=%qmTn>)Hj1o5^PJrh!!#}7IbdLI5bBM$wRMsCvHjAeEu z$Yh#&c~914zNV{ePe*CUs)O){#p-2kLC94sMikE(i2AepJ!cT>wBukCR(``YVOXe< zzXi(9jGDxJs)nns;$&qH%#qbfKw!d5Teq;%0f8U~f%c~69^lwKLtCnI+59D#ybHH% z9`$QYngdkL>quGc-lXl;~qN_x`J!x0N&h)6o zyJNrivX^x^RIcCqD5m=wO27Abq-8hk_txf6U?3(Scf%|}QzvR8`YPtawHkYZVf2e= z5u8sj3|n9g$p`hToBHNaYNTWI9oh6&vTwd)nszHqeRI(Zv3Ji(Iks<*ee<#J*HYiS z$XU&c68+Op}(=HxJvZ#bDRo|2CZo2Vj-#%D(p;99KWo!x$YO5HCED zefFSkuUGt5yb7fZYw5%Q54I(H=sPhXY0f>u(S=QSZS=;sK3nPDxR}c=e<-0l&t}9( z=d@*z5VUB&rh4NssI;nF5rwYK1HyHnX?f4Ik__ZYcpduoTbl1R3f2XLMcb zVZDJ5rMb#?{J>Z4;r3kG5^J7IWdkJln1cOd99Mq8#?gBac~yX#s9kLlLmwg|3&bDA zGmoWFWA?|X#V&9%h!~Y&dBseGkx86G?j#pJB56Cft*e9eZOf6?GByiLYnj)z+~eAc zbmA>X;_XOf-h{25_?GrW+D@eJH~3ug@Yt3(pVze&V|m=QB|XmP20|aNLX)B%=$Mja zw-D8OV(bR=v*=ST! zC$~3ECc+W9D0qtPaJgAw|M84QEK_^+qTwu?ZXGF(b5x7J@ylF2* z+uL=FJhi-X$DZ%b$K1x}i4qPfcr~;r5CIqcG(}L^+Mk9;RV-FTr~^*rEjDcZq;_gu z?fF>s89aNo6l?2J9yiS13^qRy@z@ET5F;cR;w!UEAzA8o4K)t3V}k355MQNzdrgcE zafj$0i7UsuLEI&5TfK#)cJ4CO@0LN+Nba<1JshjKWK<*G*c(P~^l&1KH|F>2CaX+! zI!3AqiPcR=t<=`*C!4j^cE44xt>QH0G)4AT=0sMFghLYpaa3+&AkHy_=;N1)uP4qD zZBaEh)k<_`Iy^|N&bNQ>)8$aPxMS%Xk;NTFgP$%7COI9hKLrnpj1}#a$2S@XZU96b z606NKC9O@mPd@3Rx{sMC3qSl;CVgZoQiX7vUp0T0Cfa;xyn=_7GStj_hB`x-7PC{J zeZ-Ft!O%o!%+@TF-#rw@^y}+l@Nf1J%O5$S-@3q>mE}*ON?mIq=N_Foq}{vVV=8ICeZt(H^d;_ z?1|b^ok6;{F;`tqkgl@rn$hLg5hd*^jXCFHIIe8f3Y0f@-V7-Xbi$K|C>SOb04kDKvIk;|WY;jF z*uY;8Yroai-Vcm$v=Js+8-aJTCthbDpxZ>y(9amf|PT}>96ayiz9M;U2XH_#rN@B-@)a1;l zq*ikG*^T1;w{pN^j~L3YY-i$hlQ@YtP27Uq=s|=M#aPG~8sW{|ep^-Wx+Zv*$TvOm zHSwO|Vlaebj1g}-u9l(pkW9DbfO9{|%K`&+WU-@2H+}y=k1eujoZ1puv}9{=SW%Q! zP*`#Nrm#gA>_Vzuc<+wWg*Q*!kuA$BEWA{C2u7ox+}FZ1sgptAyrh!FL%2t87kaSz1?_Y zZCwqum8$AhnyscY7Kg%u*Wp5b#N^O0S~ffml}3H8FtH3e!LT8jnonfi1kPkel^-}m zAlu>XEt64VZ&=w*WEt&*voWYj(Cq*E=3$;;N1QeC9)k_{>fW$(6fex7oKbx3CM&+G z$x3vN9YoOF+W4z@Xr;T}smaA*-b*t39-VW8(U#}f!Vn=l=nonP)JO-Nrct0LQ9W^U zg733fR_d@r3r0;sCik->eSclNt~nyGm9Sd)PP5<0F-0-Df*ex_S`4i zTf`pH2C+eJR&e=L+76w8u8>96Zj3In8nG}v%#tQ%O?#+UI&_1j83CRMCo1bc9wbt$ zhaw@yg6b){Y*ei*%y`-!>QVQeE9;eYNTlD{W&KVspArvnCKNf|UW9$WWyAr)uq8Sv zZjXH4GZ)nenI41oG}kuna<-?I$3Lxi6mD=8{8+u?mFVy(v9-~~s+E&=LrP0fM8zU= zu{fJe!3NY7I1^PmR_n-_ath{r)Ic=FlSm9(4?mY^=LoKet|UQIU|g?78CM0YdORb8j} z8mguCy$V!)F1MoMtqzuo>RDJ%mCAKQ4WQBFUAF}DjYs4=%mADb^uAoh-KT~J# z%hsofc-1H$M#1AO_Ghqn-h{bi=M#6L=G&GNiH=(BTz_1pt}h%MT5!Jq0RcWeyFV4D3Ut0L=Aiq>2$M6JU| zG!^F8@}Ii17^)}eS3N<$I#B=8v3A|ou$Z^toHMfZ1d(51OS4AeYLhYDCI^W@kFbfn zueZ2b+4T)FS=TnqWPNg7gUqd-b)GEaRoX%Bbmp}>iw2qgS3Jjsc1Xmif)2RHIH0Zq z&fydPE2iR9C9P!Q-!~43F!70S&TviU<1V!pmOjKtVkN`Uzg(j;p+7`?BEB=tWP(Uqelj(3c*5`-n z!u&%x4zGHU*T?HwoS;mp^0?ySII&EF^w^h_dIj({0}nxY~Sz$nehQ zTU5i(=-8jRb!LYn0zN)Zm`(`qz8hH7fWft7QKeVt6E|6ucwbiovnZQWvbn3El$t)O zQm$nC<+|XdkMdbuQKfv`d&cqaRN&)m$@YZwQNDx}tR9u=Zt_tfeUx8haswSl%o?Ok zscPehTlMjczVFhIOL2XC^-6JuKEBbH;%?AiIP4N#m^Iu3^ajFI}wj*^6~OY^`JlvTh#5wiJL5{rYx$qw-uUyp$?UHUECWz6Jx!jobECQh81n} zW_j*SoJOzy3-R1r&_*SRp#sTuv9@&40DbQ@5+;slZK*Ax0zfY&Fe>r*iBQ^3mtB-3r`_3HfY9$Z#%e#LGOj z9GfBlX8aY;gXY-$n{~C9XLy#J^)TaQux&h^C|4_IsO#v!oMWQi@+fFImSlwDtdD|P zQd^|+M0wxTFmDFSMF!(kO^aEj*_cnr7wYUoQ8lgFZCakJ`!JT}o!;7BhmF-Yqr>%M z#6GaL2QKW}bgSg*Cp3)}U&W?1m$wtl-?3st6|uE!g>O-j)h4pNud4S50$2aRy_u`u zugHB+GM(nCwGw=9dAzmW7luvjtJ|U7V_}$DzL14nMc7f!ynE&*$`Rz0 zArd|@o(yWSE3ryJ9xf--WD9OtIbgQD)mt(!S|(5|8IZ~{lO-Pf!JZ&^BhbN}I^*7~ z?~MyT&16|*5xitTWRY!B>Hqo>8dToIa30NSED=6^YBbU1J*au?Sv5K`3wJBkxD8|7 zXo0hvID; zFTTn?{%Q#uSyK`sY!tlJx+OFwdRV!^3A7oe=pw0?Yub~F$NTU)&)falX7IqOSRr1B z)&(7x7+9i^mWHPCX|{*D>Y_dcPSZA3Z}rJ=KKdC}-Lq{ldyjhD4U|R`7d@i-o%rj%}P@dN;FKkEm0t)1Qg- zXQ^i060OU^Bh6X(OOE_YzAKmXlLe&B599a6@_R8{Fhg$8#%zPW9TDR*ej{#3zMBT) zTnu*AZ)}d)_SB4VoO6c&nH@-YnVBVK{MHs?tIMa2dUV%=%HeE$@WfFZ{DXC&Ux=rT z3UwCR8#VbDl98V{BbqmiqK5k+(VB;eW?J@Mu(!sxjqPm5^He3WL{lAmFQ|NthoiIQ ztJT*=@YHr?pZ7$jsrz$g3G&LCCAbffCFsD{;oHb%mgJ=%OR~{H&k|Dw*qR^%rk0K= zFRYz%wZ)5E#Be$|mvr?CSDjGCdYPtvz)e_8x(cnc8-6q{fqG>Rt&S)PvzIwnOQ6S!I$l{XF+i!PH_#Cmi(u z%-4vztmt26&;?{lS~oMc&NXMshQ)l#iu!T6Z&^Wel#Zjaj0VoqV0mh3vqz-jUJlT6Qe*;n8*ZH)|7Itbgk4BH(&nA-=VQ)P5B5G;_sl$n(dKWd&5~d~>$!D3dIf|pJ z7C4H{-^Rz_&XF0F=-$1jj|nuQ?p?SkuWGKV3_tC4Cms%x1Jr<+_R3bh>hk9JVvPf8 zWcs541a-p@coYox;i^BXtmXng0j%yWjnb+BWDDA>?7x4M?~lp zPBadv5vQPPWW2K(s#QkkhE>$4lSEAgT_m}Q^3sPl2y#sed?^<3kC+OT!G_8tF=%kUJYyCwyj zx}Rokl!~0)7l#!Il_6AdO7bN2da1?H^Wqkx*bBwqG_w9yU1i)8(M=hr9KTVIP(c{x zu`Ck^ipUK;pef_3lyM#RZ9&G2vDFG9x313BRI`X-xg@y7HAbwrZ4? z8}GE-;Lc2Cg1Y5|kxt&HDdVc-E4S|5lyOzcxDWPf%D5_J+`}!JGOkJ)H=uc=%(%Mm z)T><2!gqsSg`R9L9lMB^axu6Gl7XPEm zWU2B_m3UCdYaCPg2ZaXfV;bFqLgP1ymF6hRbgaxqnX0#@c;s7C@bUt&*Gh1VKrc?u z#-U=@1U=W6splu~?f~)pmnt-|~%eG!M4ychSLELONRFV?0BZ=M=Al&2I##^>ZoQ5A`B&r>}WSK74aJ!e( z%tfF7OJ`jjUi7&7xaiwk>)}q%s*j82|5*=rI;cJ_`okafaHk{d*J#S&Gm4n7uCl_SN>KHcY1AoTy)c>dbrbj z>*Jz(*2hJCfqKZ^wvk=5uA<@Nf7Ro;MirZ^{YifJ#zvNL7-_{ihj&=iQ-Ei>{D^Oq z%D6<(=5KtVz35K_4fQ(V4QPSB7|9o?u_|A_9P+n+Z@_O4LO7ueXDYR1n6i+sdiLUKsv~r=Sb-|{6U2qp#chjF%XuGqH)n1| zJ{WFhq@xZyWRI=aH(!SrJ*+-1I{lY=xYMo?UsO~(n^o)W+DeRi=d|jOd&|vTw^Qvc zcdV*IDq^N~Si`Qd!qV}-)~*tvO62##*8R3BR#S=T+>jFU{Li(KGr>{5Vme6`Fw{=d zC_GEB4o_9s1HxrLX%5E2&XC%wOB!a;+DV)WCD?@in!VYc*QDB|q#Y z3GKVPB=qUkHIt)ahjKT%Ea-qI`Oy*2MMpfxc(PG%3#&I8F!qnPJY5nrQ}yrnI%z%8 z_!V0kzY;vdh2ev>K{TfeJ>nUC@d@4qR*V#ouxh_($(W7{dLrfmq*={`HjSKhXT?{U zbz}#8*T^!?I!9RpuWAtEN?Et8{#5NCrXC(<6|>Kz*YQ^Uy50w;v5U8kwxGrPoM^(V@-n*KGNJ zqw}EN%0DQmqX%(8kuSuH%;gIn*H*7KMxaGus(meNG>< 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