code: def get_null_proj(self,nsing=None):
          
          if nsing is None:
              nsing = self.get_nsing()
          if nsing is None:
              raise Exception("nsing is None")
          print("using {0} singular components".format(nsing))
          self.log("forming null space projection matrix with " +\
                   "{0} of {1} singular components".format(nsing,self.jco.shape[1]))
  
          v2_proj = (self.xtqx.v[:,nsing:] * self.xtqx.v[:,nsing:].T)
          self.log("forming null space projection matrix with " +\
                   "{0} of {1} singular components".format(nsing,self.jco.shape[1]))
  
          return v2_proj
docs: get a null-space projection matrix of XTQX
  
          Parameters
          ----------
          nsing: int
              optional number of singular components to use
              If Nonte, then nsing is determined from
              call to MonteCarlo.get_nsing()
          
          Returns
          -------
          v2_proj : pyemu.Matrix
              the null-space projection matrix (V2V2^T)