code: def filter_taubin(mesh,
                    lamb=0.5,
                    nu=0.5,
                    iterations=10,
                    laplacian_operator=None):
      
      # if the laplacian operator was not passed create it here
      if laplacian_operator is None:
          laplacian_operator = laplacian_calculation(mesh)
  
      # get mesh vertices as vanilla numpy array
      vertices = mesh.vertices.copy().view(np.ndarray)
  
      # run through multiple passes of the filter
      for index in range(iterations):
          # do a sparse dot product on the vertices
          dot = laplacian_operator.dot(vertices) - vertices
          # alternate shrinkage and dilation
          if index % 2 == 0:
              vertices += lamb * dot
          else:
              vertices -= nu * dot
  
      # assign updated vertices back to mesh
      mesh.vertices = vertices
      return mesh
docs: Smooth a mesh in-place using laplacian smoothing
      and taubin filtering.
  
      Articles
      "Improved Laplacian Smoothing of Noisy Surface Meshes"
      J. Vollmer, R. Mencl, and H. Muller
  
      Parameters
      ------------
      mesh : trimesh.Trimesh
        Mesh to be smoothed in place.
      lamb : float
        Controls shrinkage, range is 0.0 - 1.0
      nu : float
        Controls dilation, range is 0.0 - 1.0
        Nu shall be between 0.0 < 1.0/lambda - 1.0/nu < 0.1
      iterations : int
        Number of passes to run the filter
      laplacian_operator : None or scipy.sparse.coo.coo_matrix
        Sparse matrix laplacian operator
        Will be autogenerated if None