code: def copy(self):
          
          params = {}
          for key, val in self.__dict__.items():
              if 'matrix' not in key:
                  k = key[1:] if key[0] == '_' else key
                  params[k] = val
          # params = {param: params[param] for param in params}
          return self.__class__(**params)
docs: Returns a copy of the projection matrix