Conversation
|
Benchmarks that have improved:
Benchmarks that have stayed the same: |
Transurgeon
left a comment
There was a problem hiding this comment.
Looks good, really nice fixes!
PTNobel
left a comment
There was a problem hiding this comment.
Looks awesome. Thanks Daniel! A couple quick comments.
| def div_canon(expr, args): | ||
|
|
||
| # raise an error if the denominator is not nonnegative | ||
| if not args[1].is_nonneg(): |
There was a problem hiding this comment.
| if not args[1].is_nonneg(): | |
| if not (args[1].get_bounds()[0] >= 0).all(): |
This will allow more code than your version; which is something we need to fix at some point 😅
| def entr_canon(expr, args): | ||
| t = Variable(args[0].shape, bounds=[0, None]) | ||
| t = Variable(args[0].shape, nonneg=True) | ||
| if args[0].value is not None: |
There was a problem hiding this comment.
I thought the value had to be non-None at this point in the DNLP canon process
There was a problem hiding this comment.
I had missed your reply on the other thread! Thanks for clarifying. Discregard the resolved ones.
|
|
||
| return expr.copy([t]), [t == args[0]] | ||
|
|
||
| sinh_canon = smooth_full_domain_canon |
There was a problem hiding this comment.
My preference is to just have these mappings in the dictionary rather than here; but I trust your judgement on this.
|
@PTNobel I'll merge this based on your comment on the cvxpy-merge PR. |
|
Please address my two comments here too! |
No description provided.