def METHOD_NAME(self):
    self.worldNP = render.attach_new_node('World')
    # World
    self.debugNP = self.worldNP.attach_new_node(BulletDebugNode('Debug'))
    self.debugNP.show()
    self.debugNP.node().show_wireframe(True)
    self.debugNP.node().show_constraints(True)
    self.debugNP.node().show_bounding_boxes(False)
    self.debugNP.node().show_normals(False)
    self.world = BulletWorld()
    self.world.set_gravity((0, 0, -9.81))
    self.world.set_debug_node(self.debugNP.node())
    # Box A
    shape = BulletBoxShape((0.5, 0.5, 0.5))
    bodyA = BulletRigidBodyNode('Box A')
    bodyNP = self.worldNP.attach_new_node(bodyA)
    bodyNP.node().add_shape(shape)
    bodyNP.set_collide_mask(BitMask32.all_on())
    bodyNP.set_pos(-1, 0, 4)
    visNP = loader.load_model('models/box.egg')
    visNP.clear_model_nodes()
    visNP.reparent_to(bodyNP)
    self.world.attach(bodyA)
    # Box B
    shape = BulletBoxShape((0.5, 0.5, 0.5))
    bodyB = BulletRigidBodyNode('Box B')
    bodyNP = self.worldNP.attach_new_node(bodyB)
    bodyNP.node().add_shape(shape)
    bodyNP.node().set_mass(1.0)
    bodyNP.node().set_deactivation_enabled(False)
    bodyNP.node().setLinearDamping(0.6)
    bodyNP.node().setAngularDamping(0.6)
    bodyNP.set_collide_mask(BitMask32.all_on())
    bodyNP.set_pos(2, 0, 0)
    visNP = loader.load_model('models/box.egg')
    visNP.clear_model_nodes()
    visNP.reparent_to(bodyNP)
    self.world.attach(bodyB)
    # Spherical Constraint
    pivotA = (2, 0, 0)
    pivotB = (0, 0, 4)
    joint = BulletSphericalConstraint(bodyA, bodyB, pivotA, pivotB)
    joint.set_debug_draw_size(2.0)
    self.world.attach(joint)