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

Fix numpy 1.25 deprecation warnings #372

Merged
merged 4 commits into from
Dec 18, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/test_real.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ cd tests
# we have to copy over the coveragerc file to make sure it's in the
# same directory where codecov is run
cp ../.coveragerc .
testflo --pre_announce -v --coverage --coverpkg pyoptsparse $EXTRA_FLAGS
testflo --pre_announce --disallow_deprecations -v --coverage --coverpkg pyoptsparse $EXTRA_FLAGS
4 changes: 2 additions & 2 deletions pyoptsparse/pyOpt_solution.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ def __init__(self, optProb, xStar, fStar, lambdaStar, optInform, info):

# Now set the f-values
if isinstance(fStar, float) or len(fStar) == 1:
self.objectives[list(self.objectives.keys())[0]].value = float(fStar)
fStar = float(fStar)
self.objectives[list(self.objectives.keys())[0]].value = float(fStar.item())
Copy link
Collaborator

Choose a reason for hiding this comment

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

The .item() only works when fStar is a numpy array right? But based on the check above, it may be a float? I'm not entirely sure what the type is (since we don't really have good type coverage)

Copy link
Collaborator

Choose a reason for hiding this comment

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

So I guess

  • if float, don't do any casting
  • if singleton array, use fStar.item() without float() which is unnecessary

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ahh right, I dont think we need the float check. It should be a numpy array coming into this function (_mapObjtoUser in _createSolution will cast it to a numpy array before creating the solution object). I can push some updates.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Pushed some changes. Thinking about this a second time though, for multiobjective problems this will be a dict, so it would make sense to just always use a dict instead of an array. That way we dont need any of this logic and there is no difference in the way you access your fStar. Maybe not convenient, and strictly is a breaking change. Let me know what you think. This would be a separate PR.

Copy link
Collaborator

Choose a reason for hiding this comment

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

I have thought about it too, and I think @marcomangano suggested the same before. But given that almost all of our users do single-objective optimization, I hesitate to unify the variable type for consistency. Happy to discuss further (maybe in an issue?) and yes I would vote for separate PR + probably a minor version bump if we do go for it.

fStar = float(fStar.item())
else:
for f_name, f in self.objectives.items():
f.value = fStar[f_name]
Expand Down
Loading