code: def movementCompute(self, displacement, noiseFactor = 0):
      
  
      if noiseFactor != 0:
        displacement = copy.deepcopy(displacement)
        xnoise = np.random.normal(0, noiseFactor)
        ynoise = np.random.normal(0, noiseFactor)
        displacement[0] += xnoise
        displacement[1] += ynoise
  
      # Calculate delta in the module's coordinates.
      phaseDisplacement = np.matmul(self.A, displacement)
  
      # Shift the active coordinates.
      np.add(self.bumpPhases, phaseDisplacement[:,np.newaxis], out=self.bumpPhases)
  
      # In Python, (x % 1.0) can return 1.0 because of floating point goofiness.
      # Generally this doesn't cause problems, it's just confusing when you're
      # debugging.
      np.round(self.bumpPhases, decimals=9, out=self.bumpPhases)
      np.mod(self.bumpPhases, 1.0, out=self.bumpPhases)
  
      self._computeActiveCells()
      self.phaseDisplacement = phaseDisplacement
docs: Shift the current active cells by a vector.
  
      @param displacement (pair of floats)
      A translation vector [di, dj].