157 T min_value, T max_value, T min_first_derivative_neg, T max_first_derivative_pos,
158 T min_first_derivative_pos, T max_first_derivative_neg, T min_second_derivative,
159 T max_second_derivative)
162 min_value, max_value, min_first_derivative_neg, max_first_derivative_pos,
163 min_first_derivative_pos, max_first_derivative_neg, min_second_derivative,
164 max_second_derivative);
170 T min_value, T max_value, T min_first_derivative_neg, T max_first_derivative_pos,
171 T min_first_derivative_pos, T max_first_derivative_neg, T min_second_derivative,
172 T max_second_derivative)
174 auto tmp_has_value_limits = has_value_limits_;
175 auto tmp_has_first_derivative_limits = has_first_derivative_limits_;
176 auto tmp_has_second_derivative_limits = has_second_derivative_limits_;
178 if (std::isnan(max_value))
180 tmp_has_value_limits =
false;
182 if (std::isnan(min_value))
184 min_value = -max_value;
186 if (tmp_has_value_limits && min_value > max_value)
188 throw std::invalid_argument(
"Invalid value limits");
191 if (std::isnan(max_first_derivative_pos))
193 tmp_has_first_derivative_limits =
false;
195 if (std::isnan(min_first_derivative_neg))
197 min_first_derivative_neg = -max_first_derivative_pos;
199 if (tmp_has_first_derivative_limits && min_first_derivative_neg > max_first_derivative_pos)
201 throw std::invalid_argument(
"Invalid first derivative limits");
203 if (tmp_has_first_derivative_limits)
205 if (std::isnan(max_first_derivative_neg))
207 max_first_derivative_neg = max_first_derivative_pos;
209 if (std::isnan(min_first_derivative_pos))
211 min_first_derivative_pos = min_first_derivative_neg;
213 if (tmp_has_first_derivative_limits && min_first_derivative_pos > max_first_derivative_neg)
215 throw std::invalid_argument(
"Invalid first derivative limits");
219 if (std::isnan(max_second_derivative))
221 tmp_has_second_derivative_limits =
false;
223 if (std::isnan(min_second_derivative))
225 min_second_derivative = -max_second_derivative;
227 if (tmp_has_second_derivative_limits && min_second_derivative > max_second_derivative)
229 throw std::invalid_argument(
"Invalid second derivative limits");
232 min_value_ = min_value;
233 max_value_ = max_value;
234 min_first_derivative_neg_ = min_first_derivative_neg;
235 max_first_derivative_pos_ = max_first_derivative_pos;
236 min_first_derivative_pos_ = min_first_derivative_pos;
237 max_first_derivative_neg_ = max_first_derivative_neg;
238 min_second_derivative_ = min_second_derivative;
239 max_second_derivative_ = max_second_derivative;
240 has_value_limits_ = tmp_has_value_limits;
241 has_first_derivative_limits_ = tmp_has_first_derivative_limits;
242 has_second_derivative_limits_ = tmp_has_second_derivative_limits;