def test_compute_ordination_correlation(self):
        """Functions correctly using valid input."""
        # Defaults.
        exp = (1.0, 0.0)
        obs = compute_ordination_correlation(self.map1, self.coords1,
                                             self.category1)
        self.assertFloatEqual(obs[:2], exp)
        self.assertIsProb(float(obs[2]))

        # Spearman with second axis.
        exp = (0.4, 0.6)
        obs = compute_ordination_correlation(self.map1, self.coords1,
                                             self.category1,
                                             axis=2,
                                             correlation_type='spearman')
        self.assertFloatEqual(obs[:2], exp)
        self.assertIsProb(float(obs[2]))

        # No permutations.
        exp = (1.0, 0.0, 'N/A')
        obs = compute_ordination_correlation(self.map1, self.coords1,
                                             self.category1,
                                             num_permutations=0)
        self.assertFloatEqual(obs, exp)

        # Few permutations.
        exp = (1.0, 0.0, 'Too few iters to compute p-value (num_iters=1)')
        obs = compute_ordination_correlation(self.map1, self.coords1,
                                             self.category1,
                                             num_permutations=1)
        self.assertEqual(obs, exp)
def main():
    option_parser, opts, args = parse_command_line_parameters(**script_info)

    output_dir = opts.output_dir
    create_dir(output_dir)

    map_f = open(opts.map_fp, 'U')
    coord_f = open(opts.coord_fp, 'U')

    results = compute_ordination_correlation(map_f, coord_f, opts.category,
            opts.axis, opts.type, opts.num_permutations)

    header = ['Correlation coefficient', 'Parametric p-value',
              'Nonparametric p-value']
    with open(join(output_dir, 'ord_corr_results.txt'), 'w') as output_f:
        output_f.write('\t'.join(header) + '\n')
        output_f.write('%.4f\t%.4f\t%s\n' % results)
    def test_compute_ordination_correlation_invalid_input(self):
        """Correctly handles invalid input."""
        # category
        with self.assertRaises(ValueError):
            compute_ordination_correlation(self.map1, self.coords1, 'foo')

        # category state
        with self.assertRaises(ValueError):
            compute_ordination_correlation(self.map1, self.coords1,
                                           'Treatment')

        # axis
        with self.assertRaises(ValueError):
            compute_ordination_correlation(self.map1, self.coords1,
                                           self.category1, axis=-1)
        with self.assertRaises(ValueError):
            compute_ordination_correlation(self.map1, self.coords1,
                                           self.category1, axis=4)

        # correlation_type
        with self.assertRaises(ValueError):
            compute_ordination_correlation(self.map1, self.coords1,
                                           self.category1,
                                           correlation_type='foo')

        # num_permutations
        with self.assertRaises(ValueError):
            compute_ordination_correlation(self.map1, self.coords1,
                                           self.category1,
                                           num_permutations=-1)