voxel51 / fiftyone

The open-source tool for building high-quality datasets and computer vision models
https://fiftyone.ai
Apache License 2.0
7.93k stars 521 forks source link

3D replace pydantic use #4358

Closed swheaton closed 2 months ago

swheaton commented 2 months ago

What changes are proposed in this pull request?

Remove pydantic requirement previously introduced but not yet included in a release.

Rationale: we were not using pydantic pervasively. And while it is a solid library, we should be frugal in adding new dependencies, else we run the risk of breaking some users' environments.

To do this while maintaining functionality (actually improving on it as it was previously implemented because validation setting didn't seem to be turned on):

If we use pydantic for something more pervasive such as replacing mongoengine in the future, we should come back and replace this.

Alternatives

  1. Nothing, require pydantic>=2
    • too restrictive, will break some user envs
  2. Relax pydantic to either 1 or 2
    • Better but still adds a new dep for somewhat minimal usage (deemed not worth it)
  3. Use builtin dataclasses without type validation
    • Less boilerplate code but introduces footguns in a place where it would be hard to debug why a certain setting wasn't being respected.
  4. Use builtin dataclasses with validation
    • Hard to add validation on both init and set.

Downsides

How is this patch tested? If it is not, please explain why.

added a bajillion unit tests like for real

Release Notes

Is this a user-facing change that should be mentioned in the release notes?

What areas of FiftyOne does this PR affect?

Summary by CodeRabbit

coderabbitai[bot] commented 2 months ago

Walkthrough

The updates primarily enhance the FiftyOne library's 3D module, focusing on robust unit testing and refined data validation. Changes include new utility functions for property assertions, improved validation logic in transformation classes, and expanded unit tests for camera, material, and scene functionalities to ensure reliability and correctness in handling 3D data.

Changes

Files Summary of Changes
.../threed/camera_tests.py Unit tests for PerspectiveCamera covering initialization, property settings, and dictionary conversions.
.../threed/dataclass_test_utils.py New utility functions for asserting various property types in tests.
.../threed/material_3d_tests.py Unit tests for multiple Material3D classes, verifying properties and methods.
.../threed/object_3d_tests.py Updated tests for 3D object initialization, position, scale settings, and traversal.
.../threed/scene_3d_tests.py, .../threed/transformation_tests.py Enhanced tests for scene backgrounds and 3D transformations.
.../threed/transformation.py, .../threed/validators.py Major updates to validation logic in transformation classes and new validator utilities.

🐰✨ In the code's warren, under the moon's light bright, Changes hop forth, bringing bugs to flight. Vectors align, cameras capture with might, In FiftyOne's fields, where 3D dances right. Cheers to the devs, whose work shines so bright!


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?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `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 `@coderabbitai` in 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 `@coderabbitai` in 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 pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger a review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai help` to 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.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
sashankaryal commented 2 months ago

⭐ 🚀 ⭐ for adding tests

(failing on CI, though, might want to take a look 🤔)

swheaton commented 2 months ago

Ok! I meant to check with you but forgot. Which of these do we support: https://threejs.org/docs/#api/en/math/Color

swheaton commented 2 months ago

Alternatively I can just relax it to a string

kaixi-wang commented 2 months ago

Ok! I meant to check with you but forgot. Which of these do we support: https://threejs.org/docs/#api/en/math/Color

I thought we supported string/name, hex (eg #ffffff), and rgb via colors from matplotlib or something like that