コード例 #1
0
class AlphaPlottingAltTestCase(MockedJsonifyTestCase):
    jsonify_to_patch = [
        'microsetta_public_api.api.plotting.jsonify',
        'microsetta_public_api.utils._utils.jsonify',
    ]

    def setUp(self):
        super().setUp()
        faith_pd_values = [1, 2, 3, 4]
        faith_pd_index = ['s01', 's02', 's04', 's05']
        shannon_values = [7.24, 9.05, 8.25]
        shannon_index = ['s01', 's02', 'sOther']
        metadata = MockMetadataElement(
            pd.DataFrame(
                {
                    'age_cat': ['30s', '40s', '50s', '30s', '30s'],
                    'num_var': [3, 4, 5, 6, 7],
                },
                index=['s01', 's02', 's04', 's05', 'sOther']))
        self.resources = DictElement({
            'datasets':
            DictElement({
                'dataset1':
                DictElement({
                    '__metadata__':
                    metadata,
                    '__alpha__':
                    AlphaElement({
                        'faith_pd':
                        pd.Series(faith_pd_values, index=faith_pd_index),
                        'shannon':
                        pd.Series(shannon_values, index=shannon_index),
                    })
                }),
                'dataset2':
                DictElement({
                    '__metadata__': metadata,
                }),
            }),
        })
        self.resources.accept(TrivialVisitor())
        self.res_patcher = patch(
            'microsetta_public_api.api.plotting.get_resources')
        self.mock_resources = self.res_patcher.start()
        self.mock_resources.return_value = self.resources

    def test_simple_plot(self):
        response, code = plot_alpha_filtered_alt(dataset='dataset1',
                                                 alpha_metric='faith_pd')

        self.assertEqual(200, code)

    def test_simple_plot_with_vertline_for_sample_id(self):
        response, code = plot_alpha_filtered_alt(dataset='dataset1',
                                                 alpha_metric='faith_pd',
                                                 sample_id='s01')

        self.assertEqual(200, code)
コード例 #2
0
def atomic_update_resources(resource):
    # create a new element to store the data in
    element = DictElement()
    element.update(resource)
    visitor = Q2Visitor()
    element.accept(visitor)
    # after data has been loaded by the q2 visitor, update resources_alt
    #  so that it is accessible.
    # Updating resources_alt from another element means the server will
    #  not show the skeleton of any unloaded data to the client
    resources_alt.update(element)
コード例 #3
0
class BetaTests(MockedJsonifyTestCase):

    jsonify_to_patch = [
        'microsetta_public_api.api.diversity.beta.jsonify',
        'microsetta_public_api.utils._utils.jsonify',
    ]

    def setUp(self):
        super().setUp()
        neighbors = pd.DataFrame([['s2', 's3', 's4'], ['s1', 's3', 's4'],
                                  ['s1', 's2', 's4'], ['s1', 's2', 's3']],
                                 columns=['k0', 'k1', 'k2'],
                                 index=['s1', 's2', 's3', 's4'])
        neighbors.index.name = 'sample_id'

        self.resources = DictElement({
            'datasets':
            DictElement({
                'dataset1':
                DictElement(
                    {'__neighbors__': BetaElement({'unifrac': neighbors})}),
            }),
        })
        self.resources.accept(TrivialVisitor())
        self.res_patcher = patch(
            'microsetta_public_api.api.diversity.beta.get_resources')
        self.mock_resources = self.res_patcher.start()
        self.mock_resources.return_value = self.resources

    def tearDown(self):
        self.res_patcher.stop()
        super().tearDown()

    def test_k_nearest(self):
        results, code = k_nearest(dataset='dataset1',
                                  beta_metric='unifrac',
                                  k=1,
                                  sample_id='s1')
        self.assertCountEqual(json.loads(results), ['s2'])

        results, code = k_nearest(dataset='dataset1',
                                  beta_metric='unifrac',
                                  k=2,
                                  sample_id='s2')
        self.assertCountEqual(json.loads(results), ['s1', 's3'])

    def test_k_nearest_unknown_dataset(self):
        with self.assertRaises(UnknownResource):
            k_nearest(dataset='dne',
                      beta_metric='unifrac',
                      k=2,
                      sample_id='s2')

    def test_k_nearest_unknown_metric(self):
        with self.assertRaises(UnknownMetric):
            k_nearest(dataset='dataset1',
                      beta_metric='unifork',
                      k=2,
                      sample_id='s2')

    def test_k_nearest_unknown_id(self):
        with self.assertRaises(UnknownID):
            k_nearest(dataset='dataset1',
                      beta_metric='unifrac',
                      k=2,
                      sample_id='s2-dne')

    def test_k_nearest_invalid_k(self):
        with self.assertRaises(InvalidParameter):
            k_nearest(dataset='dataset1',
                      beta_metric='unifrac',
                      k=724,
                      sample_id='s2')
