def test_predict_gender(): assert predict_gender(x_coverage=10.2, y_coverage=8.1) == 'male' assert predict_gender(x_coverage=20.9, y_coverage=.01) == 'female' # shouldn't raise ``ZeroDivisionError`` assert predict_gender(x_coverage=5.12, y_coverage=0) == 'female' # what does this even mean? assert predict_gender(x_coverage=0, y_coverage=10) == 'unknown'
def sex_checker(self, group_id=None, sample_ids=None, include_coverage=False): """Predict gender based on coverage on X/Y chromosomes.""" # limit query on request query = limit_query(self.sex_chromosome_coverage(), group=group_id, samples=sample_ids) # group tuples (rows) based on first item (sample ID) samples = itertools.groupby(query, getitem(0)) for sample in samples: # extract X and Y coverage from the sample group sample_id, data_group = sample sex_coverage = [coverage for _, _, coverage in data_group] # run the predictor gender = predict_gender(*sex_coverage) if include_coverage: # return also raw coverage numbers yield sample_id, gender, sex_coverage[0], sex_coverage[1] else: yield sample_id, gender