message(WARNING"There are some known issues compiling CUDD on some setups. We implemented a workaround that mostly works, but if you still have problems compiling CUDD, especially if you do not use the default compiler of your system, please contact the Storm developers.")
message(WARNING"There are some known issues compiling CUDD on some setups. We implemented a workaround that mostly works, but if you still have problems compiling CUDD, especially if you do not use the default compiler of your system, please contact the Storm developers.")
STORM_LOG_THROW(storm::settings::getModule<storm::settings::modules::FaultTreeSettings>().isAddLabelsClaiming(),storm::exceptions::InvalidArgumentException,"Claiming labels will not be exported but are required for label '"<<label<<"'. Try setting --labels-claiming.");
STORM_LOG_THROW(storm::settings::getModule<storm::settings::modules::FaultTreeSettings>().isAddLabelsClaiming(),storm::exceptions::InvalidArgumentException,"Claiming labels will not be exported but are required for label '"<<label<<"'. Try setting --labels-claiming.");
STORM_LOG_THROW(false,storm::exceptions::InvalidArgumentException,"Program still contains these undefined constants: "+stream.str());
STORM_LOG_THROW(false,storm::exceptions::InvalidArgumentException,"Program still contains these undefined constants: "+stream.str());
}
}
STORM_LOG_THROW(!program.hasUnboundedVariables(),storm::exceptions::InvalidArgumentException,"Program contains unbounded variables which is not supported by the DD engine.");
STORM_LOG_TRACE("Building representation of program:"<<std::endl<<program<<std::endl);
STORM_LOG_TRACE("Building representation of program:"<<std::endl<<program<<std::endl);
STORM_LOG_THROW(this->model.getGlobalVariables().hasVariable(expressionOrLabelAndBool.first.getLabel()),storm::exceptions::InvalidSettingsException,"Terminal states refer to illegal label '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(this->model.getGlobalVariables().hasVariable(expressionOrLabelAndBool.first.getLabel()),storm::exceptions::InvalidSettingsException,"Terminal states refer to illegal label '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
@ -109,7 +108,7 @@ namespace storm {
STORM_LOG_THROW(variable.isBooleanVariable(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-boolean variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(variable.isBooleanVariable(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-boolean variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(variable.isTransient(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-transient variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(variable.isTransient(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-transient variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
// If we reach this point, it means that the variable is unbounded.
// Lets check for potential overflows.
STORM_LOG_THROW(lowerBound<=upperBound,storm::exceptions::WrongFormatException,"Lower bound must not be above upper bound. Has there been an integer over-/underflow?");
// By choice of the lower/upper bound, the number of reserved bits must coincide with the bitwidth
STORM_LOG_ASSERT(reservedBitsForUnboundedVariables==static_cast<uint64_t>(std::ceil(std::log2(upperBound-lowerBound+1))),"Unexpected bitwidth for unbounded variable.");
STORM_LOG_THROW(!automaton.getVariables().containsNonTransientRealVariables(),storm::exceptions::InvalidArgumentException,"Cannot build model from JANI model that contains non-transient real variables in automaton '"<<automaton.getName()<<"'.");
STORM_LOG_THROW(!automaton.getVariables().containsNonTransientRealVariables(),storm::exceptions::InvalidArgumentException,"Cannot build model from JANI model that contains non-transient real variables in automaton '"<<automaton.getName()<<"'.");
}
}
//
// for (auto const& variable : model.getGlobalVariables().getBooleanVariables()) {
STORM_LOG_ASSERT(dimensionCount>0,"Invoked MemoryStateManager with zero dimension count.");
STORM_LOG_ASSERT(dimensionCount>0,"Invoked MemoryStateManager with zero dimension count.");
STORM_LOG_ASSERT(dimensions.size()==dimensionCount,"Invalid size of given bitset.");
STORM_LOG_ASSERT(dimensions.size()==dimensionCount,"Invalid size of given bitset.");
if(value){
if(value){
for(autoconst&d:dimensions){
for(autod:dimensions){
STORM_LOG_ASSERT(((dimensionBitMask<<d)&dimensionsWithoutMemoryMask)==0,"Tried to set a dimension to 'relevant'-memory state but the dimension is assumed to have no memory.");
STORM_LOG_ASSERT(((dimensionBitMask<<d)&dimensionsWithoutMemoryMask)==0,"Tried to set a dimension to 'relevant'-memory state but the dimension is assumed to have no memory.");
state|=(dimensionBitMask<<d);
state|=(dimensionBitMask<<d);
}
}
}else{
}else{
for(autoconst&d:dimensions){
for(autod:dimensions){
STORM_LOG_ASSERT(((dimensionBitMask<<d)&dimensionsWithoutMemoryMask)==0,"Tried to set a dimension to 'unrelevant'-memory state but the dimension is assumed to have no memory.");
STORM_LOG_ASSERT(((dimensionBitMask<<d)&dimensionsWithoutMemoryMask)==0,"Tried to set a dimension to 'unrelevant'-memory state but the dimension is assumed to have no memory.");
// Some solvers (like glpk) don't support variables with bounds [x,x]. We therefore just use a constant instead. This should be more efficient anyways.
STORM_LOG_ASSERT(lowerBound<=upperBound,"Lower Bound at row group "<<rowGroup<<" is "<<lowerBound<<" which exceeds the upper bound "<<upperBound<<".");
STORM_LOG_ASSERT(hasLowerBoundExpression(),"Tried to get the lower bound expression of variable '"<<this->getExpressionVariable().getName()<<"' which is not bounded from below.");
STORM_LOG_ASSERT(hasUpperBoundExpression(),"Tried to get the lower bound expression of variable '"<<this->getExpressionVariable().getName()<<"' which is not bounded from above.");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": lower bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": lower bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": upper bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": upper bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
}
}
}
if(variable.hasInitialValue()){
if(variable.hasInitialValue()){
STORM_LOG_THROW(!this->hasInitialConstruct(),storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": illegal to specify initial value if an initial construct is present.");
STORM_LOG_THROW(!this->hasInitialConstruct(),storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": illegal to specify initial value if an initial construct is present.");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": lower bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": lower bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": upper bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
STORM_LOG_THROW(isValid,storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": upper bound expression refers to unknown constants: "<<boost::algorithm::join(illegalVariableNames,",")<<".");
}
}
}
if(variable.hasInitialValue()){
if(variable.hasInitialValue()){
STORM_LOG_THROW(!this->hasInitialConstruct(),storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": illegal to specify initial value if an initial construct is present.");
STORM_LOG_THROW(!this->hasInitialConstruct(),storm::exceptions::WrongFormatException,"Error in "<<variable.getFilename()<<", line "<<variable.getLineNumber()<<": illegal to specify initial value if an initial construct is present.");