code: def learnObject(self,
                    objectDescription,
                    randomLocation=False,
                    useNoise=False,
                    noisyTrainingTime=1):
      
      self.reset()
      self.column.activateRandomLocation()
  
      locationsAreUnique = True
  
      if randomLocation or useNoise:
        numIters = noisyTrainingTime
      else:
        numIters = 1
      for i in xrange(numIters):
        for iFeature, feature in enumerate(objectDescription["features"]):
          self._move(feature, randomLocation=randomLocation, useNoise=useNoise)
          featureSDR = self.features[feature["name"]]
          self._sense(featureSDR, learn=True, waitForSettle=False)
  
          locationRepresentation = self.column.getSensoryAssociatedLocationRepresentation()
          self.locationRepresentations[(objectDescription["name"],
                                        iFeature)].append(locationRepresentation)
          self.inputRepresentations[(objectDescription["name"],
                                     iFeature, feature["name"])] = (
                                       self.column.L4.getWinnerCells())
  
          locationTuple = tuple(locationRepresentation)
          locationsAreUnique = (locationsAreUnique and
                                locationTuple not in self.representationSet)
  
          self.representationSet.add(tuple(locationRepresentation))
  
      self.learnedObjects.append(objectDescription)
  
      return locationsAreUnique
docs: Train the network to recognize the specified object. Move the sensor to one of
      its features and activate a random location representation in the location
      layer. Move the sensor over the object, updating the location representation
      through path integration. At each point on the object, form reciprocal
      connections between the represention of the location and the representation
      of the sensory input.
  
      @param objectDescription (dict)
      For example:
      {"name": "Object 1",
       "features": [{"top": 0, "left": 0, "width": 10, "height": 10, "name": "A"},
                    {"top": 0, "left": 10, "width": 10, "height": 10, "name": "B"}]}
  
      @return locationsAreUnique (bool)
      True if this object was assigned a unique set of locations. False if a
      location on this object has the same location representation as another
      location somewhere else.