コード例 #4
0
class AlphaAltTests(MockedJsonifyTestCase):

    jsonify_to_patch = [
        'microsetta_public_api.api.diversity.alpha.jsonify',
        'microsetta_public_api.utils._utils.jsonify',
    ]

    def setUp(self):
        super().setUp()
        faith_pd_values = [1, 2, 3, 4]
        faith_pd_index = ['s01', 's02', 's04', 's05']
        shannon_values = [7.24, 9.05, 8.25]
        shannon_index = ['s01', 's02', 'sOther']
        metadata = MockMetadataElement(
            pd.DataFrame(
                {
                    'age_cat': ['30s', '40s', '50s', '30s', '30s'],
                    'num_var': [3, 4, 5, 6, 7],
                },
                index=['s01', 's02', 's04', 's05', 'sOther']))
        self.resources = DictElement({
            'datasets':
            DictElement({
                'dataset1':
                DictElement({
                    '__metadata__':
                    metadata,
                    '__alpha__':
                    AlphaElement({
                        'faith_pd':
                        pd.Series(faith_pd_values, index=faith_pd_index),
                        'shannon':
                        pd.Series(shannon_values, index=shannon_index),
                    })
                }),
                'dataset2':
                DictElement({
                    '__metadata__': metadata,
                }),
            }),
        })
        self.resources.accept(TrivialVisitor())
        self.res_patcher = patch(
            'microsetta_public_api.api.diversity.alpha.get_resources')
        self.mock_resources = self.res_patcher.start()
        self.mock_resources.return_value = self.resources

    def tearDown(self):
        self.res_patcher.stop()
        super().tearDown()

    def test_availalbe_metrics_alt(self):
        response, code = available_metrics_alpha_alt('dataset1')
        avail = json.loads(response)
        self.assertEqual(200, code)
        self.assertDictEqual(avail, {'alpha_metrics': ['faith_pd', 'shannon']})
        with self.assertRaises(UnknownResource):
            # check for dataset that exists but has no alpha
            available_metrics_alpha_alt('dataset2')
        with self.assertRaises(UnknownResource):
            # check for dataset that does not exist
            available_metrics_alpha_alt('dataset3')

    def test_get_alpha_alt(self):
        faith_pd, code1 = get_alpha_alt('dataset1', 's01', 'faith_pd')
        shannon, code2 = get_alpha_alt('dataset1', 's02', 'shannon')
        faith_pd_value = json.loads(faith_pd)
        shannon_value = json.loads(shannon)
        self.assertEqual(faith_pd_value['data'], 1)
        self.assertEqual(200, code1)
        self.assertEqual(shannon_value['data'], 9.05)
        self.assertEqual(200, code2)

    def test_get_alpha_alt_404(self):
        with self.assertRaisesRegex(UnknownResource, 'dataset3'):
            get_alpha_alt('dataset3', 's03', 'faith_pd')
        with self.assertRaisesRegex(UnknownResource, '__alpha__'):
            get_alpha_alt('dataset2', 's03', 'faith_pd')

    def test_alpha_group_alt(self):
        request = {'sample_ids': ['s01', 's04']}
        response, code = alpha_group_alt(request,
                                         'dataset1',
                                         'faith_pd',
                                         return_raw=True)
        self.assertEqual(code, 200)
        obs = json.loads(response)
        self.assertDictEqual({'s01': 1, 's04': 3}, obs['alpha_diversity'])

    def test_alpha_group_alt_404_sample_id(self):
        request = {'sample_ids': ['s01', 'dne']}
        with self.assertRaises(UnknownID):
            alpha_group_alt(request, 'dataset1', 'faith_pd', return_raw=True)

    def test_alpha_group_alt_404_metric(self):
        request = {'sample_ids': ['s01', 's04']}
        with self.assertRaises(UnknownResource):
            alpha_group_alt(request, 'dataset1', 'bad-metric', return_raw=True)

    def test_alpha_group_alt_filter_metadata_OR(self):
        post_body = {
            'sample_ids': [
                's04',
            ],
            'metadata_query': {
                "condition":
                "AND",
                "rules": [
                    {
                        "id": "age_cat",
                        "field": "age_cat",
                        "operator": "equal",
                        "value": "30s",
                    },
                ],
            },
            'condition': "OR",
        }
        response, code = alpha_group_alt(post_body,
                                         'dataset1',
                                         'faith_pd',
                                         return_raw=True)
        obs = json.loads(response)
        self.assertEqual(code, 200)
        sample_ids = obs['alpha_diversity'].keys()
        self.assertCountEqual(['s01', 's04', 's05'], sample_ids)

    def test_alpha_exists_single_alt(self):
        response, code = exists_single_alt('dataset1', 'faith_pd', 's01')
        self.assertEqual(code, 200)
        obs = json.loads(response)
        self.assertTrue(obs)

        response, code = exists_single_alt('dataset1', 'faith_pd', 's-dne')
        self.assertEqual(code, 200)
        obs = json.loads(response)
        self.assertFalse(obs)

        response, code = exists_single_alt('dataset1', 'shannon', 's03')
        self.assertEqual(code, 200)
        obs = json.loads(response)
        self.assertFalse(obs)

    def test_alpha_exists_single_alt_errors(self):
        with self.assertRaises(UnknownResource):
            exists_single_alt('dataset2', 'shannon', 's03')

        with self.assertRaises(UnknownResource):
            exists_single_alt('dataset1', 'dne-metric', 's03')

    def test_alpha_exists_group_alt(self):
        body = ['s01', 's03', 's04']
        response, code = exists_group_alt(body, 'dataset1', 'faith_pd')
        self.assertEqual(code, 200)
        obs = json.loads(response)
        self.assertListEqual(obs, [True, False, True])

    def test_alpha_exists_group_alt_errors(self):
        body = ['s01', 's03', 's04']
        with self.assertRaises(UnknownResource):
            exists_group_alt(body, 'dataset2', 'faith_pd')

        with self.assertRaises(UnknownResource):
            exists_group_alt(body, 'dataset1', 'dne-metric')
