diff --git a/pytorch3d/datasets/r2n2/r2n2.py b/pytorch3d/datasets/r2n2/r2n2.py index 6a3f6232..f85bb295 100644 --- a/pytorch3d/datasets/r2n2/r2n2.py +++ b/pytorch3d/datasets/r2n2/r2n2.py @@ -38,7 +38,7 @@ BLENDER_INTRINSIC = torch.tensor( ) -class R2N2(ShapeNetBase): +class R2N2(ShapeNetBase): # pragma: no cover """ This class loads the R2N2 dataset from a given directory into a Dataset object. The R2N2 dataset contains 13 categories that are a subset of the ShapeNetCore v.1 diff --git a/pytorch3d/datasets/r2n2/utils.py b/pytorch3d/datasets/r2n2/utils.py index b77e48d5..1d1c7c23 100644 --- a/pytorch3d/datasets/r2n2/utils.py +++ b/pytorch3d/datasets/r2n2/utils.py @@ -33,7 +33,7 @@ t = np.expand_dims(np.zeros(3), axis=0) # (1, 3) k = np.expand_dims(np.eye(4), axis=0) # (1, 4, 4) -def collate_batched_R2N2(batch: List[Dict]): +def collate_batched_R2N2(batch: List[Dict]): # pragma: no cover """ Take a list of objects in the form of dictionaries and merge them into a single dictionary. This function can be used with a Dataset @@ -93,7 +93,7 @@ def collate_batched_R2N2(batch: List[Dict]): return collated_dict -def compute_extrinsic_matrix(azimuth, elevation, distance): +def compute_extrinsic_matrix(azimuth, elevation, distance): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/shapenet/utils/coords.py#L96 @@ -140,7 +140,7 @@ def compute_extrinsic_matrix(azimuth, elevation, distance): def read_binvox_coords( f, integer_division: bool = True, dtype: torch.dtype = torch.float32 -): +): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/shapenet/utils/binvox_torch.py#L5 @@ -183,7 +183,7 @@ def read_binvox_coords( return coords.to(dtype) -def _compute_idxs(vals, counts): +def _compute_idxs(vals, counts): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/shapenet/utils/binvox_torch.py#L58 @@ -236,7 +236,7 @@ def _compute_idxs(vals, counts): return idxs -def _read_binvox_header(f): +def _read_binvox_header(f): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/shapenet/utils/binvox_torch.py#L99 @@ -300,7 +300,7 @@ def _read_binvox_header(f): return size, translation, scale -def align_bbox(src, tgt): +def align_bbox(src, tgt): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/tools/preprocess_shapenet.py#L263 @@ -330,7 +330,7 @@ def align_bbox(src, tgt): return out -def voxelize(voxel_coords, P, V): +def voxelize(voxel_coords, P, V): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/tools/preprocess_shapenet.py#L284 @@ -377,7 +377,7 @@ def voxelize(voxel_coords, P, V): return voxels -def project_verts(verts, P, eps=1e-1): +def project_verts(verts, P, eps=1e-1): # pragma: no cover """ Copied from meshrcnn codebase: https://github.com/facebookresearch/meshrcnn/blob/master/shapenet/utils/coords.py#L159 @@ -426,7 +426,7 @@ def project_verts(verts, P, eps=1e-1): return verts_proj -class BlenderCamera(CamerasBase): +class BlenderCamera(CamerasBase): # pragma: no cover """ Camera for rendering objects with calibration matrices from the R2N2 dataset (which uses Blender for rendering the views for each model). @@ -452,7 +452,7 @@ class BlenderCamera(CamerasBase): def render_cubified_voxels( voxels: torch.Tensor, shader_type=HardPhongShader, device: Device = "cpu", **kwargs -): +): # pragma: no cover """ Use the Cubify operator to convert inputs voxels to a mesh and then render that mesh. diff --git a/pytorch3d/datasets/shapenet/shapenet_core.py b/pytorch3d/datasets/shapenet/shapenet_core.py index a8635fd9..402ea2be 100644 --- a/pytorch3d/datasets/shapenet/shapenet_core.py +++ b/pytorch3d/datasets/shapenet/shapenet_core.py @@ -13,7 +13,7 @@ from pytorch3d.datasets.shapenet_base import ShapeNetBase SYNSET_DICT_DIR = Path(__file__).resolve().parent -class ShapeNetCore(ShapeNetBase): +class ShapeNetCore(ShapeNetBase): # pragma: no cover """ This class loads ShapeNetCore from a given directory into a Dataset object. ShapeNetCore is a subset of the ShapeNet dataset and can be downloaded from diff --git a/pytorch3d/datasets/shapenet_base.py b/pytorch3d/datasets/shapenet_base.py index 0d9de02b..91b82448 100644 --- a/pytorch3d/datasets/shapenet_base.py +++ b/pytorch3d/datasets/shapenet_base.py @@ -19,7 +19,7 @@ from pytorch3d.renderer import ( from .utils import collate_batched_meshes -class ShapeNetBase(torch.utils.data.Dataset): +class ShapeNetBase(torch.utils.data.Dataset): # pragma: no cover """ 'ShapeNetBase' implements a base Dataset for ShapeNet and R2N2 with helper methods. It is not intended to be used on its own as a Dataset for a Dataloader. Both __init__ diff --git a/pytorch3d/datasets/utils.py b/pytorch3d/datasets/utils.py index 029435c1..edb56382 100644 --- a/pytorch3d/datasets/utils.py +++ b/pytorch3d/datasets/utils.py @@ -5,7 +5,7 @@ from pytorch3d.renderer.mesh import TexturesAtlas from pytorch3d.structures import Meshes -def collate_batched_meshes(batch: List[Dict]): +def collate_batched_meshes(batch: List[Dict]): # pragma: no cover """ Take a list of objects in the form of dictionaries and merge them into a single dictionary. This function can be used with a Dataset diff --git a/pytorch3d/ops/cameras_alignment.py b/pytorch3d/ops/cameras_alignment.py index 5b69fb3c..1eae538b 100644 --- a/pytorch3d/ops/cameras_alignment.py +++ b/pytorch3d/ops/cameras_alignment.py @@ -17,7 +17,7 @@ def corresponding_cameras_alignment( estimate_scale: bool = True, mode: str = "extrinsics", eps: float = 1e-9, -) -> "CamerasBase": +) -> "CamerasBase": # pragma: no cover """ .. warning:: The `corresponding_cameras_alignment` API is experimental @@ -131,7 +131,7 @@ def _align_camera_centers( cameras_tgt: "CamerasBase", estimate_scale: bool = True, eps: float = 1e-9, -): +): # pragma: no cover """ Use Umeyama's algorithm to align the camera centers. """ @@ -157,7 +157,7 @@ def _align_camera_extrinsics( cameras_tgt: "CamerasBase", estimate_scale: bool = True, eps: float = 1e-9, -): +): # pragma: no cover """ Get the global rotation R_A with svd of cov(RR^T): ``` diff --git a/pytorch3d/ops/subdivide_meshes.py b/pytorch3d/ops/subdivide_meshes.py index 417a1447..f02c04c6 100644 --- a/pytorch3d/ops/subdivide_meshes.py +++ b/pytorch3d/ops/subdivide_meshes.py @@ -6,7 +6,7 @@ import torch.nn as nn from pytorch3d.structures import Meshes -class SubdivideMeshes(nn.Module): +class SubdivideMeshes(nn.Module): # pragma: no cover """ Subdivide a triangle mesh by adding a new vertex at the center of each edge and dividing each face into four new faces. Vectors of vertex @@ -396,7 +396,7 @@ def create_verts_index(verts_per_mesh, edges_per_mesh, device=None): return verts_idx -def create_faces_index(faces_per_mesh, device=None): +def create_faces_index(faces_per_mesh, device=None): # pragma: no cover """ Helper function to group the faces indices for each mesh. New faces are stacked at the end of the original faces tensor, so in order to have diff --git a/pytorch3d/renderer/mesh/shader.py b/pytorch3d/renderer/mesh/shader.py index abab7304..5ab9ce9d 100644 --- a/pytorch3d/renderer/mesh/shader.py +++ b/pytorch3d/renderer/mesh/shader.py @@ -26,7 +26,7 @@ from .shading import flat_shading, gouraud_shading, phong_shading # - blend colors across top K faces per pixel. -class HardPhongShader(nn.Module): +class HardPhongShader(nn.Module): # pragma: no cover """ Per pixel lighting - the lighting model is applied using the interpolated coordinates and normals for each pixel. The blending function hard assigns @@ -86,7 +86,7 @@ class HardPhongShader(nn.Module): return images -class SoftPhongShader(nn.Module): +class SoftPhongShader(nn.Module): # pragma: no cover """ Per pixel lighting - the lighting model is applied using the interpolated coordinates and normals for each pixel. The blending function returns the @@ -150,7 +150,7 @@ class SoftPhongShader(nn.Module): return images -class HardGouraudShader(nn.Module): +class HardGouraudShader(nn.Module): # pragma: no cover """ Per vertex lighting - the lighting model is applied to the vertex colors and the colors are then interpolated using the barycentric coordinates to @@ -214,7 +214,7 @@ class HardGouraudShader(nn.Module): return images -class SoftGouraudShader(nn.Module): +class SoftGouraudShader(nn.Module): # pragma: no cover """ Per vertex lighting - the lighting model is applied to the vertex colors and the colors are then interpolated using the barycentric coordinates to @@ -277,7 +277,7 @@ class SoftGouraudShader(nn.Module): def TexturedSoftPhongShader( device: Device = "cpu", cameras=None, lights=None, materials=None, blend_params=None -): +): # pragma: no cover """ TexturedSoftPhongShader class has been DEPRECATED. Use SoftPhongShader instead. Preserving TexturedSoftPhongShader as a function for backwards compatibility. @@ -296,7 +296,7 @@ def TexturedSoftPhongShader( ) -class HardFlatShader(nn.Module): +class HardFlatShader(nn.Module): # pragma: no cover """ Per face lighting - the lighting model is applied using the average face position and the face normal. The blending function hard assigns @@ -355,7 +355,7 @@ class HardFlatShader(nn.Module): return images -class SoftSilhouetteShader(nn.Module): +class SoftSilhouetteShader(nn.Module): # pragma: no cover """ Calculate the silhouette by blending the top K faces for each pixel based on the 2d euclidean distance of the center of the pixel to the mesh face. diff --git a/pytorch3d/vis/plotly_vis.py b/pytorch3d/vis/plotly_vis.py index bd043d80..7635c27a 100644 --- a/pytorch3d/vis/plotly_vis.py +++ b/pytorch3d/vis/plotly_vis.py @@ -13,7 +13,7 @@ from pytorch3d.renderer.cameras import CamerasBase from pytorch3d.structures import Meshes, Pointclouds, join_meshes_as_scene -def get_camera_wireframe(scale: float = 0.3): +def get_camera_wireframe(scale: float = 0.3): # pragma: no cover """ Returns a wireframe of a 3D line-plot of a camera symbol. """ @@ -30,7 +30,7 @@ def get_camera_wireframe(scale: float = 0.3): return lines -class AxisArgs(NamedTuple): +class AxisArgs(NamedTuple): # pragma: no cover showgrid: bool = False zeroline: bool = False showline: bool = False @@ -40,7 +40,7 @@ class AxisArgs(NamedTuple): showaxeslabels: bool = False -class Lighting(NamedTuple): +class Lighting(NamedTuple): # pragma: no cover ambient: float = 0.8 diffuse: float = 1.0 fresnel: float = 0.0 @@ -59,7 +59,7 @@ def plot_scene( pointcloud_max_points: int = 20000, pointcloud_marker_size: int = 1, **kwargs, -): +): # pragma: no cover """ Main function to visualize Meshes, Cameras and Pointclouds. Plots input Pointclouds, Meshes, and Cameras data into named subplots, @@ -333,7 +333,7 @@ def plot_batch_individually( extend_struct: bool = True, subplot_titles: Optional[List[str]] = None, **kwargs, -): +): # pragma: no cover """ This is a higher level plotting function than plot_scene, for plotting Cameras, Meshes and Pointclouds in simple cases. The simplest use is to plot a @@ -454,7 +454,7 @@ def _add_struct_from_batch( subplot_title: str, scene_dictionary: Dict[str, Dict[str, Union[CamerasBase, Meshes, Pointclouds]]], trace_idx: int = 1, -): +): # pragma: no cover """ Adds the struct corresponding to the given scene_num index to a provided scene_dictionary to be passed in to plot_scene @@ -502,7 +502,7 @@ def _add_mesh_trace( subplot_idx: int, ncols: int, lighting: Lighting, -): +): # pragma: no cover """ Adds a trace rendering a Meshes object to the passed in figure, with a given name and in a specific subplot. @@ -569,7 +569,7 @@ def _add_pointcloud_trace( ncols: int, max_points_per_pointcloud: int, marker_size: int, -): +): # pragma: no cover """ Adds a trace rendering a Pointclouds object to the passed in figure, with a given name and in a specific subplot. @@ -650,7 +650,7 @@ def _add_camera_trace( subplot_idx: int, ncols: int, camera_scale: float, -): +): # pragma: no cover """ Adds a trace rendering a Cameras object to the passed in figure, with a given name and in a specific subplot. @@ -698,7 +698,9 @@ def _add_camera_trace( _update_axes_bounds(verts_center, max_expand, current_layout) -def _gen_fig_with_subplots(batch_size: int, ncols: int, subplot_titles: List[str]): +def _gen_fig_with_subplots( + batch_size: int, ncols: int, subplot_titles: List[str] +): # pragma: no cover """ Takes in the number of objects to be plotted and generate a plotly figure with the appropriate number and orientation of titled subplots. @@ -731,7 +733,7 @@ def _update_axes_bounds( verts_center: torch.Tensor, max_expand: float, current_layout: go.Scene, # pyre-ignore[11] -): +): # pragma: no cover """ Takes in the vertices' center point and max spread, and the current plotly figure layout and updates the layout to have bounds that include all traces for that subplot. @@ -769,7 +771,7 @@ def _update_axes_bounds( def _scale_camera_to_bounds( coordinate: float, axis_bounds: Tuple[float, float], is_position: bool -): +): # pragma: no cover """ We set our plotly plot's axes' bounding box to [-1,1]x[-1,1]x[-1,1]. As such, the plotly camera location has to be scaled accordingly to have its world coordinates diff --git a/pytorch3d/vis/texture_vis.py b/pytorch3d/vis/texture_vis.py index 05d37593..8e9d3c9d 100644 --- a/pytorch3d/vis/texture_vis.py +++ b/pytorch3d/vis/texture_vis.py @@ -14,7 +14,7 @@ def texturesuv_image_matplotlib( color=(1.0, 0.0, 0.0), subsample: Optional[int] = 10000, origin: str = "upper", -): +): # pragma: no cover """ Plot the texture image for one element of a TexturesUV with matplotlib together with verts_uvs positions circled. @@ -61,7 +61,7 @@ def texturesuv_image_PIL( radius: float = 1, color="red", subsample: Optional[int] = 10000, -): +): # pragma: no cover """ Return a PIL image of the texture image of one element of the batch from a TexturesUV, together with the verts_uvs positions circled.