#!/usr/bin/env python3 """This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. Based on the paper "Correlation Matrix Memories" by TEUVO KOHONEN. """ __author__ = 'Mārtiņš Avots' import unittest from completeCorrelationMatrixMemories import CompleteCorrelationMatrixMemory from testingArtifacts import floatTuple, difference, images3x3 from random import uniform, sample class OrthogonalKeyTests(unittest.TestCase): def testAssymetricOrthogonalKeys(self): self.__testOrthogonalKeys({ (3,0) : (3,1,4.5), (0,-7) : (-3,-1,99) }) def testSimpleOrthogonalKeys1(self): self.__testOrthogonalKeys({ (1,0) : (3,1,4.5), (0,1) : (-3,-1,99) }) def testSimpleOrthogonalKeys2(self): self.__testOrthogonalKeys({ (2,0) : (3,1,4.5), (0,2) : (-3,-1,99) }) def testSimpleOrthogonalKeys4(self): self.__testOrthogonalKeys({ (4,0) : (3,1,4.5), (0,4) : (-3,-1,99) }) def testSimpleOrthogonalKeys8(self): self.__testOrthogonalKeys({ (8,0) : (3,1,4.5), (0,8) : (-3,-1,99) }) def testSimpleOrthogonalKeysRandom(self): self.__testOrthogonalKeys({ (uniform(-1000, 1000),0) : (3,1,4.5), # TODO Random chosen magic constants (0,uniform(-1000, 1000)) : (-3,-1,99) # TODO Random chosen magic constants }) def testSimpleOrthogonalKeys9ZeroTwo(self): values = sample(list(images3x3.values()), 9) mapping = {} for i in range(9): orthogonalKey = [0]*9 orthogonalKey[i] = 2 orthogonalKey = tuple(orthogonalKey) mapping[orthogonalKey] = values[i] self.__testOrthogonalKeys(mapping) def testSimpleOrthogonalKeys9uniform(self): values = sample(list(images3x3.values()), 9) mapping = {} for i in range(9): orthogonalKey = [0]*9 orthogonalKey[i] = uniform(-1000, 1000) # TODO Random chosen magic constants orthogonalKey = tuple(orthogonalKey) mapping[orthogonalKey] = values[i] self.__testOrthogonalKeys(mapping) def __testOrthogonalKeys(self, mapping): testSubject = CompleteCorrelationMatrixMemory(mapping) for key in mapping: recall = testSubject.recall(key) expectedRecall = floatTuple(mapping[key]) for i in range(len(recall)): self.assertAlmostEqual(recall[i], expectedRecall[i])