コード例 #5
0
class BetaTests(MockedJsonifyTestCase):

    jsonify_to_patch = [
        'microsetta_public_api.api.diversity.beta.jsonify',
        'microsetta_public_api.utils._utils.jsonify',
    ]

    def setUp(self):
        super().setUp()
        dm_values = [[0, 1, 2, 3], [1, 0, 3, 4], [2, 3, 0, 5], [3, 4, 5, 0]]
        ids = ['s1', 's2', 's3', 's4']
        dm = DistanceMatrix(
            dm_values,
            ids=ids,
        )
        self.resources = DictElement({
            'datasets':
            DictElement({
                'dataset1':
                DictElement({'__beta__': BetaElement({'unifrac': dm})}),
            }),
        })
        self.resources.accept(TrivialVisitor())
        self.res_patcher = patch(
            'microsetta_public_api.api.diversity.beta.get_resources')
        self.mock_resources = self.res_patcher.start()
        self.mock_resources.return_value = self.resources

    def tearDown(self):
        self.res_patcher.stop()
        super().tearDown()

    def test_k_nearest(self):
        results, code = k_nearest(dataset='dataset1',
                                  beta_metric='unifrac',
                                  k=1,
                                  sample_id='s1')
        self.assertCountEqual(json.loads(results), ['s2'])

        results, code = k_nearest(dataset='dataset1',
                                  beta_metric='unifrac',
                                  k=2,
                                  sample_id='s2')
        self.assertCountEqual(json.loads(results), ['s1', 's3'])

    def test_k_nearest_unknown_dataset(self):
        with self.assertRaises(UnknownResource):
            k_nearest(dataset='dne',
                      beta_metric='unifrac',
                      k=2,
                      sample_id='s2')

    def test_k_nearest_unknown_metric(self):
        with self.assertRaises(UnknownMetric):
            k_nearest(dataset='dataset1',
                      beta_metric='unifork',
                      k=2,
                      sample_id='s2')

    def test_k_nearest_unknown_id(self):
        with self.assertRaises(UnknownID):
            k_nearest(dataset='dataset1',
                      beta_metric='unifrac',
                      k=2,
                      sample_id='s2-dne')

    def test_k_nearest_invalid_k(self):
        with self.assertRaises(InvalidParameter):
            k_nearest(dataset='dataset1',
                      beta_metric='unifrac',
                      k=724,
                      sample_id='s2')