(4a -> 4) Add menu to assign an `Instance` to an `InstanceGroup`
Add menu to assign an Instance to an InstanceGroup
- [x] Create a
sessionsMenunamed "Sessions" (similar to thetracksMenu) - [x] Add a
self.inst_groups_menuattribute to theMainWindowthat adds a menu to thesessionsMenucalled "Set Instance Group" (similar toself.track_menu) - [x] Enable/disable the
self.inst_groups_menuwhenhas_selected_instance == True(similar toself.track_menu) - [x] Create a
MainWindow._update_sessions_menumethod that takes inselfandframe_idx, then retrieves thesession: Optional[RecordingSession] = self.state["session"]and theframe_group: FrameGroup = session.frame_groups[frame_idx]. First clear theself.inst_groups_menu. Then, enumerate through allinstance_groupsinframe_group.instance_groups: List[InstanceGroup]. For the first 9InstanceGroups use thekey_command = Qt.SHIFT + Qt.Key_0 + inst_group_ind + 1(otherwise use a defaultkey_command = ""). For allinstance_groups, add aself.inst_groups_menuaction with nameinstance_group.name, callbacklambda x=instance_group: self.commands.setInstanceGroup(x), and shortcut ofkey_command. Outside the enumeration, add a"New Instance Group"action to theself.inst_groups_menuwith name"New Instance Group", callbackself.commands.addInstanceGroup, and hotkeyQt.SHIFT + Qt.Key_0. Very similar toMainWindow._update_track_menu. - [x] Add a
CommandContext.setInstanceGroup(self, instance_group: Optional[InstanceGroup])method that executes theSetSelectedInstanceGroupclass with inputinstance_group=instance_group(seeCommandContext.setInstanceTrack). - [x] Add a
CommandContext.addInstanceGroup(self)method that executes theAddInstanceGroupclass (seeCommandContext.addTrack). - [x] In
sleap/gui/commands.pyadd aSetSelectedInstanceGroupclass that subclassesEditCommand. Add aSetSelectedInstanceGroup.do_action(context, params)staticmethod that first retrieves theselected_instance = context.state[selected_instance],frame_idx: int = context.state["frame_idx"],video: Video = context.state["video"],session: RecordingSession = context.state["session"],frame_group: FrameGroup = session.frame_groups.get(frame_idx, None), andcamera = session.get_camera(video=video). You will need to useframe_group = session.new_frame_group(frame_idx=frame_idx)ifframe_group is None. Then, useframe_group.add_instance(instance=selected_instance, camera=camera, instance_group=instance_group)to add theselected_instanceto theinstance_group(andframe_group). Similar to theSetSelectedInstanceTrackclass. - [x] In
sleap/gui/commands.pyadd aAddInstanceGroupclass that subclassesEditCommand. Add aAddInstanceGroup.do_action(context, params)staticmethod that first retrieves theframe_idx: int = context.state["frame_idx"],session: RecordingSession = context.state["session"], andframe_group: FrameGroup = session.frame_groups[frame_idx]. Then, useframe_group.add_instance_group(instance_group=None)to create and add a new emptyInstanceGroupto theframe_group. Similar to theAddTrackclass.
Using the workflow above (but with less detailed write-up), please also:
- [x] Add a "Delete Instance Group" menu that populates and functions similarly to the "Set Instance Group" menu.
Figure 2: GUI elements for assigning Instances to InstanceGroups will be similar to how we assign Instances to Tracks.
Summary by CodeRabbit
-
New Features
- Added a workaround to manage OpenCV package versions across different platforms.
- Introduced new keyboard shortcuts for easier navigation within the application.
- Enhanced functionalities for managing recording sessions and instance groups in the GUI.
-
Bug Fixes
- Fixed typo and improved error handling in various modules.
-
Documentation
- Updated installation instructions to include steps for handling specific OpenCV versions.
- Added comments to clarify the use of certain testing tools.
-
Refactor
- Reorganized code and updated method signatures in several modules to improve performance and maintainability.
-
Tests
- Added new tests for camera and dataset functionalities to ensure reliability.
[!IMPORTANT]
Auto Review Skipped
Auto reviews are disabled on base/target branches other than the default branch. Please add the base/target branch pattern to the list of additional branches to be reviewed in the settings.
Please check the settings in the CodeRabbit UI or the
.coderabbit.yamlfile in this repository. To trigger a single review, invoke the@coderabbitai reviewcommand.You can disable this status message by setting the
reviews.review_statustofalsein the CodeRabbit configuration file.
Walkthrough
This update involves a significant overhaul focused on managing OpenCV versions and enhancing the functionality of the SLEAP application. It includes a hack to ensure compatibility with a specific OpenCV version across different platforms and scripts. Additionally, new features and improvements in the GUI, error handling, and data processing for camera and dataset management have been added, alongside updated testing frameworks to support these changes.
Changes
| Files | Change Summary |
|---|---|
.conda/bld.bat, .conda/build.sh, .conda_mac/build.sh |
Added hack to manage OpenCV versions. |
.github/workflows/ci.yml |
Updated CI workflow to handle OpenCV version. |
dev_requirements.txt |
Added comment on pytest-xvfb. |
docs/installation.md |
Included instructions for OpenCV version management hack. |
environment.yml, environment_no_cuda.yml, requirements.txt |
Updated OpenCV dependencies. |
sleap/config/shortcuts.yaml |
Added new keyboard shortcuts. |
sleap/gui/..., sleap/io/..., sleap/instance.py |
Enhanced GUI and backend functionalities for better management. |
tests/... |
Expanded tests to cover new functionalities. |
🐰✨ In the code's garden, changes bloom, A rabbit hops through, room by room. With a hack here and a tweak there, New paths unfold with utmost care. Cheers to the craft, so deftly spun, Under the code moon, or the script sun. 🌙🌞 🐰✨
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
I pushed a fix in commit <commit_id>.Generate unit testing code for this file.Open a follow-up GitHub issue for this discussion.
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:@coderabbitai generate unit testing code for this file.@coderabbitai modularize this function.
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:@coderabbitai generate interesting stats about this repository and render them as a table.@coderabbitai show all the console.log statements in this repository.@coderabbitai read src/utils.ts and generate unit testing code.@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (invoked as PR comments)
@coderabbitai pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger a review. This is useful when automatic reviews are disabled for the repository.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai helpto get help.
Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
CodeRabbit Configration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.
Codecov Report
Attention: Patch coverage is 79.06977% with 18 lines in your changes are missing coverage. Please review.
Project coverage is 74.12%. Comparing base (
3cb6fc7) to head (d39b9f2).
:exclamation: Current head d39b9f2 differs from pull request most recent head 22e3bdb. Consider uploading reports for the commit 22e3bdb to get more accurate results
| Files | Patch % | Lines |
|---|---|---|
| sleap/gui/commands.py | 77.08% | 11 Missing :warning: |
| sleap/gui/app.py | 73.91% | 6 Missing :warning: |
| sleap/io/cameras.py | 93.33% | 1 Missing :warning: |
Additional details and impacted files
@@ Coverage Diff @@
## liezl/add-gui-elements-for-sessions #1747 +/- ##
=======================================================================
+ Coverage 74.11% 74.12% +0.01%
=======================================================================
Files 135 135
Lines 25103 25182 +79
=======================================================================
+ Hits 18605 18667 +62
- Misses 6498 6515 +17
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.