def _trials(recon_input: _ReconInput, dup_cost: float, transfer_cost: float,
            loss_cost: float, num_trials: int) -> list:
    """
    :param recon_input <_ReconInput> - class containing host tree, parasite tree, tip mapping
    :param dup_cost <float> - duplication cost
    :param transfer_cost <float> - transfer cost
    :param loss_cost <float> -loss cost
    :param num_trials <int> - number of trials in Monte Carlo simulation
    :return: list of floating point costs of reconciliations of the Monte Carlo samples
    """

    costs = list()  # List of costs of random trials
    parasites = recon_input.tip_mapping.keys()
    hosts = list(recon_input.tip_mapping.values())
    for t in range(num_trials):
        random_phi = _create_random_phi(recon_input.tip_mapping)
        for p in parasites:
            h = random.choice(hosts)
            random_phi[p] = h
        new_input = _ReconInput(recon_input.host_dict, None,
                                recon_input.parasite_dict, None, random_phi)
        _, cost, _, _ = recongraph_tools.DP(new_input, dup_cost, transfer_cost,
                                            loss_cost)
        costs.append(cost)
    return costs
    def test_write_to_file(self):
        recon_input = input_reader._ReconInput(self.example_host, None, self.example_parasite, None,
                                               self.example_valid_mapping)
        host_save_path = "./temp_host.tree"
        parasite_save_path = "./temp_parasite.tree"
        tip_mapping_save_path = "./temp_mapping.mapping"

        recon_input.save_to_files(host_save_path, parasite_save_path, tip_mapping_save_path)

        os.path.exists(host_save_path)
        os.path.exists(parasite_save_path)
        os.path.exists(tip_mapping_save_path)

        result_input = input_reader._ReconInput.from_files(host_save_path, parasite_save_path, tip_mapping_save_path)
        self.assertEqual(self.example_host, result_input.host_dict)
        self.assertEqual(self.example_parasite, result_input.parasite_dict)
        self.assertEqual(self.example_valid_mapping, result_input.tip_mapping)

        os.remove(host_save_path)
        os.remove(parasite_save_path)
        os.remove(tip_mapping_save_path)
 def test_read_invalid_tip_error(self):
     recon_input = input_reader._ReconInput()
     recon_input.read_host(self.example_host_file)
     recon_input.read_parasite(self.example_parasite_file)
     self.assertRaises(input_reader.ReconInputError, recon_input.read_mapping, self.example_invalid_mapping_file)
 def test_read_success(self):
     recon_input = input_reader._ReconInput()
     recon_input.read_host(self.example_host_file)
     recon_input.read_parasite(self.example_parasite_file)
     recon_input.read_mapping(self.example_mapping_file)
     self.assertTrue(recon_input.is_complete())
 def test_init_success(self):
     recon_input = input_reader._ReconInput(self.example_host, None, self.example_parasite, None,
                                            self.example_valid_mapping)
     self.assertTrue(recon_input.is_complete())
 def test_init_empty(self):
     recon_input = input_reader._ReconInput()
     self.assertTrue(isinstance(recon_input, input_reader._ReconInput))
     self.assertIsNone(recon_input.host_dict)
     self.assertIsNone(recon_input.parasite_dict)
     self.assertIsNone(recon_input.tip_mapping)