From a7430fda2ae8cea0ecce9dbc8550c696a4df6e8c Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Thu, 14 May 2026 00:55:22 +0300 Subject: [PATCH 1/4] Eponym rules for Arp, Fairall, Holmberg, Markarian objects --- tests/test_designation_rules.py | 14 +++++++++ tests/test_upload.py | 4 +-- uploader/app/structured/designations/rules.py | 29 +++++++++++++++++++ .../app/structured/designations/upload.py | 10 +++---- uploader/app/structured/icrs/upload.py | 12 ++++---- uploader/app/structured/nature/upload.py | 10 +++---- uploader/app/structured/note.py | 5 ++-- uploader/app/structured/photometry/upload.py | 14 ++++----- uploader/app/structured/redshift/upload.py | 12 ++++---- 9 files changed, 77 insertions(+), 33 deletions(-) diff --git a/tests/test_designation_rules.py b/tests/test_designation_rules.py index 40bee16..e501f59 100644 --- a/tests/test_designation_rules.py +++ b/tests/test_designation_rules.py @@ -405,6 +405,20 @@ ("[CZ2003]1631A-0393:050", ("[REF] *", "[CZ2003] 1631A-0393:050")), ("[XYZ2020] foo bar ", ("[REF] *", "[XYZ2020] foo bar")), ("[ABC123]no space", ("[REF] *", "[ABC123] no space")), + ("MAFFEI 2", ("Eponym N", "Maffei 2")), + ("Maffei 1", ("Eponym N", "Maffei 1")), + ("ARP102", ("Eponym N", "Arp 102")), + ("HoII", ("Eponym N", "Holmberg 2")), + ("Holm VI", ("Eponym N", "Holmberg 6")), + ("HolmbergI", ("Eponym N", "Holmberg 1")), + ("Holm 4", ("Eponym N", "Holmberg 4")), + ("Ho3", ("Eponym N", "Holmberg 3")), + ("Fairall678", ("Eponym N", "Frl 678")), + ("Fair 0234", ("Eponym N", "Frl 234")), + ("Frl0005", ("Eponym N", "Frl 5")), + ("Mkn 123", ("Eponym N", "Mrk 123")), + ("Mrk456", ("Eponym N", "Mrk 456")), + ("Markarian 007", ("Eponym N", "Mrk 7")), ("", None), ] diff --git a/tests/test_upload.py b/tests/test_upload.py index f948212..156c993 100644 --- a/tests/test_upload.py +++ b/tests/test_upload.py @@ -5,12 +5,12 @@ import pandas import pytest +from uploader.clients.gen.client import adminapi +from uploader.clients.gen.client.adminapi import models, types from uploader.app.interface import UploaderSource from uploader.app.sources.csv import CSVSource from uploader.app.upload import upload -from uploader.clients.gen.client import adminapi -from uploader.clients.gen.client.adminapi import models, types class StubPlugin(UploaderSource): diff --git a/uploader/app/structured/designations/rules.py b/uploader/app/structured/designations/rules.py index aced86b..595aa72 100644 --- a/uploader/app/structured/designations/rules.py +++ b/uploader/app/structured/designations/rules.py @@ -243,6 +243,35 @@ def match(self, value: str) -> str | None: ), replacement="J{0}{1}{2}{3}{4}{5}{6}", ), + NameRule( + name="Eponym N", + pattern=re.compile(r"^Arp\s*0*(\d{1,3})$", re.IGNORECASE), + replacement="Arp {0}", + ), + NameRule( + name="Eponym N", + pattern=re.compile(r"^(?:Frl|Fair|Fairall)\s*0*(\d{1,4})$", re.IGNORECASE), + replacement="Frl {0}", + ), + NameRule( + name="Eponym N", + pattern=re.compile(r"^Maffei\s*([12])$", re.IGNORECASE), + replacement="Maffei {0}", + ), + NameRule( + name="Eponym N", + pattern=re.compile(r"^(?:Mkn|Mrk|Markarian|Markarjan)\s*0*(\d{1,4})$", re.IGNORECASE), + replacement="Mrk {0}", + ), + NameRule( + name="Eponym N", + pattern=re.compile( + r"^(?:Ho|Holm|Holmberg)\s*(\d|[IVX]+)$", + re.IGNORECASE, + ), + replacement="", + replacer=lambda m: f"Holmberg {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", + ), NameRule( name="CAT JHHMMSS.sss+DDMMSS.sss", pattern=re.compile( diff --git a/uploader/app/structured/designations/upload.py b/uploader/app/structured/designations/upload.py index 1fab55f..12cfedb 100644 --- a/uploader/app/structured/designations/upload.py +++ b/uploader/app/structured/designations/upload.py @@ -1,6 +1,11 @@ from collections.abc import Callable from psycopg import sql +from uploader.clients.gen.client import adminapi +from uploader.clients.gen.client.adminapi.api.default import save_structured_data +from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( + SaveStructuredDataRequest, +) import uploader.app.report as report from uploader.app import log @@ -9,11 +14,6 @@ from uploader.app.storage import PgStorage from uploader.app.structured.designations.rules import RULES, match from uploader.app.upload import handle_call -from uploader.clients.gen.client import adminapi -from uploader.clients.gen.client.adminapi.api.default import save_structured_data -from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( - SaveStructuredDataRequest, -) def upload_designations( diff --git a/uploader/app/structured/icrs/upload.py b/uploader/app/structured/icrs/upload.py index 4662ac7..e569714 100644 --- a/uploader/app/structured/icrs/upload.py +++ b/uploader/app/structured/icrs/upload.py @@ -1,12 +1,6 @@ from collections.abc import Callable from psycopg import sql - -import uploader.app.report as report -from uploader.app.display import format_table -from uploader.app.lib.rawdata import rawdata_batches -from uploader.app.storage import PgStorage -from uploader.app.upload import handle_call from uploader.clients.gen.client import adminapi from uploader.clients.gen.client.adminapi.api.default import get_table, save_structured_data from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( @@ -16,6 +10,12 @@ SaveStructuredDataRequestUnits, ) +import uploader.app.report as report +from uploader.app.display import format_table +from uploader.app.lib.rawdata import rawdata_batches +from uploader.app.storage import PgStorage +from uploader.app.upload import handle_call + ICRS_COLUMNS = ["ra", "dec", "e_ra", "e_dec"] diff --git a/uploader/app/structured/nature/upload.py b/uploader/app/structured/nature/upload.py index 6b23335..0128bff 100644 --- a/uploader/app/structured/nature/upload.py +++ b/uploader/app/structured/nature/upload.py @@ -2,17 +2,17 @@ from collections.abc import Callable from psycopg import sql +from uploader.clients.gen.client import adminapi +from uploader.clients.gen.client.adminapi.api.default import save_structured_data +from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( + SaveStructuredDataRequest, +) import uploader.app.report as report from uploader.app.display import format_table from uploader.app.lib.rawdata import rawdata_batches from uploader.app.storage import PgStorage from uploader.app.upload import handle_call -from uploader.clients.gen.client import adminapi -from uploader.clients.gen.client.adminapi.api.default import save_structured_data -from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( - SaveStructuredDataRequest, -) NATURE_COLUMNS = ["type_name"] diff --git a/uploader/app/structured/note.py b/uploader/app/structured/note.py index 4864f65..34483b1 100644 --- a/uploader/app/structured/note.py +++ b/uploader/app/structured/note.py @@ -1,13 +1,14 @@ from collections.abc import Callable -import uploader.app.report as report -from uploader.app.upload import handle_call from uploader.clients.gen.client import adminapi from uploader.clients.gen.client.adminapi.api.default import save_structured_data from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( SaveStructuredDataRequest, ) +import uploader.app.report as report +from uploader.app.upload import handle_call + NOTE_COLUMNS = ["note"] diff --git a/uploader/app/structured/photometry/upload.py b/uploader/app/structured/photometry/upload.py index 416e08c..8bd0253 100644 --- a/uploader/app/structured/photometry/upload.py +++ b/uploader/app/structured/photometry/upload.py @@ -1,13 +1,6 @@ from collections.abc import Callable from psycopg import sql - -import uploader.app.report as report -from uploader.app import log -from uploader.app.display import format_table -from uploader.app.lib.rawdata import rawdata_batches -from uploader.app.storage import PgStorage -from uploader.app.upload import handle_call from uploader.clients.gen.client import adminapi from uploader.clients.gen.client.adminapi.api.default import save_structured_data from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( @@ -17,6 +10,13 @@ SaveStructuredDataRequestUnits, ) +import uploader.app.report as report +from uploader.app import log +from uploader.app.display import format_table +from uploader.app.lib.rawdata import rawdata_batches +from uploader.app.storage import PgStorage +from uploader.app.upload import handle_call + PHOTOMETRY_COLUMNS = ["band", "mag", "e_mag", "method"] PHOTOMETRY_UNITS = SaveStructuredDataRequestUnits.from_dict({"mag": "mag", "e_mag": "mag"}) diff --git a/uploader/app/structured/redshift/upload.py b/uploader/app/structured/redshift/upload.py index 4f406b4..84c8399 100644 --- a/uploader/app/structured/redshift/upload.py +++ b/uploader/app/structured/redshift/upload.py @@ -1,12 +1,6 @@ from collections.abc import Callable from psycopg import sql - -import uploader.app.report as report -from uploader.app.display import format_table -from uploader.app.lib.rawdata import rawdata_batches -from uploader.app.storage import PgStorage -from uploader.app.upload import handle_call from uploader.clients.gen.client import adminapi from uploader.clients.gen.client.adminapi.api.default import save_structured_data from uploader.clients.gen.client.adminapi.models.save_structured_data_request import ( @@ -16,6 +10,12 @@ SaveStructuredDataRequestUnits, ) +import uploader.app.report as report +from uploader.app.display import format_table +from uploader.app.lib.rawdata import rawdata_batches +from uploader.app.storage import PgStorage +from uploader.app.upload import handle_call + C_KM_S = 299792.458 REDSHIFT_COLUMNS = ["cz", "e_cz"] From 00e2740d7a4b240a390edde9eca04dce1b3d957e Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Fri, 15 May 2026 21:22:56 +0300 Subject: [PATCH 2/4] Most popular catalogs --- tests/test_designation_rules.py | 94 ++++++++++--------- uploader/app/structured/designations/rules.py | 56 +++++++++-- 2 files changed, 97 insertions(+), 53 deletions(-) diff --git a/tests/test_designation_rules.py b/tests/test_designation_rules.py index e501f59..96364b9 100644 --- a/tests/test_designation_rules.py +++ b/tests/test_designation_rules.py @@ -3,23 +3,23 @@ from uploader.app.structured.designations.rules import match RULE_CASES: list[tuple[str, tuple[str, str] | None]] = [ - ("2MASSJ16295276+3911433", ("CAT JHHMMSSss+DDMMSSs", "2MASS J16295276+3911433")), - ("2massj16295276+3911433", ("CAT JHHMMSSss+DDMMSSs", "2MASS J16295276+3911433")), + ("2MASSJ16295276+3911433", ("2MASS", "2MASS J16295276+3911433")), + ("2massj16295276+3911433", ("2MASS", "2MASS J16295276+3911433")), ("2MASSJ16295276+391143", None), - ("2MASS J16295276+3911433", None), - ("2MASXJ21024892-2410520", ("CAT JHHMMSSss+DDMMSSs", "2MASX J21024892-2410520")), - ("2MASXJ09592150-2733330", ("CAT JHHMMSSss+DDMMSSs", "2MASX J09592150-2733330")), - ("2MASXJ10274703+2725368", ("CAT JHHMMSSss+DDMMSSs", "2MASX J10274703+2725368")), - ("2masxj09592150-2733330", ("CAT JHHMMSSss+DDMMSSs", "2MASX J09592150-2733330")), + ("2MASSJ1629527+3911433", None), + ("2MASXJ21024892-2410520", ("2MASS", "2MASX J21024892-2410520")), + ("2MASX J09592150-2733330", ("2MASS", "2MASX J09592150-2733330")), + ("2MASX J10274703+2725368", ("2MASS", "2MASX J10274703+2725368")), + ("2masxj09592150-2733330", ("2MASS", "2MASX J09592150-2733330")), ("SMDG1103517+284120", ("CAT HHMMSSs+DDMMSS", "SMDG 1103517+284120")), ("UZC131236+09370", ("CAT HHMMSS+DDMMS", "UZC 131236+09370")), - ("SDSSJ121551.62+573421.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "SDSS J121551.62+573421.6")), - ("SDSSJ121552.44+294932.9", ("CAT JHHMMSS.sss+DDMMSS.sss", "SDSS J121552.44+294932.9")), - ("SDSSJ121553.17+202452.4", ("CAT JHHMMSS.sss+DDMMSS.sss", "SDSS J121553.17+202452.4")), - ("sdssj121551.62+573421.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "SDSS J121551.62+573421.6")), - ("SDSSJ121551.62-573421.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "SDSS J121551.62-573421.6")), + ("SDSSJ121551.62+573421.6", ("SDSS", "SDSS J121551.62+573421.6")), + ("SDSS J121552.44+294932.9", ("SDSS", "SDSS J121552.44+294932.9")), + ("sDsSj121553.17+202452.4", ("SDSS", "SDSS J121553.17+202452.4")), + ("sdssj121551.62+573421.6", ("SDSS", "SDSS J121551.62+573421.6")), + ("SDSSJ121551.62-573421.6", ("SDSS", "SDSS J121551.62-573421.6")), ("SDSSJ121551.62+57342.6", None), - ("SDSS J121551.62+573421.6", None), + ("SDSSJ12155.62+573421.6", None), ("GAMAJ121028.05+015906.4", ("CAT JHHMMSS.sss+DDMMSS.sss", "GAMA J121028.05+015906.4")), ("ZOAG241.08+02.22", None), ("WINGSJ125634.96-173656.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J125634.96-173656.6")), @@ -77,25 +77,28 @@ ("[EKS96]J123456+123456", ("[REF]J", "[EKS96] J123456+123456")), ("[123]J132523.95-305406.7", None), ("[ABC]J132523.95-305406.7", None), - ("NGC 123", ("CAT N", "NGC 123")), - ("NGC 905", ("CAT N", "NGC 905")), - ("NGC905", ("CAT N", "NGC 905")), - ("NGC00905", ("CAT N", "NGC 905")), - ("NGC 905", ("CAT N", "NGC 905")), - ("ngc 905", ("CAT N", "NGC 905")), - ("NGC1487a", ("CAT N", "NGC 1487a")), - ("NGC1487b", ("CAT N", "NGC 1487b")), + ("NGC 123", ("NGC", "NGC 123")), + ("NGC 905", ("NGC", "NGC 905")), + ("NGC905", ("NGC", "NGC 905")), + ("NGC00905", ("NGC", "NGC 905")), + ("NGC 905", ("NGC", "NGC 905")), + ("ngc 905", ("NGC", "NGC 905")), + ("NGC1487a", ("NGC", "NGC 1487A")), + ("NGC1487b", ("NGC", "NGC 1487B")), ("NGC3521sat", ("CAT N", "NGC 3521sat")), ("NGC", None), ("NGC ", None), ("M 31", ("M", "M 31")), - ("UGC 123", ("CAT N", "UGC 123")), - ("PGC1191069", ("CAT N", "PGC 1191069")), - ("PGC1119121", ("CAT N", "PGC 1119121")), - ("PGC1425552", ("CAT N", "PGC 1425552")), - ("PGC 1191069", ("CAT N", "PGC 1191069")), - ("PGC001191069", ("CAT N", "PGC 1191069")), - ("pgc1191069", ("CAT N", "PGC 1191069")), + ("UGC 123", ("UGC", "UGC 123")), + ("PGC1191069", ("PGC", "PGC 1191069")), + ("P1119121", ("PGC", "PGC 1119121")), + ("PGC1425552", ("PGC", "PGC 1425552")), + ("PGC 1191069", ("PGC", "PGC 1191069")), + ("PGC001191069", ("PGC", "PGC 1191069")), + ("pgc1191069", ("PGC", "PGC 1191069")), + ("p1191069", ("PGC", "PGC 1191069")), + ("1191069", ("PGC", "PGC 1191069")), + ("#1191069", ("PGC", "PGC 1191069")), ("PGC", None), ("PGC ", None), ("GAMA077963", ("CAT N", "GAMA 77963")), @@ -136,35 +139,37 @@ ("UCD 330", ("CAT N", "UCD 330")), ("ucd330", ("CAT N", "UCD 330")), ("UCD", None), - ("UGCA442", ("CAT N", "UGCA 442")), - ("UGCA 442", ("CAT N", "UGCA 442")), - ("ugca442", ("CAT N", "UGCA 442")), - ("UGC 442", ("CAT N", "UGC 442")), + ("UGCA442", ("UGCA", "UGCA 442")), + ("UGCA 442", ("UGCA", "UGCA 442")), + ("UGCA00442", ("UGCA", "UGCA 442")), + ("ugca442", ("UGCA", "UGCA 442")), + ("ua 442", ("UGCA", "UGCA 442")), + # ("UA 1442", None), ("KKS74", ("CAT N", "KKS 74")), ("KKS 74", ("CAT N", "KKS 74")), ("kks74", ("CAT N", "KKS 74")), ("KKSG37", ("CAT N", "KKSG 37")), - ("UGC05983", ("CAT N", "UGC 5983")), - ("UGC07085W", ("CAT N", "UGC 7085W")), - ("UGC02140A", ("CAT N", "UGC 2140A")), - ("UGC 5983", ("CAT N", "UGC 5983")), - ("ugc07020a", ("CAT N", "UGC 7020a")), + ("UGC05983", ("UGC", "UGC 5983")), + ("UGC07085W", ("UGC", "UGC 7085W")), + ("UGC02140A", ("UGC", "UGC 2140A")), + ("UGC 5983", ("UGC", "UGC 5983")), + ("ugc07020a", ("UGC", "UGC 7020A")), ("UGC", None), - ("IC1613", ("CAT N", "IC 1613")), - ("IC 1613", ("CAT N", "IC 1613")), + ("IC1613", ("IC", "IC 1613")), + ("IC 1613", ("IC", "IC 1613")), ("IC1670A", ("CAT N", "IC 1670A")), ("ic1670a", ("CAT N", "IC 1670a")), - ("ic1613", ("CAT N", "IC 1613")), + ("ic1613", ("IC", "IC 1613")), ("IC", None), ("DDO217", ("CAT N", "DDO 217")), ("DDO226", ("CAT N", "DDO 226")), ("DDO 217", ("CAT N", "DDO 217")), ("ddo217", ("CAT N", "DDO 217")), ("DDO", None), - ("AGC724906", ("CAT N", "AGC 724906")), - ("AGC731457", ("CAT N", "AGC 731457")), - ("AGC 724906", ("CAT N", "AGC 724906")), - ("agc724906", ("CAT N", "AGC 724906")), + ("AGC724906", ("AGC", "AGC 724906")), + ("AGC731457", ("AGC", "AGC 731457")), + ("AGC 724906", ("AGC", "AGC 724906")), + ("agc724906", ("AGC", "AGC 724906")), ("AGC", None), ("KDG056", ("CAT N", "KDG 56")), ("KDG162", ("CAT N", "KDG 162")), @@ -237,7 +242,6 @@ ("J115524.38+391310.9", ("J", "J115524.38+391310.9")), ("J091854.30-060439.5", ("J", "J091854.30-060439.5")), ("j044444.77+320646.6", ("J", "J044444.77+320646.6")), - ("SDSSJ121551.62+573421.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "SDSS J121551.62+573421.6")), ("MESSIER082", ("M", "M 82")), ("M82", ("M", "M 82")), ("M 82", ("M", "M 82")), diff --git a/uploader/app/structured/designations/rules.py b/uploader/app/structured/designations/rules.py index 595aa72..a2779e8 100644 --- a/uploader/app/structured/designations/rules.py +++ b/uploader/app/structured/designations/rules.py @@ -31,16 +31,61 @@ def match(self, value: str) -> str | None: RULES: list[NameRule] = [ + # Most popular catalogs NameRule( - name="ISI96", - pattern=re.compile(r"^ISI96_(\d{4})([+-])(\d{4})$", re.IGNORECASE), - replacement="ISI96_{0}{1}{2}", + name="PGC", + pattern=re.compile(r"^(?:P|PGC|LEDA|#)?\s*0*(\d+)$", re.IGNORECASE), + replacement="PGC {0}", + ), + NameRule( + name="SDSS", + pattern=re.compile(r"^SDSS\s*J(\d{6}\.\d{2}[+-]\d{6}\.\d)$", re.IGNORECASE), + replacement="SDSS J{0}", + ), + NameRule( + name="2MASS", + pattern=re.compile(r"^(2MASS|2MASX)\s*J(\d{8}[+-]\d{7})$", re.IGNORECASE), + replacement="{0} J{1}", + replacer=lambda m: f"{m.group(1).upper()} J{m.group(2)}", ), NameRule( name="M", pattern=re.compile(r"^(?:MESSIER|M)\s*0*(\d+)$", re.IGNORECASE), replacement="M {0}", ), + NameRule( + name="NGC", + pattern=re.compile(r"^(?:N|NGC)\s*0*(\d{1,4})\s*([A-Z]?)$", re.IGNORECASE), + replacement="NGC {0}{1}", + replacer=lambda m: f"NGC {m.group(1).upper()}{m.group(2).upper() or ''}", + ), + NameRule( + name="IC", + pattern=re.compile(r"^(?:I|IC)\s*0*(\d{1,4})$", re.IGNORECASE), + replacement="IC {0}", + ), + NameRule( + name="UGC", + pattern=re.compile(r"^(?:U|UGC|UGCG)\s*0*(\d{1,5})\s*([A-Z]?)$", re.IGNORECASE), + replacement="UGC {0}{1}", + replacer=lambda m: f"UGC {m.group(1).upper()}{m.group(2).upper() or ''}", + ), + NameRule( + name="UGCA", + pattern=re.compile(r"^(?:UA|UGCA)\s*0*(\d{1,3})$", re.IGNORECASE), + replacement="UGCA {0}", + ), + NameRule( + name="AGC", + pattern=re.compile(r"^AGC\s*0*(\d+)$", re.IGNORECASE), + replacement="AGC {0}", + ), + # Other catalogs + NameRule( + name="ISI96", + pattern=re.compile(r"^ISI96_(\d{4})([+-])(\d{4})$", re.IGNORECASE), + replacement="ISI96_{0}{1}{2}", + ), NameRule( name="Andromeda", pattern=re.compile( @@ -210,11 +255,6 @@ def match(self, value: str) -> str | None: replacement="NGC {0}{1} [{2}] {3}", replacer=lambda m: f"NGC {int(m.group(1))}{m.group(2)} [{m.group(3)}] {m.group(4)}", ), - NameRule( - name="NGC", - pattern=re.compile(r"^N\s*0*(\d+)$", re.IGNORECASE), - replacement="NGC {0}", - ), NameRule( name="NGC", pattern=re.compile(r"^N\s*0*(\d+)([a-zA-Z]{1,3})$", re.IGNORECASE), From 3b97014ea615e178382c5dbf57a408d43e8e1eff Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Sat, 16 May 2026 22:39:06 +0300 Subject: [PATCH 3/4] Rules reordered --- tests/test_designation_rules.py | 449 ++++++++-------- uploader/app/structured/designations/rules.py | 503 ++++++++---------- 2 files changed, 467 insertions(+), 485 deletions(-) diff --git a/tests/test_designation_rules.py b/tests/test_designation_rules.py index 96364b9..f64fded 100644 --- a/tests/test_designation_rules.py +++ b/tests/test_designation_rules.py @@ -3,6 +3,24 @@ from uploader.app.structured.designations.rules import match RULE_CASES: list[tuple[str, tuple[str, str] | None]] = [ + ("PGC1191069", ("PGC", "PGC 1191069")), + ("P1119121", ("PGC", "PGC 1119121")), + ("PGC1425552", ("PGC", "PGC 1425552")), + ("PGC 1191069", ("PGC", "PGC 1191069")), + ("PGC001191069", ("PGC", "PGC 1191069")), + ("pgc1191069", ("PGC", "PGC 1191069")), + ("p1191069", ("PGC", "PGC 1191069")), + ("1191069", ("PGC", "PGC 1191069")), + ("#1191069", ("PGC", "PGC 1191069")), + ("PGC", None), + ("PGC ", None), + ("SDSSJ121551.62+573421.6", ("SDSS", "SDSS J121551.62+573421.6")), + ("SDSS J121552.44+294932.9", ("SDSS", "SDSS J121552.44+294932.9")), + ("sDsSj121553.17+202452.4", ("SDSS", "SDSS J121553.17+202452.4")), + ("sdssj121551.62+573421.6", ("SDSS", "SDSS J121551.62+573421.6")), + ("SDSSJ121551.62-573421.6", ("SDSS", "SDSS J121551.62-573421.6")), + ("SDSSJ121551.62+57342.6", None), + ("SDSSJ12155.62+573421.6", None), ("2MASSJ16295276+3911433", ("2MASS", "2MASS J16295276+3911433")), ("2massj16295276+3911433", ("2MASS", "2MASS J16295276+3911433")), ("2MASSJ16295276+391143", None), @@ -11,72 +29,11 @@ ("2MASX J09592150-2733330", ("2MASS", "2MASX J09592150-2733330")), ("2MASX J10274703+2725368", ("2MASS", "2MASX J10274703+2725368")), ("2masxj09592150-2733330", ("2MASS", "2MASX J09592150-2733330")), - ("SMDG1103517+284120", ("CAT HHMMSSs+DDMMSS", "SMDG 1103517+284120")), - ("UZC131236+09370", ("CAT HHMMSS+DDMMS", "UZC 131236+09370")), - ("SDSSJ121551.62+573421.6", ("SDSS", "SDSS J121551.62+573421.6")), - ("SDSS J121552.44+294932.9", ("SDSS", "SDSS J121552.44+294932.9")), - ("sDsSj121553.17+202452.4", ("SDSS", "SDSS J121553.17+202452.4")), - ("sdssj121551.62+573421.6", ("SDSS", "SDSS J121551.62+573421.6")), - ("SDSSJ121551.62-573421.6", ("SDSS", "SDSS J121551.62-573421.6")), - ("SDSSJ121551.62+57342.6", None), - ("SDSSJ12155.62+573421.6", None), - ("GAMAJ121028.05+015906.4", ("CAT JHHMMSS.sss+DDMMSS.sss", "GAMA J121028.05+015906.4")), - ("ZOAG241.08+02.22", None), - ("WINGSJ125634.96-173656.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J125634.96-173656.6")), - ("WINGSJ232248.36+143927.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J232248.36+143927.6")), - ("WINGSJ234427.24+091831.8", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J234427.24+091831.8")), - ("WINGSJ005617.13-012206.3", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J005617.13-012206.3")), - ("WINGSJ132627.17-271414.2", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J132627.17-271414.2")), - ("wingsj125634.96-173656.6", ("CAT JHHMMSS.sss+DDMMSS.sss", "WINGS J125634.96-173656.6")), - ("WINGS J125634.96-173656.6", None), - ("2QZJ233027.0-280856", ("CAT JHHMMSS.sss+DDMMSS.sss", "2QZ J233027.0-280856")), - ("2QZJ121201.1+012648", ("CAT JHHMMSS.sss+DDMMSS.sss", "2QZ J121201.1+012648")), - ("2QZJ103110.2+001703", ("CAT JHHMMSS.sss+DDMMSS.sss", "2QZ J103110.2+001703")), - ("2qzj233027.0-280856", ("CAT JHHMMSS.sss+DDMMSS.sss", "2QZ J233027.0-280856")), - ("2QZJ233027-280856", ("CAT JHHMMSS.sss+DDMMSS.sss", "2QZ J233027-280856")), - ("LAMOSTJ003619.93+320329.5", ("CAT JHHMMSS.sss+DDMMSS.sss", "LAMOST J003619.93+320329.5")), - ("LAMOSTJ022723.16+013324.5", ("CAT JHHMMSS.sss+DDMMSS.sss", "LAMOST J022723.16+013324.5")), - ("lamostj085334.71+262244.1", ("CAT JHHMMSS.sss+DDMMSS.sss", "LAMOST J085334.71+262244.1")), - ("LAMOSTJ003619+320329", ("CAT JHHMMSS.sss+DDMMSS.sss", "LAMOST J003619+320329")), - ("LVJ1235-1104", ("LV", "LV J1235-1104")), - ("LVJ1052+3628", ("LV", "LV J1052+3628")), - ("lvj1235-1104", ("LV", "LV J1235-1104")), - ("HIPASSJ1558-10", ("CAT J HHMM+DD", "HIPASS J1558-10")), - ("HIPASS J1348-37", ("CAT J HHMM+DD", "HIPASS J1348-37")), - ("HIPASS J0916-23b", ("CAT J HHMM+DD", "HIPASS J0916-23b")), - ("hipassj1558-10", ("CAT J HHMM+DD", "HIPASS J1558-10")), - ("HIPASSJ1558-1", None), - ("HIPASS 1348-37", ("CAT J HHMM+DD", "HIPASS 1348-37")), - ("SMDG1256-00", ("CAT J HHMM+DD", "SMDG 1256-00")), - ("SMDG0740+40", ("CAT J HHMM+DD", "SMDG 0740+40")), - ("smdg1349+04", ("CAT J HHMM+DD", "SMDG 1349+04")), - ("SMDG 1256-00", ("CAT J HHMM+DD", "SMDG 1256-00")), - ("SMDG1256-0", None), - ("KUG 0937+480", ("CAT J HHMM+DD", "KUG 0937+480")), - ("KUG0937+48", ("CAT J HHMM+DD", "KUG 0937+48")), - ("kug0937+480", ("CAT J HHMM+DD", "KUG 0937+480")), - ("KUG0937+4", None), - ("SBS 1224+533", ("CAT J HHMM+DD", "SBS 1224+533")), - ("SBS1224+53", ("CAT J HHMM+DD", "SBS 1224+53")), - ("sbs1224+533", ("CAT J HHMM+DD", "SBS 1224+533")), - ("SBS1224+5", None), - ("FASHI1334+62", ("CAT J HHMM+DD", "FASHI 1334+62")), - ("FASHI0252+40", ("CAT J HHMM+DD", "FASHI 0252+40")), - ("FASHI 1251+57", ("CAT J HHMM+DD", "FASHI 1251+57")), - ("fashi0237+38", ("CAT J HHMM+DD", "FASHI 0237+38")), - ("FASHI1334+6", None), - ("MAGE1423+5613", ("CAT HHMM+DDMM", "MAGE 1423+5613")), - ("MAGE0740+1651", ("CAT HHMM+DDMM", "MAGE 0740+1651")), - ("mage1132+5311", ("CAT HHMM+DDMM", "MAGE 1132+5311")), - ("MAGE 1423+5613", ("CAT HHMM+DDMM", "MAGE 1423+5613")), - ("MAGE1423+561", ("CAT J HHMM+DD", "MAGE 1423+561")), - ("[BZZ2000]J132523.95-305406.7", ("[REF]J", "[BZZ2000] J132523.95-305406.7")), - ("[BZZ2000] J132523.95-305406.7", ("[REF]J", "[BZZ2000] J132523.95-305406.7")), - ("[IBG2003]J114222+195346", ("[REF]J", "[IBG2003] J114222+195346")), - ("[RGD2016]J130127.14+275957.1", ("[REF]J", "[RGD2016] J130127.14+275957.1")), - ("[EKS96]J123456+123456", ("[REF]J", "[EKS96] J123456+123456")), - ("[123]J132523.95-305406.7", None), - ("[ABC]J132523.95-305406.7", None), + ("MESSIER082", ("M", "M 82")), + ("M82", ("M", "M 82")), + ("M 82", ("M", "M 82")), + ("m31", ("M", "M 31")), + ("M 31", ("M", "M 31")), ("NGC 123", ("NGC", "NGC 123")), ("NGC 905", ("NGC", "NGC 905")), ("NGC905", ("NGC", "NGC 905")), @@ -85,22 +42,208 @@ ("ngc 905", ("NGC", "NGC 905")), ("NGC1487a", ("NGC", "NGC 1487A")), ("NGC1487b", ("NGC", "NGC 1487B")), - ("NGC3521sat", ("CAT N", "NGC 3521sat")), + # ("NGC3521sat", ("CAT N", "NGC 3521sat")), ("NGC", None), ("NGC ", None), - ("M 31", ("M", "M 31")), + ("IC1613", ("IC", "IC 1613")), + ("IC 1613", ("IC", "IC 1613")), + ("IC1670A", ("IC", "IC 1670A")), + ("ic1670a", ("IC", "IC 1670A")), + ("ic1613", ("IC", "IC 1613")), + ("IC", None), ("UGC 123", ("UGC", "UGC 123")), - ("PGC1191069", ("PGC", "PGC 1191069")), - ("P1119121", ("PGC", "PGC 1119121")), - ("PGC1425552", ("PGC", "PGC 1425552")), - ("PGC 1191069", ("PGC", "PGC 1191069")), - ("PGC001191069", ("PGC", "PGC 1191069")), - ("pgc1191069", ("PGC", "PGC 1191069")), - ("p1191069", ("PGC", "PGC 1191069")), - ("1191069", ("PGC", "PGC 1191069")), - ("#1191069", ("PGC", "PGC 1191069")), - ("PGC", None), - ("PGC ", None), + ("UGC05983", ("UGC", "UGC 5983")), + ("UGC07085W", ("UGC", "UGC 7085W")), + ("UGC02140A", ("UGC", "UGC 2140A")), + ("UGC 5983", ("UGC", "UGC 5983")), + ("ugc07020a", ("UGC", "UGC 7020A")), + ("UGC", None), + ("UGCA442", ("UGCA", "UGCA 442")), + ("UGCA 442", ("UGCA", "UGCA 442")), + ("UGCA00442", ("UGCA", "UGCA 442")), + ("ugca442", ("UGCA", "UGCA 442")), + ("ua 442", ("UGCA", "UGCA 442")), + # ("UA 1442", None), + ("AGC724906", ("AGC", "AGC 724906")), + ("AGC731457", ("AGC", "AGC 731457")), + ("AGC 724906", ("AGC", "AGC 724906")), + ("agc724906", ("AGC", "AGC 724906")), + ("AGC", None), + ("ESO104-044", ("ESO", "ESO 104-44")), + ("ESO381-020", ("ESO", "ESO 381-20")), + ("ESO 104-044", ("ESO", "ESO 104-44")), + ("eso104-044", ("ESO", "ESO 104-44")), + ("ESO188-012A", ("ESO", "ESO 188-12A")), + ("ESO410-G005", ("ESO", "ESO 410-5")), + ("ESO112-008A", ("ESO", "ESO 112-8A")), + ("eso146-006a", ("ESO", "ESO 146-6A")), + ("ESO104", ("CAT N", "ESO 104")), + ("ESO", None), + ("And XXVIII", ("Andromeda", "And 28")), + ("Andromeda XXVIII", ("Andromeda", "And 28")), + ("And28", ("Andromeda", "And 28")), + ("ANDXXVIII", ("Andromeda", "And 28")), + ("andxxviii", ("Andromeda", "And 28")), + ("andromeda28", ("Andromeda", "And 28")), + ("And 28", ("Andromeda", "And 28")), + ("Andromeda I", ("Andromeda", "And 1")), + ("Andromeda IV", ("Andromeda", "And 4")), + ("And X", ("Andromeda", "And 10")), + ("And", None), + # ("Andromeda", ("Andromeda", "Andromeda Galaxy")), + ("MAFFEI 2", ("Eponym", "Maffei 2")), + ("Maffei 1", ("Eponym", "Maffei 1")), + ("ARP102", ("Eponym", "Arp 102")), + ("HoII", ("Eponym", "Holmberg 2")), + ("Holm VI", ("Eponym", "Holmberg 6")), + ("HolmbergI", ("Eponym", "Holmberg 1")), + ("Holm 4", ("Eponym", "Holmberg 4")), + ("Ho3", ("Eponym", "Holmberg 3")), + ("Fairall678", ("Eponym", "Frl 678")), + ("Fair 0234", ("Eponym", "Frl 234")), + ("Frl0005", ("Eponym", "Frl 5")), + ("Mkn 123", ("Eponym", "Mrk 123")), + ("Mrk456", ("Eponym", "Mrk 456")), + ("Markarian 007", ("Eponym", "Mrk 7")), + ("LSBG0230+0022", ("LSBG", "[ISI96] 0230+0022")), + ("LSBG 0230+0022", ("LSBG", "[ISI96] 0230+0022")), + ("ISI960230+0022", ("LSBG", "[ISI96] 0230+0022")), + ("ISI96 0230+0022", ("LSBG", "[ISI96] 0230+0022")), + ("[ISI96]0230+0022", ("LSBG", "[ISI96] 0230+0022")), + ("[ISI96] 0230+0022", ("LSBG", "[ISI96] 0230+0022")), + ("LSBG0230+0022a", ("LSBG", "[ISI96] 0230+0022a")), + ("ISI960230+0022b", ("LSBG", "[ISI96] 0230+0022b")), + ("ISI960230+0022X", ("LSBG", "[ISI96] 0230+0022x")), + ("ISI96 1450+0230", ("LSBG", "[ISI96] 1450+0230")), + ("ISI96 2339-0122", ("LSBG", "[ISI96] 2339-0122")), + ("ISI96 1042+0231", ("LSBG", "[ISI96] 1042+0231")), + ("isi96 0922+0233", ("LSBG", "[ISI96] 0922+0233")), + # ("ISI961450+023", None), + ("[BZZ2000]J132523.95-305406.7", ("[REF]J", "[BZZ2000] J132523.95-305406.7")), + ("[BZZ2000] J132523.95-305406.7", ("[REF]J", "[BZZ2000] J132523.95-305406.7")), + ("[IBG2003]J114222+195346", ("[REF]J", "[IBG2003] J114222+195346")), + ("[RGD2016]J130127.14+275957.1", ("[REF]J", "[RGD2016] J130127.14+275957.1")), + ("[EKS96]J123456+123456", ("[REF]J", "[EKS96] J123456+123456")), + ("[123]J132523.95-305406.7", None), + ("[ABC]J132523.95-305406.7", None), + ("[EKS96]1234+5678", ("[REF]HHMM+DDMM", "[EKS96] 1234+5678")), + ("[ABC]1442+0026", None), + ("[PDS2002]0678", ("[REF]N", "[PDS2002] 678")), + ("[CMW2004]783", ("[REF]N", "[CMW2004] 783")), + ("[EKS96] 00123", ("[REF]N", "[EKS96] 123")), + ("[pds2002]0678", ("[REF]N", "[PDS2002] 678")), + ("[PDS2002]0", ("[REF]N", "[PDS2002] 0")), + ("[ABC]0678", None), + # ("[ISI96]1442+002", ("[REF] *", "[ISI96] 1442+002")), + ("[ISI96]1442+002", None), + ("[PDS2002]0678a", ("[REF]N", "[PDS2002] 678a")), + ("Dw1311+4051", ("Dw", "dwJ1311+4051")), + ("Dw1106-0052", ("Dw", "dwJ1106-0052")), + ("dw1048+1259", ("Dw", "dwJ1048+1259")), + ("dw1323-40", ("Dw", "dwJ1323-40")), + ("dw1051+11", ("Dw", "dwJ1051+11")), + ("dw1045+14b", ("Dw", "dwJ1045+14b")), + ("Dw1045+14B", ("Dw", "dwJ1045+14b")), + ("Dw1252-0506", ("Dw", "dwJ1252-0506")), + ("Dw 1311+4051", ("Dw", "dwJ1311+4051")), + ("Dw1311+405", ("Dw", "dwJ1311+405")), + ("Dw1311+40511", None), + ("Dw", None), + ("WINGSJ125634.96-173656.6", ("CAT HHMMSS.sss+DDMMSS.sss", "WINGS J125634.96-173656.6")), + ("WINGSJ232248.36+143927.6", ("CAT HHMMSS.sss+DDMMSS.sss", "WINGS J232248.36+143927.6")), + ("WINGS J234427.24+091831.8", ("CAT HHMMSS.sss+DDMMSS.sss", "WINGS J234427.24+091831.8")), + ("WINGS J005617.13-012206.3", ("CAT HHMMSS.sss+DDMMSS.sss", "WINGS J005617.13-012206.3")), + ("wingsj125634.96-173656.6", ("CAT HHMMSS.sss+DDMMSS.sss", "WINGS J125634.96-173656.6")), + ("2QZJ233027.0-280856", ("CAT HHMMSS.sss+DDMMSS.sss", "2QZ J233027.0-280856")), + ("2QZJ121201.1+012648", ("CAT HHMMSS.sss+DDMMSS.sss", "2QZ J121201.1+012648")), + ("2QZJ103110.2+001703", ("CAT HHMMSS.sss+DDMMSS.sss", "2QZ J103110.2+001703")), + ("2qzj233027.0-280856", ("CAT HHMMSS.sss+DDMMSS.sss", "2QZ J233027.0-280856")), + ("2QZJ233027-280856", ("CAT HHMMSS.sss+DDMMSS.sss", "2QZ J233027-280856")), + ("LAMOSTJ003619.93+320329.5", ("CAT HHMMSS.sss+DDMMSS.sss", "LAMOST J003619.93+320329.5")), + ("LAMOST J022723.16+013324.5", ("CAT HHMMSS.sss+DDMMSS.sss", "LAMOST J022723.16+013324.5")), + ("lamostj085334.71+262244.1", ("CAT HHMMSS.sss+DDMMSS.sss", "LAMOST J085334.71+262244.1")), + ("LAMOSTJ003619+320329", ("CAT HHMMSS.sss+DDMMSS.sss", "LAMOST J003619+320329")), + ("GAMAJ121028.05+015906.4", ("CAT HHMMSS.sss+DDMMSS.sss", "GAMA J121028.05+015906.4")), + # ("6dFJ203254-251656", ("CAT HHMMSS.sss+DDMMSS.sss", "6DF J203254-251656")), + ("SMMJ221733.02+000906.0", ("CAT HHMMSS.sss+DDMMSS.sss", "SMM J221733.02+000906.0")), + ("smmj221733.02+000906.0", ("CAT HHMMSS.sss+DDMMSS.sss", "SMM J221733.02+000906.0")), + ("SMM J221733+000906", ("CAT HHMMSS.sss+DDMMSS.sss", "SMM J221733+000906")), + ("LVJ1235-1104", ("CAT HHMM+DDMM", "LV J1235-1104")), + ("LV J1235-1104", ("CAT HHMM+DDMM", "LV J1235-1104")), + ("LVJ1052+3628", ("CAT HHMM+DDMM", "LV J1052+3628")), + ("LV J1052+3628", ("CAT HHMM+DDMM", "LV J1052+3628")), + ("lvj1235-1104", ("CAT HHMM+DDMM", "LV J1235-1104")), + ("lv j1235-1104", ("CAT HHMM+DDMM", "LV J1235-1104")), + ("LV 1235-1104", ("CAT HHMM+DDMM", "LV 1235-1104")), + ("AM 0316-484", ("CAT HHMM+DD", "AM 0316-484")), + ("AM2220-460", ("CAT HHMM+DD", "AM 2220-460")), + ("am0316-484", ("CAT HHMM+DD", "AM 0316-484")), + ("AM 2220-460", ("CAT HHMM+DD", "AM 2220-460")), + ("AM0316-4", None), + ("HIPASSJ1558-10", ("CAT HHMM+DD", "HIPASS J1558-10")), + ("HIPASS J1348-37", ("CAT HHMM+DD", "HIPASS J1348-37")), + ("HIPASS J0916-23b", ("CAT HHMM+DD", "HIPASS J0916-23b")), + ("hipassj1558-10", ("CAT HHMM+DD", "HIPASS J1558-10")), + ("HIPASSJ1558-1", None), + ("HIPASS 1348-37", ("CAT HHMM+DD", "HIPASS 1348-37")), + ("SMDG1256-00", ("CAT HHMM+DD", "SMDG 1256-00")), + ("SMDG0740+40", ("CAT HHMM+DD", "SMDG 0740+40")), + ("smdg1349+04", ("CAT HHMM+DD", "SMDG 1349+04")), + ("SMDG 1256-00", ("CAT HHMM+DD", "SMDG 1256-00")), + ("SMDG1256-0", None), + ("KUG 0937+480", ("CAT HHMM+DD", "KUG 0937+480")), + ("KUG0937+48", ("CAT HHMM+DD", "KUG 0937+48")), + ("kug0937+480", ("CAT HHMM+DD", "KUG 0937+480")), + ("KUG0937+4", None), + ("SBS 1224+533", ("CAT HHMM+DD", "SBS 1224+533")), + ("SBS1224+53", ("CAT HHMM+DD", "SBS 1224+53")), + ("sbs1224+533", ("CAT HHMM+DD", "SBS 1224+533")), + ("SBS1224+5", None), + ("FASHI1334+62", ("CAT HHMM+DD", "FASHI 1334+62")), + ("FASHI0252+40", ("CAT HHMM+DD", "FASHI 0252+40")), + ("FASHI 1251+57", ("CAT HHMM+DD", "FASHI 1251+57")), + ("fashi0237+38", ("CAT HHMM+DD", "FASHI 0237+38")), + ("FASHI1334+6", None), + ("MAGE1423+561", ("CAT HHMM+DD", "MAGE 1423+561")), + ("MAGE1423+5613", ("CAT HHMM+DDMM", "MAGE 1423+5613")), + ("MAGE0740+1651", ("CAT HHMM+DDMM", "MAGE 0740+1651")), + ("mage1132+5311", ("CAT HHMM+DDMM", "MAGE 1132+5311")), + ("MAGE 1423+5613", ("CAT HHMM+DDMM", "MAGE 1423+5613")), + ("GALFAJ180.8+24.1", ("CAT DDD.ddd+DD.ddd", "GALFA J180.8+24.1")), + ("EONJ194.913+28.896", ("CAT DDD.ddd+DD.ddd", "EON J194.913+28.896")), + ("EONJ194.913-28.896", ("CAT DDD.ddd+DD.ddd", "EON J194.913-28.896")), + ("eonj100.5+0.25", ("CAT DDD.ddd+DD.ddd", "EON J100.5+0.25")), + ("LCRSB130643.6-022730", ("CAT HHMMSS.sss+DDMMSS.sss", "LCRS B130643.6-022730")), + ("LCRSB040516.8-390340", ("CAT HHMMSS.sss+DDMMSS.sss", "LCRS B040516.8-390340")), + ("lcr sb130643.6-022730", None), + ("LCRS B130643-022730", ("CAT HHMMSS.sss+DDMMSS.sss", "LCRS B130643-022730")), + ("SMDGJ1103517+284120", ("CAT HHMMSSs+DDMMSS", "SMDG J1103517+284120")), + ("VVDS220456214", ("CAT N", "VVDS 220456214")), + ("VVDS 220456214", ("CAT N", "VVDS 220456214")), + ("vvds220456214", ("CAT N", "VVDS 220456214")), + ("VVDS", None), + ("USGCU169", ("USGC", "USGC U169")), + ("usgcu169", ("USGC", "USGC U169")), + ("MCG -04-31-038", ("MCG", "MCG -04-31-038")), + ("MCG -04-31-38", ("MCG", "MCG -04-31-038")), + ("mcg -04-31-038", ("MCG", "MCG -04-31-038")), + ("MCG +04-31-038", ("MCG", "MCG +04-31-038")), + ("MCG 04-31-038", ("MCG", "MCG +04-31-038")), + ("MCG", None), + ("ABELL0076", ("ABELL", "ACO 76")), + ("ABELLS0076", ("ABELL", "ACO S 76")), + ("ABELL0496", ("ABELL", "ACO 496")), + ("ABELL 496", ("ABELL", "ACO 496")), + # + # + # ("[ONC2011]J259.926454+26.554180", ("[REF] *", "[ONC2011] J259.926454+26.554180")), + # ("[CZ2003]1631A-0393:050", ("[REF] *", "[CZ2003] 1631A-0393:050")), + # ("[XYZ2020] foo bar ", ("[REF] *", "[XYZ2020] foo bar")), + # ("[ABC98]no space", ("[REF] *", "[ABC98] no space")), + # + # + ("UZC131236+09370", ("CAT HHMMSS+DDMMS", "UZC 131236+09370")), + ("ZOAG241.08+02.22", None), ("GAMA077963", ("CAT N", "GAMA 77963")), ("GAMA028694", ("CAT N", "GAMA 28694")), ("GAMA297074", ("CAT N", "GAMA 297074")), @@ -139,38 +282,15 @@ ("UCD 330", ("CAT N", "UCD 330")), ("ucd330", ("CAT N", "UCD 330")), ("UCD", None), - ("UGCA442", ("UGCA", "UGCA 442")), - ("UGCA 442", ("UGCA", "UGCA 442")), - ("UGCA00442", ("UGCA", "UGCA 442")), - ("ugca442", ("UGCA", "UGCA 442")), - ("ua 442", ("UGCA", "UGCA 442")), - # ("UA 1442", None), ("KKS74", ("CAT N", "KKS 74")), ("KKS 74", ("CAT N", "KKS 74")), ("kks74", ("CAT N", "KKS 74")), ("KKSG37", ("CAT N", "KKSG 37")), - ("UGC05983", ("UGC", "UGC 5983")), - ("UGC07085W", ("UGC", "UGC 7085W")), - ("UGC02140A", ("UGC", "UGC 2140A")), - ("UGC 5983", ("UGC", "UGC 5983")), - ("ugc07020a", ("UGC", "UGC 7020A")), - ("UGC", None), - ("IC1613", ("IC", "IC 1613")), - ("IC 1613", ("IC", "IC 1613")), - ("IC1670A", ("CAT N", "IC 1670A")), - ("ic1670a", ("CAT N", "IC 1670a")), - ("ic1613", ("IC", "IC 1613")), - ("IC", None), ("DDO217", ("CAT N", "DDO 217")), ("DDO226", ("CAT N", "DDO 226")), ("DDO 217", ("CAT N", "DDO 217")), ("ddo217", ("CAT N", "DDO 217")), ("DDO", None), - ("AGC724906", ("AGC", "AGC 724906")), - ("AGC731457", ("AGC", "AGC 731457")), - ("AGC 724906", ("AGC", "AGC 724906")), - ("agc724906", ("AGC", "AGC 724906")), - ("AGC", None), ("KDG056", ("CAT N", "KDG 56")), ("KDG162", ("CAT N", "KDG 162")), ("KDG 216", ("CAT N", "KDG 216")), @@ -242,33 +362,7 @@ ("J115524.38+391310.9", ("J", "J115524.38+391310.9")), ("J091854.30-060439.5", ("J", "J091854.30-060439.5")), ("j044444.77+320646.6", ("J", "J044444.77+320646.6")), - ("MESSIER082", ("M", "M 82")), - ("M82", ("M", "M 82")), - ("M 82", ("M", "M 82")), - ("m31", ("M", "M 31")), ("MCG 123", ("CAT N", "MCG 123")), - ("And XXVIII", ("Andromeda", "Andromeda 28")), - ("Andromeda XXVIII", ("Andromeda", "Andromeda 28")), - ("And28", ("Andromeda", "Andromeda 28")), - ("ANDXXVIII", ("Andromeda", "Andromeda 28")), - ("andxxviii", ("Andromeda", "Andromeda 28")), - ("andromeda28", ("Andromeda", "Andromeda 28")), - ("And 28", ("Andromeda", "Andromeda 28")), - ("Andromeda I", ("Andromeda", "Andromeda 1")), - ("Andromeda IV", ("Andromeda", "Andromeda 4")), - ("And X", ("Andromeda", "Andromeda 10")), - ("Andromeda", None), - ("And", None), - ("ESO104-044", ("ESO", "ESO 104-44")), - ("ESO381-020", ("ESO", "ESO 381-20")), - ("ESO 104-044", ("ESO", "ESO 104-44")), - ("eso104-044", ("ESO", "ESO 104-44")), - ("ESO188-012A", ("ESO", "ESO 188-12A")), - ("ESO410-G005", ("ESO", "ESO 410-G5")), - ("ESO112-008A", ("ESO", "ESO 112-8A")), - ("eso146-006a", ("ESO", "ESO 146-6a")), - ("ESO104", ("CAT N", "ESO 104")), - ("ESO", None), ("CGCG 066-109", ("CGCG", "CGCG 066-109")), ("CGCG217-018", ("CGCG", "CGCG 217-18")), ("cgcg066-109", ("CGCG", "CGCG 066-109")), @@ -281,28 +375,6 @@ ("DR8-0850m475-585", ("DR8", "DR8-0850m475-585")), ("dr8-1236p155-1835", ("DR8", "DR8-1236p155-1835")), ("DR8-1996p67-237", None), - ("ISI96_1450+0230", ("ISI96", "ISI96_1450+0230")), - ("ISI96_2339-0122", ("ISI96", "ISI96_2339-0122")), - ("ISI96_1042+0231", ("ISI96", "ISI96_1042+0231")), - ("isi96_0922+0233", ("ISI96", "ISI96_0922+0233")), - ("ISI96_1450+023", None), - ("AM 0316-484", ("AM", "AM 0316-484")), - ("AM2220-460", ("AM", "AM 2220-460")), - ("am0316-484", ("AM", "AM 0316-484")), - ("AM 2220-460", ("AM", "AM 2220-460")), - ("AM0316-4", None), - ("Dw1311+4051", ("Dw", "Dw 1311+4051")), - ("Dw1106-0052", ("Dw", "Dw 1106-0052")), - ("dw1048+1259", ("Dw", "Dw 1048+1259")), - ("dw1323-40", ("Dw", "Dw 1323-40")), - ("dw1051+11", ("Dw", "Dw 1051+11")), - ("dw1045+14b", ("Dw", "Dw 1045+14b")), - ("Dw1045+14B", ("Dw", "Dw 1045+14b")), - ("Dw1252-0506", ("Dw", "Dw 1252-0506")), - ("Dw 1311+4051", ("Dw", "Dw 1311+4051")), - ("Dw1311+405", ("CAT J HHMM+DD", "DW 1311+405")), - ("Dw1311+40511", None), - ("Dw", None), ("KSP-DW28", ("KSP-DW", "KSP-DW 28")), ("KSP-DW1", ("KSP-DW", "KSP-DW 1")), ("KSP-DW 12", ("KSP-DW", "KSP-DW 12")), @@ -312,24 +384,10 @@ ("LSBC D565-06", ("LSBC", "LSBC D565-6")), ("lsbc d640-12", ("LSBC", "LSBC D640-12")), ("LSBC D640", None), - ("LV 1235-1104", ("CAT HHMM+DDMM", "LV 1235-1104")), - ("MCG -04-31-038", ("MCG", "MCG -04-31-38")), - ("MCG -04-31-38", ("MCG", "MCG -04-31-38")), - ("mcg -04-31-038", ("MCG", "MCG -04-31-38")), - ("MCG 04-31-038", ("MCG", "MCG 04-31-38")), - ("MCG", None), ("6dFJ2032543-251656", ("6dF", "6dF J2032543-251656")), ("6dFJ1605369-301035", ("6dF", "6dF J1605369-301035")), ("6dFJ1253111-272754:", ("6dF", "6dF J1253111-272754")), ("6dfj2016142-085824", ("6dF", "6dF J2016142-085824")), - ("6dFJ203254-251656", ("CAT JHHMMSS.sss+DDMMSS.sss", "6DF J203254-251656")), - ("ABELL0076", ("ABELL", "ABELL 76")), - ("ABELL0496:[DAL2002]11866", ("ABELL", "ABELL 496 [DAL2002] 11866")), - ("ABELL2204_14:[PSE2006]2096", ("ABELL", "ABELL 2204_14 [PSE2006] 2096")), - ("ABELL2744:[BGS2006]011", ("ABELL", "ABELL 2744 [BGS2006] 011")), - ("abell0496:[DAL2002]11866", ("ABELL", "ABELL 496 [DAL2002] 11866")), - ("ABELL0496", ("ABELL", "ABELL 496")), - ("ABELL 496", ("ABELL", "ABELL 496")), ("CNOC2_0223.051394", ("CNOC2", "CNOC2_0223.051394")), ("CNOC2_0223.100322", ("CNOC2", "CNOC2_0223.100322")), ("cnoc2_0223.140942", ("CNOC2", "CNOC2_0223.140942")), @@ -339,49 +397,16 @@ ("2MFGC 15266", ("2MFGC", "2MFGC 15266")), ("2mfgc15266", ("2MFGC", "2MFGC 15266")), ("2MFGC", None), - ("VVDS220456214", ("VVDS", "VVDS 220456214")), - ("VVDS 220456214", ("VVDS", "VVDS 220456214")), - ("vvds220456214", ("VVDS", "VVDS 220456214")), - ("VVDS", None), ("GALFAJ180.8+24.1+032", ("GALFA", "GALFA J180.8+24.1+032")), ("galfaj180.8+24.1+032", ("GALFA", "GALFA J180.8+24.1+032")), - ("GALFAJ180.8+24.1", ("CAT JDD.ddd+DD.ddd", "GALFA J180.8+24.1")), - ("USGCU169", ("USGC", "USGC U169")), - ("usgcu169", ("USGC", "USGC U169")), - ("USGC U169", None), ("RXJ0152.7-1357", ("RXJ", "RX J0152.7-1357")), ("RXJ0152.7-1357:[DRL2005]0396", ("RXJ", "RX J0152.7-1357 [DRL2005] 0396")), ("rxj0152.7-1357", ("RXJ", "RX J0152.7-1357")), - ("RXJ0152-1357", ("RXJ", "RX J0152-1357")), - ("CLJ1604+4304", ("CLJ", "CL J1604+4304")), - ("CLJ1604+4304:[PLO98]3268", ("CLJ", "CL J1604+4304 [PLO98] 3268")), - ("clj1604+4304", ("CLJ", "CL J1604+4304")), - ("CLJ160+4304", None), - ("SMMJ221733.02+000906.0", ("SMMJ", "SMM J221733.02+000906.0")), - ("smmj221733.02+000906.0", ("SMMJ", "SMM J221733.02+000906.0")), - ("SMMJ221733+000906", ("SMMJ", "SMM J221733+000906")), + # ("RXJ0152-1357", ("RXJ", "RX J0152-1357")), + # ("CLJ1604+4304:[PLO98]3268", ("CLJ", "CL J1604+4304 [PLO98] 3268")), ("NGC1672:[EKS96]207", ("NGC", "NGC 1672 [EKS96] 207")), ("NGC 1672:[EKS96]207", ("NGC", "NGC 1672 [EKS96] 207")), ("ngc1672:[EKS96]207", ("NGC", "NGC 1672 [EKS96] 207")), - ("LCRSB130643.6-022730", ("CAT HHMMSS.sss+DDMMSS", "LCRSB 130643.6-022730")), - ("LCRSB040516.8-390340", ("CAT HHMMSS.sss+DDMMSS", "LCRSB 040516.8-390340")), - ("lcr sb130643.6-022730", None), - ("LCRSB130643-022730", ("CAT HHMMSS.sss+DDMMSS", "LCRSB 130643-022730")), - ("EONJ194.913+28.896", ("CAT JDD.ddd+DD.ddd", "EON J194.913+28.896")), - ("EONJ194.913-28.896", ("CAT JDD.ddd+DD.ddd", "EON J194.913-28.896")), - ("eonj100.5+0.25", ("CAT JDD.ddd+DD.ddd", "EON J100.5+0.25")), - ("[ISI96]1442+0026", ("[REF]HHMM+DDMM", "[ISI96] 1442+0026")), - ("[ISI96]2339-0122", ("[REF]HHMM+DDMM", "[ISI96] 2339-0122")), - ("[EKS96]1234+5678", ("[REF]HHMM+DDMM", "[EKS96] 1234+5678")), - ("[ISI96]1442+002", ("[REF] *", "[ISI96] 1442+002")), - ("[ABC]1442+0026", None), - ("[PDS2002]0678", ("[REF]N", "[PDS2002] 678")), - ("[CMW2004]783", ("[REF]N", "[CMW2004] 783")), - ("[EKS96]00123", ("[REF]N", "[EKS96] 123")), - ("[pds2002]0678", ("[REF]N", "[pds2002] 678")), - ("[PDS2002]0", ("[REF]N", "[PDS2002] 0")), - ("[ABC]0678", None), - ("[PDS2002]0678a", ("[REF] *", "[PDS2002] 0678a")), ("NPM1G+23.0282", ("CAT +DD.d", "NPM1G +23.0282")), ("NPM1G+39.0490", ("CAT +DD.d", "NPM1G +39.0490")), ("NPM1G+42.0430", ("CAT +DD.d", "NPM1G +42.0430")), @@ -405,24 +430,14 @@ ("CGMW1-12345", ("CGMW", "CGMW 1-12345")), ("CGMW6-00001", None), ("CGMW5-1234", None), - ("[ONC2011]J259.926454+26.554180", ("[REF] *", "[ONC2011] J259.926454+26.554180")), - ("[CZ2003]1631A-0393:050", ("[REF] *", "[CZ2003] 1631A-0393:050")), - ("[XYZ2020] foo bar ", ("[REF] *", "[XYZ2020] foo bar")), - ("[ABC123]no space", ("[REF] *", "[ABC123] no space")), - ("MAFFEI 2", ("Eponym N", "Maffei 2")), - ("Maffei 1", ("Eponym N", "Maffei 1")), - ("ARP102", ("Eponym N", "Arp 102")), - ("HoII", ("Eponym N", "Holmberg 2")), - ("Holm VI", ("Eponym N", "Holmberg 6")), - ("HolmbergI", ("Eponym N", "Holmberg 1")), - ("Holm 4", ("Eponym N", "Holmberg 4")), - ("Ho3", ("Eponym N", "Holmberg 3")), - ("Fairall678", ("Eponym N", "Frl 678")), - ("Fair 0234", ("Eponym N", "Frl 234")), - ("Frl0005", ("Eponym N", "Frl 5")), - ("Mkn 123", ("Eponym N", "Mrk 123")), - ("Mrk456", ("Eponym N", "Mrk 456")), - ("Markarian 007", ("Eponym N", "Mrk 7")), + ("CLJ0152-1357:[TKA2006]F4-34", ("Reformat", "[TKA2006] F4-34")), + ("[TKA2006] F4- 04", ("Reformat", "[TKA2006] F4-4")), + ("[TKA2006] F 4- 04", ("Reformat", "[TKA2006] F4-4")), + ("CLJ0152-1357:[TKA2006]F1-4B", ("Reformat", "[TKA2006] F1-4b")), + ("ABELL0496:[DAL2002]11866", ("Reformat", "[DAL2002] 11866")), + ("ABELL2204_14:[PSE2006]2096", ("Reformat", "[PSE2006] 2096")), + ("ABELL2744:[BGS2006]011", ("Reformat", "[BGS2006] 11")), + ("ABELL2163:[M2008]451", ("Reformat", "[MCF2008] 451")), ("", None), ] diff --git a/uploader/app/structured/designations/rules.py b/uploader/app/structured/designations/rules.py index a2779e8..934b554 100644 --- a/uploader/app/structured/designations/rules.py +++ b/uploader/app/structured/designations/rules.py @@ -34,7 +34,7 @@ def match(self, value: str) -> str | None: # Most popular catalogs NameRule( name="PGC", - pattern=re.compile(r"^(?:P|PGC|LEDA|#)?\s*0*(\d+)$", re.IGNORECASE), + pattern=re.compile(r"^(?:LEDA|PGC|P|#)?\s*0*(\d+)$", re.IGNORECASE), replacement="PGC {0}", ), NameRule( @@ -44,35 +44,36 @@ def match(self, value: str) -> str | None: ), NameRule( name="2MASS", - pattern=re.compile(r"^(2MASS|2MASX)\s*J(\d{8}[+-]\d{7})$", re.IGNORECASE), + pattern=re.compile(r"^(2MAS[SX])\s*J\s*(\d{8}[+-]\d{7})$", re.IGNORECASE), replacement="{0} J{1}", replacer=lambda m: f"{m.group(1).upper()} J{m.group(2)}", ), NameRule( name="M", - pattern=re.compile(r"^(?:MESSIER|M)\s*0*(\d+)$", re.IGNORECASE), + pattern=re.compile(r"^M(?:ESSIER)?\s*0*(\d+)$", re.IGNORECASE), replacement="M {0}", ), NameRule( name="NGC", - pattern=re.compile(r"^(?:N|NGC)\s*0*(\d{1,4})\s*([A-Z]?)$", re.IGNORECASE), + pattern=re.compile(r"^N(?:GC)?\s*0*(\d{1,4})\s*([A-Z]?)$", re.IGNORECASE), replacement="NGC {0}{1}", - replacer=lambda m: f"NGC {m.group(1).upper()}{m.group(2).upper() or ''}", + replacer=lambda m: f"NGC {int(m.group(1))}{m.group(2).upper()}", ), NameRule( name="IC", - pattern=re.compile(r"^(?:I|IC)\s*0*(\d{1,4})$", re.IGNORECASE), - replacement="IC {0}", + pattern=re.compile(r"^IC?\s*0*(\d{1,4})\s*([A-Z]?)$", re.IGNORECASE), + replacement="IC {0}{1}", + replacer=lambda m: f"IC {int(m.group(1))}{m.group(2).upper()}", ), NameRule( name="UGC", - pattern=re.compile(r"^(?:U|UGC|UGCG)\s*0*(\d{1,5})\s*([A-Z]?)$", re.IGNORECASE), + pattern=re.compile(r"^U(?:GCG?)?\s*0*(\d{1,5})\s*([A-Z]?)$", re.IGNORECASE), replacement="UGC {0}{1}", - replacer=lambda m: f"UGC {m.group(1).upper()}{m.group(2).upper() or ''}", + replacer=lambda m: f"UGC {int(m.group(1))}{m.group(2).upper()}", ), NameRule( name="UGCA", - pattern=re.compile(r"^(?:UA|UGCA)\s*0*(\d{1,3})$", re.IGNORECASE), + pattern=re.compile(r"^U(?:GC)?A\s*0*(\d{1,3})$", re.IGNORECASE), replacement="UGCA {0}", ), NameRule( @@ -80,111 +81,212 @@ def match(self, value: str) -> str | None: pattern=re.compile(r"^AGC\s*0*(\d+)$", re.IGNORECASE), replacement="AGC {0}", ), - # Other catalogs NameRule( - name="ISI96", - pattern=re.compile(r"^ISI96_(\d{4})([+-])(\d{4})$", re.IGNORECASE), - replacement="ISI96_{0}{1}{2}", + name="ESO", + pattern=re.compile(r"^ESO\s*0*(\d+)-\s*G?\s*0*(\d+)([a-z]?)$", re.IGNORECASE), + replacement="ESO {0}-{1}{2}", + replacer=lambda m: f"ESO {m.group(1)}-{m.group(2)}{m.group(3).upper() or ''}", ), + NameRule( + name="MCG", + pattern=re.compile(r"^MCG\s*([+-]?)(\d{1,2})-(\d{1,2})-(\d+)$", re.IGNORECASE), + replacement="MCG {0}-{1}-{2}", + replacer=lambda m: f"MCG {m.group(1) or '+'}{m.group(2).zfill(2)}-{m.group(3).zfill(2)}-{m.group(4).zfill(3)}", + ), + NameRule( + name="ABELL", + pattern=re.compile(r"^(?:ABELL?|ABGC|ACO)\s*(S?)0*(\d+)$", re.IGNORECASE), + replacement="ACO {0}", + replacer=lambda m: f"ACO {'S ' if m.group(1) else ''}{m.group(2)}", + ), + # Andromeda NameRule( name="Andromeda", + pattern=re.compile(r"^(?:And|Andromeda)\s*(\d+|[IVXLCDM]+)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"And {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", + ), + # Eponym + NameRule( + name="Eponym", + pattern=re.compile(r"^Arp\s*0*(\d{1,3})$", re.IGNORECASE), + replacement="Arp {0}", + ), + NameRule( + name="Eponym", + pattern=re.compile(r"^(?:Frl|Fair|Fairall)\s*0*(\d{1,4})$", re.IGNORECASE), + replacement="Frl {0}", + ), + NameRule( + name="Eponym", + pattern=re.compile(r"^Maffei\s*([12])$", re.IGNORECASE), + replacement="Maffei {0}", + ), + NameRule( + name="Eponym", + pattern=re.compile(r"^(?:Mkn|Mrk|Markarian|Markarjan)\s*0*(\d{1,4})$", re.IGNORECASE), + replacement="Mrk {0}", + ), + NameRule( + name="Eponym", pattern=re.compile( - r"^(?:And|Andromeda)\s*(\d+|[IVXLCDM]+)$", + r"^(?:Ho|Holm|Holmberg)\s*(\d|[IVX]+)$", re.IGNORECASE, ), replacement="", - replacer=lambda m: ( - f"Andromeda {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}" - ), + replacer=lambda m: f"Holmberg {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", ), + # LSB galaxies NameRule( - name="ESO", - pattern=re.compile(r"^ESO\s*0*(\d+)-0*(\d+)$", re.IGNORECASE), - replacement="ESO {0}-{1}", + name="LSBG", + pattern=re.compile(r"^(?:LSBG|\[MDS99\])?\s*F([1-5]\d{2})-(\d{1,3})$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"[MDS99] F{m.group(1)}-{m.group(2).zfill(3)}", ), NameRule( - name="ESO", - pattern=re.compile(r"^ESO\s*0*(\d+)-0*(\d+)([a-zA-Z]{1,3})$", re.IGNORECASE), - replacement="ESO {0}-{1}{2}", + name="LSBG", + pattern=re.compile(r"^(?:LSBG|ISI96|\[ISI96\])\s*(\d{4}[+-]\d{4})([abx]?)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"[ISI96] {m.group(1)}{m.group(2).lower()}", ), + # General rules NameRule( - name="ESO", - pattern=re.compile(r"^ESO\s*0*(\d+)-G\s*0*(\d+)$", re.IGNORECASE), - replacement="ESO {0}-G{1}", + name="[REF]J", + pattern=re.compile( + r"^\[([A-Z]{1,3}(?:[6-9]\d|20\d{2}))\]\s*J(\d{6}(?:\.\d+)?[+-]\d{6}(?:\.\d+)?)$", re.IGNORECASE + ), + replacement="[{0}] J{1}", + replacer=lambda m: f"[{m.group(1).upper()}] J{m.group(2)}", ), NameRule( - name="CGCG", - pattern=re.compile(r"^CGCG\s*(\d{3})-0*(\d{2,3})$", re.IGNORECASE), - replacement="CGCG {0}-{1}", + name="[REF]HHMM+DDMM", + pattern=re.compile(r"^\[([A-Z]{1,3}(?:[6-9]\d|20\d{2}))\]\s*(\d{4}[+-]\d{4})$", re.IGNORECASE), + replacement="[{0}] {1}", + replacer=lambda m: f"[{m.group(1).upper()}] {m.group(2)}", ), NameRule( - name="DR8", - pattern=re.compile(r"^DR8-(\d{4})([pm])(\d{3})-(\d{1,5})$", re.IGNORECASE), - replacement="DR8-{0}{1}{2}-{3}", + name="[REF]N", + pattern=re.compile(r"^\[([A-Z]{1,3}(?:[6-9]\d|20\d{2}))\]\s*0*(\d+)\s*([a-z]?)$", re.IGNORECASE), + replacement="[{0}] {1}{2}", + replacer=lambda m: f"[{m.group(1).upper()}] {m.group(2)}{m.group(3).lower()}", + ), + # NameRule( + # name="[REF] *", + # pattern=re.compile(r"^\[([A-Z]{1,3}(?:[6-9]\d|20\d{2}))\]\s*(.+)$", re.IGNORECASE), + # replacement="", + # replacer=lambda m: f"[{m.group(1)}] {m.group(2).strip()}", + # ), + # Mixed characters in an acronym + NameRule( + name="6dF", + pattern=re.compile(r"^6dF\s*J\s*(\d{7}[+-]\d{6})\:?$", re.IGNORECASE), + replacement="6dF J{0}", ), NameRule( - name="AM", - pattern=re.compile(r"^AM\s*(\d{4})([+-])(\d{2,3})$", re.IGNORECASE), - replacement="AM {0}{1}{2}", + name="USGC", + pattern=re.compile(r"^USGC\s*([US])\s*(\d+)$", re.IGNORECASE), + replacement="USGC {0}{1}", + replacer=lambda m: f"USGC {m.group(1).upper()}{m.group(2)}", ), + # Non standard NameRule( name="Dw", - pattern=re.compile(r"^Dw\s*(\d{4})([+-])(\d{2})(\d{2})?(b)?$", re.IGNORECASE), - replacement="Dw {0}{1}{2}", - replacer=lambda m: f"Dw {m.group(1)}{m.group(2)}{m.group(3)}{m.group(4) or ''}{(m.group(5) or '').lower()}", + pattern=re.compile(r"^Dw\s*J?(\d{4}[+-]\d{2,4})([ab]?)$", re.IGNORECASE), + replacement="dwJ{0}{1}", + replacer=lambda m: f"dwJ{m.group(1)}{m.group(2).lower() or ''}", ), + # General rules NameRule( - name="KSP-DW", - pattern=re.compile(r"^KSP-DW\s*0*(\d+)$", re.IGNORECASE), - replacement="KSP-DW {0}", + name="CAT N", + pattern=re.compile(r"^([A-Za-z]{2,7})\s*0*(\d+)([a-z]?)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {int(m.group(2))}{m.group(3).lower()}", ), NameRule( - name="LSBC", - pattern=re.compile(r"^LSBC\s*D\s*0*(\d+)-0*(\d+)$", re.IGNORECASE), - replacement="LSBC D{0}-{1}", + name="CAT HHMMSSss+DDMMSSs", + pattern=re.compile(r"^([a-z0-9]{2,6}?)\s*([JB]?)\s*(\d{8}[+-]\d{7})$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {m.group(2).upper()}{m.group(3)}", ), NameRule( - name="LV", - pattern=re.compile(r"^LV\s*J\s*(\d{4})([+-])(\d{4})$", re.IGNORECASE), - replacement="LV J{0}{1}{2}", + name="CAT HHMMSSs+DDMMSS", + pattern=re.compile(r"^([a-z0-9]{2,6}?)\s*([JB]?)\s*(\d{7}[+-]\d{6})$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {m.group(2).upper()}{m.group(3)}", ), NameRule( - name="MCG", - pattern=re.compile(r"^MCG\s*([+-]?\d+)-0*(\d+)-0*(\d+)$", re.IGNORECASE), - replacement="MCG {0}-{1}-{2}", + name="CAT HHMMSS.sss+DDMMSS.sss", + pattern=re.compile(r"^([a-z0-9]{2,6}?)\s*([JB]?)\s*(\d{6}(?:\.\d+)?[+-]\d{6}(?:\.\d+)?)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {m.group(2).upper()}{m.group(3)}", ), NameRule( - name="6dF", - pattern=re.compile( - r"^6dFJ(\d{7})([+-])(\d{6})\:?$", - re.IGNORECASE, - ), - replacement="6dF J{0}{1}{2}", + name="CAT HHMM+DDMM", + pattern=re.compile(r"^([a-z0-9]{2,6}?)\s*([JB]?)\s*(\d{4}[+-]\d{4})$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {m.group(2).upper()}{m.group(3)}", ), NameRule( - name="ABELL", - pattern=re.compile(r"^ABELL\s*0*(\d+)$", re.IGNORECASE), - replacement="ABELL {0}", - replacer=lambda m: f"ABELL {int(m.group(1))}", + name="CAT HHMM+DD", + pattern=re.compile(r"^([a-z0-9]{2,6})\s*([JB]?)\s*(\d{4}[+-]\d{2,3})([a-z]?)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {m.group(2).upper()}{m.group(3)}{m.group(4) or ''}", ), NameRule( - name="ABELL", - pattern=re.compile(r"^ABELL\s*0*(\d+)_(\d+)$", re.IGNORECASE), - replacement="ABELL {0}_{1}", - replacer=lambda m: f"ABELL {int(m.group(1))}_{int(m.group(2))}", + name="CAT DDD.ddd+DD.ddd", + pattern=re.compile(r"^([a-z0-9]{2,6})\s*J\s*(\d{1,3}\.\d+[+-]\d{1,3}\.\d+)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} J{m.group(2)}", ), NameRule( - name="ABELL", - pattern=re.compile(r"^ABELL\s*0*(\d+):\[([^\]]+)\](\d+)$", re.IGNORECASE), - replacement="ABELL {0} [{1}] {2}", - replacer=lambda m: f"ABELL {int(m.group(1))} [{m.group(2)}] {m.group(3)}", + name="CAT HHMMSS+DDMMS", + pattern=re.compile(r"^([a-z0-9]{2,6})\s*([JB]?)\s*(\d{6}[+-]\d{5})$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {m.group(2).upper()}{m.group(3)}", ), NameRule( - name="ABELL", - pattern=re.compile(r"^ABELL\s*0*(\d+)_(\d+):\[([^\]]+)\](\d+)$", re.IGNORECASE), - replacement="ABELL {0}_{1} [{2}] {3}", - replacer=lambda m: f"ABELL {int(m.group(1))}_{int(m.group(2))} [{m.group(3)}] {m.group(4)}", + name="CAT N-N-N", + pattern=re.compile(r"^([a-z]{2,6})\s*0*(\d{1,5})-0*(\d{1,5})-0*(\d{1,5})$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"{m.group(1).upper()} {int(m.group(2))}-{int(m.group(3))}-{int(m.group(4))}", ), + # Other catalogs + NameRule( + name="CGCG", + pattern=re.compile(r"^CGCG\s*(\d{3})-0*(\d{2,3})$", re.IGNORECASE), + replacement="CGCG {0}-{1}", + ), + NameRule( + name="DR8", + pattern=re.compile(r"^DR8-(\d{4})([pm])(\d{3})-(\d{1,5})$", re.IGNORECASE), + replacement="DR8-{0}{1}{2}-{3}", + ), + NameRule( + name="AM", + pattern=re.compile(r"^AM\s*(\d{4})([+-])(\d{2,3})$", re.IGNORECASE), + replacement="AM {0}{1}{2}", + ), + NameRule( + name="KSP-DW", + pattern=re.compile(r"^KSP-DW\s*0*(\d+)$", re.IGNORECASE), + replacement="KSP-DW {0}", + ), + NameRule( + name="LSBC", + pattern=re.compile(r"^LSBC\s*D\s*0*(\d+)-0*(\d+)$", re.IGNORECASE), + replacement="LSBC D{0}-{1}", + ), + # NameRule( + # name="LV", + # pattern=re.compile(r"^LV\s*J\s*(\d{4})([+-])(\d{4})$", re.IGNORECASE), + # replacement="LV J{0}{1}{2}", + # ), + # NameRule( + # name="ABELL", + # pattern=re.compile(r"^ABELL\s*0*(\d+)_(\d+)$", re.IGNORECASE), + # replacement="ABELL {0}_{1}", + # replacer=lambda m: f"ABELL {int(m.group(1))}_{int(m.group(2))}", + # ), NameRule( name="CNOC2", pattern=re.compile(r"^CNOC2_(\d+)\.(\d+)$", re.IGNORECASE), @@ -196,11 +298,11 @@ def match(self, value: str) -> str | None: replacement="2MFGC {0}", replacer=lambda m: f"2MFGC {int(m.group(1))}", ), - NameRule( - name="VVDS", - pattern=re.compile(r"^VVDS\s*(\d+)$", re.IGNORECASE), - replacement="VVDS {0}", - ), + # NameRule( + # name="VVDS", + # pattern=re.compile(r"^VVDS\s*(\d+)$", re.IGNORECASE), + # replacement="VVDS {0}", + # ), NameRule( name="GALFA", pattern=re.compile( @@ -209,12 +311,6 @@ def match(self, value: str) -> str | None: ), replacement="GALFA J{0}+{1}+{2}", ), - NameRule( - name="USGC", - pattern=re.compile(r"^USGC([A-Za-z]+)(\d+)$", re.IGNORECASE), - replacement="USGC {0}{1}", - replacer=lambda m: f"USGC {m.group(1).upper()}{m.group(2)}", - ), NameRule( name="RXJ", pattern=re.compile( @@ -227,25 +323,25 @@ def match(self, value: str) -> str | None: + (f" [{m.group(6)}] {m.group(7)}" if m.group(6) else "") ), ), - NameRule( - name="CLJ", - pattern=re.compile( - r"^CLJ(\d{4})([+-])(\d{4})(?::\[([^\]]+)\](\d+))?$", - re.IGNORECASE, - ), - replacement="CL J{0}{1}{2}", - replacer=lambda m: ( - f"CL J{m.group(1)}{m.group(2)}{m.group(3)}" + (f" [{m.group(4)}] {m.group(5)}" if m.group(4) else "") - ), - ), - NameRule( - name="SMMJ", - pattern=re.compile( - r"^SMMJ(\d{2})(\d{2})(\d{2}(?:\.\d+)?)([+-])(\d{2})(\d{2})(\d{2}(?:\.\d+)?)$", - re.IGNORECASE, - ), - replacement="SMM J{0}{1}{2}{3}{4}{5}{6}", - ), + # NameRule( + # name="CLJ", + # pattern=re.compile( + # r"^CLJ(\d{4})([+-])(\d{4})(?::\[([^\]]+)\](\d+))?$", + # re.IGNORECASE, + # ), + # replacement="CL J{0}{1}{2}", + # replacer=lambda m: ( + # f"CL J{m.group(1)}{m.group(2)}{m.group(3)}" + (f" [{m.group(4)}] {m.group(5)}" if m.group(4) else "") + # ), + # ), + # NameRule( + # name="SMMJ", + # pattern=re.compile( + # r"^SMMJ(\d{2})(\d{2})(\d{2}(?:\.\d+)?)([+-])(\d{2})(\d{2})(\d{2}(?:\.\d+)?)$", + # re.IGNORECASE, + # ), + # replacement="SMM J{0}{1}{2}{3}{4}{5}{6}", + # ), NameRule( name="NGC", pattern=re.compile( @@ -283,132 +379,6 @@ def match(self, value: str) -> str | None: ), replacement="J{0}{1}{2}{3}{4}{5}{6}", ), - NameRule( - name="Eponym N", - pattern=re.compile(r"^Arp\s*0*(\d{1,3})$", re.IGNORECASE), - replacement="Arp {0}", - ), - NameRule( - name="Eponym N", - pattern=re.compile(r"^(?:Frl|Fair|Fairall)\s*0*(\d{1,4})$", re.IGNORECASE), - replacement="Frl {0}", - ), - NameRule( - name="Eponym N", - pattern=re.compile(r"^Maffei\s*([12])$", re.IGNORECASE), - replacement="Maffei {0}", - ), - NameRule( - name="Eponym N", - pattern=re.compile(r"^(?:Mkn|Mrk|Markarian|Markarjan)\s*0*(\d{1,4})$", re.IGNORECASE), - replacement="Mrk {0}", - ), - NameRule( - name="Eponym N", - pattern=re.compile( - r"^(?:Ho|Holm|Holmberg)\s*(\d|[IVX]+)$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"Holmberg {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", - ), - NameRule( - name="CAT JHHMMSS.sss+DDMMSS.sss", - pattern=re.compile( - r"^([A-Za-z0-9]{2,6})J(\d{2})(\d{2})(\d{2}(?:\.\d+)?)([+-])(\d{2})(\d{2})(\d{2}(?:\.\d+)?)$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: ( - f"{m.group(1).upper()} J{m.group(2)}{m.group(3)}{m.group(4)}" - f"{m.group(5)}{m.group(6)}{m.group(7)}{m.group(8)}" - ), - ), - NameRule( - name="CAT JHHMMSSss+DDMMSSs", - pattern=re.compile( - r"^([A-Za-z0-9]{2,5})J(\d{8})([+-])(\d{7})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} J{m.group(2)}{m.group(3)}{m.group(4)}", - ), - NameRule( - name="CAT JHHMM+DDMM", - pattern=re.compile( - r"^([A-Za-z0-9]{2,5})J(\d{2})(\d{2})([+-])(\d{2})(\d{2})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} J{m.group(2)}{m.group(3)}{m.group(4)}{m.group(5)}{m.group(6)}", - ), - NameRule( - name="CAT HHMM+DDMM", - pattern=re.compile( - r"^([A-Za-z0-9]{2,5})\s*(\d{2})(\d{2})([+-])(\d{2})(\d{2})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} {m.group(2)}{m.group(3)}{m.group(4)}{m.group(5)}{m.group(6)}", - ), - NameRule( - name="CAT JDD.ddd+DD.ddd", - pattern=re.compile( - r"^([A-Za-z0-9]{2,6})J(\d{1,3}\.\d+)([+-])(\d{1,3}\.\d+)$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} J{m.group(2)}{m.group(3)}{m.group(4)}", - ), - NameRule( - name="CAT J HHMM+DD", - pattern=re.compile( - r"^([A-Za-z0-9]{2,6})\s*(J?)\s*(\d{4})([+-])(\d{2,3})([a-z])?$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: ( - f"{m.group(1).upper()}{' J' if m.group(2) else ' '}{m.group(3)}{m.group(4)}{m.group(5)}{m.group(6) or ''}" - ), - ), - NameRule( - name="CAT HHMMSSs+DDMMSS", - pattern=re.compile( - r"^([A-Za-z0-9]{2,6})\s*(\d{7})([+-])(\d{6})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} {m.group(2)}{m.group(3)}{m.group(4)}", - ), - NameRule( - name="CAT HHMMSS+DDMMS", - pattern=re.compile( - r"^([A-Za-z0-9]{2,6})(\d{6})([+-])(\d{5})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} {m.group(2)}{m.group(3)}{m.group(4)}", - ), - NameRule( - name="CAT HHMMSS.sss+DDMMSS", - pattern=re.compile( - r"^([A-Za-z0-9]{2,6})(\d{2})(\d{2})(\d{2}(?:\.\d+)?)([+-])(\d{2})(\d{2})(\d{2})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: ( - f"{m.group(1).upper()} {m.group(2)}{m.group(3)}{m.group(4)}{m.group(5)}{m.group(6)}{m.group(7)}{m.group(8)}" - ), - ), - NameRule( - name="CAT N", - pattern=re.compile( - r"^([A-Za-z]{2,7})\s*0*(\d{1,10})([a-zA-Z]{1,3})?$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} {int(m.group(2))}{m.group(3) or ''}", - ), NameRule( name="CAT +HHMMSS", pattern=re.compile( @@ -428,56 +398,53 @@ def match(self, value: str) -> str | None: replacer=lambda m: f"{m.group(1).upper()} {m.group(2)}{m.group(3)}", ), NameRule( - name="[REF]J", - pattern=re.compile( - r"^\[([A-Za-z]+\d+)\]\s*J(\d{6}(?:\.\d+)?)([+-])(\d{6}(?:\.\d+)?)$", - re.IGNORECASE, - ), - replacement="[{0}] J{1}{2}{3}", - ), - NameRule( - name="[REF]HHMM+DDMM", - pattern=re.compile( - r"^\[([A-Za-z]+\d+)\](\d{4})([+-])(\d{4})$", - re.IGNORECASE, - ), - replacement="[{0}] {1}{2}{3}", - ), - NameRule( - name="[REF]N", + name="CGMW", pattern=re.compile( - r"^\[([A-Za-z]+\d+)\]0*(\d+)$", + r"^CGMW([1-5])-0*(\d{5})$", re.IGNORECASE, ), replacement="", - replacer=lambda m: f"[{m.group(1)}] {int(m.group(2))}", + replacer=lambda m: f"CGMW {m.group(1)}-{int(m.group(2))}", ), + # Reformating NameRule( - name="CAT N-N-N", - pattern=re.compile( - r"^([A-Za-z]{2,6})\s*0*(\d{1,5})-0*(\d{1,5})-0*(\d{1,5})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"{m.group(1).upper()} {int(m.group(2))}-{int(m.group(3))}-{int(m.group(4))}", + name="Reformat", + pattern=re.compile(r"^.*?\[TKA2006\]\s*F\s*0*(\d)-\s*0*(\d{1,2})\s*([ab]?)$", re.IGNORECASE), + replacement="[TKA2006] F{0}-{1}{2}", + replacer=lambda m: f"[TKA2006] F{m.group(1)}-{int(m.group(2))}{m.group(3).lower() or ''}", ), NameRule( - name="CGMW", - pattern=re.compile( - r"^CGMW([1-5])-0*(\d{5})$", - re.IGNORECASE, - ), - replacement="", - replacer=lambda m: f"CGMW {m.group(1)}-{int(m.group(2))}", + name="Reformat", + pattern=re.compile(r"^ABELL.*\[M(?:CF)?2008\]\s*0*(\d+)$", re.IGNORECASE), + replacement="[MCF2008] {0}", ), NameRule( - name="[REF] *", - pattern=re.compile( - r"^\[([A-Za-z]+\d+)\]\s*(.+)$", - re.IGNORECASE, - ), + name="Reformat", + pattern=re.compile(r"^ABELL.*\[([a-z]{1,3}(?:20\d\d|\d\d))\]\s*0*(\d+)$", re.IGNORECASE), replacement="", - replacer=lambda m: f"[{m.group(1)}] {m.group(2).strip()}", + replacer=lambda m: f"[{m.group(1).upper()}] {int(m.group(2))}", + ), + # Check CDS for the format + # [BBG2007] + # [BMA2005] + # [BOW83] + # [D80] + # [DFL99] + # [DSP99] + # [HO98] + # [JFH99] + # [NAM2006] + # [PBL2000] + # [PL95] + # [PSE2006] + # [SBM98] + # [VMP2002] + # [YEA96] + NameRule( + name="ABELL", + pattern=re.compile(r"^ABELL\s*0*(\d+)_(\d+):\[([^\]]+)\](\d+)$", re.IGNORECASE), + replacement="ABELL {0}_{1} [{2}] {3}", + replacer=lambda m: f"ABELL {int(m.group(1))}_{int(m.group(2))} [{m.group(3)}] {m.group(4)}", ), ] From c5d3fc55905c5a983b09c2acefbf5271a9c0478a Mon Sep 17 00:00:00 2001 From: Dmitry Makarov Date: Sun, 17 May 2026 03:27:53 +0300 Subject: [PATCH 4/4] Small corrections --- tests/test_designation_rules.py | 40 ++++----- uploader/app/structured/designations/rules.py | 86 +++++++++++-------- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/tests/test_designation_rules.py b/tests/test_designation_rules.py index f64fded..7310ec7 100644 --- a/tests/test_designation_rules.py +++ b/tests/test_designation_rules.py @@ -105,6 +105,10 @@ ("Mkn 123", ("Eponym", "Mrk 123")), ("Mrk456", ("Eponym", "Mrk 456")), ("Markarian 007", ("Eponym", "Mrk 7")), + ("LAEVENS2", ("Eponym", "Laevens 2")), + ("LAEVENS 2", ("Eponym", "Laevens 2")), + ("laevens2", ("Eponym", "Laevens 2")), + ("LAEVENS", None), ("LSBG0230+0022", ("LSBG", "[ISI96] 0230+0022")), ("LSBG 0230+0022", ("LSBG", "[ISI96] 0230+0022")), ("ISI960230+0022", ("LSBG", "[ISI96] 0230+0022")), @@ -234,6 +238,22 @@ ("ABELLS0076", ("ABELL", "ACO S 76")), ("ABELL0496", ("ABELL", "ACO 496")), ("ABELL 496", ("ABELL", "ACO 496")), + ("6dFJ2032543-251656", ("6dF", "6dF J2032543-251656")), + ("6dF J1605369-301035", ("6dF", "6dF J1605369-301035")), + ("6dFJ1253111-272754:", ("6dF", "6dF J1253111-272754")), + ("6df j2016142-085824", ("6dF", "6dF J2016142-085824")), + ("3C223.1", ("3C", "3C 223.1")), + ("3C192", ("3C", "3C 192")), + ("3C 236", ("3C", "3C 236")), + ("3c310", ("3C", "3C 310")), + ("3C218A", ("3C", "3C 218A")), + ("3C 218A", ("3C", "3C 218A")), + ("3c218a", ("3C", "3C 218A")), + ("3C", None), + ("2MFGC15266", ("CAT N", "2MFGC 15266")), + ("2MFGC 15266", ("CAT N", "2MFGC 15266")), + ("2mfgc15266", ("CAT N", "2MFGC 15266")), + ("2MFGC", None), # # # ("[ONC2011]J259.926454+26.554180", ("[REF] *", "[ONC2011] J259.926454+26.554180")), @@ -329,10 +349,6 @@ ("PANDAS 57", ("CAT N", "PANDAS 57")), ("pandas57", ("CAT N", "PANDAS 57")), ("PANDAS", None), - ("LAEVENS2", ("CAT N", "LAEVENS 2")), - ("LAEVENS 2", ("CAT N", "LAEVENS 2")), - ("laevens2", ("CAT N", "LAEVENS 2")), - ("LAEVENS", None), ("BSDL2844", ("CAT N", "BSDL 2844")), ("BSDL 2844", ("CAT N", "BSDL 2844")), ("bsdl2844", ("CAT N", "BSDL 2844")), @@ -347,14 +363,6 @@ ("N7448", ("NGC", "NGC 7448")), ("n3902", ("NGC", "NGC 3902")), ("N 7448", ("NGC", "NGC 7448")), - ("3C223.1", ("3C", "3C 223.1")), - ("3C192", ("3C", "3C 192")), - ("3C 236", ("3C", "3C 236")), - ("3c310", ("3C", "3C 310")), - ("3C218A", ("3C", "3C 218A")), - ("3C 218A", ("3C", "3C 218A")), - ("3c218a", ("3C", "3C 218a")), - ("3C", None), ("2DFGRSN129Z061", ("2dFGRS", "2dFGRS N129Z061")), ("2dfgrsN129Z061", ("2dFGRS", "2dFGRS N129Z061")), ("2DFGRSS889Z059", ("2dFGRS", "2dFGRS S889Z059")), @@ -384,19 +392,11 @@ ("LSBC D565-06", ("LSBC", "LSBC D565-6")), ("lsbc d640-12", ("LSBC", "LSBC D640-12")), ("LSBC D640", None), - ("6dFJ2032543-251656", ("6dF", "6dF J2032543-251656")), - ("6dFJ1605369-301035", ("6dF", "6dF J1605369-301035")), - ("6dFJ1253111-272754:", ("6dF", "6dF J1253111-272754")), - ("6dfj2016142-085824", ("6dF", "6dF J2016142-085824")), ("CNOC2_0223.051394", ("CNOC2", "CNOC2_0223.051394")), ("CNOC2_0223.100322", ("CNOC2", "CNOC2_0223.100322")), ("cnoc2_0223.140942", ("CNOC2", "CNOC2_0223.140942")), ("CNOC2_0223.090502", ("CNOC2", "CNOC2_0223.090502")), ("CNOC20223.051394", None), - ("2MFGC15266", ("2MFGC", "2MFGC 15266")), - ("2MFGC 15266", ("2MFGC", "2MFGC 15266")), - ("2mfgc15266", ("2MFGC", "2MFGC 15266")), - ("2MFGC", None), ("GALFAJ180.8+24.1+032", ("GALFA", "GALFA J180.8+24.1+032")), ("galfaj180.8+24.1+032", ("GALFA", "GALFA J180.8+24.1+032")), ("RXJ0152.7-1357", ("RXJ", "RX J0152.7-1357")), diff --git a/uploader/app/structured/designations/rules.py b/uploader/app/structured/designations/rules.py index 934b554..a135bb7 100644 --- a/uploader/app/structured/designations/rules.py +++ b/uploader/app/structured/designations/rules.py @@ -99,13 +99,24 @@ def match(self, value: str) -> str | None: replacement="ACO {0}", replacer=lambda m: f"ACO {'S ' if m.group(1) else ''}{m.group(2)}", ), - # Andromeda + # Constellation NameRule( name="Andromeda", - pattern=re.compile(r"^(?:And|Andromeda)\s*(\d+|[IVXLCDM]+)$", re.IGNORECASE), + pattern=re.compile(r"^And(?:romeda)?\s*(\d+|[IVXLCDM]+)$", re.IGNORECASE), replacement="", replacer=lambda m: f"And {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", ), + NameRule( + name="Cassiopeia", + pattern=re.compile(r"^Cas(?:siopeia)?\s*0*(\d+)$", re.IGNORECASE), + replacement="Cas {0}", + ), + NameRule( + name="Triangulum", + pattern=re.compile(r"^Tri(?:angulum)?\s*(\d+|[IVXLCDM]+)$", re.IGNORECASE), + replacement="", + replacer=lambda m: f"Tri {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", + ), # Eponym NameRule( name="Eponym", @@ -117,11 +128,6 @@ def match(self, value: str) -> str | None: pattern=re.compile(r"^(?:Frl|Fair|Fairall)\s*0*(\d{1,4})$", re.IGNORECASE), replacement="Frl {0}", ), - NameRule( - name="Eponym", - pattern=re.compile(r"^Maffei\s*([12])$", re.IGNORECASE), - replacement="Maffei {0}", - ), NameRule( name="Eponym", pattern=re.compile(r"^(?:Mkn|Mrk|Markarian|Markarjan)\s*0*(\d{1,4})$", re.IGNORECASE), @@ -129,13 +135,16 @@ def match(self, value: str) -> str | None: ), NameRule( name="Eponym", - pattern=re.compile( - r"^(?:Ho|Holm|Holmberg)\s*(\d|[IVX]+)$", - re.IGNORECASE, - ), + pattern=re.compile(r"^(?:Ho|Holm|Holmberg)\s*(\d|[IVX]+)$", re.IGNORECASE), replacement="", replacer=lambda m: f"Holmberg {int(m.group(1)) if m.group(1).isdigit() else _roman_to_int(m.group(1).upper())}", ), + NameRule( + name="Eponym", + pattern=re.compile(r"^(Dwingeloo|Laevens|Maffei)\s*0*(\d)$", re.IGNORECASE), + replacement="{0} {1}", + replacer=lambda m: f"{m.group(1).capitalize()} {m.group(2)}", + ), # LSB galaxies NameRule( name="LSBG", @@ -188,6 +197,12 @@ def match(self, value: str) -> str | None: replacement="USGC {0}{1}", replacer=lambda m: f"USGC {m.group(1).upper()}{m.group(2)}", ), + NameRule( + name="3C", + pattern=re.compile(r"^3C\s*(\d+(?:\.\d)?)([a-z]?)$", re.IGNORECASE), + replacement="3C {0}", + replacer=lambda m: f"3C {m.group(1).zfill(3)}{m.group(2).upper()}", + ), # Non standard NameRule( name="Dw", @@ -198,7 +213,7 @@ def match(self, value: str) -> str | None: # General rules NameRule( name="CAT N", - pattern=re.compile(r"^([A-Za-z]{2,7})\s*0*(\d+)([a-z]?)$", re.IGNORECASE), + pattern=re.compile(r"^([a-z0-9]{1,5}[a-z])\s*0*(\d+)([a-z]?)$", re.IGNORECASE), replacement="", replacer=lambda m: f"{m.group(1).upper()} {int(m.group(2))}{m.group(3).lower()}", ), @@ -256,21 +271,21 @@ def match(self, value: str) -> str | None: pattern=re.compile(r"^CGCG\s*(\d{3})-0*(\d{2,3})$", re.IGNORECASE), replacement="CGCG {0}-{1}", ), - NameRule( - name="DR8", - pattern=re.compile(r"^DR8-(\d{4})([pm])(\d{3})-(\d{1,5})$", re.IGNORECASE), - replacement="DR8-{0}{1}{2}-{3}", - ), - NameRule( - name="AM", - pattern=re.compile(r"^AM\s*(\d{4})([+-])(\d{2,3})$", re.IGNORECASE), - replacement="AM {0}{1}{2}", - ), NameRule( name="KSP-DW", pattern=re.compile(r"^KSP-DW\s*0*(\d+)$", re.IGNORECASE), replacement="KSP-DW {0}", ), + NameRule( + name="DR8", + pattern=re.compile(r"^DR8-(\d{4})([pm])(\d{3})-(\d{1,5})$", re.IGNORECASE), + replacement="DR8-{0}{1}{2}-{3}", + ), + # NameRule( + # name="AM", + # pattern=re.compile(r"^AM\s*(\d{4})([+-])(\d{2,3})$", re.IGNORECASE), + # replacement="AM {0}{1}{2}", + # ), NameRule( name="LSBC", pattern=re.compile(r"^LSBC\s*D\s*0*(\d+)-0*(\d+)$", re.IGNORECASE), @@ -292,12 +307,12 @@ def match(self, value: str) -> str | None: pattern=re.compile(r"^CNOC2_(\d+)\.(\d+)$", re.IGNORECASE), replacement="CNOC2_{0}.{1}", ), - NameRule( - name="2MFGC", - pattern=re.compile(r"^2MFGC\s*0*(\d+)$", re.IGNORECASE), - replacement="2MFGC {0}", - replacer=lambda m: f"2MFGC {int(m.group(1))}", - ), + # NameRule( + # name="2MFGC", + # pattern=re.compile(r"^2MFGC\s*0*(\d+)$", re.IGNORECASE), + # replacement="2MFGC {0}", + # replacer=lambda m: f"2MFGC {int(m.group(1))}", + # ), # NameRule( # name="VVDS", # pattern=re.compile(r"^VVDS\s*(\d+)$", re.IGNORECASE), @@ -356,16 +371,11 @@ def match(self, value: str) -> str | None: pattern=re.compile(r"^N\s*0*(\d+)([a-zA-Z]{1,3})$", re.IGNORECASE), replacement="NGC {0}{1}", ), - NameRule( - name="3C", - pattern=re.compile(r"^3C\s*(\d+(?:\.\d+)?)$", re.IGNORECASE), - replacement="3C {0}", - ), - NameRule( - name="3C", - pattern=re.compile(r"^3C\s*(\d+(?:\.\d+)?)([a-zA-Z]{1,3})$", re.IGNORECASE), - replacement="3C {0}{1}", - ), + # NameRule( + # name="3C", + # pattern=re.compile(r"^3C\s*(\d+(?:\.\d+)?)([a-zA-Z]{1,3})$", re.IGNORECASE), + # replacement="3C {0}{1}", + # ), NameRule( name="2dFGRS", pattern=re.compile(r"^2dfgrs\s*([NS]\d+Z\d+)$", re.IGNORECASE),