Writes Python code following FiftyOne's official conventions. Use when contributing to FiftyOne, developing plugins, or writing code that integrates with FiftyOne's codebase.
FiftyOne Code Style
Module Template
"""
Module description.
| Copyright 2017-2026, Voxel51, Inc.
| `voxel51.com <https://voxel51.com/>`_
|
"""
import logging
import os
import numpy as np
import eta.core.utils as etau
import fiftyone as fo
import fiftyone.core.fields as fof
import fiftyone.core.labels as fol
import fiftyone.core.utils as fou
logger = logging.getLogger(__name__)
def public_function(arg):
"""Public API function."""
return _helper(arg)
def _helper(arg):
"""Private helper."""
return arg
Import Organization
Four groups, alphabetized within each, separated by blank lines:
| Group | Example |
|---|---|
| 1. Standard library | import logging, import os |
| 2. Third-party | import numpy as np |
| 3. eta packages | import eta.core.utils as etau |
| 4. FiftyOne | import fiftyone.core.labels as fol |
FiftyOne Import Aliases
| Module | Alias |
|---|---|
fiftyone |
fo |
fiftyone.core.labels |
fol |
fiftyone.core.fields |
fof |
fiftyone.core.media |
fom |
fiftyone.core.storage |
fos |
fiftyone.core.utils |
fou |
fiftyone.utils.image |
foui |
fiftyone.utils.video |
fouv |
Docstrings (Google-Style)
def get_operator(operator_uri, enabled=True):
"""Gets the operator with the given URI.
Args:
operator_uri: the operator URI
enabled (True): whether to include only enabled operators (True) or
only disabled operators (False) or all operators ("all")
Returns:
an :class:`fiftyone.operators.Operator`
Raises:
ValueError: if the operator is not found
"""
Key patterns:
- Args with defaults:
param (default): description - Multi-line descriptions: indent continuation
- Cross-references:
:class:fiftyone.module.Class``
Lazy Imports
Use fou.lazy_import() for optional/heavy dependencies:
o3d = fou.lazy_import("open3d", callback=lambda: fou.ensure_package("open3d"))
mask_utils = fou.lazy_import(
"pycocotools.mask", callback=lambda: fou.ensure_import("pycocotools")
)
Guard Patterns
Use hasattr() for optional attributes:
if hasattr(label, "confidence"):
if label.confidence is None or label.confidence < threshold:
label = label.__class__()
Error Handling
Use logger.warning() for non-fatal errors:
try:
result = process_data(data)
except Exception as e:
logger.warning("Failed to process data: %s", e)
Avoid Redundant Code
Before writing new functions, search for existing implementations:
- Local: search the FiftyOne source if available in the environment
- Remote: search
https://github.com/voxel51/fiftyone - Check
fiftyone/core/utils.pyandfiftyone/utils/*first
Common Utilities
| Module | Functions |
|---|---|
fou |
lazy_import(), ensure_package(), extract_kwargs_for_class() |
etau |
guess_mime_type(), ensure_dir(), make_temp_dir() |
Quick Reference
| Pattern | Convention |
|---|---|
| Module structure | Docstring → imports → logger → public → private |
| Private functions | _prefix |
| Docstrings | Google-style with Args/Returns/Raises |
| Error handling | logger.warning() for non-fatal |
| Lazy imports | fou.lazy_import() for optional deps |
| Guard patterns | hasattr() checks |
| Import aliases | fo, fol, fof, fom, fos, fou |
You Might Also Like
Related Skills

coding-agent
Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.
openclaw
add-uint-support
Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.
pytorch
at-dispatch-v2
Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.
pytorch
skill-writer
Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.
pytorch
implementing-jsc-classes-cpp
Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.
oven-sh
implementing-jsc-classes-zig
Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.
oven-sh