code: def zero(self):
          
          # Since `FunctionSpace.lincomb` may be slow, we implement this
          # function directly.
          # The unused **kwargs are needed to support combination with
          # functions that take parameters.
          def zero_vec(x, out=None, **kwargs):
              """Zero function, vectorized."""
              if is_valid_input_meshgrid(x, self.domain.ndim):
                  scalar_out_shape = out_shape_from_meshgrid(x)
              elif is_valid_input_array(x, self.domain.ndim):
                  scalar_out_shape = out_shape_from_array(x)
              else:
                  raise TypeError('invalid input type')
  
              # For tensor-valued functions
              out_shape = self.out_shape + scalar_out_shape
  
              if out is None:
                  return np.zeros(out_shape, dtype=self.scalar_out_dtype)
              else:
                  # Need to go through an array to fill with the correct
                  # zero value for all dtypes
                  fill_value = np.zeros(1, dtype=self.scalar_out_dtype)[0]
                  out.fill(fill_value)
  
          return self.element_type(self, zero_vec)
docs: Function mapping anything to zero.