code: def test_extend(self):
      B = 10
      mesh = init_mesh(B, 30, 50)
      F = mesh._F
      tex_uv = TexturesAtlas(atlas=torch.randn((B, F, 2, 2, 3)))
      tex_mesh = Meshes(
          verts=mesh.verts_padded(),
          faces=mesh.faces_padded(),
          textures=tex_uv,
      )
      N = 20
      new_mesh = tex_mesh.extend(N)
  
      self.assertEqual(len(tex_mesh) * N, len(new_mesh))
  
      tex_init = tex_mesh.textures
      new_tex = new_mesh.textures
  
      for i in range(len(tex_mesh)):
          for n in range(N):
              self.assertClose(
                  tex_init.atlas_list()[i],
                  new_tex.atlas_list()[i * N + n],
              )
              self.assertClose(
                  tex_init._num_faces_per_mesh[i],
                  new_tex._num_faces_per_mesh[i * N + n],
              )
  
      self.assertAllSeparate(
          [tex_init.atlas_padded(), new_tex.atlas_padded()]
      )
  
      with self.assertRaises(ValueError):
          tex_mesh.extend(N=-1)
  
imports: import unittest
  import torch
  import torch.nn.functional
  from pytorch3d.renderer.mesh.rasterizer import Fragments
  from pytorch3d.renderer.mesh.textures import _list_to_padded_wrapper, TexturesAtlas, TexturesUV, TexturesVertex
  from pytorch3d.renderer.mesh.utils import pack_rectangles, pack_unique_rectangles, Rectangle
  from pytorch3d.structures import list_to_packed, Meshes, packed_to_list
  from .common_testing import TestCaseMixin
  from .test_meshes import init_mesh
label_desc: Use image node_id 7 for calling the TestTexturesAtlas obj's underlying member method code with example usage: obj.test_extend() without return types