Repository navigation
Conversation
Contributor
Author
|
bump |
There was a problem hiding this comment.
🟡 Changes recommended
The bug fix and new boolean contract behavior are not covered by tests, making the change prone to regression.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR updates the Feature Set Selector search-space individual so its genetic operators (mutation/crossover) correctly return a boolean “changed” flag and avoids an exception when only a single feature subset is available (issue #1366 scenario).
Changes:
- Guard
mutate()to avoidrng.choice([])when only one subset exists, returningFalsewhen no mutation is possible. - Make
mutate()andcrossover()explicitly returnTrue/Falseto match the boolean contract used by pipeline operators.
File summaries
| File | Description |
|---|---|
tpot/search_spaces/nodes/fss_node.py |
Adds boolean return semantics to mutation/crossover and handles single-subset mutation safely. |
Review details
- Files reviewed: 1/1 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
109
to
+126
| def mutate(self, rng=None): | ||
| rng = np.random.default_rng(rng) | ||
| #get list of names not including the current one | ||
| names = [name for name in self.names_list if name != self.selected_subset_name] | ||
| self.selected_subset_name = rng.choice(names) | ||
| self.sel_subset = self.subset_dict[self.selected_subset_name] | ||
| if len(self.names_list)>1: | ||
| names = [name for name in self.names_list if name != self.selected_subset_name] | ||
| self.selected_subset_name = rng.choice(names) | ||
| self.sel_subset = self.subset_dict[self.selected_subset_name] | ||
| return True | ||
| else: | ||
| return False | ||
|
|
||
|
|
||
| def crossover(self, other, rng=None): | ||
| if self.selected_subset_name == other.selected_subset_name: | ||
| return False | ||
| self.selected_subset_name = other.selected_subset_name | ||
| self.sel_subset = other.sel_subset | ||
| return True |
| names = [name for name in self.names_list if name != self.selected_subset_name] | ||
| self.selected_subset_name = rng.choice(names) | ||
| self.sel_subset = self.subset_dict[self.selected_subset_name] | ||
| if len(self.names_list)>1: |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
FSSNode was not returning True or False for the mutation/crossover operations as required.
Additionally, when only a single feature set was passed in, there would be an error thrown. This was found in issue #1366
Where should the reviewer start?
How should this PR be tested?
Before this would throw an error like :
File "/scratch2/users/mpb703/conda_environments/tpot_v1/lib/python3.10/site-packages/tpot/search_spaces/nodes/fss_node.py", line 113, in mutate self.selected_subset_name = rng.choice(names) File "numpy/random/_generator.pyx", line 803, in numpy.random._generator.Generator.choice ValueError: a cannot be empty unless no samples are take