-
Notifications
You must be signed in to change notification settings - Fork 541
CSpline - Fix segment function and add utils to constrain parameter calculations #3593
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #3593 +/- ##
==========================================
+ Coverage 88.75% 88.77% +0.01%
==========================================
Files 890 890
Lines 102259 102398 +139
==========================================
+ Hits 90762 90904 +142
+ Misses 11497 11494 -3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
def yx_ineq(blk, k): | ||
if k >= len(m.knt_idx): | ||
s = k - 1 | ||
else: | ||
s = k | ||
return _fx_cubic(m.x[k], m.alpha, s) <= -tol |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good for these functions to be declared at the module scope so that they would be picklable. Given the use of the tol
argument, maybe they should be functors:
class _yx_ineq(object):
def __init__(self, tol):
self.tol = tol
def __call__(self, m, k):
if k >= len(m.knt_idx):
s = k - 1
else:
s = k
return _fx_cubic(m.x[k], m.alpha, s) <= -self.tol
def add_decreasing_constraints(m, tol=0):
m.yx_ineq = Constraint(m.knt_idx, rule=_yx_ineq(tol))
@@ -313,3 +359,71 @@ def yxx_endpoint_eqn(blk, s): | |||
else: | |||
j = s | |||
return _fxx_cubic(m.x[j], m.alpha, s) == 0 | |||
|
|||
|
|||
def add_decreasing_constraints(m, tol=0): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These functions assume that m
has a set knt_idx
, and that they can create components with specific hardcoded names. This feels like these should be methods on a custom Block class that disallows users to create components so you don't have to worry about conflicts and know that the required attributes are present.
Fixes
There was a bug in the segment function in the parameter class. The function is just used for testing and plotting cubic splines, so it is not likely to have affected anything. It's fixed and tests are added that would catch similar future issues.
Summary/Motivation:
This fixes a bug and adds parameter calculation options that allow you to impose certain properties on the cubic spline.
Changes proposed in this PR:
Legal Acknowledgement
By contributing to this software project, I have read the contribution guide and agree to the following terms and conditions for my contribution: