@@ -1402,11 +1402,11 @@ def fx_ts_exact_matches(fx_ts_map, fx_match_db):
14021402 return tsp
14031403
14041404
1405- class TestMapDeletions :
1405+ class TestMapParsimony :
14061406 def test_example (self , fx_ts_map , fx_dataset ):
14071407 ts = fx_ts_map ["2020-02-13" ]
14081408 sites = [1547 , 3951 , 3952 , 3953 ]
1409- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1409+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
14101410 report = result .report
14111411 assert list (report .site .values ) == sites
14121412 assert np .all (report .old == 1 )
@@ -1422,7 +1422,7 @@ def test_example(self, fx_ts_map, fx_dataset):
14221422 def test_example_minimised_md (self , fx_ts_min_2020_02_15 , fx_dataset ):
14231423 ts = fx_ts_min_2020_02_15
14241424 sites = [1547 , 3951 , 3952 , 3953 ]
1425- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1425+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
14261426 report = result .report
14271427 assert list (report .site .values ) == sites
14281428 assert np .all (report .old == 1 )
@@ -1438,7 +1438,7 @@ def test_example_minimised_md(self, fx_ts_min_2020_02_15, fx_dataset):
14381438 def test_example_minimised_zero_sites (self , fx_ts_min_2020_02_15 , fx_dataset ):
14391439 ts = fx_ts_min_2020_02_15
14401440 sites = []
1441- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1441+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
14421442 report = result .report
14431443 assert report .shape [0 ] == 0
14441444 ts .tables .assert_equals (
@@ -1447,33 +1447,60 @@ def test_example_minimised_zero_sites(self, fx_ts_min_2020_02_15, fx_dataset):
14471447
14481448 def test_empty (self , fx_ts_map , fx_dataset ):
14491449 ts = fx_ts_map ["2020-02-13" ]
1450- result = sc2ts .map_deletions (ts , fx_dataset , [])
1450+ result = sc2ts .map_parsimony (ts , fx_dataset , [])
14511451 ts .tables .assert_equals (
14521452 result .tree_sequence .tables , ignore_metadata = True , ignore_provenance = True
14531453 )
14541454 assert result .report .shape [0 ] == 0
14551455
14561456 def test_empty_all_sites (self , fx_ts_map , fx_dataset ):
14571457 ts = fx_ts_map ["2020-02-13" ]
1458- result = sc2ts .map_deletions (ts , fx_dataset )
1458+ result = sc2ts .map_parsimony (ts , fx_dataset )
14591459 assert result .report .shape [0 ] == ts .num_sites
14601460
1461- def test_missing_site (self , fx_ts_map , fx_dataset ):
1461+ def test_missing_sites (self , fx_ts_map , fx_dataset ):
14621462 ts = fx_ts_map ["2020-02-13" ]
14631463 missing_positions = [56 , 57 , 58 , 59 , 60 ]
14641464 assert len (set (missing_positions ) & set (ts .sites_position .astype (int ))) == 0
14651465
1466- result = sc2ts .map_deletions (ts , fx_dataset , missing_positions )
1466+ result = sc2ts .map_parsimony (ts , fx_dataset , missing_positions )
1467+ assert (
1468+ len (
1469+ set (missing_positions )
1470+ & set (result .tree_sequence .sites_position .astype (int ))
1471+ )
1472+ == 5
1473+ )
1474+ assert list (result .report .site ) == missing_positions
1475+ assert np .all (result .report .old == 0 )
1476+ assert np .all (result .report .new == 0 )
1477+ assert np .all (result .report .intersection == 0 )
1478+
1479+ def test_readd_existing_site (self , fx_ts_map , fx_dataset ):
1480+ ts = fx_ts_map ["2020-02-13" ]
1481+ site = ts .site (position = 203 )
1482+ assert len (site .mutations ) == 1
1483+ ts_del = ts .delete_sites ([site .id ])
1484+
1485+ result = sc2ts .map_parsimony (ts_del , fx_dataset , [site .position ])
1486+ new_site = result .tree_sequence .site (position = site .position )
1487+ assert new_site .ancestral_state == site .ancestral_state
1488+ assert new_site .position == site .position
1489+ assert new_site .id == site .id
1490+
14671491 ts .tables .assert_equals (
14681492 result .tree_sequence .tables , ignore_metadata = True , ignore_provenance = True
14691493 )
1470- assert result .report .shape [0 ] == 0
1494+ assert result .report .shape [0 ] == 1
1495+ assert np .all (result .report .old == 0 )
1496+ assert np .all (result .report .new == 1 )
1497+ assert np .all (result .report .intersection == 0 )
14711498
14721499 def test_example_exact_matches (self , fx_ts_exact_matches , fx_dataset ):
14731500 ts = fx_ts_exact_matches
14741501 sites = [1547 , 3951 , 3952 , 3953 ]
1475- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1476- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1502+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
1503+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
14771504 report = result .report
14781505 assert list (report .site .values ) == sites
14791506 assert np .all (report .old == 1 )
@@ -1483,18 +1510,18 @@ def test_example_exact_matches(self, fx_ts_exact_matches, fx_dataset):
14831510 def test_validate (self , fx_ts_map , fx_dataset ):
14841511 ts = fx_ts_map ["2020-02-13" ]
14851512 sites = [1547 , 3951 , 3952 , 3953 ]
1486- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1513+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
14871514 sc2ts .validate (result .tree_sequence , fx_dataset , deletions_as_missing = False )
14881515
14891516 def test_provenance (self , fx_ts_map , fx_dataset ):
14901517 ts = fx_ts_map ["2020-02-13" ]
14911518 sites = [1547 , 3951 , 3952 , 3953 ]
1492- result = sc2ts .map_deletions (ts , fx_dataset , sites )
1519+ result = sc2ts .map_parsimony (ts , fx_dataset , sites )
14931520 tsp = result .tree_sequence
14941521 assert tsp .num_provenances == ts .num_provenances + 1
14951522 prov = tsp .provenance (- 1 )
14961523 assert json .loads (prov .record )["parameters" ] == {
1497- "command" : "map_deletions " ,
1524+ "command" : "map_parsimony " ,
14981525 "dataset" : str (fx_dataset .path ),
14991526 "sites" : sites ,
15001527 }
0 commit comments