code: def assertCloudsEqual(self, cloud1, cloud2):
      N = len(cloud1)
      self.assertEqual(N, len(cloud2))
  
      for i in range(N):
          self.assertClose(
              cloud1.points_list()[i], cloud2.points_list()[i]
          )
          self.assertClose(
              cloud1.normals_list()[i], cloud2.normals_list()[i]
          )
          self.assertClose(
              cloud1.features_list()[i], cloud2.features_list()[i]
          )
      has_normals = cloud1.normals_list() is not None
      self.assertTrue(
          has_normals == (cloud2.normals_list() is not None)
      )
      has_features = cloud1.features_list() is not None
      self.assertTrue(
          has_features == (cloud2.features_list() is not None)
      )
  
      # check padded & packed
      self.assertClose(cloud1.points_padded(), cloud2.points_padded())
      self.assertClose(cloud1.points_packed(), cloud2.points_packed())
      if has_normals:
          self.assertClose(
              cloud1.normals_padded(), cloud2.normals_padded()
          )
          self.assertClose(
              cloud1.normals_packed(), cloud2.normals_packed()
          )
      if has_features:
          self.assertClose(
              cloud1.features_padded(), cloud2.features_padded()
          )
          self.assertClose(
              cloud1.features_packed(), cloud2.features_packed()
          )
      self.assertClose(
          cloud1.packed_to_cloud_idx(), cloud2.packed_to_cloud_idx()
      )
      self.assertClose(
          cloud1.cloud_to_packed_first_idx(),
          cloud2.cloud_to_packed_first_idx(),
      )
      self.assertClose(
          cloud1.num_points_per_cloud(), cloud2.num_points_per_cloud()
      )
      self.assertClose(
          cloud1.packed_to_cloud_idx(), cloud2.packed_to_cloud_idx()
      )
      self.assertClose(
          cloud1.padded_to_packed_idx(), cloud2.padded_to_packed_idx()
      )
      self.assertTrue(all(cloud1.valid == cloud2.valid))
      self.assertTrue(cloud1.equisized == cloud2.equisized)
  
imports: import itertools
  import random
  import unittest
  import numpy
  import torch
  from pytorch3d.structures import utils
  from pytorch3d.structures.pointclouds import join_pointclouds_as_batch, join_pointclouds_as_scene, Pointclouds
  from .common_testing import TestCaseMixin
label_desc: Use image node_id 13 for calling the TestPointclouds obj's underlying member method code with example usage: obj.assertCloudsEqual(cloud1, cloud2) without return types