def test_02_01_prepare_to_create_batch_single(self): n = N.NamesAndTypes() n.module_num = 1 n.assignment_method.value = N.ASSIGN_ALL n.single_image_provider.value = IMAGE_NAME m = cpmeas.Measurements(mode="memory") pathnames = ["foo", "fuu"] expected_pathnames = ["bar", "fuu"] filenames = ["boo", "foobar"] expected_filenames = ["boo", "barbar"] urlnames = ["file:/foo/bar", "http://foo/bar"] expected_urlnames = ["file:/bar/bar", "http://foo/bar"] m.add_all_measurements(cpmeas.IMAGE, cpmeas.C_FILE_NAME + "_" + IMAGE_NAME, filenames) m.add_all_measurements(cpmeas.IMAGE, cpmeas.C_PATH_NAME + "_" + IMAGE_NAME, pathnames) m.add_all_measurements(cpmeas.IMAGE, cpmeas.C_URL + "_" + IMAGE_NAME, urlnames) pipeline = cpp.Pipeline() pipeline.add_module(n) workspace = cpw.Workspace(pipeline, n, m, None, m, None) n.prepare_to_create_batch(workspace, lambda x: x.replace("foo", "bar")) for feature, expected in ((cpmeas.C_FILE_NAME, expected_filenames), (cpmeas.C_PATH_NAME, expected_pathnames), (cpmeas.C_URL, expected_urlnames)): values = m.get_measurement(cpmeas.IMAGE, feature + "_" + IMAGE_NAME, np.arange(len(expected)) + 1) self.assertSequenceEqual(expected, list(values))
def test_01_06_02_missing(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_METADATA n.add_assignment() n.assignments[0].image_name.value = C0 n.assignments[1].image_name.value = C1 n.assignments[0].rule_filter.value = 'file does contain "%s"' % C0 n.assignments[1].rule_filter.value = 'file does contain "%s"' % C1 n.join.build("[{'%s':'%s','%s':'%s'},{'%s':'%s','%s':'%s'}]" % (C0, M0, C1, M2, C0, M1, C1, M3)) data = { C0: [("%s%s%s" % (C0, m[M0], m[M1]), m) for i, m in enumerate(md([(M1, 3), (M0, 2)]))], C1: [("%s%s%s" % (C1, m[M2], m[M3]), m) for i, m in enumerate(md([(M3, 3), (M2, 2)]))] } bad_row = 3 # Steal the bad row's metadata additional = [data[C1][bad_row]] del data[C0][bad_row] del data[C1][bad_row] self.do_teest(n, data, [(M0, M2), (M1, M3)], [(M0, C0), (M1, C0), (M2, C1), (M3, C1)], additional)
def test_01_08_some_against_all(self): # # Permute both the order of the columns and the order of joins # joins = [{C0: M0, C1: M1}, {C0: None, C1: M2}] for cA, cB in ((C0, C1), (C1, C0)): for j0, j1 in ((0, 1), (1, 0)): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_METADATA n.add_assignment() n.assignments[0].image_name.value = cA n.assignments[1].image_name.value = cB n.assignments[ 0].rule_filter.value = 'file does contain "%s"' % cA n.assignments[ 1].rule_filter.value = 'file does contain "%s"' % cB n.join.build(repr([joins[j0], joins[j1]])) mA0 = [M0, M3][j0] mB0 = [M0, M3][j1] mA1 = joins[j0][C1] mB1 = joins[j1][C1] data = { C0: [("%s%s" % (C0, m[M0]), m) for i, m in enumerate(md([(mB0, 2), (mA0, 3)]))], C1: [("%s%s%s" % (C1, m[M1], m[M2]), m) for i, m in enumerate(md([(mB1, 2), (mA1, 3)]))] } expected_keys = [[(M0, M1), (M2, )][i] for i in j0, j1] self.do_teest(n, data, expected_keys, [(C0, M0), (C0, M3), (C1, M1), (C1, M2)])
def run_workspace(self, path, load_as_type, series=None, index=None, channel=None, single=False): '''Run a workspace to load a file path - path to the file load_as_type - one of the LOAD_AS... constants series, index, channel - pick a plane from within a file returns the workspace after running ''' n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_ALL if single else N.ASSIGN_RULES n.single_image_provider.value = IMAGE_NAME n.single_load_as_choice.value = load_as_type n.assignments[0].image_name.value = IMAGE_NAME n.assignments[0].object_name.value = OBJECTS_NAME n.assignments[0].load_as_choice.value = load_as_type n.module_num = 1 pipeline = cpp.Pipeline() pipeline.add_module(n) url = pathname2url(path) pathname, filename = os.path.split(path) m = cpmeas.Measurements(mode="memory") if load_as_type == N.LOAD_AS_OBJECTS: url_feature = cpmeas.C_OBJECTS_URL + "_" + OBJECTS_NAME path_feature = cpmeas.C_OBJECTS_PATH_NAME + "_" + OBJECTS_NAME file_feature = cpmeas.C_OBJECTS_FILE_NAME + "_" + OBJECTS_NAME series_feature = cpmeas.C_OBJECTS_SERIES + "_" + OBJECTS_NAME frame_feature = cpmeas.C_OBJECTS_FRAME + "_" + OBJECTS_NAME channel_feature = cpmeas.C_OBJECTS_CHANNEL + "_" + OBJECTS_NAME else: url_feature = cpmeas.C_URL + "_" + IMAGE_NAME path_feature = cpmeas.C_PATH_NAME + "_" + IMAGE_NAME file_feature = cpmeas.C_FILE_NAME + "_" + IMAGE_NAME series_feature = cpmeas.C_SERIES + "_" + IMAGE_NAME frame_feature = cpmeas.C_FRAME + "_" + IMAGE_NAME channel_feature = cpmeas.C_CHANNEL + "_" + IMAGE_NAME m.image_set_number = 1 m.add_measurement(cpmeas.IMAGE, url_feature, url) m.add_measurement(cpmeas.IMAGE, path_feature, pathname) m.add_measurement(cpmeas.IMAGE, file_feature, filename) if series is not None: m.add_measurement(cpmeas.IMAGE, series_feature, series) if index is not None: m.add_measurement(cpmeas.IMAGE, frame_feature, index) if channel is not None: m.add_measurement(cpmeas.IMAGE, channel_feature, channel) m.add_measurement(cpmeas.IMAGE, cpmeas.GROUP_NUMBER, 1) m.add_measurement(cpmeas.IMAGE, cpmeas.GROUP_INDEX, 1) workspace = cpw.Workspace(pipeline, n, m, N.cpo.ObjectSet(), m, None) n.run(workspace) return workspace
def test_02_02_prepare_to_create_batch_multiple(self): n = N.NamesAndTypes() n.module_num = 1 n.assignment_method.value = N.ASSIGN_RULES n.add_assignment() n.assignments[0].load_as_choice.value = N.LOAD_AS_GRAYSCALE_IMAGE n.assignments[0].image_name.value = IMAGE_NAME n.assignments[1].load_as_choice.value = N.LOAD_AS_OBJECTS n.assignments[1].object_name.value = OBJECTS_NAME m = cpmeas.Measurements(mode="memory") pathnames = ["foo", "fuu"] expected_pathnames = ["bar", "fuu"] filenames = ["boo", "foobar"] expected_filenames = ["boo", "barbar"] urlnames = ["file:/foo/bar", "http://foo/bar"] expected_urlnames = ["file:/bar/bar", "http://foo/bar"] for feature, name, values in ((cpmeas.C_FILE_NAME, IMAGE_NAME, filenames), (cpmeas.C_OBJECTS_FILE_NAME, OBJECTS_NAME, reversed(filenames)), (cpmeas.C_PATH_NAME, IMAGE_NAME, pathnames), (cpmeas.C_OBJECTS_PATH_NAME, OBJECTS_NAME, reversed(pathnames)), (cpmeas.C_URL, IMAGE_NAME, urlnames), (cpmeas.C_OBJECTS_URL, OBJECTS_NAME, reversed(urlnames))): m.add_all_measurements(cpmeas.IMAGE, feature + "_" + name, values) pipeline = cpp.Pipeline() pipeline.add_module(n) workspace = cpw.Workspace(pipeline, n, m, None, m, None) n.prepare_to_create_batch(workspace, lambda x: x.replace("foo", "bar")) for feature, name, expected in ((cpmeas.C_FILE_NAME, IMAGE_NAME, expected_filenames), (cpmeas.C_OBJECTS_FILE_NAME, OBJECTS_NAME, reversed(expected_filenames)), (cpmeas.C_PATH_NAME, IMAGE_NAME, expected_pathnames), (cpmeas.C_OBJECTS_PATH_NAME, OBJECTS_NAME, reversed(expected_pathnames)), (cpmeas.C_URL, IMAGE_NAME, expected_urlnames), (cpmeas.C_OBJECTS_URL, OBJECTS_NAME, reversed(expected_urlnames))): values = m.get_measurement(cpmeas.IMAGE, feature + "_" + name, np.arange(1, 3)) self.assertSequenceEqual(list(expected), list(values))
def test_01_07_one_against_all(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_METADATA n.add_assignment() n.assignments[0].image_name.value = C0 n.assignments[1].image_name.value = C1 n.assignments[0].rule_filter.value = 'file does contain "%s"' % C0 n.assignments[1].rule_filter.value = 'file does contain "%s"' % C1 n.join.build("[{'%s':None,'%s':'%s'}]" % (C0, C1, M0)) data = { C0: [(C0, {})] * 3, C1: [("%s%d" % (C1, i), m) for i, m in enumerate(md([(M0, 3)]))] } self.do_teest(n, data, [(M0, )], [(M0, C1)])
def test_01_10_by_order(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_ORDER n.add_assignment() n.assignments[0].image_name.value = C0 n.assignments[1].image_name.value = C1 n.assignments[0].rule_filter.value = 'file does contain "%s"' % C0 n.assignments[1].rule_filter.value = 'file does contain "%s"' % C1 data = { C0: [("%s%d" % (C0, i + 1), m) for i, m in enumerate(md([(M0, 2)]))], C1: [("%s%d" % (C1, i + 1), m) for i, m in enumerate(md([(M1, 2)]))] } self.do_teest(n, data, [(cpmeas.IMAGE_NUMBER, )], [(C0, M0), (C1, M1)])
def test_01_01_one(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_METADATA n.assignments[0].image_name.value = C0 n.join.build("[{\"%s\":\"%s\"}]" % (C0, M0)) # It should match by order, even if match by metadata and the joiner # are set up. data = { C0: [("images/1.jpg", { M0: "k1" }), ("images/2.jpg", { M0: "k3" }), ("images/3.jpg", { M0: "k2" })] } self.do_teest(n, data, [(cpmeas.IMAGE_NUMBER, )], [(M0, C0)])
def test_01_05_match_two_and_two(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_METADATA n.add_assignment() n.assignments[0].image_name.value = C0 n.assignments[1].image_name.value = C1 n.assignments[0].rule_filter.value = 'file does contain "%s"' % C0 n.assignments[1].rule_filter.value = 'file does contain "%s"' % C1 n.join.build("[{'%s':'%s','%s':'%s'},{'%s':'%s','%s':'%s'}]" % (C0, M0, C1, M2, C0, M1, C1, M3)) data = { C0: [("%s%s%s" % (C0, m[M0], m[M1]), m) for i, m in enumerate(md([(M1, 3), (M0, 2)]))], C1: [("%s%s%s" % (C1, m[M2], m[M3]), m) for i, m in enumerate(md([(M3, 3), (M2, 2)]))] } self.do_teest(n, data, [(M0, M2), (M1, M3)], [(M0, C0), (M1, C0), (M2, C1), (M3, C1)])
def test_01_03_match_one_different_key(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_METADATA n.add_assignment() n.assignments[0].image_name.value = C0 n.assignments[1].image_name.value = C1 n.assignments[0].rule_filter.value = 'file does contain "1"' n.assignments[1].rule_filter.value = 'file doesnot contain "1"' n.join.build("[{'%s':'%s','%s':'%s'}]" % (C0, M0, C1, M1)) data = { C0: [("images/1.jpg", { M0: "k1" })], C1: [("images/2.jpg", { M1: "k1" })] } self.do_teest(n, data, [(M0, M1)], [(M0, C0), (M1, C1)])
def test_01_11_by_order_bad(self): # Regression test of issue #392: columns of different lengths n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_RULES n.matching_choice.value = N.MATCH_BY_ORDER n.add_assignment() n.assignments[0].image_name.value = C0 n.assignments[1].image_name.value = C1 n.assignments[0].rule_filter.value = 'file does contain "%s"' % C0 n.assignments[1].rule_filter.value = 'file does contain "%s"' % C1 n.ipd_columns = \ [[cpp.ImagePlaneDetails("%s%d" % (C0, (3-i)), None, None, None, **m) for i, m in enumerate(md([(M0, 3)]))], [cpp.ImagePlaneDetails("%s%d" % (C1, i+1), None, None, None, **m) for i, m in enumerate(md([(M1, 2)]))]] data = { C0: [("%s%d" % (C0, i + 1), m) for i, m in enumerate(md([(M0, 2)]))], C1: [("%s%d" % (C1, i + 1), m) for i, m in enumerate(md([(M1, 2)]))] } additional = [("%sBad" % C0, {})] self.do_teest(n, data, [(cpmeas.IMAGE_NUMBER, )], [(C0, M0), (C1, M1)])
def test_01_00_01_all(self): n = N.NamesAndTypes() n.assignment_method.value = N.ASSIGN_ALL n.single_image_provider.value = C0 data = {C0: [("images/1.jpg", {M0: "1"})]} self.do_teest(n, data, [(cpmeas.IMAGE_NUMBER, )], [(M0, C0)])