class TestUserDataManager(unittest.TestCase):
    def setUp(self):
        self.manager = UserDataManager("test")

        self.generate_original_image()
        self.generate_patch()

    def generate_original_image(self):
        # save lena as the original image
        lena = data.lena()
        self.lena_path = os.path.join(root_user_data, "test",
                                      original_image_dirname, lena_filename)
        imsave(self.lena_path, lena)

    def generate_patch(self):
        # create patch
        patch = crop(data.lena(), (15, 15))
        self.lena_patch_path = os.path.join(root_user_data, "test",
                                            patch_dirname, lena_filename)
        imsave(self.lena_patch_path, patch)

    def test_add_patch(self):
        os.remove(self.lena_patch_path)
        self.manager.add_patch(self.lena_path, (10, 10))
        self.assertTrue(os.path.exists(self.lena_patch_path))

        # IndexError should be raised if the cropped range is out of
        # the source image
        lena = data.lena()
        self.assertRaises(IndexError,
                          self.manager.add_patch, self.lena_path, (10, 9))
        self.assertRaises(IndexError,
                          self.manager.add_patch, self.lena_path, (9, 10))
        self.assertRaises(IndexError,
                          self.manager.add_patch, self.lena_path,
                          (lena.shape[0]-10, lena.shape[0]-9))

    def test_basenames(self):
        self.assertEqual(self.manager.basenames(), [lena_filename])

    def test_patches(self):
        patches = self.manager.patches()
        n_patches = sum(1 for p in patches)
        self.assertEqual(n_patches, 1)  # only lena.jpg is saved
        for patch in patches:
            self.assertEqual(patch.shape, (patch_size, patch_size, 3))

    def test_has_valid_format(self):
        self.assertTrue(self.manager.has_valid_format())

        os.remove(self.lena_path)

        self.assertFalse(self.manager.has_valid_format())

        self.generate_patch()
import sys
import os

from dataset import UserDataManager

user, original_image_filename, x, y = sys.argv[1:5]

x = int(x)
y = int(y)

manager = UserDataManager(user)
manager.add_patch(original_image_filename, (x, y))
import os
import csv

import viewer

from path import root_user_data
from dataset import UserDataManager
from system import Recommender
from situation import generate


def print_in_csv(user, files, distances):
    writer = csv.writer(sys.stdout)
    for f, distance in zip(files, distances):
        original_image_path = os.path.join(user, f)
        writer.writerow([original_image_path, distance])


# plot results using matplotlib
user, occasion, temperature = sys.argv[1:4]

situation = generate(temperature, occasion)
recommender = Recommender(user)
distances, indices = recommender.predict(situation)

manager = UserDataManager(user)
basenames = manager.basenames()

basenames = [basenames[i] for i in indices]
print_in_csv(user, basenames, distances)
    def setUp(self):
        self.manager = UserDataManager("test")

        self.generate_original_image()
        self.generate_patch()