Skip to content

Commit 9be20f2

Browse files
Initial commit
0 parents  commit 9be20f2

File tree

6 files changed

+98
-0
lines changed

6 files changed

+98
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
__pycache__/
2+
*.egg-info/
3+
.pytest_cache/
4+
dist/

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[build-system]
2+
build-backend = 'setuptools.build_meta'
3+
requires = ['setuptools >= 43.0.0']

setup.cfg

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[metadata]
2+
name = pango_aliasor
3+
version = 0.0.1
4+
author = Cornelius Roemer
5+
author_email = [email protected]
6+
description = Pango lineage aliasing and dealiasing
7+
url = https://github.com/corneliusroemer/pango_aliasor
8+
# project_urls =
9+
# Bug Tracker = https://github.com/pypa/sampleproject/issues
10+
classifiers =
11+
Programming Language :: Python :: 3
12+
Operating System :: OS Independent
13+
14+
[options]
15+
package_dir =
16+
= src
17+
packages = find:
18+
python_requires = >=3.7
19+
20+
[options.packages.find]
21+
where = src

src/pango_aliasor/__init__.py

Whitespace-only changes.

src/pango_aliasor/aliasor.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#%%
2+
class Aliasor:
3+
def __init__(self, alias_file=None):
4+
import pandas as pd
5+
6+
if alias_file is None:
7+
import importlib.resources
8+
9+
with importlib.resources.open_text("pango_designation", "alias_key.json") as file:
10+
aliases = pd.read_json(file)
11+
12+
else:
13+
aliases = pd.read_json(alias_file)
14+
15+
self.alias_dict = {}
16+
for column in aliases.columns:
17+
if column.startswith('X'):
18+
self.alias_dict[column] = column
19+
else:
20+
self.alias_dict[column] = aliases[column][0]
21+
22+
self.alias_dict['A'] = 'A'
23+
self.alias_dict['B'] = 'B'
24+
25+
self.realias_dict = {v: k for k, v in self.alias_dict.items()}
26+
27+
def compress(self,name):
28+
name_split = name.split('.')
29+
if len(name_split) < 5:
30+
return name
31+
letter = self.realias_dict[".".join(name_split[0:4])]
32+
if len(name_split) == 5:
33+
return letter + '.' + name_split[4]
34+
else:
35+
return letter + '.' + ".".join(name_split[4:])
36+
37+
def uncompress(self,name):
38+
name_split = name.split('.')
39+
letter = name_split[0]
40+
unaliased = self.alias_dict[letter]
41+
if len(name_split) == 1:
42+
return name
43+
if len(name_split) == 2:
44+
return unaliased + '.' + name_split[1]
45+
else:
46+
return unaliased + '.' + ".".join(name_split[1:])

tests/test_aliasor.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from pango_aliasor.aliasor import Aliasor
2+
3+
def test_pango_designation_init():
4+
aliasor = Aliasor()
5+
6+
def test_decompression():
7+
aliasor = Aliasor()
8+
assert aliasor.uncompress('BA.1') == 'B.1.1.529.1'
9+
assert aliasor.uncompress('AY.4') == 'B.1.617.2.4'
10+
assert aliasor.uncompress('AY.4.3.2') == 'B.1.617.2.4.3.2'
11+
assert aliasor.uncompress('B.1') == 'B.1'
12+
13+
def test_compression():
14+
aliasor = Aliasor()
15+
assert aliasor.compress('B.1.1.529.1') == 'BA.1'
16+
assert aliasor.compress('B.1.617.2.4') == 'AY.4'
17+
assert aliasor.compress('B.1.617.2.4.3.1') == 'AY.4.3.1'
18+
assert aliasor.compress('B.1.617.2') == 'B.1.617.2'
19+
assert aliasor.compress('B.1') == 'B.1'
20+
21+
def test_except_recombinants():
22+
aliasor = Aliasor()
23+
assert aliasor.uncompress('XA.1') == 'XA.1'
24+
assert aliasor.compress('XA.1') == 'XA.1'

0 commit comments

Comments
 (0)