def test_big_file(self):
        epidb = DeepBlueClient(address="localhost", port=31415)
        self.init_base(epidb)

        f = gzip.open("data/bedgraph/bigwig.bg.gz")
        data = f.read()
        (status, a1) = epidb.add_annotation("exp_wig", "hg19", "bla", data,
                                            "bedgraph", None, self.admin_key)

        (status, q1) = epidb.select_annotations("exp_wig", "hg19", None, None,
                                                None, self.admin_key)

        status, r1 = epidb.binning(q1, "VALUE", 5, self.admin_key)
        binning = self.get_regions_request(r1)
        self.assertEqual(
            binning, {
                'binning': {
                    'ranges': [
                        -1126.72, -726.6238, -326.5276, 73.5686, 473.6648,
                        873.761
                    ],
                    'counts': [8, 5, 3992582, 3489, 13]
                }
            })

        to_filter_low = binning["binning"]["ranges"][2]
        status, filtered = epidb.filter_regions(q1, "VALUE", ">",
                                                str(to_filter_low), "number",
                                                self.admin_key)

        to_filter_high = binning["binning"]["ranges"][4]
        status, filtered = epidb.filter_regions(q1, "VALUE", "<",
                                                str(to_filter_high), "number",
                                                self.admin_key)

        status, r_filtered = epidb.binning(filtered, "VALUE", 10,
                                           self.admin_key)
        binning = self.get_regions_request(r_filtered)
        self.assertEqual(
            binning, {
                'binning': {
                    'counts': [4, 4, 1, 2, 2, 17, 1, 3932813, 772, 119],
                    'ranges': [
                        -1126.72, -967.0013, -807.2826, -647.5638, -487.8452,
                        -328.1265, -168.4077, -8.689, 151.0297, 310.7484,
                        470.4671
                    ]
                }
            })
    def test_basic_binning(self):
        epidb = DeepBlueClient(address="localhost", port=31415)
        self.init_base(epidb)

        sample_id = self.sample_ids[0]
        self.insert_experiment(epidb, "hg19_big_2", sample_id)

        res, qid = epidb.select_regions("hg19_big_2", "hg19", None, None, None,
                                        None, None, None, None, self.admin_key)
        self.assertSuccess(res, qid)

        status, req = epidb.binning(qid, "P_VALUE", 5, self.admin_key)
        self.assertSuccess(status, req)

        binning = self.get_regions_request(req)
        self.assertEquals(
            binning, {
                'binning': {
                    'ranges':
                    [2.0006, 37.8473, 73.6939, 109.5406, 145.3873, 181.234],
                    'counts': [63506, 2632, 3111, 6626, 1668]
                }
            })

        sample_id = self.sample_ids[0]
        self.insert_experiment(epidb, "hg19_big_1", sample_id)

        res, qid = epidb.select_regions("hg19_big_1", "hg19", None, None, None,
                                        None, None, None, None, self.admin_key)
        self.assertSuccess(res, qid)

        status, req = epidb.binning(qid, "P_VALUE", 5, self.admin_key)
        self.assertSuccess(status, req)

        binning = self.get_regions_request(req)
        self.assertEquals(
            binning, {
                'binning': {
                    'ranges':
                    [2.0017, 41.3178, 80.6338, 119.9499, 159.2659, 198.582],
                    'counts': [39349, 2824, 2510, 5325, 4299]
                }
            })

        status, req = epidb.binning(qid, "P_VALUE", 0, self.admin_key)
        self.assertFailure(status, req)

        status, req = epidb.binning(qid, "P_VALUE", -1, self.admin_key)
        self.assertFailure(status, req)

        status, req = epidb.binning(qid, "P_VALUE", 66666, self.admin_key)
        self.assertFailure(status, req)

        res, qid = epidb.select_regions("hg19_big_1", "hg19", None, None, None,
                                        None, None, None, None, self.admin_key)
        self.assertSuccess(res, qid)

        status, req = epidb.binning(qid, "QEERR", 5, self.admin_key)
        self.assertSuccess(status, req)

        msg = self.get_regions_request_error(req)
        status, msg = epidb.get_request_data(req, self.admin_key)
        self.assertEqual(
            msg,
            "101007:The experiment 'hg19_big_1' does not have the column 'QEERR'."
        )