Skip to content
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

mosek_direct.py : Fixed iparam parsing and added support for Task.putparam #3488

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

Utkarsh-Detha
Copy link
Contributor

Fixes:

In _apply_solver

  • Call to putintparam was missing in the isinstance(option, str) conditional when parsing iparam. Fixed.
  • Was calling option.pop('mosek') instead of option.pop(0) within the same conditional. Fixed.

Summary/Motivation:

A user wanted to be able to pass the value of ALL parameters as strings. MOSEK's optimizer API supports this through the Task.putparam function, which accepts a parameter name (string) and a value (also string).

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:

  1. I agree my contributions are submitted under the BSD license.
  2. I represent I am authorized to make the contributions and grant the license. If my employer has rights to intellectual property that includes these contributions, I represent that I have received permission to make contributions and grant the required license on behalf of that employer.

Utkarsh-Detha and others added 2 commits February 24, 2025 14:52
…ameter and the parameter value as strings, as long as the "generic" parameter names are used.

Fixed: call to putintparam was missing in the isinstance(option, str) conditional when parsing 'iparam'.
@mrmundt
Copy link
Contributor

mrmundt commented Mar 3, 2025

@Utkarsh-Detha - please run black -S -C on your branch (with the newest version of black)

@Utkarsh-Detha
Copy link
Contributor Author

Thank you for the review, @mrmundt . I ran the formatter as you recommended, with the newest version thereof.

@blnicho
Copy link
Member

blnicho commented Mar 5, 2025

@Utkarsh-Detha could you add a couple tests for these changes?

@mrmundt
Copy link
Contributor

mrmundt commented Apr 8, 2025

@Utkarsh-Detha - Pinging again about this! Could you please add in some tests?

Copy link
Member

@jsiirola jsiirola left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall this looks reasonable, but could be improved by some defensive checks. In addition, it would be good to test this functionality thought the unit tests.

self._solver_model.putstrparam(param, option)
elif 'dparam' in key.split('.'):
self._solver_model.putdouparam(param, option)
elif 'iparam' in key.split('.'):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I worry that there is no else: clause: users who forget to explicitly include .sparam, .dparam, or .iparam will have those options silently ignored.

elif 'iparam' in key.split('.'):
if isinstance(option, int):
self._solver_model.putintparam(param, option)
elif isinstance(option, str):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here - without an else, option values that aren't int / str will be silently skipped (this would include, e.g., numpy ints)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants