diff --git a/.github/workflows/pullreqeust_tests.yaml b/.github/workflows/pullreqeust_tests.yaml
index caafefa2a..a2a10ef77 100644
--- a/.github/workflows/pullreqeust_tests.yaml
+++ b/.github/workflows/pullreqeust_tests.yaml
@@ -21,7 +21,7 @@ jobs:
poetry check --lock
poetry install --with=dev
- name: Run arxiv-base tests with coverage
- run: poetry run pytest --cov=arxiv.base fourohfour --cov-fail-under=68 arxiv/base fourohfour
+ run: poetry run pytest --cov=arxiv.base fourohfour --cov-fail-under=67 arxiv/base fourohfour
# - name: Check Types
# TODO The types are in bad shape and need to be fixed
# run: poetry run mypy --exclude "test*" -p arxiv
diff --git a/README.md b/README.md
index 10f32b732..f47f4fee8 100644
--- a/README.md
+++ b/README.md
@@ -147,7 +147,7 @@ registering your blueprints. For example:
## App tests
Some tests to check app configuration and pattern compliance are provided in
-``arxiv.base.app_tests``. See that module for usage.
+``arxiv.base.tests``. See that module for usage. You can run them with the command ``pytest``
## Editing and compiling sass
diff --git a/arxiv/base/filters.py b/arxiv/base/filters.py
index aca42fbd3..08d62377a 100644
--- a/arxiv/base/filters.py
+++ b/arxiv/base/filters.py
@@ -12,8 +12,7 @@
from arxiv.base.urls import urlizer, canonical_url, clickthrough_url
from arxiv.util.tex2utf import tex2utf
-from arxiv.taxonomy import get_category_display, get_archive_display, \
- get_group_display
+from arxiv.taxonomy.category import Archive, Category, Group
ET = timezone('US/Eastern')
@@ -97,9 +96,6 @@ def register_filters(app: Flask) -> None:
app.template_filter('tex2utf_no_symbols')(partial(f_tex2utf, greek=False))
app.template_filter('canonical_url')(canonical_url)
app.template_filter('clickthrough_url')(clickthrough_url)
- app.template_filter('get_category_display')(get_category_display)
- app.template_filter('get_archive_display')(get_archive_display)
- app.template_filter('get_group_display')(get_group_display)
app.template_filter('embed_content')(embed_content)
app.template_filter('tidy_filesize')(tidy_filesize)
app.template_filter('as_eastern')(as_eastern)
diff --git a/arxiv/base/middleware/tests.py b/arxiv/base/middleware/middleware_test.py
similarity index 100%
rename from arxiv/base/middleware/tests.py
rename to arxiv/base/middleware/middleware_test.py
diff --git a/arxiv/base/routes.py b/arxiv/base/routes.py
index 6fda78c10..13136f2d9 100644
--- a/arxiv/base/routes.py
+++ b/arxiv/base/routes.py
@@ -13,6 +13,7 @@
from arxiv.base.exceptions import NotFound, Forbidden, Unauthorized, \
MethodNotAllowed, RequestEntityTooLarge, BadRequest, InternalServerError, \
default_exceptions, HTTPException
+from arxiv.taxonomy.definitions import CATEGORIES
from . import alerts
@@ -60,7 +61,8 @@ def test_macros() -> Response:
'comments': "This version (physics/9707012v2) was not stored by arXiv."
" A subsequent replacement was made before versioning was"
" introduced.",
- 'primary_category': 'cond-mat.supr-con',
+ 'primary_category': CATEGORIES['cond-mat.supr-con'],
+ "secondary_categories": [CATEGORIES['math.MP'], CATEGORIES['hep-lat']],
'submitted_date': datetime.now(),
'submission_history': [
{'version': 1, 'submitted_date': datetime.now()},
diff --git a/arxiv/base/templates/base/macros.html b/arxiv/base/templates/base/macros.html
index 5b0f59788..5497e3a2d 100644
--- a/arxiv/base/templates/base/macros.html
+++ b/arxiv/base/templates/base/macros.html
@@ -113,10 +113,10 @@
{%- else -%}
{%- set vpart = '' -%}
{% endif %}
- {%- if primary_category in arxiv_id -%}
+ {%- if primary_category.id in arxiv_id -%}
arXiv:{{ arxiv_id }}{{vpart}}
{%- else -%}
- arXiv:{{ arxiv_id }}{{vpart}} [{{ primary_category }}]
+ arXiv:{{ arxiv_id }}{{vpart}} [{{ primary_category.id }}]
{%- endif -%}
{%- endmacro -%}
@@ -177,8 +177,8 @@
Title:{{ title|tex2utf
Subjects: |
- {{ primary_category|get_category_display }}
- {%- for category in secondary_categories|sort(attribute='id') -%}; {{ category|get_category_display }}{%- endfor -%}
+ {{ primary_category.display() }}
+ {%- for category in secondary_categories|sort(attribute='id') -%}; {{ category.display() }}{%- endfor -%}
|
{%- if msc_class %}
@@ -261,7 +261,7 @@ Title:{{ title|tex2utf
Title: {{ title }}
Authors: {{ authors }}
-Categories: {{ primary_category }}{%- for category in secondary_categories|sort(attribute='id') -%} {{ category }}{%- endfor %}
+Categories: {{ primary_category.id }}{%- for category in secondary_categories|sort(attribute='id') -%} {{ category }}{%- endfor %}
{% if comments -%}{{ ("Comments: " + comments)|wordwrap(77, wrapstring="\n ") }}{%- endif %}
{% if msc_class -%}MSC classes: {{ msc_class }}{%- endif %}
{% if acm_class -%}ACM classes: {{ acm_class }}{%- endif %}
diff --git a/arxiv/base/templates/base/testmacros.html b/arxiv/base/templates/base/testmacros.html
index c355d0df9..c13e7cdc0 100644
--- a/arxiv/base/templates/base/testmacros.html
+++ b/arxiv/base/templates/base/testmacros.html
@@ -18,6 +18,8 @@
version=version,
submission_history=submission_history,
comments=comments,
- doi=doi) }}
+ doi=doi,
+ secondary_categories=secondary_categories
+ ) }}
{% endblock %}
diff --git a/arxiv/base/tests/test_docmeta.py b/arxiv/base/tests/test_docmeta.py
new file mode 100644
index 000000000..9996174ee
--- /dev/null
+++ b/arxiv/base/tests/test_docmeta.py
@@ -0,0 +1,120 @@
+
+from typing import Any, Dict
+from unittest import TestCase,mock
+from datetime import datetime
+
+from arxiv.document.metadata import DocMetadata, AuthorList, Submitter
+from arxiv.taxonomy.definitions import CATEGORIES
+from arxiv.identifier import Identifier
+from arxiv.license import License
+from arxiv.document.version import VersionEntry, SourceFlag
+
+SAMPLE_DOCMETA=DocMetadata(
+ raw_safe="abs text here",
+ arxiv_id='1204.5678',
+ arxiv_id_v="1204.5678v1",
+ arxiv_identifier=Identifier("1204.5678v1"),
+ title="title of paper",
+ abstract="also abs text here",
+ authors=AuthorList("First Name, Second, Name"),
+ submitter=Submitter(name="a submitter", email="fakeemail@arxiv.org"),
+ categories="hep-th cs.NA math-ph math.MP",
+ primary_category=CATEGORIES['hep-th'],
+ primary_archive=CATEGORIES['hep-th'].get_archive(),
+ primary_group=CATEGORIES['hep-th'].get_archive().get_group(),
+ secondary_categories=[
+ CATEGORIES["math-ph"],
+ CATEGORIES["math.MP"],
+ CATEGORIES["cs.NA"]
+ ],
+ journal_ref="journal of mystical knowledge",
+ report_num=None,
+ doi=None,
+ acm_class=None,
+ msc_class=None,
+ proxy=None,
+ comments="very insightful comments",
+ version=1,
+ license=License(),
+ version_history=[
+ VersionEntry(
+ version=1,
+ raw="",
+ submitted_date=None, # type: ignore
+ size_kilobytes=30, # type: ignore
+ source_flag=SourceFlag("D"), # type: ignore
+ )
+ ],
+ modified=datetime(year=2011, month=3, day=7)
+ )
+
+class DocMetadataTest(TestCase):
+ fields: Dict[str, Any]
+
+ def __init__(self, *args: str, **kwargs: Dict) -> None:
+ """Set up some common variables."""
+ super().__init__(*args, **kwargs)
+ self.fields = {
+ # TODO: reasonable mock defaults for future tests
+ }
+
+ def test_something(self):
+ """Tests that omission of a required field generates an exception."""
+ fields = self.fields.copy()
+ # TODO: implement a test on a generated DocMetadata
+
+ def test_required_fields(self):
+ """Tests that omission of a required field generates an exception."""
+ fields = self.fields.copy()
+
+ def run_on_empty_args() -> DocMetadata:
+ return DocMetadata(**fields) # type: ignore
+
+ with self.assertRaises(TypeError) as ctx:
+ run_on_empty_args()
+
+ # Do not indent us or we will not run and be tested!:
+ self.assertTrue('missing 14 required positional arguments' in str(ctx.exception))
+ #
+ self.assertTrue('raw_safe' in str(ctx.exception))
+ self.assertTrue('arxiv_id' in str(ctx.exception))
+ self.assertTrue('arxiv_id_v' in str(ctx.exception))
+ self.assertTrue('arxiv_identifier' in str(ctx.exception))
+ self.assertTrue('modified' in str(ctx.exception))
+ self.assertTrue('title' in str(ctx.exception))
+ self.assertTrue('abstract' in str(ctx.exception))
+ self.assertTrue('authors' in str(ctx.exception))
+ self.assertTrue('submitter' in str(ctx.exception))
+ self.assertTrue('categories' in str(ctx.exception))
+ self.assertTrue('primary_category' in str(ctx.exception))
+ self.assertTrue('primary_archive' in str(ctx.exception))
+ self.assertTrue('primary_group' in str(ctx.exception))
+ self.assertTrue('secondary_categories' in str(ctx.exception))
+ #
+ self.assertTrue('journal_ref' not in str(ctx.exception))
+ self.assertTrue('report_num' not in str(ctx.exception))
+ self.assertTrue('doi' not in str(ctx.exception))
+ self.assertTrue('acm_class' not in str(ctx.exception))
+ self.assertTrue('msc_class' not in str(ctx.exception))
+ self.assertTrue('proxy' not in str(ctx.exception))
+ self.assertTrue('comments' not in str(ctx.exception))
+ self.assertTrue('version' not in str(ctx.exception))
+ self.assertTrue('license' not in str(ctx.exception))
+ self.assertTrue('version_history' not in str(ctx.exception))
+ self.assertTrue('private' not in str(ctx.exception))
+
+ def test_get_seconaries(self):
+ #get secondaries should only return cannonical instance of each secondary category with no duplicates
+
+ self.assertEqual(
+ SAMPLE_DOCMETA.get_secondaries(),
+ set([CATEGORIES["math-ph"], CATEGORIES["math.NA"]]),
+ "only retrieves canonical version of each secondary"
+ )
+
+ self.assertEqual(
+ SAMPLE_DOCMETA.display_secondaries(),
+ ['Mathematical Physics (math-ph)', 'Numerical Analysis (math.NA)'],
+ "secondary display string must match"
+ )
+
\ No newline at end of file
diff --git a/arxiv/base/urls/links.py b/arxiv/base/urls/links.py
index 53d7bfbe4..212f37425 100644
--- a/arxiv/base/urls/links.py
+++ b/arxiv/base/urls/links.py
@@ -50,7 +50,7 @@
from flask import url_for, g
import bleach
-from arxiv.taxonomy import CATEGORIES
+from arxiv.taxonomy.definitions import CATEGORIES
from arxiv import identifier
from . import clickthrough
diff --git a/arxiv/db/__init__.py b/arxiv/db/__init__.py
index 6dc2a052f..06c203ca9 100644
--- a/arxiv/db/__init__.py
+++ b/arxiv/db/__init__.py
@@ -23,6 +23,14 @@
session.execute(
select(...)
)
+
+
+for writing within a transaction in any type of app do:
+
+from arxiv.db import transaction
+
+with transaction() as session:
+ session.add(...)
"""
from typing import Generator
import logging
diff --git a/arxiv/document/metadata.py b/arxiv/document/metadata.py
index 7431f81e6..b0f97060e 100644
--- a/arxiv/document/metadata.py
+++ b/arxiv/document/metadata.py
@@ -4,7 +4,7 @@
from datetime import datetime
from typing import Iterator, List, Optional, Set, Literal, Sequence
-from ..taxonomy import definitions
+from ..taxonomy.definitions import CATEGORIES
from ..taxonomy.category import Category, Group, Archive
from ..identifier import Identifier
from ..license import License
@@ -157,14 +157,14 @@ def get_browse_context_list(self) -> List[str]:
if self.primary_category:
options = {
self.primary_category.id: True,
- definitions.CATEGORIES[self.primary_category.id]['in_archive']: True
+ self.primary_category.in_archive: True
}
else:
options = {}
for category in self.secondary_categories:
options[category.id] = True
- in_archive = definitions.CATEGORIES[category.id]['in_archive']
+ in_archive = category.in_archive
options[in_archive] = True
return sorted(options.keys())
@@ -231,31 +231,27 @@ def get_datetime_of_version(
return None
else:
return versions[0].submitted_date
-
+
def get_secondaries(self) -> Set[Category]:
"""Unalias and deduplicate secondary categories."""
if not self.secondary_categories or not self.primary_category:
return set()
+
+ result=set()
+ for cat in self.secondary_categories:
+ result.add(cat.get_canonical())
+ result.discard(self.primary_category.get_canonical())
- def unalias(secs: Iterator[Category])->Iterator[Category]:
- return map(lambda c: Category(c.unalias()), secs)
- prim = self.primary_category.unalias()
-
- def de_prim(secs: Iterator[Category])->Iterator[Category]:
- return filter(lambda c: c.id != prim.id, secs)
-
- de_primaried = set(de_prim(unalias(iter(self.secondary_categories))))
- if not de_primaried:
- return set()
- return de_primaried
+ return result
def display_secondaries(self) -> List[str]:
"""Unalias, dedup and sort secondaries for display."""
- de_primaried = self.get_secondaries()
-
- def to_display(secs: List[Category]) -> List[str]:
- return list(map(lambda c: str(c.display), secs))
- return to_display(sorted(de_primaried))
+
+ de_primaried=sorted(self.get_secondaries(), key=lambda cat: cat.id)
+ result=[]
+ for cat in de_primaried:
+ result.append(cat.display())
+ return result
def canonical_url(self, no_version: bool = False) -> str:
"""Return canonical URL for this ID and version."""
@@ -294,7 +290,7 @@ def raw(self) -> str:
rv += f"Comments: {self.comments}\n"
# skipping proxy to avoid harvesting of email addresses
if self.report_num:
- rv += "Report-no: {self.report_num}\n"
+ rv += f"Report-no: {self.report_num}\n"
if self.msc_class:
rv += f"MSC-class: {self.msc_class}\n"
if self.acm_class:
diff --git a/arxiv/document/parse_abs.py b/arxiv/document/parse_abs.py
index cad10a2b6..a16512ebf 100644
--- a/arxiv/document/parse_abs.py
+++ b/arxiv/document/parse_abs.py
@@ -4,19 +4,17 @@
import re
from typing import Any, Dict, List, Tuple, Optional, Sequence
from datetime import datetime
+from pathlib import Path
from zoneinfo import ZoneInfo
from dateutil import parser
+from ..taxonomy.definitions import ARCHIVES, CATEGORIES
+from .metadata import AuthorList, DocMetadata, Submitter
from ..config import settings
-
-from ..taxonomy import definitions
-from .metadata import Archive, AuthorList, Category, \
- DocMetadata, Group, Submitter
from .version import VersionEntry, SourceFlag
from ..license import License
from ..identifier import Identifier
-from ..files.anypath import to_anypath
from .exceptions import \
AbsException, AbsParsingException, AbsNotFoundException
@@ -66,13 +64,14 @@
def parse_abs_file(filename: str) -> DocMetadata:
- """Parse an arXiv .abs file.
+ """Parse an arXiv .abs file from the local FS.
The modified time on the abs file will be used as the modified time for the
abstract. It will be pulled from `flask.config` if in a app_context. It
can be specified with tz arg.
"""
- absfile = to_anypath(filename)
+
+ absfile = Path(filename)
try:
with absfile.open(mode='r', encoding='latin-1') as absf:
raw = absf.read()
@@ -158,17 +157,15 @@ def parse_abs_top(raw: str, modified:datetime, abstract:str) -> DocMetadata:
if 'categories' in fields and fields['categories']:
category_list = fields['categories'].split()
- if category_list[0] in definitions.CATEGORIES:
- primary_category = Category(category_list[0])
- primary_archive = \
- Archive(
- definitions.CATEGORIES[primary_category.id]['in_archive'])
+ if category_list[0] in CATEGORIES:
+ primary_category = CATEGORIES[category_list[0]]
+ primary_archive = primary_category.get_archive()
elif arxiv_identifier.is_old_id:
- primary_archive = Archive(arxiv_identifier.archive)
+ primary_archive = ARCHIVES[arxiv_identifier.archive]
else:
raise AbsException(f"Invalid caregory {category_list[0]}")
elif arxiv_identifier.is_old_id:
- primary_archive = Archive(arxiv_identifier.archive)
+ primary_archive = ARCHIVES[arxiv_identifier.archive]
else:
raise AbsException('Cannot infer archive from identifier.')
@@ -189,10 +186,9 @@ def parse_abs_top(raw: str, modified:datetime, abstract:str) -> DocMetadata:
categories=fields['categories'] if 'categories' in fields else None,
primary_category=primary_category,
primary_archive=primary_archive,
- primary_group=Group(
- definitions.ARCHIVES[primary_archive.id]['in_group']),
+ primary_group=primary_archive.get_group(),
secondary_categories=[
- Category(x) for x in category_list[1:]
+ CATEGORIES[x] for x in category_list[1:]
if (category_list and len(category_list) > 1)
],
journal_ref=None if 'journal_ref' not in fields
diff --git a/arxiv/files/__init__.py b/arxiv/files/__init__.py
index 3fa5831b7..c1b21a730 100644
--- a/arxiv/files/__init__.py
+++ b/arxiv/files/__init__.py
@@ -8,7 +8,7 @@
from pathlib import Path
from types import TracebackType
import typing
-from typing import BinaryIO, Optional
+from typing import BinaryIO, Optional, Union
class BinaryMinimalFile(typing.Protocol):
"""A minimal file `Protocol` for a python binary file."""
@@ -446,6 +446,4 @@ def __repr__(self) -> str:
return self.__str__()
def __str__(self) -> str:
- return f""
-
-
+ return f""
\ No newline at end of file
diff --git a/arxiv/files/anypath.py b/arxiv/files/anypath.py
deleted file mode 100644
index 8dbc1161a..000000000
--- a/arxiv/files/anypath.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""Function to open eihter local files or storage bucket files."""
-from pathlib import Path
-from typing import Union, List
-from contextvars import ContextVar
-
-from cloudpathlib import CloudPath
-from cloudpathlib.gs import GSClient
-
-from google.cloud.storage import Client as StorageClient
-
-APath = Union[Path, CloudPath]
-"""Type to use with anypath.to_anypath."""
-
-
-def to_anypath(item: Union[str, Path]) -> APath:
- """A thread safe `to_anypath()`
-
- This function uses a separate cloudpathlib client for each thread. And
- also sets cloudpathlib's caching to remove the cached file right after the
- `open()` is closed.
-
- Rational:
-
- GCP CloudRun uses a RAM FS so everything written to disk ends up using
- memory.
-
- cloudpathlib is not thread safe if a single `Client` is used across multiple
- threads. As of 2023-06 when it writes and deletes from its cache there is no
- code to check for race conditions. Ex `Client.clear_cache()`.
-
- Flask apps run multi threaded.
-
- So we have two problems:
-
- 1. a shared cloudpathlib obj is not thread safe and we must use threads
- 2. we'll fill up memory with cloudpathlib's default caching
- """
- if isinstance(item, CloudPath) or isinstance(item, Path):
- return item
- if not item:
- raise ValueError("cannot make a path from empty")
- if item.startswith("gs:"):
- tlgsc: GSClient = _gscloudpath_client()
- return tlgsc.CloudPath(item) # type: ignore
- if item.startswith("s3://") or item.startswith("az:"):
- raise ValueError("s3 and az are not supported")
- else:
- return Path(item)
-
-
-def fs_check(path:APath, expect_dir:bool=True) -> List[str]:
- """Checks for a file system for use in `HasStatus.service_status()`"""
- try:
- if expect_dir:
- if not path.is_dir():
- return [f"{path} does not appear to be a directory"]
- else:
- if not path.is_file():
- return [f"{path} does not appear to be a file"]
- except Exception as ex:
- return [f"Could not access due to {ex}"]
-
- return []
-
-
-_global_gs_client: StorageClient = None
-
-
-def _gs_client() -> StorageClient:
- """Gets a Google storage client.
-
- These appear to be thread safe so we can share this. The start up of
- the a GS Client takes a bit of time (~ 1.5 sec?).
- """
- global _global_gs_client
- if not _global_gs_client:
- _global_gs_client = StorageClient()
-
- return _global_gs_client
-
-
-_tlocal_gscloudpath: ContextVar[GSClient] = ContextVar('_cloutpath_client')
-"""Thead local GSCloudPathClient."""
-
-
-def _gscloudpath_client() -> GSClient:
- """Gets a per thread `CloudPathClient`
-
- Uses a [`ContextVar`](https://docs.python.org/3/library/contextvars.html#contextvars.ContextVar)
- to store a pre thread CloudPathClient.
-
- Why not use werkzeug's `ProxyObject`? The docs describe `ProxyObject` as a
- "wrapper around `ContextVar` to make it easier to work with". Since we are
- not using it for anything complex it seems we don't need the additional ease
- `ProxyObject` provides.
- """
- thread_local_client = _tlocal_gscloudpath.get(None)
- if thread_local_client:
- return thread_local_client
-
- # Each GSClient will use a thread safe `tempdir.TemporaryDirectory`
- # close_file casues the cache to be cleared on file close
- tlgsc = GSClient(storage_client=_gs_client(),
- file_cache_mode="close_file")
- _tlocal_gscloudpath.set(tlgsc)
- return tlgsc
diff --git a/arxiv/formats/__init__.py b/arxiv/formats/__init__.py
index 1faacfa0f..1ef525d10 100644
--- a/arxiv/formats/__init__.py
+++ b/arxiv/formats/__init__.py
@@ -10,7 +10,6 @@
from ..document.version import SourceFlag
from ..files import FileObj
-from ..files.anypath import APath
logger = logging.getLogger(__name__)
diff --git a/arxiv/forms/tests.py b/arxiv/forms/test_forms.py
similarity index 100%
rename from arxiv/forms/tests.py
rename to arxiv/forms/test_forms.py
diff --git a/arxiv/identifier/__init__.py b/arxiv/identifier/__init__.py
index 0d7cafcac..b7c1c37af 100644
--- a/arxiv/identifier/__init__.py
+++ b/arxiv/identifier/__init__.py
@@ -6,14 +6,14 @@
from typing import Match, Optional, Union, Tuple, Callable, List
import re
-from arxiv import taxonomy
+from arxiv.taxonomy.definitions import ARCHIVES, CATEGORIES
__all__ = ('parse_arxiv_id', 'Identifier', )
-_archive = '|'.join([re.escape(key) for key in taxonomy.ARCHIVES.keys()])
-"""String for use in Regex for all arXiv archives."""
+_archive = '|'.join([re.escape(key) for key in ARCHIVES.keys()])
+"""string for use in Regex for all arXiv archives"""
-_category = '|'.join([re.escape(key) for key in taxonomy.CATEGORIES.keys()])
+_category = '|'.join([re.escape(key) for key in CATEGORIES.keys()])
_prefix = r'(?Par[xX]iv:)'
"""Attempt to catch the arxiv prefix in front of arxiv ids.
@@ -129,9 +129,9 @@ def __init__(self, arxiv_id: str) -> None:
This was an acceptable old id format.
"""
- if self.ids in taxonomy.definitions.ARCHIVES:
+ if self.ids in ARCHIVES:
raise IdentifierIsArchiveException(
- taxonomy.definitions.ARCHIVES[self.ids]['name'])
+ ARCHIVES[self.ids].full_name)
if self.ids.startswith("arxiv:"):
self.arxiv_prefix = True
diff --git a/arxiv/identifier/tests.py b/arxiv/identifier/test_identifier.py
similarity index 100%
rename from arxiv/identifier/tests.py
rename to arxiv/identifier/test_identifier.py
diff --git a/arxiv/taxonomy/__init__.py b/arxiv/taxonomy/__init__.py
deleted file mode 100644
index bcd2e464e..000000000
--- a/arxiv/taxonomy/__init__.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""ArXiv group, archive and category definitions.
-
-arXiv categories are arranged in a hierarchy where there are archives
-(astro-ph, cs, math, etc.) that contain subject classes (astro-ph has
-subject classes CO, GA, etc.). We now use the term category to refer to
-any archive or archive.subject_class that one can submit to (so hep-th
-and math.IT are both categories). No subject class can be in more than
-one archive. However, our scientific advisors identify some categories
-that should appear in more than one archive because they bridge major
-subject areas. Examples include math.MP == math-ph and stat.TH =
-math.ST. These are called category aliases and the idea is that any
-article classified in one of the aliases categories also appears in the
-other (canonical), but that most of the arXiv code for display, search,
-etc. does not need to understand the break with hierarchy.
-"""
-from .definitions import CATEGORIES, CATEGORIES_ACTIVE, ARCHIVES, \
- ARCHIVES_ACTIVE, ARCHIVES_SUBSUMED, CATEGORY_ALIASES
-from .category import Category, Archive, Group
-
-
-def get_category_display(category: str, canonical: bool = True) -> str:
- """Get the display name of an arXiv category.
-
- Parameters
- ----------
- category : str
- Category identifier, e.g. ``nlin.AO``.
- canonical : bool
- If True (default) and the category is subsumed, the display name for
- the canonical category will be returned instead.
-
- Returns
- -------
- str
- Display name for the category, e.g. ``Adaptation and Self-Organizing
- Systems (nlin.AO)``.
- """
- if canonical:
- return Category(category).canonical.display
- return Category(category).display
-
-
-def get_archive_display(archive: str, canonical: bool = True) -> str:
- """Get the display name of an arXiv archive.
-
- Parameters
- ----------
- archive : str
- Archive identifier, e.g. ``astro-ph``.
- canonical : bool
- If True (default) and the archive is subsumed, the display name for
- the canonical archive will be returned instead.
-
- Returns
- -------
- str
- Display name for the category, e.g. ``Astrophysics (astro-ph)``.
- """
- if canonical:
- return Archive(archive).canonical.display
- return Archive(archive).display
-
-
-def get_group_display(group: str) -> str:
- """Get the display name of an arXiv group.
-
- Parameters
- ----------
- group : str
- Group identifier, e.g. ``grp_math``.
-
- Returns
- -------
- str
- Display name for the group, e.g. ``Mathematics (grp_math)``.
- """
- return Group(group).display
diff --git a/arxiv/taxonomy/category.py b/arxiv/taxonomy/category.py
index d6891f658..91b96833d 100644
--- a/arxiv/taxonomy/category.py
+++ b/arxiv/taxonomy/category.py
@@ -1,71 +1,116 @@
"""Provides a convenience class for working with arXiv categories."""
-
-from .definitions import CATEGORIES, ARCHIVES_SUBSUMED, CATEGORY_ALIASES, \
- ARCHIVES, GROUPS
-
-
-class Category(str):
- """Represents an arXiv category."""
-
- lookup = CATEGORIES
-
+from typing import Optional, List, Union
+from datetime import date
+from pydantic import BaseModel
+
+class BaseTaxonomy(BaseModel):
+ id: str
+ full_name: str
+ is_active: bool
+ alt_name: Optional[str] #any other name the category may be known as (like if part of an alias or subsumed archive pair)
+
@property
- def id(self) -> str:
- """Short name for category ID."""
- return self
-
- @property
- def name(self) -> str:
- """Get the full category name."""
- if self in self.lookup:
- return str(self.lookup[self]['name'])
- raise ValueError('No such category')
-
- @property
- def canonical(self) -> 'Category':
- """Get the canonicalized category, if there is one."""
- if self in CATEGORY_ALIASES:
- return Category(CATEGORY_ALIASES[self])
- if self in ARCHIVES_SUBSUMED:
- return Category(ARCHIVES_SUBSUMED[self])
- return self
-
- @property
- def display(self) -> str:
- """Output the display string for a category.
-
- Examples
- --------
- Earth and Planetary Astrophysics (astro-ph.EP)
+ def canonical_id(self) -> str:
"""
- if self in self.lookup:
- catname = self.lookup[self]['name']
- return f'{catname} ({self})'
-
- parts = self.split('.', 2)
- if len(parts) == 2: # Has subject.
- (archive, _) = parts
- if archive in ARCHIVES:
- archive_name = ARCHIVES[archive]['name']
- return f'{archive_name} ({archive})'
- return self
-
- def unalias(self) -> 'Category':
- """Follow any EQUIV or SUBSUMED to get the current category."""
- if self in CATEGORY_ALIASES:
- return Category(CATEGORY_ALIASES[self])
- if self in ARCHIVES_SUBSUMED:
- return Category(ARCHIVES_SUBSUMED[self])
- return self
-
-
-class Archive(Category):
+ Get the canonicalized category, if there is one.
+ In the case of subsumed archives, returns the subsuming category.
+ In the case of alias pairs returns the canonical category.
+ """
+ from .definitions import ARCHIVES_SUBSUMED, CATEGORY_ALIASES
+
+ if self.alt_name:
+ if self.id in CATEGORY_ALIASES.keys():
+ return CATEGORY_ALIASES[self.id]
+ elif self.id in ARCHIVES_SUBSUMED.keys():
+ return ARCHIVES_SUBSUMED[self.id]
+
+ return self.id
+
+ def display(self, canonical: bool = True) -> str:
+ """
+ Output the display string for a category.
+ If canonical, always display the canonical name
+ Example: Earth and Planetary Astrophysics (astro-ph.EP)
+ """
+ from .definitions import CATEGORIES,ARCHIVES, GROUPS
+ if not canonical:
+ return f'{self.full_name} ({self.id})'
+ else:
+ name=self.canonical_id
+ if name==self.id:
+ return f'{self.full_name} ({self.id})'
+ elif name in CATEGORIES.keys():
+ item=CATEGORIES[name]
+ return f'{item.full_name} ({item.id})'
+ elif name in ARCHIVES.keys():#will never happen with taxonomy as of 2024
+ item=ARCHIVES[name]
+ return f'{item.full_name} ({item.id})'
+ elif name in GROUPS.keys(): #will never happen with taxonomy as of 2024
+ item=GROUPS[name]
+ return f'{item.full_name} ({item.id})'
+
+ def __eq__(self, other):
+ return self.id == other.id and self.__class__ == other.__class__
+
+ def __hash__(self):
+ return hash((self.__class__, self.id))
+
+class Group(BaseTaxonomy):
+ """Represents an arXiv group--the highest (most general) taxonomy level."""
+ start_year: int
+ default_archive: Optional[str]
+ is_test: Optional[bool]
+
+ def get_archives(self, include_inactive: bool = False) -> List['Archive'] :
+ """creates a list of all archives withing the group. By default only includes active archives"""
+ from .definitions import ARCHIVES
+ if include_inactive:
+ return [archive for archive in ARCHIVES.values() if archive.in_group == self.id]
+ else:
+ return [archive for archive in ARCHIVES.values() if archive.in_group == self.id and archive.is_active]
+
+class Archive(BaseTaxonomy):
"""Represents an arXiv archive--the middle level of the taxonomy."""
- lookup = ARCHIVES
-
-
-class Group(Category):
- """Represents an arXiv group--the highest (most general) taxonomy level."""
+ in_group: str
+ start_date: date
+ end_date: Optional[date]
+
+ def get_group(self) -> Group:
+ """Returns parent archive."""
+ from .definitions import GROUPS
+ return GROUPS[self.in_group]
+
+ def get_categories(self, include_inactive: bool =False) -> List['Category'] :
+ """creates a list of all categories withing the group. By default only includes active categories"""
+ from .definitions import CATEGORIES
+ if include_inactive:
+ return [category for category in CATEGORIES.values() if category.in_archive == self.id]
+ else:
+ return [category for category in CATEGORIES.values() if category.in_archive == self.id and category.is_active]
+
+ def get_canonical(self) -> Union['Category', 'Archive']:
+ """returns the canonical version of an archive. The main purpose is transforming subsumed archives into their subsumign categories.
+ For most archives this returns the archive itself. In the case of archives that are also categories, it return the Archive version of the archive"""
+ from .definitions import CATEGORIES
+ if self.canonical_id!= self.id and self.canonical_id in CATEGORIES:
+ return CATEGORIES[self.canonical_id]
+ else:
+ return self
+
+class Category(BaseTaxonomy):
+ """Represents an arXiv category."""
- lookup = GROUPS
+ in_archive: str
+ is_general: bool
+ description: Optional[str]
+
+ def get_archive(self) -> Archive:
+ """Returns parent archive."""
+ from .definitions import ARCHIVES
+ return ARCHIVES[self.in_archive]
+
+ def get_canonical(self) -> 'Category':
+ """returns the canonical version of the category object"""
+ from .definitions import CATEGORIES
+ return CATEGORIES[self.canonical_id]
\ No newline at end of file
diff --git a/arxiv/taxonomy/definitions.py b/arxiv/taxonomy/definitions.py
index f3829524b..835792c29 100644
--- a/arxiv/taxonomy/definitions.py
+++ b/arxiv/taxonomy/definitions.py
@@ -1,286 +1,406 @@
"""Category and archive definitions."""
-import sys
-from typing import Dict, TypedDict, NotRequired
-
+from typing import Dict
from datetime import date
-class tGroup (TypedDict):
- name: str
- start_year: int
- default_archive: NotRequired[str]
- is_test: NotRequired[bool]
+from arxiv.taxonomy.category import Group, Archive, Category
-GROUPS: Dict[str, tGroup] = {
- 'grp_physics': {
- 'name': 'Physics',
- 'start_year': 1991,
- 'default_archive': 'hep-th'
- },
- 'grp_math': {
- 'name': 'Mathematics',
- 'start_year': 1992,
- 'default_archive': 'math'
- },
- 'grp_q-bio': {
- 'name': 'Quantitative Biology',
- 'start_year': 1992,
- 'default_archive': 'q-bio'
- },
- 'grp_cs': {
- 'name': 'Computer Science',
- 'start_year': 1993,
- 'default_archive': 'cs'
- },
- 'grp_test': {
- 'name': 'Test',
- 'start_year': 1995,
- 'is_test': True
- },
- 'grp_q-fin': {
- 'name': 'Quantitative Finance',
- 'start_year': 1997
- },
- 'grp_stat': {
- 'name': 'Statistics',
- 'start_year': 1999
- },
- 'grp_eess': {
- 'name': 'Electrical Engineering and Systems Science',
- 'start_year': 2017
- },
- 'grp_econ': {
- 'name': 'Economics',
- 'start_year': 2017
- }
-}
-DEFAULT_GROUP = 'physics'
+"""
+arXiv group, archive and category definitions.
-class tArchive(TypedDict):
- name: str
- in_group: str
- start_date: date
- end_date: NotRequired[date]
+arXiv categories are arranged in a hierarchy where there are archives
+(astro-ph, cs, math, etc.) that contain subject classes (astro-ph has subject
+classes CO, GA, etc.). We now use the term category to refer to any archive or
+archive.subject_class that one can submit to (so hep-th and math.IT are both
+categories). No subject class can be in more than one archive. However, our
+scientific advisors identify some categories that should appear in more than
+one archive because they bridge major subject areas. Examples include math.MP
+== math-ph and stat.TH = math.ST. These are called category aliases and the
+idea is that any article classified in one of the aliases categories also
+appears in the other (canonical), but that most of the arXiv code for display,
+search, etc. does not need to understand the break with hierarchy.
+
+"""
-ARCHIVES: Dict[str, tArchive]= {
- 'acc-phys': {
- 'name': 'Accelerator Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 11, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'adap-org': {
- 'name': 'Adaptation, Noise, and Self-Organizing Systems',
- 'in_group': 'grp_physics',
- 'start_date': date(1993, 3, 1),
- 'end_date': date(1999, 12, 1)
- },
- 'alg-geom': {
- 'name': 'Algebraic Geometry',
- 'in_group': 'grp_math',
- 'start_date': date(1992, 2, 1),
- 'end_date': date(1997, 12, 1)
- },
- 'ao-sci': {
- 'name': 'Atmospheric-Oceanic Sciences',
- 'in_group': 'grp_physics',
- 'start_date': date(1995, 2, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'astro-ph': {
- 'name': 'Astrophysics',
- 'in_group': 'grp_physics',
- 'start_date': date(1992, 4, 1)
- },
- 'atom-ph': {
- 'name': 'Atomic, Molecular and Optical Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1995, 9, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'bayes-an': {
- 'name': 'Bayesian Analysis',
- 'in_group': 'grp_physics',
- 'start_date': date(1995, 6, 1),
- 'end_date': date(1996, 11, 1)
- },
- 'chao-dyn': {
- 'name': 'Chaotic Dynamics',
- 'in_group': 'grp_physics',
- 'start_date': date(1993, 1, 1),
- 'end_date': date(1999, 12, 1)
- },
- 'chem-ph': {
- 'name': 'Chemical Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 3, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'cmp-lg': {
- 'name': 'Computation and Language',
- 'in_group': 'grp_cs',
- 'start_date': date(1994, 4, 1),
- 'end_date': date(1998, 9, 1)
- },
- 'comp-gas': {
- 'name': 'Cellular Automata and Lattice Gases',
- 'in_group': 'grp_physics',
- 'start_date': date(1993, 2, 1),
- 'end_date': date(1999, 12, 1)
- },
- 'cond-mat': {
- 'name': 'Condensed Matter',
- 'in_group': 'grp_physics',
- 'start_date': date(1992, 4, 1)
- },
- 'cs': {
- 'name': 'Computer Science',
- 'in_group': 'grp_cs',
- 'start_date': date(1993, 1, 1)
- },
- 'dg-ga': {
- 'name': 'Differential Geometry',
- 'in_group': 'grp_math',
- 'start_date': date(1994, 6, 1),
- 'end_date': date(1997, 12, 1)
- },
- 'econ': {
- 'name': 'Economics',
- 'in_group': 'grp_econ',
- 'start_date': date(2017, 9, 1)
- },
- 'eess': {
- 'name': 'Electrical Engineering and Systems Science',
- 'in_group': 'grp_eess',
- 'start_date': date(2017, 9, 1)
- },
- 'funct-an': {
- 'name': 'Functional Analysis',
- 'in_group': 'grp_math',
- 'start_date': date(1992, 4, 1),
- 'end_date': date(1997, 12, 1)
- },
- 'gr-qc': {
- 'name': 'General Relativity and Quantum Cosmology',
- 'in_group': 'grp_physics',
- 'start_date': date(1992, 7, 1)
- },
- 'hep-ex': {
- 'name': 'High Energy Physics - Experiment',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 4, 1)
- },
- 'hep-lat': {
- 'name': 'High Energy Physics - Lattice',
- 'in_group': 'grp_physics',
- 'start_date': date(1992, 2, 1)
- },
- 'hep-ph': {
- 'name': 'High Energy Physics - Phenomenology',
- 'in_group': 'grp_physics',
- 'start_date': date(1992, 3, 1)
- },
- 'hep-th': {
- 'name': 'High Energy Physics - Theory',
- 'in_group': 'grp_physics',
- 'start_date': date(1991, 8, 1)
- },
- 'math': {
- 'name': 'Mathematics',
- 'in_group': 'grp_math',
- 'start_date': date(1992, 2, 1)
- },
- 'math-ph': {
- 'name': 'Mathematical Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1996, 9, 1)
- },
- 'mtrl-th': {
- 'name': 'Materials Theory',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 11, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'nlin': {
- 'name': 'Nonlinear Sciences',
- 'in_group': 'grp_physics',
- 'start_date': date(1993, 1, 1)
- },
- 'nucl-ex': {
- 'name': 'Nuclear Experiment',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 12, 1)
- },
- 'nucl-th': {
- 'name': 'Nuclear Theory',
- 'in_group': 'grp_physics',
- 'start_date': date(1992, 10, 1)
- },
- 'patt-sol': {
- 'name': 'Pattern Formation and Solitons',
- 'in_group': 'grp_physics',
- 'start_date': date(1993, 2, 1),
- 'end_date': date(1999, 12, 1)
- },
- 'physics': {
- 'name': 'Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1996, 10, 1)
- },
- 'plasm-ph': {
- 'name': 'Plasma Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1995, 9, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'q-alg': {
- 'name': 'Quantum Algebra and Topology',
- 'in_group': 'grp_math',
- 'start_date': date(1994, 12, 1),
- 'end_date': date(1997, 12, 1)
- },
- 'q-bio': {
- 'name': 'Quantitative Biology',
- 'in_group': 'grp_q-bio',
- 'start_date': date(2003, 9, 1)
- },
- 'q-fin': {
- 'name': 'Quantitative Finance',
- 'in_group': 'grp_q-fin',
- 'start_date': date(2008, 12, 1)
- },
- 'quant-ph': {
- 'name': 'Quantum Physics',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 12, 1)
- },
- 'solv-int': {
- 'name': 'Exactly Solvable and Integrable Systems',
- 'in_group': 'grp_physics',
- 'start_date': date(1993, 4, 1),
- 'end_date': date(1999, 12, 1)
- },
- 'stat': {
- 'name': 'Statistics',
- 'in_group': 'grp_stat',
- 'start_date': date(2007, 4, 1)
- },
- 'supr-con': {
- 'name': 'Superconductivity',
- 'in_group': 'grp_physics',
- 'start_date': date(1994, 11, 1),
- 'end_date': date(1996, 9, 1)
- },
- 'test': {
- 'name': 'Test',
- 'in_group': 'grp_test',
- 'is_test': True,
- 'start_date': date(1995, 2, 1)
- }
+#GROUP DATA
+GROUPS: Dict[str, Group] = {
+ "grp_physics":Group(
+ id="grp_physics",
+ full_name="Physics",
+ is_active=True,
+ start_year=1991,
+ default_archive="hep-th",
+ ),
+ "grp_math":Group(
+ id="grp_math",
+ full_name="Mathematics",
+ is_active=True,
+ start_year=1992,
+ default_archive="math",
+ ),
+ "grp_q-bio":Group(
+ id="grp_q-bio",
+ full_name="Quantitative Biology",
+ is_active=True,
+ start_year=1992,
+ default_archive="q-bio",
+ ),
+ "grp_cs":Group(
+ id="grp_cs",
+ full_name="Computer Science",
+ is_active=True,
+ start_year=1993,
+ default_archive="cs",
+ ),
+ "grp_test":Group(
+ id="grp_test",
+ full_name="Test",
+ is_active=True,
+ start_year=1995,
+ is_test=True
+ ),
+ "grp_q-fin":Group(
+ id="grp_q-fin",
+ full_name="Quantitative Finance",
+ is_active=True,
+ start_year=1997,
+ ),
+ "grp_stat":Group(
+ id="grp_stat",
+ full_name="Statistics",
+ is_active=True,
+ start_year=1999,
+ ),
+ "grp_eess":Group(
+ id="grp_eess",
+ full_name="Electrical Engineering and Systems Science",
+ is_active=True,
+ start_year=2017,
+ ),
+ "grp_econ":Group(
+ id="grp_econ",
+ full_name="Economics",
+ is_active=True,
+ start_year=2017,
+ )
}
-ARCHIVES_ACTIVE = {key: value for key,
- value in ARCHIVES.items()
- if 'end_date' not in ARCHIVES[key]}
+#ARCHIVE DATA
+ARCHIVES: Dict[str, Archive]= {
+ "acc-phys":Archive(
+ id="acc-phys",
+ full_name="Accelerator Physics",
+ is_active=False,
+ alt_name="physics.acc-ph",
+ in_group="grp_physics",
+ start_date=date(1994, 11, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "adap-org":Archive(
+ id="adap-org",
+ full_name="Adaptation, Noise, and Self-Organizing Systems",
+ is_active=False,
+ alt_name="nlin.AO",
+ in_group="grp_physics",
+ start_date=date(1993, 3, 1),
+ end_date=date(1999, 12, 1),
+ ),
+ "alg-geom":Archive(
+ id="alg-geom",
+ full_name="Algebraic Geometry",
+ is_active=False,
+ alt_name="math.AG",
+ in_group="grp_math",
+ start_date=date(1992, 2, 1),
+ end_date=date(1997, 12, 1),
+ ),
+ "ao-sci":Archive(
+ id="ao-sci",
+ full_name="Atmospheric-Oceanic Sciences",
+ is_active=False,
+ alt_name="physics.ao-ph",
+ in_group="grp_physics",
+ start_date=date(1995, 2, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "astro-ph":Archive(
+ id="astro-ph",
+ full_name="Astrophysics",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1992, 4, 1),
+ ),
+ "atom-ph":Archive(
+ id="atom-ph",
+ full_name="Atomic, Molecular and Optical Physics",
+ is_active=False,
+ alt_name="physics.atom-ph",
+ in_group="grp_physics",
+ start_date=date(1995, 9, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "bayes-an":Archive(
+ id="bayes-an",
+ full_name="Bayesian Analysis",
+ is_active=False,
+ alt_name="physics.data-an",
+ in_group="grp_physics",
+ start_date=date(1995, 6, 1),
+ end_date=date(1996, 11, 1),
+ ),
+ "chao-dyn":Archive(
+ id="chao-dyn",
+ full_name="Chaotic Dynamics",
+ is_active=False,
+ alt_name="nlin.CD",
+ in_group="grp_physics",
+ start_date=date(1993, 1, 1),
+ end_date=date(1999, 12, 1),
+ ),
+ "chem-ph":Archive(
+ id="chem-ph",
+ full_name="Chemical Physics",
+ is_active=False,
+ alt_name="physics.chem-ph",
+ in_group="grp_physics",
+ start_date=date(1994, 3, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "cmp-lg":Archive(
+ id="cmp-lg",
+ full_name="Computation and Language",
+ is_active=False,
+ alt_name="cs.CL",
+ in_group="grp_cs",
+ start_date=date(1994, 4, 1),
+ end_date=date(1998, 9, 1),
+ ),
+ "comp-gas":Archive(
+ id="comp-gas",
+ full_name="Cellular Automata and Lattice Gases",
+ is_active=False,
+ alt_name="nlin.CG",
+ in_group="grp_physics",
+ start_date=date(1993, 2, 1),
+ end_date=date(1999, 12, 1),
+ ),
+ "cond-mat":Archive(
+ id="cond-mat",
+ full_name="Condensed Matter",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1992, 4, 1),
+ ),
+ "cs":Archive(
+ id="cs",
+ full_name="Computer Science",
+ is_active=True,
+ in_group="grp_cs",
+ start_date=date(1993, 1, 1),
+ ),
+ "dg-ga":Archive(
+ id="dg-ga",
+ full_name="Differential Geometry",
+ is_active=False,
+ alt_name="math.DG",
+ in_group="grp_math",
+ start_date=date(1994, 6, 1),
+ end_date=date(1997, 12, 1),
+ ),
+ "econ":Archive(
+ id="econ",
+ full_name="Economics",
+ is_active=True,
+ in_group="grp_econ",
+ start_date=date(2017, 9, 1),
+ ),
+ "eess":Archive(
+ id="eess",
+ full_name="Electrical Engineering and Systems Science",
+ is_active=True,
+ in_group="grp_eess",
+ start_date=date(2017, 9, 1),
+ ),
+ "funct-an":Archive(
+ id="funct-an",
+ full_name="Functional Analysis",
+ is_active=False,
+ alt_name="math.FA",
+ in_group="grp_math",
+ start_date=date(1992, 4, 1),
+ end_date=date(1997, 12, 1),
+ ),
+ "gr-qc":Archive(
+ id="gr-qc",
+ full_name="General Relativity and Quantum Cosmology",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1992, 7, 1),
+ ),
+ "hep-ex":Archive(
+ id="hep-ex",
+ full_name="High Energy Physics - Experiment",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1994, 4, 1),
+ ),
+ "hep-lat":Archive(
+ id="hep-lat",
+ full_name="High Energy Physics - Lattice",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1992, 2, 1),
+ ),
+ "hep-ph":Archive(
+ id="hep-ph",
+ full_name="High Energy Physics - Phenomenology",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1992, 3, 1),
+ ),
+ "hep-th":Archive(
+ id="hep-th",
+ full_name="High Energy Physics - Theory",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1991, 8, 1),
+ ),
+ "math":Archive(
+ id="math",
+ full_name="Mathematics",
+ is_active=True,
+ in_group="grp_math",
+ start_date=date(1992, 2, 1),
+ ),
+ "math-ph":Archive(
+ id="math-ph",
+ full_name="Mathematical Physics",
+ is_active=True,
+ alt_name="math.MP",
+ in_group="grp_physics",
+ start_date=date(1996, 9, 1),
+ ),
+ "mtrl-th":Archive(
+ id="mtrl-th",
+ full_name="Materials Theory",
+ is_active=False,
+ alt_name="cond-mat.mtrl-sci",
+ in_group="grp_physics",
+ start_date=date(1994, 11, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "nlin":Archive(
+ id="nlin",
+ full_name="Nonlinear Sciences",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1993, 1, 1),
+ ),
+ "nucl-ex":Archive(
+ id="nucl-ex",
+ full_name="Nuclear Experiment",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1994, 12, 1),
+ ),
+ "nucl-th":Archive(
+ id="nucl-th",
+ full_name="Nuclear Theory",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1992, 10, 1),
+ ),
+ "patt-sol":Archive(
+ id="patt-sol",
+ full_name="Pattern Formation and Solitons",
+ is_active=False,
+ alt_name="nlin.PS",
+ in_group="grp_physics",
+ start_date=date(1993, 2, 1),
+ end_date=date(1999, 12, 1),
+ ),
+ "physics":Archive(
+ id="physics",
+ full_name="Physics",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1996, 10, 1),
+ ),
+ "plasm-ph":Archive(
+ id="plasm-ph",
+ full_name="Plasma Physics",
+ is_active=False,
+ alt_name="physics.plasm-ph",
+ in_group="grp_physics",
+ start_date=date(1995, 9, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "q-alg":Archive(
+ id="q-alg",
+ full_name="Quantum Algebra and Topology",
+ is_active=False,
+ alt_name="math.QA",
+ in_group="grp_math",
+ start_date=date(1994, 12, 1),
+ end_date=date(1997, 12, 1),
+ ),
+ "q-bio":Archive(
+ id="q-bio",
+ full_name="Quantitative Biology",
+ is_active=True,
+ in_group="grp_q-bio",
+ start_date=date(2003, 9, 1),
+ ),
+ "q-fin":Archive(
+ id="q-fin",
+ full_name="Quantitative Finance",
+ is_active=True,
+ in_group="grp_q-fin",
+ start_date=date(2008, 12, 1),
+ ),
+ "quant-ph":Archive(
+ id="quant-ph",
+ full_name="Quantum Physics",
+ is_active=True,
+ in_group="grp_physics",
+ start_date=date(1994, 12, 1),
+ ),
+ "solv-int":Archive(
+ id="solv-int",
+ full_name="Exactly Solvable and Integrable Systems",
+ is_active=False,
+ alt_name="nlin.SI",
+ in_group="grp_physics",
+ start_date=date(1993, 4, 1),
+ end_date=date(1999, 12, 1),
+ ),
+ "stat":Archive(
+ id="stat",
+ full_name="Statistics",
+ is_active=True,
+ in_group="grp_stat",
+ start_date=date(2007, 4, 1),
+ ),
+ "supr-con":Archive(
+ id="supr-con",
+ full_name="Superconductivity",
+ is_active=False,
+ alt_name="cond-mat.supr-con",
+ in_group="grp_physics",
+ start_date=date(1994, 11, 1),
+ end_date=date(1996, 9, 1),
+ ),
+ "test":Archive(
+ id="test",
+ full_name="Test",
+ is_active=True,
+ in_group="grp_test",
+ start_date=date(1995, 2, 1),
+ )
+}
+
+ARCHIVES_ACTIVE = {key: arch for key,
+ arch in ARCHIVES.items()
+ if arch.is_active}
# defunct archives subsumed by categories
ARCHIVES_SUBSUMED: Dict[str, str] = {
@@ -318,1871 +438,1500 @@ class tArchive(TypedDict):
'test': date(2010, 1, 1)
}
-class tCategory(TypedDict):
- name: str
- in_archive: str
- is_active: bool
- is_general: bool
- description: NotRequired[str]
-
-CATEGORIES: Dict[str, tCategory] = {
- 'acc-phys': {
- 'name': 'Accelerator Physics',
- 'in_archive': 'acc-phys',
- 'is_active': False,
- 'is_general': False
- },
- 'adap-org': {
- 'name': 'Adaptation, Noise, and Self-Organizing Systems',
- 'in_archive': 'adap-org',
- 'is_active': False,
- 'is_general': False
- },
- 'alg-geom': {
- 'name': 'Algebraic Geometry',
- 'in_archive': 'alg-geom',
- 'is_active': False,
- 'is_general': False
- },
- 'ao-sci': {
- 'name': 'Atmospheric-Oceanic Sciences',
- 'in_archive': 'ao-sci',
- 'is_active': False,
- 'is_general': False
- },
- 'astro-ph': {
- 'name': 'Astrophysics',
- 'in_archive': 'astro-ph',
- 'is_active': False,
- 'is_general': False
- },
- 'astro-ph.CO': {
- 'name': 'Cosmology and Nongalactic Astrophysics',
- 'in_archive': 'astro-ph',
- 'description': 'Phenomenology of early universe, cosmic microwave '
- 'background, cosmological parameters, primordial '
- 'element abundances, extragalactic distance scale, '
- 'large-scale structure of the universe. Groups, '
- 'superclusters, voids, intergalactic medium. Particle '
- 'astrophysics: dark energy, dark matter, baryogenesis, '
- 'leptogenesis, inflationary models, reheating, '
- 'monopoles, WIMPs, cosmic strings, primordial black '
- 'holes, cosmological gravitational '
- 'radiation',
- 'is_active': True,
- 'is_general': False
- },
- 'astro-ph.EP': {
- 'name': 'Earth and Planetary Astrophysics',
- 'in_archive': 'astro-ph',
- 'description': 'Interplanetary medium, planetary physics, planetary '
- 'astrobiology, extrasolar planets, comets, asteroids, '
- 'meteorites. Structure and formation of the solar '
- 'system',
- 'is_active': True,
- 'is_general': False
- },
- 'astro-ph.GA': {
- 'name': 'Astrophysics of Galaxies',
- 'in_archive': 'astro-ph',
- 'description': 'Phenomena pertaining to galaxies or the Milky Way. '
- 'Star clusters, HII regions and planetary nebulae, the '
- 'interstellar medium, atomic and molecular clouds, '
- 'dust. Stellar populations. Galactic structure, '
- 'formation, dynamics. Galactic nuclei, bulges, disks, '
- 'halo. Active Galactic Nuclei, supermassive black '
- 'holes, quasars. Gravitational lens systems. The Milky '
- 'Way and its contents',
- 'is_active': True,
- 'is_general': False
- },
- 'astro-ph.HE': {
- 'name': 'High Energy Astrophysical Phenomena',
- 'in_archive': 'astro-ph',
- 'description': 'Cosmic ray production, acceleration, propagation, '
- 'detection. Gamma ray astronomy and bursts, X-rays, '
- 'charged particles, supernovae and other explosive '
- 'phenomena, stellar remnants and accretion systems, '
- 'jets, microquasars, neutron stars, pulsars, black '
- 'holes',
- 'is_active': True,
- 'is_general': False
- },
- 'astro-ph.IM': {
- 'name': 'Instrumentation and Methods for Astrophysics',
- 'in_archive': 'astro-ph',
- 'description': 'Detector and telescope design, experiment proposals. '
- 'Laboratory Astrophysics. Methods for data analysis, '
- 'statistical methods. Software, database '
- 'design',
- 'is_active': True,
- 'is_general': False
- },
- 'astro-ph.SR': {
- 'name': 'Solar and Stellar Astrophysics',
- 'in_archive': 'astro-ph',
- 'description': 'White dwarfs, brown dwarfs, cataclysmic variables. '
- 'Star formation and protostellar systems, stellar '
- 'astrobiology, binary and multiple systems of stars, '
- 'stellar evolution and structure, coronas. Central '
- 'stars of planetary nebulae. Helioseismology, solar '
- 'neutrinos, production and detection of gravitational '
- 'radiation from stellar systems',
- 'is_active': True,
- 'is_general': False
- },
- 'atom-ph': {
- 'name': 'Atomic, Molecular and Optical Physics',
- 'in_archive': 'atom-ph',
- 'is_active': False,
- 'is_general': False
- },
- 'bayes-an': {
- 'name': 'Bayesian Analysis',
- 'in_archive': 'bayes-an',
- 'is_active': False,
- 'is_general': False
- },
- 'chao-dyn': {
- 'name': 'Chaotic Dynamics',
- 'in_archive': 'chao-dyn',
- 'is_active': False,
- 'is_general': False
- },
- 'chem-ph': {
- 'name': 'Chemical Physics',
- 'in_archive': 'chem-ph',
- 'is_active': False,
- 'is_general': False
- },
- 'cmp-lg': {
- 'name': 'Computation and Language',
- 'in_archive': 'cmp-lg',
- 'is_active': False,
- 'is_general': False
- },
- 'comp-gas': {
- 'name': 'Cellular Automata and Lattice Gases',
- 'in_archive': 'comp-gas',
- 'is_active': False,
- 'is_general': False
- },
- 'cond-mat': {
- 'name': 'Condensed Matter',
- 'in_archive': 'cond-mat',
- 'is_active': False,
- 'is_general': False
- },
- 'cond-mat.dis-nn': {
- 'name': 'Disordered Systems and Neural Networks',
- 'in_archive': 'cond-mat',
- 'description': 'Glasses and spin glasses; properties of random, '
- 'aperiodic and quasiperiodic systems; transport in '
- 'disordered media; localization; phenomena mediated by '
- 'defects and disorder; neural networks',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.mes-hall': {
- 'name': 'Mesoscale and Nanoscale Physics',
- 'in_archive': 'cond-mat',
- 'description': 'Semiconducting nanostructures: quantum dots, wires, '
- 'and wells. Single electronics, spintronics, 2d '
- 'electron gases, quantum Hall effect, nanotubes, '
- 'graphene, plasmonic nanostructures',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.mtrl-sci': {
- 'name': 'Materials Science',
- 'in_archive': 'cond-mat',
- 'description': 'Techniques, synthesis, characterization, structure. '
- 'Structural phase transitions, mechanical properties, '
- 'phonons. Defects, adsorbates, interfaces',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.other': {
- 'name': 'Other Condensed Matter',
- 'in_archive': 'cond-mat',
- 'description': 'Work in condensed matter that does not fit into the '
- 'other cond-mat classifications',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.quant-gas': {
- 'name': 'Quantum Gases',
- 'in_archive': 'cond-mat',
- 'description': 'Ultracold atomic and molecular gases, Bose-Einstein '
- 'condensation, Feshbach resonances, spinor condensates,'
- ' optical lattices, quantum simulation with cold atoms '
- 'and molecules, macroscopic interference phenomena',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.soft': {
- 'name': 'Soft Condensed Matter',
- 'in_archive': 'cond-mat',
- 'description': 'Membranes, polymers, liquid crystals, glasses, '
- 'colloids, granular matter',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.stat-mech': {
- 'name': 'Statistical Mechanics',
- 'in_archive': 'cond-mat',
- 'description': 'Phase transitions, thermodynamics, field theory, non-'
- 'equilibrium phenomena, renormalization group and '
- 'scaling, integrable models, turbulence',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.str-el': {
- 'name': 'Strongly Correlated Electrons',
- 'in_archive': 'cond-mat',
- 'description': 'Quantum magnetism, non-Fermi liquids, spin liquids, '
- 'quantum criticality, charge density waves, metal-'
- 'insulator transitions',
- 'is_active': True,
- 'is_general': False
- },
- 'cond-mat.supr-con': {
- 'name': 'Superconductivity',
- 'in_archive': 'cond-mat',
- 'description': 'Superconductivity: theory, models, experiment. '
- 'Superflow in helium',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.AI': {
- 'name': 'Artificial Intelligence',
- 'in_archive': 'cs',
- 'description': 'Covers all areas of AI except Vision, Robotics, '
- 'Machine Learning, Multiagent Systems, and Computation '
- 'and Language (Natural Language Processing), which '
- 'have separate subject areas. In particular, includes '
- 'Expert Systems, Theorem Proving (although this may '
- 'overlap with Logic in Computer Science), Knowledge '
- 'Representation, Planning, and Uncertainty in AI. '
- 'Roughly includes material in ACM Subject Classes I.2.'
- '0, I.2.1, I.2.3, I.2.4, I.2.8, and I.2.11.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.AR': {
- 'name': 'Hardware Architecture',
- 'in_archive': 'cs',
- 'description': 'Covers systems organization and hardware architecture.'
- ' Roughly includes material in ACM Subject Classes C.0,'
- ' C.1, and C.5.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CC': {
- 'name': 'Computational Complexity',
- 'in_archive': 'cs',
- 'description': 'Covers models of computation, complexity classes, '
- 'structural complexity, complexity tradeoffs, upper '
- 'and lower bounds. Roughly includes material in ACM '
- 'Subject Classes F.1 (computation by abstract devices),'
- ' F.2.3 (tradeoffs among complexity measures), and F.4.'
- '3 (formal languages), although some material in '
- 'formal languages may be more appropriate for Logic in '
- 'Computer Science. Some material in F.2.1 and F.2.2, '
- 'may also be appropriate here, but is more likely to '
- 'have Data Structures and Algorithms as the primary '
- 'subject area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CE': {
- 'name': 'Computational Engineering, Finance, and Science',
- 'in_archive': 'cs',
- 'description': 'Covers applications of computer science to the '
- 'mathematical modeling of complex systems in the '
- 'fields of science, engineering, and finance. Papers '
- 'here are interdisciplinary and applications-oriented, '
- 'focusing on techniques and tools that enable '
- 'challenging computational simulations to be performed,'
- ' for which the use of supercomputers or distributed '
- 'computing platforms is often required. Includes '
- 'material in ACM Subject Classes J.2, J.3, and J.4 ('
- 'economics).',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CG': {
- 'name': 'Computational Geometry',
- 'in_archive': 'cs',
- 'description': 'Roughly includes material in ACM Subject Classes I.3.'
- '5 and F.2.2.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CL': {
- 'name': 'Computation and Language',
- 'in_archive': 'cs',
- 'description': 'Covers natural language processing. Roughly includes '
- 'material in ACM Subject Class I.2.7. Note that work '
- 'on artificial languages (programming languages, '
- 'logics, formal systems) that does not explicitly '
- 'address natural-language issues broadly construed ('
- 'natural-language processing, computational '
- 'linguistics, speech, text retrieval, etc.) is not '
- 'appropriate for this area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CR': {
- 'name': 'Cryptography and Security',
- 'in_archive': 'cs',
- 'description': 'Covers all areas of cryptography and security '
- 'including authentication, public key cryptosytems, '
- 'proof-carrying code, etc. Roughly includes material '
- 'in ACM Subject Classes D.4.6 and E.3.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CV': {
- 'name': 'Computer Vision and Pattern Recognition',
- 'in_archive': 'cs',
- 'description': 'Covers image processing, computer vision, pattern '
- 'recognition, and scene understanding. Roughly '
- 'includes material in ACM Subject Classes I.2.10, I.4, '
- 'and I.5.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.CY': {
- 'name': 'Computers and Society',
- 'in_archive': 'cs',
- 'description': 'Covers impact of computers on society, computer '
- 'ethics, information technology and public policy, '
- 'legal aspects of computing, computers and education. '
- 'Roughly includes material in ACM Subject Classes K.0, '
- 'K.2, K.3, K.4, K.5, and K.7.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.DB': {
- 'name': 'Databases',
- 'in_archive': 'cs',
- 'description': 'Covers database management, datamining, and data '
- 'processing. Roughly includes material in ACM Subject '
- 'Classes E.2, E.5, H.0, H.2, and J.1.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.DC': {
- 'name': 'Distributed, Parallel, and Cluster Computing',
- 'in_archive': 'cs',
- 'description': 'Covers fault-tolerance, distributed algorithms, '
- 'stabilility, parallel computation, and cluster '
- 'computing. Roughly includes material in ACM Subject '
- 'Classes C.1.2, C.1.4, C.2.4, D.1.3, D.4.5, D.4.7, '
- 'E.1.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.DL': {
- 'name': 'Digital Libraries',
- 'in_archive': 'cs',
- 'description': 'Covers all aspects of the digital library design and '
- 'document and text creation. Note that there will be '
- 'some overlap with Information Retrieval (which is a '
- 'separate subject area). Roughly includes material in '
- 'ACM Subject Classes H.3.5, H.3.6, H.3.7, I.7.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.DM': {
- 'name': 'Discrete Mathematics',
- 'in_archive': 'cs',
- 'description': 'Covers combinatorics, graph theory, applications of '
- 'probability. Roughly includes material in ACM Subject '
- 'Classes G.2 and G.3.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.DS': {
- 'name': 'Data Structures and Algorithms',
- 'in_archive': 'cs',
- 'description': 'Covers data structures and analysis of algorithms. '
- 'Roughly includes material in ACM Subject Classes E.1, '
- 'E.2, F.2.1, and F.2.2.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.ET': {
- 'name': 'Emerging Technologies',
- 'in_archive': 'cs',
- 'description': 'Covers approaches to information processing ('
- 'computing, communication, sensing) and bio-chemical '
- 'analysis based on alternatives to silicon CMOS-based '
- 'technologies, such as nanoscale electronic, photonic, '
- 'spin-based, superconducting, mechanical, bio-chemical '
- 'and quantum technologies (this list is not exclusive).'
- ' Topics of interest include (1) building blocks for '
- 'emerging technologies, their scalability and adoption '
- 'in larger systems, including integration with '
- 'traditional technologies, (2) modeling, design and '
- 'optimization of novel devices and systems, (3) models '
- 'of computation, algorithm design and programming for '
- 'emerging technologies.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.FL': {
- 'name': 'Formal Languages and Automata Theory',
- 'in_archive': 'cs',
- 'description': 'Covers automata theory, formal language theory, '
- 'grammars, and combinatorics on words. This roughly '
- 'corresponds to ACM Subject Classes F.1.1, and F.4.3. '
- 'Papers dealing with computational complexity should '
- 'go to cs.CC; papers dealing with logic should go to '
- 'cs.LO.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.GL': {
- 'name': 'General Literature',
- 'in_archive': 'cs',
- 'description': 'Covers introductory material, survey material, '
- 'predictions of future trends, biographies, and '
- 'miscellaneous computer-science related material. '
- 'Roughly includes all of ACM Subject Class A, except '
- 'it does not include conference proceedings (which '
- 'will be listed in the appropriate subject area).',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.GR': {
- 'name': 'Graphics',
- 'in_archive': 'cs',
- 'description': 'Covers all aspects of computer graphics. Roughly '
- 'includes material in all of ACM Subject Class I.3, '
- 'except that I.3.5 is is likely to have Computational '
- 'Geometry as the primary subject area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.GT': {
- 'name': 'Computer Science and Game Theory',
- 'in_archive': 'cs',
- 'description': 'Covers all theoretical and applied aspects at the '
- 'intersection of computer science and game theory, '
- 'including work in mechanism design, learning in games '
- '(which may overlap with Learning), foundations of '
- 'agent modeling in games (which may overlap with '
- 'Multiagent systems), coordination, specification and '
- 'formal methods for non-cooperative computational '
- 'environments. The area also deals with applications '
- 'of game theory to areas such as electronic commerce.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.HC': {
- 'name': 'Human-Computer Interaction',
- 'in_archive': 'cs',
- 'description': 'Covers human factors, user interfaces, and '
- 'collaborative computing. Roughly includes material in '
- 'ACM Subject Classes H.1.2 and all of H.5, except for '
- 'H.5.1, which is more likely to have Multimedia as the '
- 'primary subject area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.IR': {
- 'name': 'Information Retrieval',
- 'in_archive': 'cs',
- 'description': 'Covers indexing, dictionaries, retrieval, content and '
- 'analysis. Roughly includes material in ACM Subject '
- 'Classes H.3.0, H.3.1, H.3.2, H.3.3, and H.3.4.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.IT': {
- 'name': 'Information Theory',
- 'in_archive': 'cs',
- 'description': 'Covers theoretical and experimental aspects of '
- 'information theory and coding. Includes material in '
- 'ACM Subject Class E.4 and intersects with H.1.1.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.LG': {
- 'name': 'Machine Learning',
- 'in_archive': 'cs',
- 'description': 'Papers on all aspects of machine learning research '
- '(supervised, unsupervised, reinforcement learning, '
- 'bandit problems, and so on) including also '
- 'robustness, explanation, fairness, and methodology. '
- 'cs.LG is also an appropriate primary category for '
- 'applications of machine learning methods.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.LO': {
- 'name': 'Logic in Computer Science',
- 'in_archive': 'cs',
- 'description': 'Covers all aspects of logic in computer science, '
- 'including finite model theory, logics of programs, '
- 'modal logic, and program verification. Programming '
- 'language semantics should have Programming Languages '
- 'as the primary subject area. Roughly includes '
- 'material in ACM Subject Classes D.2.4, F.3.1, F.4.0, '
- 'F.4.1, and F.4.2; some material in F.4.3 (formal '
- 'languages) may also be appropriate here, although '
- 'Computational Complexity is typically the more '
- 'appropriate subject area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.MA': {
- 'name': 'Multiagent Systems',
- 'in_archive': 'cs',
- 'description': 'Covers multiagent systems, distributed artificial '
- 'intelligence, intelligent agents, coordinated '
- 'interactions. and practical applications. Roughly '
- 'covers ACM Subject Class I.2.11.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.MM': {
- 'name': 'Multimedia',
- 'in_archive': 'cs',
- 'description': 'Roughly includes material in ACM Subject Class H.5.1.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.MS': {
- 'name': 'Mathematical Software',
- 'in_archive': 'cs',
- 'description': 'Roughly includes material in ACM Subject Class G.4.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.NA': {
- 'name': 'Numerical Analysis',
- 'in_archive': 'cs',
- 'description': 'cs.NA is an alias for math.NA. Roughly includes '
- 'material in ACM Subject Class G.1.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.NE': {
- 'name': 'Neural and Evolutionary Computing',
- 'in_archive': 'cs',
- 'description': 'Covers neural networks, connectionism, genetic '
- 'algorithms, artificial life, adaptive behavior. '
- 'Roughly includes some material in ACM Subject Class C.'
- '1.3, I.2.6, I.5.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.NI': {
- 'name': 'Networking and Internet Architecture',
- 'in_archive': 'cs',
- 'description': 'Covers all aspects of computer communication networks,'
- ' including network architecture and design, network '
- 'protocols, and internetwork standards (like TCP/IP). '
- 'Also includes topics, such as web caching, that are '
- 'directly relevant to Internet architecture and '
- 'performance. Roughly includes all of ACM Subject '
- 'Class C.2 except C.2.4, which is more likely to have '
- 'Distributed, Parallel, and Cluster Computing as the '
- 'primary subject area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.OH': {
- 'name': 'Other Computer Science',
- 'in_archive': 'cs',
- 'description': 'This is the classification to use for documents that '
- 'do not fit anywhere else.',
- 'is_active': True,
- 'is_general': True
- },
- 'cs.OS': {
- 'name': 'Operating Systems',
- 'in_archive': 'cs',
- 'description': 'Roughly includes material in ACM Subject Classes D.4.'
- '1, D.4.2., D.4.3, D.4.4, D.4.5, D.4.7, and D.4.9.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.PF': {
- 'name': 'Performance',
- 'in_archive': 'cs',
- 'description': 'Covers performance measurement and evaluation, '
- 'queueing, and simulation. Roughly includes material '
- 'in ACM Subject Classes D.4.8 and K.6.2.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.PL': {
- 'name': 'Programming Languages',
- 'in_archive': 'cs',
- 'description': 'Covers programming language semantics, language '
- 'features, programming approaches (such as object-'
- 'oriented programming, functional programming, logic '
- 'programming). Also includes material on compilers '
- 'oriented towards programming languages; other '
- 'material on compilers may be more appropriate in '
- 'Architecture (AR). Roughly includes material in ACM '
- 'Subject Classes D.1 and D.3.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.RO': {
- 'name': 'Robotics',
- 'in_archive': 'cs',
- 'description': 'Roughly includes material in ACM Subject Class I.2.9.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.SC': {
- 'name': 'Symbolic Computation',
- 'in_archive': 'cs',
- 'description': 'Roughly includes material in ACM Subject Class I.1.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.SD': {
- 'name': 'Sound',
- 'in_archive': 'cs',
- 'description': 'Covers all aspects of computing with sound, and sound '
- 'as an information channel. Includes models of sound, '
- 'analysis and synthesis, audio user interfaces, '
- 'sonification of data, computer music, and sound '
- 'signal processing. Includes ACM Subject Class H.5.5, '
- 'and intersects with H.1.2, H.5.1, H.5.2, I.2.7, I.5.4,'
- ' I.6.3, J.5, K.4.2.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.SE': {
- 'name': 'Software Engineering',
- 'in_archive': 'cs',
- 'description': 'Covers design tools, software metrics, testing and '
- 'debugging, programming environments, etc. Roughly '
- 'includes material in all of ACM Subject Classes D.2, '
- 'except that D.2.4 (program verification) should '
- 'probably have Logics in Computer Science as the '
- 'primary subject area.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.SI': {
- 'name': 'Social and Information Networks',
- 'in_archive': 'cs',
- 'description': 'Covers the design, analysis, and modeling of social '
- 'and information networks, including their '
- 'applications for on-line information access, '
- 'communication, and interaction, and their roles as '
- 'datasets in the exploration of questions in these and '
- 'other domains, including connections to the social '
- 'and biological sciences. Analysis and modeling of '
- 'such networks includes topics in ACM Subject classes '
- 'F.2, G.2, G.3, H.2, and I.2; applications in '
- 'computing include topics in H.3, H.4, and H.5; and '
- 'applications at the interface of computing and other '
- 'disciplines include topics in J.1--J.7. Papers on '
- 'computer communication systems and network protocols ('
- 'e.g. TCP/IP) are generally a closer fit to the '
- 'Networking and Internet Architecture (cs.NI) '
- 'category.',
- 'is_active': True,
- 'is_general': False
- },
- 'cs.SY': {
- 'name': 'Systems and Control',
- 'in_archive': 'cs',
- 'description': 'cs.SY is an alias for eess.SY. This section includes '
- 'theoretical and experimental research covering all '
- 'facets of automatic control systems. The section is '
- 'focused on methods of control system analysis and '
- 'design using tools of modeling, simulation and '
- 'optimization. Specific areas of research include '
- 'nonlinear, distributed, adaptive, stochastic and '
- 'robust control in addition to hybrid and discrete '
- 'event systems. Application areas include automotive '
- 'and aerospace control systems, network control, '
- 'biological systems, multiagent and cooperative '
- 'control, robotics, reinforcement learning, sensor '
- 'networks, control of cyber-physical and '
- 'energy-related systems, and control of computing '
- 'systems.',
- 'is_active': True,
- 'is_general': False
- },
- 'dg-ga': {
- 'name': 'Differential Geometry',
- 'in_archive': 'dg-ga',
- 'is_active': False,
- 'is_general': False
- },
- 'econ.EM': {
- 'name': 'Econometrics',
- 'in_archive': 'econ',
- 'description': 'Econometric Theory, Micro-Econometrics, Macro-'
- 'Econometrics, Empirical Content of Economic Relations '
- 'discovered via New Methods, Methodological Aspects of '
- 'the Application of Statistical Inference to Economic '
- 'Data.',
- 'is_active': True,
- 'is_general': False
- },
- 'econ.GN': {
- 'name': 'General Economics',
- 'in_archive': 'econ',
- 'description': 'General methodological, applied, and empirical contributions to '
- 'economics.',
- 'is_active': True,
- 'is_general': True
- },
- 'econ.TH': {
- 'name': 'Theoretical Economics',
- 'in_archive': 'econ',
- 'description': 'Includes theoretical contributions to Contract '
- 'Theory, Decision Theory, Game Theory, General '
- 'Equilibrium, Growth, Learning and Evolution, '
- 'Macroeconomics, Market and Mechanism Design, and '
- 'Social Choice.',
- 'is_active': True,
- 'is_general': False
- },
- 'eess.AS': {
- 'name': 'Audio and Speech Processing',
- 'in_archive': 'eess',
- 'description': 'Theory and methods for processing signals '
- 'representing audio, speech, and language, and their '
- 'applications. This includes analysis, synthesis, '
- 'enhancement, transformation, classification and '
- 'interpretation of such signals as well as the design, '
- 'development, and evaluation of associated signal '
- 'processing systems. Machine learning and pattern '
- 'analysis applied to any of the above areas is also '
- 'welcome. Specific topics of interest include: '
- 'auditory modeling and hearing aids; acoustic '
- 'beamforming and source localization; classification '
- 'of acoustic scenes; speaker separation; active noise '
- 'control and echo cancellation; enhancement; de-'
- 'reverberation; bioacoustics; music signals analysis, '
- 'synthesis and modification; music information '
- 'retrieval; audio for multimedia and joint audio-'
- 'video processing; spoken and written language '
- 'modeling, segmentation, tagging, parsing, '
- 'understanding, and translation; text mining; speech '
- 'production, perception, and psychoacoustics; speech '
- 'analysis, synthesis, and perceptual modeling and '
- 'coding; robust speech recognition; speaker '
- 'recognition and characterization; deep learning, '
- 'online learning, and graphical models applied to '
- 'speech, audio, and language signals; and '
- 'implementation aspects ranging from system '
- 'architecture to fast algorithms.',
- 'is_active': True,
- 'is_general': False
- },
- 'eess.IV': {
- 'name': 'Image and Video Processing',
- 'in_archive': 'eess',
- 'description': 'Theory, algorithms, and architectures for the '
- 'formation, capture, processing, communication, '
- 'analysis, and display of images, video, and '
- 'multidimensional signals in a wide variety of '
- 'applications. Topics of interest include: '
- 'mathematical, statistical, and perceptual image and '
- 'video modeling and representation; linear and '
- 'nonlinear filtering, de-blurring, enhancement, '
- 'restoration, and reconstruction from degraded, low-'
- 'resolution or tomographic data; lossless and lossy '
- 'compression and coding; segmentation, alignment, and '
- 'recognition; image rendering, visualization, and '
- 'printing; computational imaging, including ultrasound,'
- ' tomographic and magnetic resonance imaging; and '
- 'image and video analysis, synthesis, storage, search '
- 'and retrieval.',
- 'is_active': True,
- 'is_general': False
- },
- 'eess.SP': {
- 'name': 'Signal Processing',
- 'in_archive': 'eess',
- 'description': 'Theory, algorithms, performance analysis and '
- 'applications of signal and data analysis, including '
- 'physical modeling, processing, detection and '
- 'parameter estimation, learning, mining, retrieval, '
- 'and information extraction. The term "signal" '
- 'includes speech, audio, sonar, radar, geophysical, '
- 'physiological, (bio-) medical, image, video, and '
- 'multimodal natural and man-made signals, including '
- 'communication signals and data. Topics of interest '
- 'include: statistical signal processing, spectral '
- 'estimation and system identification; filter design, '
- 'adaptive filtering / stochastic learning; ('
- 'compressive) sampling, sensing, and transform-domain '
- 'methods including fast algorithms; signal processing '
- 'for machine learning and machine learning for signal '
- 'processing applications; in-network and graph signal '
- 'processing; convex and nonconvex optimization methods '
- 'for signal processing applications; radar, sonar, and '
- 'sensor array beamforming and direction finding; '
- 'communications signal processing; low power, multi-'
- 'core and system-on-chip signal processing; sensing, '
- 'communication, analysis and optimization for cyber-'
- 'physical systems such as power grids and the Internet '
- 'of Things.',
- 'is_active': True,
- 'is_general': False
- },
- 'eess.SY': {
- 'name': 'Systems and Control',
- 'in_archive': 'eess',
- 'description': 'This section includes theoretical and experimental '
- 'research covering all facets of automatic control '
- 'systems. The section is focused on methods of control '
- 'system analysis and design using tools of modeling, '
- 'simulation and optimization. Specific areas of '
- 'research include nonlinear, distributed, adaptive, '
- 'stochastic and robust control in addition to hybrid '
- 'and discrete event systems. Application areas include '
- 'automotive and aerospace control systems, network '
- 'control, biological systems, multiagent and '
- 'cooperative control, robotics, reinforcement '
- 'learning, sensor networks, control of cyber-physical '
- 'and energy-related systems, and control of computing '
- 'systems.',
- 'is_active': True,
- 'is_general': False
- },
- 'funct-an': {
- 'name': 'Functional Analysis',
- 'in_archive': 'funct-an',
- 'is_active': False,
- 'is_general': False
- },
- 'gr-qc': {
- 'name': 'General Relativity and Quantum Cosmology',
- 'in_archive': 'gr-qc',
- 'description': 'General Relativity and Quantum Cosmology Areas of '
- 'gravitational physics, including experiments and '
- 'observations related to the detection and '
- 'interpretation of gravitational waves, experimental '
- 'tests of gravitational theories, computational general '
- 'relativity, relativistic astrophysics, solutions to '
- 'Einstein\'s equations and their properties, alternative'
- ' theories of gravity, classical and quantum cosmology, '
- 'and quantum gravity.',
- 'is_active': True,
- 'is_general': False
- },
- 'hep-ex': {
- 'name': 'High Energy Physics - Experiment',
- 'in_archive': 'hep-ex',
- 'description': 'Results from high-energy/particle physics experiments '
- 'and prospects for future experimental results, including '
- 'tests of the standard model, measurements of standard '
- 'model parameters, searches for physics beyond the '
- 'standard model, and astroparticle physics experimental '
- 'results. Does not include: detectors and '
- 'instrumentation nor analysis methods to conduct '
- 'experiments.',
- 'is_active': True,
- 'is_general': False
- },
- 'hep-lat': {
- 'name': 'High Energy Physics - Lattice',
- 'in_archive': 'hep-lat',
- 'description': 'Lattice field theory. Phenomenology from lattice field '
- 'theory. Algorithms for lattice field theory. Hardware '
- 'for lattice field theory.',
- 'is_active': True,
- 'is_general': False
- },
- 'hep-ph': {
- 'name': 'High Energy Physics - Phenomenology',
- 'in_archive': 'hep-ph',
- 'description': 'Theoretical particle physics and its interrelation '
- 'with experiment. Prediction of particle physics '
- 'observables: models, effective field theories, '
- 'calculation techniques. Particle physics: analysis of '
- 'theory through experimental results.',
- 'is_active': True,
- 'is_general': False
- },
- 'hep-th': {
- 'name': 'High Energy Physics - Theory',
- 'in_archive': 'hep-th',
- 'description': 'Formal aspects of quantum field theory. String theory, '
- 'supersymmetry and supergravity.',
- 'is_active': True,
- 'is_general': False
- },
- 'math-ph': {
- 'name': 'Mathematical Physics',
- 'in_archive': 'math-ph',
- 'description': 'Articles in this category focus on areas of research '
- 'that illustrate the application of mathematics to '
- 'problems in physics, develop mathematical methods for '
- 'such applications, or provide mathematically rigorous '
- 'formulations of existing physical theories. Submissions '
- 'to math-ph should be of interest to both physically '
- 'oriented mathematicians and mathematically oriented '
- 'physicists; submissions which are primarily of interest '
- 'to theoretical physicists or to mathematicians should '
- 'probably be directed to the respective physics/math '
- 'categories',
- 'is_active': True,
- 'is_general': False
- },
- 'math.AC': {
- 'name': 'Commutative Algebra',
- 'in_archive': 'math',
- 'description': 'Commutative rings, modules, ideals, homological '
- 'algebra, computational aspects, invariant theory, '
- 'connections to algebraic geometry and '
- 'combinatorics',
- 'is_active': True,
- 'is_general': False
- },
- 'math.AG': {
- 'name': 'Algebraic Geometry',
- 'in_archive': 'math',
- 'description': 'Algebraic varieties, stacks, sheaves, schemes, moduli '
- 'spaces, complex geometry, quantum '
- 'cohomology',
- 'is_active': True,
- 'is_general': False
- },
- 'math.AP': {
- 'name': 'Analysis of PDEs',
- 'in_archive': 'math',
- 'description': 'Existence and uniqueness, boundary conditions, linear '
- 'and non-linear operators, stability, soliton theory, '
- 'integrable PDE\'s, conservation laws, qualitative '
- 'dynamics',
- 'is_active': True,
- 'is_general': False
- },
- 'math.AT': {
- 'name': 'Algebraic Topology',
- 'in_archive': 'math',
- 'description': 'Homotopy theory, homological algebra, algebraic '
- 'treatments of manifolds',
- 'is_active': True,
- 'is_general': False
- },
- 'math.CA': {
- 'name': 'Classical Analysis and ODEs',
- 'in_archive': 'math',
- 'description': 'Special functions, orthogonal polynomials, harmonic '
- 'analysis, ODE\'s, differential relations, calculus of '
- 'variations, approximations, expansions, asymptotics',
- 'is_active': True,
- 'is_general': False
- },
- 'math.CO': {
- 'name': 'Combinatorics',
- 'in_archive': 'math',
- 'description': 'Discrete mathematics, graph theory, enumeration, '
- 'combinatorial optimization, Ramsey theory, '
- 'combinatorial game theory',
- 'is_active': True,
- 'is_general': False
- },
- 'math.CT': {
- 'name': 'Category Theory',
- 'in_archive': 'math',
- 'description': 'Enriched categories, topoi, abelian categories, '
- 'monoidal categories, homological algebra',
- 'is_active': True,
- 'is_general': False
- },
- 'math.CV': {
- 'name': 'Complex Variables',
- 'in_archive': 'math',
- 'description': 'Holomorphic functions, automorphic group actions and '
- 'forms, pseudoconvexity, complex geometry, analytic '
- 'spaces, analytic sheaves',
- 'is_active': True,
- 'is_general': False
- },
- 'math.DG': {
- 'name': 'Differential Geometry',
- 'in_archive': 'math',
- 'description': 'Complex, contact, Riemannian, pseudo-Riemannian and '
- 'Finsler geometry, relativity, gauge theory, global '
- 'analysis',
- 'is_active': True,
- 'is_general': False
- },
- 'math.DS': {
- 'name': 'Dynamical Systems',
- 'in_archive': 'math',
- 'description': 'Dynamics of differential equations and flows, '
- 'mechanics, classical few-body problems, iterations, '
- 'complex dynamics, delayed differential '
- 'equations',
- 'is_active': True,
- 'is_general': False
- },
- 'math.FA': {
- 'name': 'Functional Analysis',
- 'in_archive': 'math',
- 'description': 'Banach spaces, function spaces, real functions, '
- 'integral transforms, theory of distributions, measure '
- 'theory',
- 'is_active': True,
- 'is_general': False
- },
- 'math.GM': {
- 'name': 'General Mathematics',
- 'in_archive': 'math',
- 'description': 'Mathematical material of general interest, topics not '
- 'covered elsewhere',
- 'is_active': True,
- 'is_general': True
- },
- 'math.GN': {
- 'name': 'General Topology',
- 'in_archive': 'math',
- 'description': 'Continuum theory, point-set topology, spaces with '
- 'algebraic structure, foundations, dimension theory, '
- 'local and global properties',
- 'is_active': True,
- 'is_general': False
- },
- 'math.GR': {
- 'name': 'Group Theory',
- 'in_archive': 'math',
- 'description': 'Finite groups, topological groups, representation '
- 'theory, cohomology, classification and structure',
- 'is_active': True,
- 'is_general': False
- },
- 'math.GT': {
- 'name': 'Geometric Topology',
- 'in_archive': 'math',
- 'description': 'Manifolds, orbifolds, polyhedra, cell complexes, '
- 'foliations, geometric structures',
- 'is_active': True,
- 'is_general': False
- },
- 'math.HO': {
- 'name': 'History and Overview',
- 'in_archive': 'math',
- 'description': 'Biographies, philosophy of mathematics, mathematics '
- 'education, recreational mathematics, communication of '
- 'mathematics, ethics in mathematics',
- 'is_active': True,
- 'is_general': False
- },
- 'math.IT': {
- 'name': 'Information Theory',
- 'in_archive': 'math',
- 'description': 'math.IT is an alias for cs.IT. Covers theoretical and '
- 'experimental aspects of information theory and '
- 'coding.',
- 'is_active': True,
- 'is_general': False
- },
- 'math.KT': {
- 'name': 'K-Theory and Homology',
- 'in_archive': 'math',
- 'description': 'Algebraic and topological K-theory, relations with '
- 'topology, commutative algebra, and operator '
- 'algebras',
- 'is_active': True,
- 'is_general': False
- },
- 'math.LO': {
- 'name': 'Logic',
- 'in_archive': 'math',
- 'description': 'Logic, set theory, point-set topology, formal '
- 'mathematics',
- 'is_active': True,
- 'is_general': False
- },
- 'math.MG': {
- 'name': 'Metric Geometry',
- 'in_archive': 'math',
- 'description': 'Euclidean, hyperbolic, discrete, convex, coarse '
- 'geometry, comparisons in Riemannian geometry, '
- 'symmetric spaces',
- 'is_active': True,
- 'is_general': False
- },
- 'math.MP': {
- 'name': 'Mathematical Physics',
- 'in_archive': 'math',
- 'description': 'math.MP is an alias for math-ph. '
- 'Articles in this category focus on areas of research '
- 'that illustrate the application of mathematics to '
- 'problems in physics, develop mathematical methods for '
- 'such applications, or provide mathematically rigorous '
- 'formulations of existing physical theories. Submissions '
- 'to math-ph should be of interest to both physically '
- 'oriented mathematicians and mathematically oriented '
- 'physicists; submissions which are primarily of interest '
- 'to theoretical physicists or to mathematicians should '
- 'probably be directed to the respective physics/math '
- 'categories',
- 'is_active': True,
- 'is_general': False
- },
- 'math.NA': {
- 'name': 'Numerical Analysis',
- 'in_archive': 'math',
- 'description': 'Numerical algorithms for problems in analysis and '
- 'algebra, scientific computation',
- 'is_active': True,
- 'is_general': False
- },
- 'math.NT': {
- 'name': 'Number Theory',
- 'in_archive': 'math',
- 'description': 'Prime numbers, diophantine equations, analytic number '
- 'theory, algebraic number theory, arithmetic geometry, '
- 'Galois theory',
- 'is_active': True,
- 'is_general': False
- },
- 'math.OA': {
- 'name': 'Operator Algebras',
- 'in_archive': 'math',
- 'description': 'Algebras of operators on Hilbert space, C^*-algebras, '
- 'von Neumann algebras, non-commutative geometry',
- 'is_active': True,
- 'is_general': False
- },
- 'math.OC': {
- 'name': 'Optimization and Control',
- 'in_archive': 'math',
- 'description': 'Operations research, linear programming, control '
- 'theory, systems theory, optimal control, game '
- 'theory',
- 'is_active': True,
- 'is_general': False
- },
- 'math.PR': {
- 'name': 'Probability',
- 'in_archive': 'math',
- 'description': 'Theory and applications of probability and stochastic '
- 'processes: e.g. central limit theorems, large '
- 'deviations, stochastic differential equations, models '
- 'from statistical mechanics, queuing theory',
- 'is_active': True,
- 'is_general': False
- },
- 'math.QA': {
- 'name': 'Quantum Algebra',
- 'in_archive': 'math',
- 'description': 'Quantum groups, skein theories, operadic and '
- 'diagrammatic algebra, quantum field theory',
- 'is_active': True,
- 'is_general': False
- },
- 'math.RA': {
- 'name': 'Rings and Algebras',
- 'in_archive': 'math',
- 'description': 'Non-commutative rings and algebras, non-associative '
- 'algebras, universal algebra and lattice theory, '
- 'linear algebra, semigroups',
- 'is_active': True,
- 'is_general': False
- },
- 'math.RT': {
- 'name': 'Representation Theory',
- 'in_archive': 'math',
- 'description': 'Linear representations of algebras and groups, Lie '
- 'theory, associative algebras, multilinear algebra',
- 'is_active': True,
- 'is_general': False
- },
- 'math.SG': {
- 'name': 'Symplectic Geometry',
- 'in_archive': 'math',
- 'description': 'Hamiltonian systems, symplectic flows, classical '
- 'integrable systems',
- 'is_active': True,
- 'is_general': False
- },
- 'math.SP': {
- 'name': 'Spectral Theory',
- 'in_archive': 'math',
- 'description': 'Schrodinger operators, operators on manifolds, '
- 'general differential operators, numerical studies, '
- 'integral operators, discrete models, resonances, non-'
- 'self-adjoint operators, random operators/matrices',
- 'is_active': True,
- 'is_general': False
- },
- 'math.ST': {
- 'name': 'Statistics Theory',
- 'in_archive': 'math',
- 'description': 'Applied, computational and theoretical statistics: '
- 'e.g. statistical inference, regression, time series, '
- 'multivariate analysis, data analysis, Markov chain '
- 'Monte Carlo, design of experiments, case studies',
- 'is_active': True,
- 'is_general': False
- },
- 'mtrl-th': {
- 'name': 'Materials Theory',
- 'in_archive': 'mtrl-th',
- 'is_active': False,
- 'is_general': False
- },
- 'nlin.AO': {
- 'name': 'Adaptation and Self-Organizing Systems',
- 'in_archive': 'nlin',
- 'description': 'Adaptation, self-organizing systems, statistical '
- 'physics, fluctuating systems, stochastic processes, '
- 'interacting particle systems, machine learning',
- 'is_active': True,
- 'is_general': False
- },
- 'nlin.CD': {
- 'name': 'Chaotic Dynamics',
- 'in_archive': 'nlin',
- 'description': 'Dynamical systems, chaos, quantum chaos, topological '
- 'dynamics, cycle expansions, turbulence, '
- 'propagation',
- 'is_active': True,
- 'is_general': False
- },
- 'nlin.CG': {
- 'name': 'Cellular Automata and Lattice Gases',
- 'in_archive': 'nlin',
- 'description': 'Computational methods, time series analysis, signal '
- 'processing, wavelets, lattice gases',
- 'is_active': True,
- 'is_general': False
- },
- 'nlin.PS': {
- 'name': 'Pattern Formation and Solitons',
- 'in_archive': 'nlin',
- 'description': 'Pattern formation, coherent structures, solitons',
- 'is_active': True,
- 'is_general': False
- },
- 'nlin.SI': {
- 'name': 'Exactly Solvable and Integrable Systems',
- 'in_archive': 'nlin',
- 'description': 'Exactly solvable systems, integrable PDEs, integrable '
- 'ODEs, Painleve analysis, integrable discrete maps, '
- 'solvable lattice models, integrable quantum '
- 'systems',
- 'is_active': True,
- 'is_general': False
- },
- 'nucl-ex': {
- 'name': 'Nuclear Experiment',
- 'in_archive': 'nucl-ex',
- 'description': 'Nuclear Experiment Results from experimental nuclear physics '
- 'including the areas of fundamental interactions, measurements '
- 'at low- and medium-energy, as well as relativistic heavy-ion '
- 'collisions. Does not include: detectors and instrumentation nor '
- 'analysis methods to conduct experiments; descriptions of '
- 'experimental programs (present or future); comments on published results',
- 'is_active': True,
- 'is_general': False
- },
- 'nucl-th': {
- 'name': 'Nuclear Theory',
- 'in_archive': 'nucl-th',
- 'description': 'Nuclear Theory Theory of nuclear structure covering wide area '
- 'from models of hadron structure to neutron stars. Nuclear '
- 'equation of states at different external conditions. Theory of '
- 'nuclear reactions including heavy-ion reactions at low and high '
- 'energies. It does not include problems of data analysis, physics '
- 'of nuclear reactors, problems of safety, reactor construction',
- 'is_active': True,
- 'is_general': False
- },
- 'patt-sol': {
- 'name': 'Pattern Formation and Solitons',
- 'in_archive': 'patt-sol',
- 'is_active': False,
- 'is_general': False
- },
- 'physics.acc-ph': {
- 'name': 'Accelerator Physics',
- 'in_archive': 'physics',
- 'description': 'Accelerator theory and simulation. Accelerator '
- 'technology. Accelerator experiments. Beam Physics. '
- 'Accelerator design and optimization. Advanced '
- 'accelerator concepts. Radiation sources including '
- 'synchrotron light sources and free electron lasers. '
- 'Applications of accelerators.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.ao-ph': {
- 'name': 'Atmospheric and Oceanic Physics',
- 'in_archive': 'physics',
- 'description': 'Atmospheric and oceanic physics and physical chemistry, '
- 'biogeophysics, and climate science',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.app-ph': {
- 'name': 'Applied Physics',
- 'in_archive': 'physics',
- 'description': 'Applications of physics to new technology, including '
- 'electronic devices, optics, photonics, microwaves, '
- 'spintronics, advanced materials, metamaterials, '
- 'nanotechnology, and energy sciences.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.atm-clus': {
- 'name': 'Atomic and Molecular Clusters',
- 'in_archive': 'physics',
- 'description': 'Atomic and molecular clusters, nanoparticles: geometric, '
- 'electronic, optical, chemical, magnetic properties, '
- 'shell structure, phase transitions, optical spectroscopy, '
- 'mass spectrometry, photoelectron spectroscopy, '
- 'ionization potential, electron affinity, interaction '
- 'with intense light pulses, electron diffraction, light '
- 'scattering, ab initio calculations, DFT theory, '
- 'fragmentation, Coulomb explosion, hydrodynamic '
- 'expansion.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.atom-ph': {
- 'name': 'Atomic Physics',
- 'in_archive': 'physics',
- 'description': 'Atomic and molecular structure, spectra, collisions, '
- 'and data. Atoms and molecules in external fields. '
- 'Molecular dynamics and coherent and optical control. '
- 'Cold atoms and molecules. Cold collisions. Optical '
- 'lattices.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.bio-ph': {
- 'name': 'Biological Physics',
- 'in_archive': 'physics',
- 'description': 'Molecular biophysics, cellular biophysics, neurological '
- 'biophysics, membrane biophysics, single-molecule '
- 'biophysics, ecological biophysics, quantum phenomena in '
- 'biological systems (quantum biophysics), theoretical '
- 'biophysics, molecular dynamics/modeling and '
- 'simulation, game theory, biomechanics, bioinformatics, '
- 'microorganisms, virology, evolution, biophysical '
- 'methods.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.chem-ph': {
- 'name': 'Chemical Physics',
- 'in_archive': 'physics',
- 'description': 'Experimental, computational, and theoretical physics of '
- 'atoms, molecules, and clusters - Classical and quantum '
- 'description of states, processes, and dynamics; '
- 'spectroscopy, electronic structure, conformations, '
- 'reactions, interactions, and phases. Chemical '
- 'thermodynamics. Disperse systems. High pressure '
- 'chemistry. Solid state chemistry. Surface and interface '
- 'chemistry.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.class-ph': {
- 'name': 'Classical Physics',
- 'in_archive': 'physics',
- 'description': 'Newtonian and relativistic dynamics; many particle '
- 'systems; planetary motions; chaos in classical dynamics. '
- 'Maxwell\'s equations and dynamics of charged systems '
- 'and electromagnetic forces in materials. Vibrating '
- 'systems such as membranes and cantilevers; optomechanics. '
- 'Classical waves, including acoustics and elasticity; '
- 'physics of music and musical instruments. Classical '
- 'thermodynamics and heat flow problems.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.comp-ph': {
- 'name': 'Computational Physics',
- 'in_archive': 'physics',
- 'description': 'All aspects of computational science applied to physics.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.data-an': {
- 'name': 'Data Analysis, Statistics and Probability',
- 'description': 'Methods, software and hardware for physics data '
- 'analysis: data processing and storage; measurement '
- 'methodology; statistical and mathematical aspects such '
- 'as parametrization and uncertainties.',
- 'in_archive': 'physics',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.ed-ph': {
- 'name': 'Physics Education',
- 'in_archive': 'physics',
- 'description': 'Report of results of a research study, laboratory '
- 'experience, assessment or classroom practice that '
- 'represents a way to improve teaching and learning in '
- 'physics. Also, report on misconceptions of students, '
- 'textbook errors, and other similar information relative '
- 'to promoting physics understanding.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.flu-dyn': {
- 'name': 'Fluid Dynamics',
- 'in_archive': 'physics',
- 'description': 'Turbulence, instabilities, incompressible/compressible '
- 'flows, reacting flows. Aero/hydrodynamics, fluid-'
- 'structure interactions, acoustics. Biological fluid '
- 'dynamics, micro/nanofluidics, interfacial phenomena. '
- 'Complex fluids, suspensions and granular flows, porous '
- 'media flows. Geophysical flows, thermoconvective and '
- 'stratified flows. Mathematical and computational methods '
- 'for fluid dynamics, fluid flow models, experimental '
- 'techniques.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.gen-ph': {
- 'name': 'General Physics',
- 'in_archive': 'physics',
- 'is_active': True,
- 'is_general': True
- },
- 'physics.geo-ph': {
- 'name': 'Geophysics',
- 'in_archive': 'physics',
- 'description': 'Atmospheric physics. Biogeosciences. Computational '
- 'geophysics. Geographic location. Geoinformatics. '
- 'Geophysical techniques. Hydrospheric geophysics. '
- 'Magnetospheric physics. Mathematical geophysics. '
- 'Planetology. Solar system. Solid earth geophysics. '
- 'Space plasma physics. Mineral physics. High pressure '
- 'physics.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.hist-ph': {
- 'name': 'History and Philosophy of Physics',
- 'in_archive': 'physics',
- 'description': 'History and philosophy of all branches of physics, '
- 'astrophysics, and cosmology, including appreciations of '
- 'physicists.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.ins-det': {
- 'name': 'Instrumentation and Detectors',
- 'in_archive': 'physics',
- 'description': 'Instrumentation and Detectors for research in natural '
- 'science, including optical, molecular, atomic, nuclear '
- 'and particle physics instrumentation and the associated '
- 'electronics, services, infrastructure and control '
- 'equipment. ',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.med-ph': {
- 'name': 'Medical Physics',
- 'in_archive': 'physics',
- 'description': 'Radiation therapy. Radiation dosimetry. Biomedical '
- 'imaging modelling. Reconstruction, processing, and '
- 'analysis. Biomedical system modelling and analysis. '
- 'Health physics. New imaging or therapy modalities.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.optics': {
- 'name': 'Optics',
- 'in_archive': 'physics',
- 'description': 'Adaptive optics. Astronomical optics. Atmospheric '
- 'optics. Biomedical optics. Cardinal points. '
- 'Collimation. Doppler effect. Fiber optics. Fourier '
- 'optics. Geometrical optics (Gradient index optics. '
- 'Holography. Infrared optics. Integrated optics. Laser '
- 'applications. Laser optical systems. Lasers. Light '
- 'amplification. Light diffraction. Luminescence. '
- 'Microoptics. Nano optics. Ocean optics. Optical '
- 'computing. Optical devices. Optical imaging. Optical '
- 'materials. Optical metrology. Optical microscopy. '
- 'Optical properties. Optical signal processing. Optical '
- 'testing techniques. Optical wave propagation. Paraxial '
- 'optics. Photoabsorption. Photoexcitations. Physical '
- 'optics. Physiological optics. Quantum optics. Segmented '
- 'optics. Spectra. Statistical optics. Surface optics. '
- 'Ultrafast optics. Wave optics. X-ray optics.',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.plasm-ph': {
- 'name': 'Plasma Physics',
- 'in_archive': 'physics',
- 'description': 'Fundamental plasma physics. Magnetically Confined '
- 'Plasmas (includes magnetic fusion energy research). '
- 'High Energy Density Plasmas (inertial confinement '
- 'plasmas, laser-plasma interactions). Ionospheric, '
- 'Heliophysical, and Astrophysical plasmas (includes sun '
- 'and solar system plasmas). Lasers, Accelerators, and '
- 'Radiation Generation. Low temperature plasmas and '
- 'plasma applications (include dusty plasmas, '
- 'semiconductor etching, plasma-based nanotechnology, '
- 'medical applications). Plasma Diagnostics, Engineering '
- 'and Enabling Technologies (includes fusion reactor '
- 'design, heating systems, diagnostics, experimental '
- 'techniques)',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.pop-ph': {
- 'name': 'Popular Physics',
- 'in_archive': 'physics',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.soc-ph': {
- 'name': 'Physics and Society',
- 'in_archive': 'physics',
- 'description': 'Structure, dynamics and collective behavior of '
- 'societies and groups (human or otherwise). Quantitative '
- 'analysis of social networks and other complex networks. '
- 'Physics and engineering of infrastructure and systems '
- 'of broad societal impact (e.g., energy grids, '
- 'transportation networks).',
- 'is_active': True,
- 'is_general': False
- },
- 'physics.space-ph': {
- 'name': 'Space Physics',
- 'in_archive': 'physics',
- 'description': 'Space plasma physics. Heliophysics. Space weather. '
- 'Planetary magnetospheres, ionospheres and magnetotail. '
- 'Auroras. Interplanetary space. Cosmic rays. Synchrotron '
- 'radiation. Radio astronomy.',
- 'is_active': True,
- 'is_general': False
- },
- 'plasm-ph': {
- 'name': 'Plasma Physics',
- 'in_archive': 'plasm-ph',
- 'is_active': False,
- 'is_general': False
- },
- 'q-alg': {
- 'name': 'Quantum Algebra and Topology',
- 'in_archive': 'q-alg',
- 'is_active': False,
- 'is_general': False
- },
- 'q-bio': {
- 'name': 'Quantitative Biology',
- 'in_archive': 'q-bio',
- 'is_active': False,
- 'is_general': False
- },
- 'q-bio.BM': {
- 'name': 'Biomolecules',
- 'in_archive': 'q-bio',
- 'description': 'DNA, RNA, proteins, lipids, etc.; molecular '
- 'structures and folding kinetics; molecular '
- 'interactions; single-molecule manipulation.',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.CB': {
- 'name': 'Cell Behavior',
- 'in_archive': 'q-bio',
- 'description': 'Cell-cell signaling and interaction; morphogenesis '
- 'and development; apoptosis; bacterial conjugation; '
- 'viral-host interaction; '
- 'immunology',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.GN': {
- 'name': 'Genomics',
- 'in_archive': 'q-bio',
- 'description': 'DNA sequencing and assembly; gene and motif finding; '
- 'RNA editing and alternative splicing; genomic '
- 'structure and processes (replication, transcription, '
- 'methylation, etc); mutational processes.',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.MN': {
- 'name': 'Molecular Networks',
- 'in_archive': 'q-bio',
- 'description': 'Gene regulation, signal transduction, proteomics, '
- 'metabolomics, gene and enzymatic networks',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.NC': {
- 'name': 'Neurons and Cognition',
- 'in_archive': 'q-bio',
- 'description': 'Synapse, cortex, neuronal dynamics, neural network, '
- 'sensorimotor control, behavior, '
- 'attention',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.OT': {
- 'name': 'Other Quantitative Biology',
- 'in_archive': 'q-bio',
- 'description': 'Work in quantitative biology that does not fit into '
- 'the other q-bio classifications',
- 'is_active': True,
- 'is_general': True
- },
- 'q-bio.PE': {
- 'name': 'Populations and Evolution',
- 'in_archive': 'q-bio',
- 'description': 'Population dynamics, spatio-temporal and '
- 'epidemiological models, dynamic speciation, co-'
- 'evolution, biodiversity, foodwebs, aging; molecular '
- 'evolution and phylogeny; directed evolution; origin '
- 'of life',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.QM': {
- 'name': 'Quantitative Methods',
- 'in_archive': 'q-bio',
- 'description': 'All experimental, numerical, statistical and '
- 'mathematical contributions of value to biology',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.SC': {
- 'name': 'Subcellular Processes',
- 'in_archive': 'q-bio',
- 'description': 'Assembly and control of subcellular structures ('
- 'channels, organelles, cytoskeletons, capsules, etc.); '
- 'molecular motors, transport, subcellular localization;'
- ' mitosis and meiosis',
- 'is_active': True,
- 'is_general': False
- },
- 'q-bio.TO': {
- 'name': 'Tissues and Organs',
- 'in_archive': 'q-bio',
- 'description': 'Blood flow in vessels, biomechanics of bones, '
- 'electrical waves, endocrine system, tumor growth',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.CP': {
- 'name': 'Computational Finance',
- 'in_archive': 'q-fin',
- 'description': 'Computational methods, including Monte Carlo, PDE, '
- 'lattice and other numerical methods with applications '
- 'to financial modeling',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.EC': {
- 'name': 'Economics',
- 'in_archive': 'q-fin',
- 'description': 'q-fin.EC is an alias for econ.GN. Economics, '
- 'including micro and macro economics, international '
- 'economics, theory of the firm, labor economics, and '
- 'other economic topics outside finance',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.GN': {
- 'name': 'General Finance',
- 'in_archive': 'q-fin',
- 'description': 'Development of general quantitative methodologies '
- 'with applications in finance',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.MF': {
- 'name': 'Mathematical Finance',
- 'in_archive': 'q-fin',
- 'description': 'Mathematical and analytical methods of finance, '
- 'including stochastic, probabilistic and functional '
- 'analysis, algebraic, geometric and other methods',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.PM': {
- 'name': 'Portfolio Management',
- 'in_archive': 'q-fin',
- 'description': 'Security selection and optimization, capital '
- 'allocation, investment strategies and performance '
- 'measurement',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.PR': {
- 'name': 'Pricing of Securities',
- 'in_archive': 'q-fin',
- 'description': 'Valuation and hedging of financial securities, their '
- 'derivatives, and structured products',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.RM': {
- 'name': 'Risk Management',
- 'in_archive': 'q-fin',
- 'description': 'Measurement and management of financial risks in '
- 'trading, banking, insurance, corporate and other '
- 'applications',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.ST': {
- 'name': 'Statistical Finance',
- 'in_archive': 'q-fin',
- 'description': 'Statistical, econometric and econophysics analyses '
- 'with applications to financial markets and economic '
- 'data',
- 'is_active': True,
- 'is_general': False
- },
- 'q-fin.TR': {
- 'name': 'Trading and Market Microstructure',
- 'in_archive': 'q-fin',
- 'description': 'Market microstructure, liquidity, exchange and '
- 'auction design, automated trading, agent-based '
- 'modeling and market-making',
- 'is_active': True,
- 'is_general': False
- },
- 'quant-ph': {
- 'name': 'Quantum Physics',
- 'in_archive': 'quant-ph',
- 'is_active': True,
- 'is_general': False
- },
- 'solv-int': {
- 'name': 'Exactly Solvable and Integrable Systems',
- 'in_archive': 'solv-int',
- 'is_active': False,
- 'is_general': False
- },
- 'stat.AP': {
- 'name': 'Applications',
- 'in_archive': 'stat',
- 'description': 'Biology, Education, Epidemiology, Engineering, '
- 'Environmental Sciences, Medical, Physical Sciences, '
- 'Quality Control, Social Sciences',
- 'is_active': True,
- 'is_general': False
- },
- 'stat.CO': {
- 'name': 'Computation',
- 'in_archive': 'stat',
- 'description': 'Algorithms, Simulation, Visualization',
- 'is_active': True,
- 'is_general': False
- },
- 'stat.ME': {
- 'name': 'Methodology',
- 'in_archive': 'stat',
- 'description': 'Design, Surveys, Model Selection, Multiple Testing, '
- 'Multivariate Methods, Signal and Image Processing, '
- 'Time Series, Smoothing, Spatial Statistics, Survival '
- 'Analysis, Nonparametric and Semiparametric '
- 'Methods',
- 'is_active': True,
- 'is_general': False
- },
- 'stat.ML': {
- 'name': 'Machine Learning',
- 'in_archive': 'stat',
- 'description': 'Covers machine learning papers (supervised, '
- 'unsupervised, semi-supervised learning, graphical '
- 'models, reinforcement learning, bandits, '
- 'high dimensional inference, etc.) with a statistical '
- 'or theoretical grounding',
- 'is_active': True,
- 'is_general': False
- },
- 'stat.OT': {
- 'name': 'Other Statistics',
- 'in_archive': 'stat',
- 'description': 'Work in statistics that does not fit into the other '
- 'stat classifications',
- 'is_active': True,
- 'is_general': False
- },
- 'stat.TH': {
- 'name': 'Statistics Theory',
- 'in_archive': 'stat',
- 'description': 'stat.TH is an alias for math.ST. Asymptotics, '
- 'Bayesian Inference, Decision Theory, Estimation, '
- 'Foundations, Inference, Testing.',
- 'is_active': True,
- 'is_general': False
- },
- 'supr-con': {
- 'name': 'Superconductivity',
- 'in_archive': 'supr-con',
- 'is_active': False,
- 'is_general': False
- },
- 'test': {
- 'name': 'Test',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.dis-nn': {
- 'name': 'Test Disruptive Networks',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.mes-hall': {
- 'name': 'Test Hall',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.mtrl-sci': {
- 'name': 'Test Mtrl-Sci',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.soft': {
- 'name': 'Test Soft',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.stat-mech': {
- 'name': 'Test Mechanics',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.str-el': {
- 'name': 'Test Electrons',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
- 'test.supr-con': {
- 'name': 'Test Superconductivity',
- 'in_archive': 'test',
- 'is_active': False,
- 'is_general': False
- },
+#CATEGORY DATA
+CATEGORIES: Dict[str, Category] = {
+ "acc-phys": Category(
+ id="acc-phys",
+ full_name="Accelerator Physics",
+ is_active=False,
+ alt_name="physics.acc-ph",
+ in_archive="acc-phys",
+ is_general=False,
+ ),
+ "adap-org": Category(
+ id="adap-org",
+ full_name="Adaptation, Noise, and Self-Organizing Systems",
+ alt_name="nlin.AO",
+ is_active=False,
+ in_archive="adap-org",
+ is_general=False,
+ ),
+ "alg-geom": Category(
+ id="alg-geom",
+ full_name="Algebraic Geometry",
+ is_active=False,
+ alt_name="math.AG",
+ in_archive="alg-geom",
+ is_general=False,
+ ),
+ "ao-sci": Category(
+ id="ao-sci",
+ full_name="Atmospheric-Oceanic Sciences",
+ is_active=False,
+ alt_name="physics.ao-ph",
+ in_archive="ao-sci",
+ is_general=False,
+ ),
+ "astro-ph": Category(
+ id="astro-ph",
+ full_name="Astrophysics",
+ is_active=False,
+ in_archive="astro-ph",
+ is_general=False,
+ ),
+ "astro-ph.CO": Category(
+ id="astro-ph.CO",
+ full_name="Cosmology and Nongalactic Astrophysics",
+ is_active=True,
+ in_archive="astro-ph",
+ is_general=False,
+ description="Phenomenology of early universe, cosmic microwave background, cosmological parameters, primordial element abundances, extragalactic distance scale, large-scale structure of the universe. Groups, superclusters, voids, intergalactic medium. Particle astrophysics: dark energy, dark matter, baryogenesis, leptogenesis, inflationary models, reheating, monopoles, WIMPs, cosmic strings, primordial black holes, cosmological gravitational radiation",
+ ),
+ "astro-ph.EP": Category(
+ id="astro-ph.EP",
+ full_name="Earth and Planetary Astrophysics",
+ is_active=True,
+ in_archive="astro-ph",
+ is_general=False,
+ description="Interplanetary medium, planetary physics, planetary astrobiology, extrasolar planets, comets, asteroids, meteorites. Structure and formation of the solar system",
+ ),
+ "astro-ph.GA": Category(
+ id="astro-ph.GA",
+ full_name="Astrophysics of Galaxies",
+ is_active=True,
+ in_archive="astro-ph",
+ is_general=False,
+ description="Phenomena pertaining to galaxies or the Milky Way. Star clusters, HII regions and planetary nebulae, the interstellar medium, atomic and molecular clouds, dust. Stellar populations. Galactic structure, formation, dynamics. Galactic nuclei, bulges, disks, halo. Active Galactic Nuclei, supermassive black holes, quasars. Gravitational lens systems. The Milky Way and its contents",
+ ),
+ "astro-ph.HE": Category(
+ id="astro-ph.HE",
+ full_name="High Energy Astrophysical Phenomena",
+ is_active=True,
+ in_archive="astro-ph",
+ is_general=False,
+ description="Cosmic ray production, acceleration, propagation, detection. Gamma ray astronomy and bursts, X-rays, charged particles, supernovae and other explosive phenomena, stellar remnants and accretion systems, jets, microquasars, neutron stars, pulsars, black holes",
+ ),
+ "astro-ph.IM": Category(
+ id="astro-ph.IM",
+ full_name="Instrumentation and Methods for Astrophysics",
+ is_active=True,
+ in_archive="astro-ph",
+ is_general=False,
+ description="Detector and telescope design, experiment proposals. Laboratory Astrophysics. Methods for data analysis, statistical methods. Software, database design",
+ ),
+ "astro-ph.SR": Category(
+ id="astro-ph.SR",
+ full_name="Solar and Stellar Astrophysics",
+ is_active=True,
+ in_archive="astro-ph",
+ is_general=False,
+ description="White dwarfs, brown dwarfs, cataclysmic variables. Star formation and protostellar systems, stellar astrobiology, binary and multiple systems of stars, stellar evolution and structure, coronas. Central stars of planetary nebulae. Helioseismology, solar neutrinos, production and detection of gravitational radiation from stellar systems",
+ ),
+ "atom-ph": Category(
+ id="atom-ph",
+ full_name="Atomic, Molecular and Optical Physics",
+ is_active=False,
+ alt_name="physics.atom-ph",
+ in_archive="atom-ph",
+ is_general=False,
+ ),
+ "bayes-an": Category(
+ id="bayes-an",
+ full_name="Bayesian Analysis",
+ is_active=False,
+ alt_name="physics.data-an",
+ in_archive="bayes-an",
+ is_general=False,
+ ),
+ "chao-dyn": Category(
+ id="chao-dyn",
+ full_name="Chaotic Dynamics",
+ is_active=False,
+ alt_name="nlin.CD",
+ in_archive="chao-dyn",
+ is_general=False,
+ ),
+ "chem-ph": Category(
+ id="chem-ph",
+ full_name="Chemical Physics",
+ is_active=False,
+ alt_name="physics.chem-ph",
+ in_archive="chem-ph",
+ is_general=False,
+ ),
+ "cmp-lg": Category(
+ id="cmp-lg",
+ full_name="Computation and Language",
+ alt_name="cs.CL",
+ is_active=False,
+ in_archive="cmp-lg",
+ is_general=False,
+ ),
+ "comp-gas": Category(
+ id="comp-gas",
+ full_name="Cellular Automata and Lattice Gases",
+ is_active=False,
+ alt_name="nlin.CG",
+ in_archive="comp-gas",
+ is_general=False,
+ ),
+ "cond-mat": Category(
+ id="cond-mat",
+ full_name="Condensed Matter",
+ is_active=False,
+ in_archive="cond-mat",
+ is_general=False,
+ ),
+ "cond-mat.dis-nn": Category(
+ id="cond-mat.dis-nn",
+ full_name="Disordered Systems and Neural Networks",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Glasses and spin glasses; properties of random, aperiodic and quasiperiodic systems; transport in disordered media; localization; phenomena mediated by defects and disorder; neural networks",
+ ),
+ "cond-mat.mes-hall": Category(
+ id="cond-mat.mes-hall",
+ full_name="Mesoscale and Nanoscale Physics",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Semiconducting nanostructures: quantum dots, wires, and wells. Single electronics, spintronics, 2d electron gases, quantum Hall effect, nanotubes, graphene, plasmonic nanostructures",
+ ),
+ "cond-mat.mtrl-sci": Category(
+ id="cond-mat.mtrl-sci",
+ full_name="Materials Science",
+ is_active=True,
+ alt_name="mtrl-th",
+ in_archive="cond-mat",
+ is_general=False,
+ description="Techniques, synthesis, characterization, structure. Structural phase transitions, mechanical properties, phonons. Defects, adsorbates, interfaces",
+ ),
+ "cond-mat.other": Category(
+ id="cond-mat.other",
+ full_name="Other Condensed Matter",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Work in condensed matter that does not fit into the other cond-mat classifications",
+ ),
+ "cond-mat.quant-gas": Category(
+ id="cond-mat.quant-gas",
+ full_name="Quantum Gases",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Ultracold atomic and molecular gases, Bose-Einstein condensation, Feshbach resonances, spinor condensates, optical lattices, quantum simulation with cold atoms and molecules, macroscopic interference phenomena",
+ ),
+ "cond-mat.soft": Category(
+ id="cond-mat.soft",
+ full_name="Soft Condensed Matter",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Membranes, polymers, liquid crystals, glasses, colloids, granular matter",
+ ),
+ "cond-mat.stat-mech": Category(
+ id="cond-mat.stat-mech",
+ full_name="Statistical Mechanics",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Phase transitions, thermodynamics, field theory, non-equilibrium phenomena, renormalization group and scaling, integrable models, turbulence",
+ ),
+ "cond-mat.str-el": Category(
+ id="cond-mat.str-el",
+ full_name="Strongly Correlated Electrons",
+ is_active=True,
+ in_archive="cond-mat",
+ is_general=False,
+ description="Quantum magnetism, non-Fermi liquids, spin liquids, quantum criticality, charge density waves, metal-insulator transitions",
+ ),
+ "cond-mat.supr-con": Category(
+ id="cond-mat.supr-con",
+ full_name="Superconductivity",
+ is_active=True,
+ alt_name="supr-con",
+ in_archive="cond-mat",
+ is_general=False,
+ description="Superconductivity: theory, models, experiment. Superflow in helium",
+ ),
+ "cs.AI": Category(
+ id="cs.AI",
+ full_name="Artificial Intelligence",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all areas of AI except Vision, Robotics, Machine Learning, Multiagent Systems, and Computation and Language (Natural Language Processing), which have separate subject areas. In particular, includes Expert Systems, Theorem Proving (although this may overlap with Logic in Computer Science), Knowledge Representation, Planning, and Uncertainty in AI. Roughly includes material in ACM Subject Classes I.2.0, I.2.1, I.2.3, I.2.4, I.2.8, and I.2.11.",
+ ),
+ "cs.AR": Category(
+ id="cs.AR",
+ full_name="Hardware Architecture",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers systems organization and hardware architecture. Roughly includes material in ACM Subject Classes C.0, C.1, and C.5.",
+ ),
+ "cs.CC": Category(
+ id="cs.CC",
+ full_name="Computational Complexity",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers models of computation, complexity classes, structural complexity, complexity tradeoffs, upper and lower bounds. Roughly includes material in ACM Subject Classes F.1 (computation by abstract devices), F.2.3 (tradeoffs among complexity measures), and F.4.3 (formal languages), although some material in formal languages may be more appropriate for Logic in Computer Science. Some material in F.2.1 and F.2.2, may also be appropriate here, but is more likely to have Data Structures and Algorithms as the primary subject area.",
+ ),
+ "cs.CE": Category(
+ id="cs.CE",
+ full_name="Computational Engineering, Finance, and Science",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers applications of computer science to the mathematical modeling of complex systems in the fields of science, engineering, and finance. Papers here are interdisciplinary and applications-oriented, focusing on techniques and tools that enable challenging computational simulations to be performed, for which the use of supercomputers or distributed computing platforms is often required. Includes material in ACM Subject Classes J.2, J.3, and J.4 (economics).",
+ ),
+ "cs.CG": Category(
+ id="cs.CG",
+ full_name="Computational Geometry",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Roughly includes material in ACM Subject Classes I.3.5 and F.2.2.",
+ ),
+ "cs.CL": Category(
+ id="cs.CL",
+ full_name="Computation and Language",
+ is_active=True,
+ alt_name="cmp-lg",
+ in_archive="cs",
+ is_general=False,
+ description="Covers natural language processing. Roughly includes material in ACM Subject Class I.2.7. Note that work on artificial languages (programming languages, logics, formal systems) that does not explicitly address natural-language issues broadly construed (natural-language processing, computational linguistics, speech, text retrieval, etc.) is not appropriate for this area.",
+ ),
+ "cs.CR": Category(
+ id="cs.CR",
+ full_name="Cryptography and Security",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all areas of cryptography and security including authentication, public key cryptosytems, proof-carrying code, etc. Roughly includes material in ACM Subject Classes D.4.6 and E.3.",
+ ),
+ "cs.CV": Category(
+ id="cs.CV",
+ full_name="Computer Vision and Pattern Recognition",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers image processing, computer vision, pattern recognition, and scene understanding. Roughly includes material in ACM Subject Classes I.2.10, I.4, and I.5.",
+ ),
+ "cs.CY": Category(
+ id="cs.CY",
+ full_name="Computers and Society",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers impact of computers on society, computer ethics, information technology and public policy, legal aspects of computing, computers and education. Roughly includes material in ACM Subject Classes K.0, K.2, K.3, K.4, K.5, and K.7.",
+ ),
+ "cs.DB": Category(
+ id="cs.DB",
+ full_name="Databases",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers database management, datamining, and data processing. Roughly includes material in ACM Subject Classes E.2, E.5, H.0, H.2, and J.1.",
+ ),
+ "cs.DC": Category(
+ id="cs.DC",
+ full_name="Distributed, Parallel, and Cluster Computing",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers fault-tolerance, distributed algorithms, stabilility, parallel computation, and cluster computing. Roughly includes material in ACM Subject Classes C.1.2, C.1.4, C.2.4, D.1.3, D.4.5, D.4.7, E.1.",
+ ),
+ "cs.DL": Category(
+ id="cs.DL",
+ full_name="Digital Libraries",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all aspects of the digital library design and document and text creation. Note that there will be some overlap with Information Retrieval (which is a separate subject area). Roughly includes material in ACM Subject Classes H.3.5, H.3.6, H.3.7, I.7.",
+ ),
+ "cs.DM": Category(
+ id="cs.DM",
+ full_name="Discrete Mathematics",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers combinatorics, graph theory, applications of probability. Roughly includes material in ACM Subject Classes G.2 and G.3.",
+ ),
+ "cs.DS": Category(
+ id="cs.DS",
+ full_name="Data Structures and Algorithms",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers data structures and analysis of algorithms. Roughly includes material in ACM Subject Classes E.1, E.2, F.2.1, and F.2.2.",
+ ),
+ "cs.ET": Category(
+ id="cs.ET",
+ full_name="Emerging Technologies",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers approaches to information processing (computing, communication, sensing) and bio-chemical analysis based on alternatives to silicon CMOS-based technologies, such as nanoscale electronic, photonic, spin-based, superconducting, mechanical, bio-chemical and quantum technologies (this list is not exclusive). Topics of interest include (1) building blocks for emerging technologies, their scalability and adoption in larger systems, including integration with traditional technologies, (2) modeling, design and optimization of novel devices and systems, (3) models of computation, algorithm design and programming for emerging technologies.",
+ ),
+ "cs.FL": Category(
+ id="cs.FL",
+ full_name="Formal Languages and Automata Theory",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers automata theory, formal language theory, grammars, and combinatorics on words. This roughly corresponds to ACM Subject Classes F.1.1, and F.4.3. Papers dealing with computational complexity should go to cs.CC; papers dealing with logic should go to cs.LO.",
+ ),
+ "cs.GL": Category(
+ id="cs.GL",
+ full_name="General Literature",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers introductory material, survey material, predictions of future trends, biographies, and miscellaneous computer-science related material. Roughly includes all of ACM Subject Class A, except it does not include conference proceedings (which will be listed in the appropriate subject area).",
+ ),
+ "cs.GR": Category(
+ id="cs.GR",
+ full_name="Graphics",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all aspects of computer graphics. Roughly includes material in all of ACM Subject Class I.3, except that I.3.5 is is likely to have Computational Geometry as the primary subject area.",
+ ),
+ "cs.GT": Category(
+ id="cs.GT",
+ full_name="Computer Science and Game Theory",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all theoretical and applied aspects at the intersection of computer science and game theory, including work in mechanism design, learning in games (which may overlap with Learning), foundations of agent modeling in games (which may overlap with Multiagent systems), coordination, specification and formal methods for non-cooperative computational environments. The area also deals with applications of game theory to areas such as electronic commerce.",
+ ),
+ "cs.HC": Category(
+ id="cs.HC",
+ full_name="Human-Computer Interaction",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers human factors, user interfaces, and collaborative computing. Roughly includes material in ACM Subject Classes H.1.2 and all of H.5, except for H.5.1, which is more likely to have Multimedia as the primary subject area.",
+ ),
+ "cs.IR": Category(
+ id="cs.IR",
+ full_name="Information Retrieval",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers indexing, dictionaries, retrieval, content and analysis. Roughly includes material in ACM Subject Classes H.3.0, H.3.1, H.3.2, H.3.3, and H.3.4.",
+ ),
+ "cs.IT": Category(
+ id="cs.IT",
+ full_name="Information Theory",
+ is_active=True,
+ alt_name="math.IT",
+ in_archive="cs",
+ is_general=False,
+ description="Covers theoretical and experimental aspects of information theory and coding. Includes material in ACM Subject Class E.4 and intersects with H.1.1.",
+ ),
+ "cs.LG": Category(
+ id="cs.LG",
+ full_name="Machine Learning",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Papers on all aspects of machine learning research (supervised, unsupervised, reinforcement learning, bandit problems, and so on) including also robustness, explanation, fairness, and methodology. cs.LG is also an appropriate primary category for applications of machine learning methods.",
+ ),
+ "cs.LO": Category(
+ id="cs.LO",
+ full_name="Logic in Computer Science",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all aspects of logic in computer science, including finite model theory, logics of programs, modal logic, and program verification. Programming language semantics should have Programming Languages as the primary subject area. Roughly includes material in ACM Subject Classes D.2.4, F.3.1, F.4.0, F.4.1, and F.4.2; some material in F.4.3 (formal languages) may also be appropriate here, although Computational Complexity is typically the more appropriate subject area.",
+ ),
+ "cs.MA": Category(
+ id="cs.MA",
+ full_name="Multiagent Systems",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers multiagent systems, distributed artificial intelligence, intelligent agents, coordinated interactions. and practical applications. Roughly covers ACM Subject Class I.2.11.",
+ ),
+ "cs.MM": Category(
+ id="cs.MM",
+ full_name="Multimedia",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Roughly includes material in ACM Subject Class H.5.1.",
+ ),
+ "cs.MS": Category(
+ id="cs.MS",
+ full_name="Mathematical Software",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Roughly includes material in ACM Subject Class G.4.",
+ ),
+ "cs.NA": Category(
+ id="cs.NA",
+ full_name="Numerical Analysis",
+ is_active=True,
+ alt_name="math.NA",
+ in_archive="cs",
+ is_general=False,
+ description="cs.NA is an alias for math.NA. Roughly includes material in ACM Subject Class G.1.",
+ ),
+ "cs.NE": Category(
+ id="cs.NE",
+ full_name="Neural and Evolutionary Computing",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers neural networks, connectionism, genetic algorithms, artificial life, adaptive behavior. Roughly includes some material in ACM Subject Class C.1.3, I.2.6, I.5.",
+ ),
+ "cs.NI": Category(
+ id="cs.NI",
+ full_name="Networking and Internet Architecture",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all aspects of computer communication networks, including network architecture and design, network protocols, and internetwork standards (like TCP/IP). Also includes topics, such as web caching, that are directly relevant to Internet architecture and performance. Roughly includes all of ACM Subject Class C.2 except C.2.4, which is more likely to have Distributed, Parallel, and Cluster Computing as the primary subject area.",
+ ),
+ "cs.OH": Category(
+ id="cs.OH",
+ full_name="Other Computer Science",
+ is_active=True,
+ in_archive="cs",
+ is_general=True,
+ description="This is the classification to use for documents that do not fit anywhere else.",
+ ),
+ "cs.OS": Category(
+ id="cs.OS",
+ full_name="Operating Systems",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Roughly includes material in ACM Subject Classes D.4.1, D.4.2., D.4.3, D.4.4, D.4.5, D.4.7, and D.4.9.",
+ ),
+ "cs.PF": Category(
+ id="cs.PF",
+ full_name="Performance",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers performance measurement and evaluation, queueing, and simulation. Roughly includes material in ACM Subject Classes D.4.8 and K.6.2.",
+ ),
+ "cs.PL": Category(
+ id="cs.PL",
+ full_name="Programming Languages",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers programming language semantics, language features, programming approaches (such as object-oriented programming, functional programming, logic programming). Also includes material on compilers oriented towards programming languages; other material on compilers may be more appropriate in Architecture (AR). Roughly includes material in ACM Subject Classes D.1 and D.3.",
+ ),
+ "cs.RO": Category(
+ id="cs.RO",
+ full_name="Robotics",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Roughly includes material in ACM Subject Class I.2.9.",
+ ),
+ "cs.SC": Category(
+ id="cs.SC",
+ full_name="Symbolic Computation",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Roughly includes material in ACM Subject Class I.1.",
+ ),
+ "cs.SD": Category(
+ id="cs.SD",
+ full_name="Sound",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers all aspects of computing with sound, and sound as an information channel. Includes models of sound, analysis and synthesis, audio user interfaces, sonification of data, computer music, and sound signal processing. Includes ACM Subject Class H.5.5, and intersects with H.1.2, H.5.1, H.5.2, I.2.7, I.5.4, I.6.3, J.5, K.4.2.",
+ ),
+ "cs.SE": Category(
+ id="cs.SE",
+ full_name="Software Engineering",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers design tools, software metrics, testing and debugging, programming environments, etc. Roughly includes material in all of ACM Subject Classes D.2, except that D.2.4 (program verification) should probably have Logics in Computer Science as the primary subject area.",
+ ),
+ "cs.SI": Category(
+ id="cs.SI",
+ full_name="Social and Information Networks",
+ is_active=True,
+ in_archive="cs",
+ is_general=False,
+ description="Covers the design, analysis, and modeling of social and information networks, including their applications for on-line information access, communication, and interaction, and their roles as datasets in the exploration of questions in these and other domains, including connections to the social and biological sciences. Analysis and modeling of such networks includes topics in ACM Subject classes F.2, G.2, G.3, H.2, and I.2; applications in computing include topics in H.3, H.4, and H.5; and applications at the interface of computing and other disciplines include topics in J.1--J.7. Papers on computer communication systems and network protocols (e.g. TCP/IP) are generally a closer fit to the Networking and Internet Architecture (cs.NI) category.",
+ ),
+ "cs.SY": Category(
+ id="cs.SY",
+ full_name="Systems and Control",
+ is_active=True,
+ alt_name="eess.SY",
+ in_archive="cs",
+ is_general=False,
+ description="cs.SY is an alias for eess.SY. This section includes theoretical and experimental research covering all facets of automatic control systems. The section is focused on methods of control system analysis and design using tools of modeling, simulation and optimization. Specific areas of research include nonlinear, distributed, adaptive, stochastic and robust control in addition to hybrid and discrete event systems. Application areas include automotive and aerospace control systems, network control, biological systems, multiagent and cooperative control, robotics, reinforcement learning, sensor networks, control of cyber-physical and energy-related systems, and control of computing systems.",
+ ),
+ "dg-ga": Category(
+ id="dg-ga",
+ full_name="Differential Geometry",
+ is_active=False,
+ alt_name="math.DG",
+ in_archive="dg-ga",
+ is_general=False,
+ ),
+ "econ.EM": Category(
+ id="econ.EM",
+ full_name="Econometrics",
+ is_active=True,
+ in_archive="econ",
+ is_general=False,
+ description="Econometric Theory, Micro-Econometrics, Macro-Econometrics, Empirical Content of Economic Relations discovered via New Methods, Methodological Aspects of the Application of Statistical Inference to Economic Data.",
+ ),
+ "econ.GN": Category(
+ id="econ.GN",
+ full_name="General Economics",
+ is_active=True,
+ alt_name="q-fin.EC",
+ in_archive="econ",
+ is_general=True,
+ description="General methodological, applied, and empirical contributions to economics.",
+ ),
+ "econ.TH":Category(
+ id="econ.TH",
+ full_name="Theoretical Economics",
+ is_active=True,
+ in_archive="econ",
+ is_general=False,
+ description="Includes theoretical contributions to Contract Theory, Decision Theory, Game Theory, General Equilibrium, Growth, Learning and Evolution, Macroeconomics, Market and Mechanism Design, and Social Choice.",
+ ),
+ "eess.AS":Category(
+ id="eess.AS",
+ full_name="Audio and Speech Processing",
+ is_active=True,
+ in_archive="eess",
+ is_general=False,
+ description="Theory and methods for processing signals representing audio, speech, and language, and their applications. This includes analysis, synthesis, enhancement, transformation, classification and interpretation of such signals as well as the design, development, and evaluation of associated signal processing systems. Machine learning and pattern analysis applied to any of the above areas is also welcome. Specific topics of interest include: auditory modeling and hearing aids; acoustic beamforming and source localization; classification of acoustic scenes; speaker separation; active noise control and echo cancellation; enhancement; de-reverberation; bioacoustics; music signals analysis, synthesis and modification; music information retrieval; audio for multimedia and joint audio-video processing; spoken and written language modeling, segmentation, tagging, parsing, understanding, and translation; text mining; speech production, perception, and psychoacoustics; speech analysis, synthesis, and perceptual modeling and coding; robust speech recognition; speaker recognition and characterization; deep learning, online learning, and graphical models applied to speech, audio, and language signals; and implementation aspects ranging from system architecture to fast algorithms.",
+ ),
+ "eess.IV":Category(
+ id="eess.IV",
+ full_name="Image and Video Processing",
+ is_active=True,
+ in_archive="eess",
+ is_general=False,
+ description="Theory, algorithms, and architectures for the formation, capture, processing, communication, analysis, and display of images, video, and multidimensional signals in a wide variety of applications. Topics of interest include: mathematical, statistical, and perceptual image and video modeling and representation; linear and nonlinear filtering, de-blurring, enhancement, restoration, and reconstruction from degraded, low-resolution or tomographic data; lossless and lossy compression and coding; segmentation, alignment, and recognition; image rendering, visualization, and printing; computational imaging, including ultrasound, tomographic and magnetic resonance imaging; and image and video analysis, synthesis, storage, search and retrieval.",
+ ),
+ "eess.SP":Category(
+ id="eess.SP",
+ full_name="Signal Processing",
+ is_active=True,
+ in_archive="eess",
+ is_general=False,
+ description='Theory, algorithms, performance analysis and applications of signal and data analysis, including physical modeling, processing, detection and parameter estimation, learning, mining, retrieval, and information extraction. The term "signal" includes speech, audio, sonar, radar, geophysical, physiological, (bio-) medical, image, video, and multimodal natural and man-made signals, including communication signals and data. Topics of interest include: statistical signal processing, spectral estimation and system identification; filter design, adaptive filtering / stochastic learning; (compressive) sampling, sensing, and transform-domain methods including fast algorithms; signal processing for machine learning and machine learning for signal processing applications; in-network and graph signal processing; convex and nonconvex optimization methods for signal processing applications; radar, sonar, and sensor array beamforming and direction finding; communications signal processing; low power, multi-core and system-on-chip signal processing; sensing, communication, analysis and optimization for cyber-physical systems such as power grids and the Internet of Things.',
+ ),
+ "eess.SY":Category(
+ id="eess.SY",
+ full_name="Systems and Control",
+ is_active=True,
+ alt_name="cs.SY",
+ in_archive="eess",
+ is_general=False,
+ description="This section includes theoretical and experimental research covering all facets of automatic control systems. The section is focused on methods of control system analysis and design using tools of modeling, simulation and optimization. Specific areas of research include nonlinear, distributed, adaptive, stochastic and robust control in addition to hybrid and discrete event systems. Application areas include automotive and aerospace control systems, network control, biological systems, multiagent and cooperative control, robotics, reinforcement learning, sensor networks, control of cyber-physical and energy-related systems, and control of computing systems.",
+ ),
+ "funct-an":Category(
+ id="funct-an",
+ full_name="Functional Analysis",
+ is_active=False,
+ alt_name="math.FA",
+ in_archive="funct-an",
+ is_general=False,
+ ),
+ "gr-qc":Category(
+ id="gr-qc",
+ full_name="General Relativity and Quantum Cosmology",
+ is_active=True,
+ in_archive="gr-qc",
+ is_general=False,
+ description="General Relativity and Quantum Cosmology Areas of gravitational physics, including experiments and observations related to the detection and interpretation of gravitational waves, experimental tests of gravitational theories, computational general relativity, relativistic astrophysics, solutions to Einstein's equations and their properties, alternative theories of gravity, classical and quantum cosmology, and quantum gravity.",
+ ),
+ "hep-ex":Category(
+ id="hep-ex",
+ full_name="High Energy Physics - Experiment",
+ is_active=True,
+ in_archive="hep-ex",
+ is_general=False,
+ description="Results from high-energy/particle physics experiments and prospects for future experimental results, including tests of the standard model, measurements of standard model parameters, searches for physics beyond the standard model, and astroparticle physics experimental results. Does not include: detectors and instrumentation nor analysis methods to conduct experiments.",
+ ),
+ "hep-lat":Category(
+ id="hep-lat",
+ full_name="High Energy Physics - Lattice",
+ is_active=True,
+ in_archive="hep-lat",
+ is_general=False,
+ description="Lattice field theory. Phenomenology from lattice field theory. Algorithms for lattice field theory. Hardware for lattice field theory.",
+ ),
+ "hep-ph":Category(
+ id="hep-ph",
+ full_name="High Energy Physics - Phenomenology",
+ is_active=True,
+ in_archive="hep-ph",
+ is_general=False,
+ description="Theoretical particle physics and its interrelation with experiment. Prediction of particle physics observables: models, effective field theories, calculation techniques. Particle physics: analysis of theory through experimental results.",
+ ),
+ "hep-th":Category(
+ id="hep-th",
+ full_name="High Energy Physics - Theory",
+ is_active=True,
+ in_archive="hep-th",
+ is_general=False,
+ description="Formal aspects of quantum field theory. String theory, supersymmetry and supergravity.",
+ ),
+ "math-ph":Category(
+ id="math-ph",
+ full_name="Mathematical Physics",
+ is_active=True,
+ alt_name="math.MP",
+ in_archive="math-ph",
+ is_general=False,
+ description="Articles in this category focus on areas of research that illustrate the application of mathematics to problems in physics, develop mathematical methods for such applications, or provide mathematically rigorous formulations of existing physical theories. Submissions to math-ph should be of interest to both physically oriented mathematicians and mathematically oriented physicists; submissions which are primarily of interest to theoretical physicists or to mathematicians should probably be directed to the respective physics/math categories",
+ ),
+ "math.AC":Category(
+ id="math.AC",
+ full_name="Commutative Algebra",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Commutative rings, modules, ideals, homological algebra, computational aspects, invariant theory, connections to algebraic geometry and combinatorics",
+ ),
+ "math.AG":Category(
+ id="math.AG",
+ full_name="Algebraic Geometry",
+ is_active=True,
+ alt_name="alg-geom",
+ in_archive="math",
+ is_general=False,
+ description="Algebraic varieties, stacks, sheaves, schemes, moduli spaces, complex geometry, quantum cohomology",
+ ),
+ "math.AP":Category(
+ id="math.AP",
+ full_name="Analysis of PDEs",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Existence and uniqueness, boundary conditions, linear and non-linear operators, stability, soliton theory, integrable PDE's, conservation laws, qualitative dynamics",
+ ),
+ "math.AT":Category(
+ id="math.AT",
+ full_name="Algebraic Topology",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Homotopy theory, homological algebra, algebraic treatments of manifolds",
+ ),
+ "math.CA":Category(
+ id="math.CA",
+ full_name="Classical Analysis and ODEs",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Special functions, orthogonal polynomials, harmonic analysis, ODE's, differential relations, calculus of variations, approximations, expansions, asymptotics",
+ ),
+ "math.CO":Category(
+ id="math.CO",
+ full_name="Combinatorics",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Discrete mathematics, graph theory, enumeration, combinatorial optimization, Ramsey theory, combinatorial game theory",
+ ),
+ "math.CT":Category(
+ id="math.CT",
+ full_name="Category Theory",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Enriched categories, topoi, abelian categories, monoidal categories, homological algebra",
+ ),
+ "math.CV":Category(
+ id="math.CV",
+ full_name="Complex Variables",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Holomorphic functions, automorphic group actions and forms, pseudoconvexity, complex geometry, analytic spaces, analytic sheaves",
+ ),
+ "math.DG":Category(
+ id="math.DG",
+ full_name="Differential Geometry",
+ is_active=True,
+ alt_name="dg-ga",
+ in_archive="math",
+ is_general=False,
+ description="Complex, contact, Riemannian, pseudo-Riemannian and Finsler geometry, relativity, gauge theory, global analysis",
+ ),
+ "math.DS":Category(
+ id="math.DS",
+ full_name="Dynamical Systems",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Dynamics of differential equations and flows, mechanics, classical few-body problems, iterations, complex dynamics, delayed differential equations",
+ ),
+ "math.FA":Category(
+ id="math.FA",
+ full_name="Functional Analysis",
+ is_active=True,
+ alt_name="funct-an",
+ in_archive="math",
+ is_general=False,
+ description="Banach spaces, function spaces, real functions, integral transforms, theory of distributions, measure theory",
+ ),
+ "math.GM":Category(
+ id="math.GM",
+ full_name="General Mathematics",
+ is_active=True,
+ in_archive="math",
+ is_general=True,
+ description="Mathematical material of general interest, topics not covered elsewhere",
+ ),
+ "math.GN":Category(
+ id="math.GN",
+ full_name="General Topology",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Continuum theory, point-set topology, spaces with algebraic structure, foundations, dimension theory, local and global properties",
+ ),
+ "math.GR":Category(
+ id="math.GR",
+ full_name="Group Theory",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Finite groups, topological groups, representation theory, cohomology, classification and structure",
+ ),
+ "math.GT":Category(
+ id="math.GT",
+ full_name="Geometric Topology",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Manifolds, orbifolds, polyhedra, cell complexes, foliations, geometric structures",
+ ),
+ "math.HO":Category(
+ id="math.HO",
+ full_name="History and Overview",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Biographies, philosophy of mathematics, mathematics education, recreational mathematics, communication of mathematics, ethics in mathematics",
+ ),
+ "math.IT":Category(
+ id="math.IT",
+ full_name="Information Theory",
+ is_active=True,
+ alt_name="cs.IT",
+ in_archive="math",
+ is_general=False,
+ description="math.IT is an alias for cs.IT. Covers theoretical and experimental aspects of information theory and coding.",
+ ),
+ "math.KT":Category(
+ id="math.KT",
+ full_name="K-Theory and Homology",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Algebraic and topological K-theory, relations with topology, commutative algebra, and operator algebras",
+ ),
+ "math.LO":Category(
+ id="math.LO",
+ full_name="Logic",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Logic, set theory, point-set topology, formal mathematics",
+ ),
+ "math.MG":Category(
+ id="math.MG",
+ full_name="Metric Geometry",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Euclidean, hyperbolic, discrete, convex, coarse geometry, comparisons in Riemannian geometry, symmetric spaces",
+ ),
+ "math.MP":Category(
+ id="math.MP",
+ full_name="Mathematical Physics",
+ is_active=True,
+ alt_name="math-ph",
+ in_archive="math",
+ is_general=False,
+ description="math.MP is an alias for math-ph. Articles in this category focus on areas of research that illustrate the application of mathematics to problems in physics, develop mathematical methods for such applications, or provide mathematically rigorous formulations of existing physical theories. Submissions to math-ph should be of interest to both physically oriented mathematicians and mathematically oriented physicists; submissions which are primarily of interest to theoretical physicists or to mathematicians should probably be directed to the respective physics/math categories",
+ ),
+ "math.NA":Category(
+ id="math.NA",
+ full_name="Numerical Analysis",
+ is_active=True,
+ alt_name="cs.NA",
+ in_archive="math",
+ is_general=False,
+ description="Numerical algorithms for problems in analysis and algebra, scientific computation",
+ ),
+ "math.NT":Category(
+ id="math.NT",
+ full_name="Number Theory",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Prime numbers, diophantine equations, analytic number theory, algebraic number theory, arithmetic geometry, Galois theory",
+ ),
+ "math.OA":Category(
+ id="math.OA",
+ full_name="Operator Algebras",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Algebras of operators on Hilbert space, C^*-algebras, von Neumann algebras, non-commutative geometry",
+ ),
+ "math.OC":Category(
+ id="math.OC",
+ full_name="Optimization and Control",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Operations research, linear programming, control theory, systems theory, optimal control, game theory",
+ ),
+ "math.PR":Category(
+ id="math.PR",
+ full_name="Probability",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Theory and applications of probability and stochastic processes: e.g. central limit theorems, large deviations, stochastic differential equations, models from statistical mechanics, queuing theory",
+ ),
+ "math.QA":Category(
+ id="math.QA",
+ full_name="Quantum Algebra",
+ is_active=True,
+ alt_name="q-alg",
+ in_archive="math",
+ is_general=False,
+ description="Quantum groups, skein theories, operadic and diagrammatic algebra, quantum field theory",
+ ),
+ "math.RA":Category(
+ id="math.RA",
+ full_name="Rings and Algebras",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Non-commutative rings and algebras, non-associative algebras, universal algebra and lattice theory, linear algebra, semigroups",
+ ),
+ "math.RT":Category(
+ id="math.RT",
+ full_name="Representation Theory",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Linear representations of algebras and groups, Lie theory, associative algebras, multilinear algebra",
+ ),
+ "math.SG":Category(
+ id="math.SG",
+ full_name="Symplectic Geometry",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Hamiltonian systems, symplectic flows, classical integrable systems",
+ ),
+ "math.SP":Category(
+ id="math.SP",
+ full_name="Spectral Theory",
+ is_active=True,
+ in_archive="math",
+ is_general=False,
+ description="Schrodinger operators, operators on manifolds, general differential operators, numerical studies, integral operators, discrete models, resonances, non-self-adjoint operators, random operators/matrices",
+ ),
+ "math.ST":Category(
+ id="math.ST",
+ full_name="Statistics Theory",
+ is_active=True,
+ alt_name="stat.TH",
+ in_archive="math",
+ is_general=False,
+ description="Applied, computational and theoretical statistics: e.g. statistical inference, regression, time series, multivariate analysis, data analysis, Markov chain Monte Carlo, design of experiments, case studies",
+ ),
+ "mtrl-th":Category(
+ id="mtrl-th",
+ full_name="Materials Theory",
+ is_active=False,
+ alt_name="cond-mat.mtrl-sci",
+ in_archive="mtrl-th",
+ is_general=False,
+ ),
+ "nlin.AO":Category(
+ id="nlin.AO",
+ full_name="Adaptation and Self-Organizing Systems",
+ is_active=True,
+ alt_name="adap-org",
+ in_archive="nlin",
+ is_general=False,
+ description="Adaptation, self-organizing systems, statistical physics, fluctuating systems, stochastic processes, interacting particle systems, machine learning",
+ ),
+ "nlin.CD":Category(
+ id="nlin.CD",
+ full_name="Chaotic Dynamics",
+ is_active=True,
+ alt_name="chao-dyn",
+ in_archive="nlin",
+ is_general=False,
+ description="Dynamical systems, chaos, quantum chaos, topological dynamics, cycle expansions, turbulence, propagation",
+ ),
+ "nlin.CG":Category(
+ id="nlin.CG",
+ full_name="Cellular Automata and Lattice Gases",
+ is_active=True,
+ alt_name="comp-gas",
+ in_archive="nlin",
+ is_general=False,
+ description="Computational methods, time series analysis, signal processing, wavelets, lattice gases",
+ ),
+ "nlin.PS":Category(
+ id="nlin.PS",
+ full_name="Pattern Formation and Solitons",
+ is_active=True,
+ alt_name="patt-sol",
+ in_archive="nlin",
+ is_general=False,
+ description="Pattern formation, coherent structures, solitons",
+ ),
+ "nlin.SI":Category(
+ id="nlin.SI",
+ full_name="Exactly Solvable and Integrable Systems",
+ is_active=True,
+ alt_name="solv-int",
+ in_archive="nlin",
+ is_general=False,
+ description="Exactly solvable systems, integrable PDEs, integrable ODEs, Painleve analysis, integrable discrete maps, solvable lattice models, integrable quantum systems",
+ ),
+ "nucl-ex":Category(
+ id="nucl-ex",
+ full_name="Nuclear Experiment",
+ is_active=True,
+ in_archive="nucl-ex",
+ is_general=False,
+ description="Nuclear Experiment Results from experimental nuclear physics including the areas of fundamental interactions, measurements at low- and medium-energy, as well as relativistic heavy-ion collisions. Does not include: detectors and instrumentation nor analysis methods to conduct experiments; descriptions of experimental programs (present or future); comments on published results",
+ ),
+ "nucl-th":Category(
+ id="nucl-th",
+ full_name="Nuclear Theory",
+ is_active=True,
+ in_archive="nucl-th",
+ is_general=False,
+ description="Nuclear Theory Theory of nuclear structure covering wide area from models of hadron structure to neutron stars. Nuclear equation of states at different external conditions. Theory of nuclear reactions including heavy-ion reactions at low and high energies. It does not include problems of data analysis, physics of nuclear reactors, problems of safety, reactor construction",
+ ),
+ "patt-sol":Category(
+ id="patt-sol",
+ full_name="Pattern Formation and Solitons",
+ is_active=False,
+ alt_name="nlin.PS",
+ in_archive="patt-sol",
+ is_general=False,
+ ),
+ "physics.acc-ph":Category(
+ id="physics.acc-ph",
+ full_name="Accelerator Physics",
+ is_active=True,
+ alt_name="acc-phys",
+ in_archive="physics",
+ is_general=False,
+ description="Accelerator theory and simulation. Accelerator technology. Accelerator experiments. Beam Physics. Accelerator design and optimization. Advanced accelerator concepts. Radiation sources including synchrotron light sources and free electron lasers. Applications of accelerators.",
+ ),
+ "physics.ao-ph":Category(
+ id="physics.ao-ph",
+ full_name="Atmospheric and Oceanic Physics",
+ is_active=True,
+ alt_name="ao-sci",
+ in_archive="physics",
+ is_general=False,
+ description="Atmospheric and oceanic physics and physical chemistry, biogeophysics, and climate science",
+ ),
+ "physics.app-ph":Category(
+ id="physics.app-ph",
+ full_name="Applied Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Applications of physics to new technology, including electronic devices, optics, photonics, microwaves, spintronics, advanced materials, metamaterials, nanotechnology, and energy sciences.",
+ ),
+ "physics.atm-clus":Category(
+ id="physics.atm-clus",
+ full_name="Atomic and Molecular Clusters",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Atomic and molecular clusters, nanoparticles: geometric, electronic, optical, chemical, magnetic properties, shell structure, phase transitions, optical spectroscopy, mass spectrometry, photoelectron spectroscopy, ionization potential, electron affinity, interaction with intense light pulses, electron diffraction, light scattering, ab initio calculations, DFT theory, fragmentation, Coulomb explosion, hydrodynamic expansion.",
+ ),
+ "physics.atom-ph":Category(
+ id="physics.atom-ph",
+ full_name="Atomic Physics",
+ is_active=True,
+ alt_name="atom-ph",
+ in_archive="physics",
+ is_general=False,
+ description="Atomic and molecular structure, spectra, collisions, and data. Atoms and molecules in external fields. Molecular dynamics and coherent and optical control. Cold atoms and molecules. Cold collisions. Optical lattices.",
+ ),
+ "physics.bio-ph":Category(
+ id="physics.bio-ph",
+ full_name="Biological Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Molecular biophysics, cellular biophysics, neurological biophysics, membrane biophysics, single-molecule biophysics, ecological biophysics, quantum phenomena in biological systems (quantum biophysics), theoretical biophysics, molecular dynamics/modeling and simulation, game theory, biomechanics, bioinformatics, microorganisms, virology, evolution, biophysical methods.",
+ ),
+ "physics.chem-ph":Category(
+ id="physics.chem-ph",
+ full_name="Chemical Physics",
+ is_active=True,
+ alt_name="chem-ph",
+ in_archive="physics",
+ is_general=False,
+ description="Experimental, computational, and theoretical physics of atoms, molecules, and clusters - Classical and quantum description of states, processes, and dynamics; spectroscopy, electronic structure, conformations, reactions, interactions, and phases. Chemical thermodynamics. Disperse systems. High pressure chemistry. Solid state chemistry. Surface and interface chemistry.",
+ ),
+ "physics.class-ph":Category(
+ id="physics.class-ph",
+ full_name="Classical Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Newtonian and relativistic dynamics; many particle systems; planetary motions; chaos in classical dynamics. Maxwell's equations and dynamics of charged systems and electromagnetic forces in materials. Vibrating systems such as membranes and cantilevers; optomechanics. Classical waves, including acoustics and elasticity; physics of music and musical instruments. Classical thermodynamics and heat flow problems.",
+ ),
+ "physics.comp-ph":Category(
+ id="physics.comp-ph",
+ full_name="Computational Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="All aspects of computational science applied to physics.",
+ ),
+ "physics.data-an":Category(
+ id="physics.data-an",
+ full_name="Data Analysis, Statistics and Probability",
+ is_active=True,
+ alt_name="bayes-an",
+ in_archive="physics",
+ is_general=False,
+ description="Methods, software and hardware for physics data analysis: data processing and storage; measurement methodology; statistical and mathematical aspects such as parametrization and uncertainties.",
+ ),
+ "physics.ed-ph":Category(
+ id="physics.ed-ph",
+ full_name="Physics Education",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Report of results of a research study, laboratory experience, assessment or classroom practice that represents a way to improve teaching and learning in physics. Also, report on misconceptions of students, textbook errors, and other similar information relative to promoting physics understanding.",
+ ),
+ "physics.flu-dyn":Category(
+ id="physics.flu-dyn",
+ full_name="Fluid Dynamics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Turbulence, instabilities, incompressible/compressible flows, reacting flows. Aero/hydrodynamics, fluid-structure interactions, acoustics. Biological fluid dynamics, micro/nanofluidics, interfacial phenomena. Complex fluids, suspensions and granular flows, porous media flows. Geophysical flows, thermoconvective and stratified flows. Mathematical and computational methods for fluid dynamics, fluid flow models, experimental techniques.",
+ ),
+ "physics.gen-ph":Category(
+ id="physics.gen-ph",
+ full_name="General Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=True,
+ ),
+ "physics.geo-ph":Category(
+ id="physics.geo-ph",
+ full_name="Geophysics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Atmospheric physics. Biogeosciences. Computational geophysics. Geographic location. Geoinformatics. Geophysical techniques. Hydrospheric geophysics. Magnetospheric physics. Mathematical geophysics. Planetology. Solar system. Solid earth geophysics. Space plasma physics. Mineral physics. High pressure physics.",
+ ),
+ "physics.hist-ph":Category(
+ id="physics.hist-ph",
+ full_name="History and Philosophy of Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="History and philosophy of all branches of physics, astrophysics, and cosmology, including appreciations of physicists.",
+ ),
+ "physics.ins-det":Category(
+ id="physics.ins-det",
+ full_name="Instrumentation and Detectors",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Instrumentation and Detectors for research in natural science, including optical, molecular, atomic, nuclear and particle physics instrumentation and the associated electronics, services, infrastructure and control equipment. ",
+ ),
+ "physics.med-ph":Category(
+ id="physics.med-ph",
+ full_name="Medical Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Radiation therapy. Radiation dosimetry. Biomedical imaging modelling. Reconstruction, processing, and analysis. Biomedical system modelling and analysis. Health physics. New imaging or therapy modalities.",
+ ),
+ "physics.optics":Category(
+ id="physics.optics",
+ full_name="Optics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Adaptive optics. Astronomical optics. Atmospheric optics. Biomedical optics. Cardinal points. Collimation. Doppler effect. Fiber optics. Fourier optics. Geometrical optics (Gradient index optics. Holography. Infrared optics. Integrated optics. Laser applications. Laser optical systems. Lasers. Light amplification. Light diffraction. Luminescence. Microoptics. Nano optics. Ocean optics. Optical computing. Optical devices. Optical imaging. Optical materials. Optical metrology. Optical microscopy. Optical properties. Optical signal processing. Optical testing techniques. Optical wave propagation. Paraxial optics. Photoabsorption. Photoexcitations. Physical optics. Physiological optics. Quantum optics. Segmented optics. Spectra. Statistical optics. Surface optics. Ultrafast optics. Wave optics. X-ray optics.",
+ ),
+ "physics.plasm-ph":Category(
+ id="physics.plasm-ph",
+ full_name="Plasma Physics",
+ is_active=True,
+ alt_name="plasm-ph",
+ in_archive="physics",
+ is_general=False,
+ description="Fundamental plasma physics. Magnetically Confined Plasmas (includes magnetic fusion energy research). High Energy Density Plasmas (inertial confinement plasmas, laser-plasma interactions). Ionospheric, Heliophysical, and Astrophysical plasmas (includes sun and solar system plasmas). Lasers, Accelerators, and Radiation Generation. Low temperature plasmas and plasma applications (include dusty plasmas, semiconductor etching, plasma-based nanotechnology, medical applications). Plasma Diagnostics, Engineering and Enabling Technologies (includes fusion reactor design, heating systems, diagnostics, experimental techniques)",
+ ),
+ "physics.pop-ph":Category(
+ id="physics.pop-ph",
+ full_name="Popular Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ ),
+ "physics.soc-ph":Category(
+ id="physics.soc-ph",
+ full_name="Physics and Society",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Structure, dynamics and collective behavior of societies and groups (human or otherwise). Quantitative analysis of social networks and other complex networks. Physics and engineering of infrastructure and systems of broad societal impact (e.g., energy grids, transportation networks).",
+ ),
+ "physics.space-ph":Category(
+ id="physics.space-ph",
+ full_name="Space Physics",
+ is_active=True,
+ in_archive="physics",
+ is_general=False,
+ description="Space plasma physics. Heliophysics. Space weather. Planetary magnetospheres, ionospheres and magnetotail. Auroras. Interplanetary space. Cosmic rays. Synchrotron radiation. Radio astronomy.",
+ ),
+ "plasm-ph":Category(
+ id="plasm-ph",
+ full_name="Plasma Physics",
+ is_active=False,
+ alt_name="physics.plasm-ph",
+ in_archive="plasm-ph",
+ is_general=False,
+ ),
+ "q-alg":Category(
+ id="q-alg",
+ full_name="Quantum Algebra and Topology",
+ is_active=False,
+ alt_name="math.QA",
+ in_archive="q-alg",
+ is_general=False,
+ ),
+ "q-bio":Category(
+ id="q-bio",
+ full_name="Quantitative Biology",
+ is_active=False,
+ in_archive="q-bio",
+ is_general=False,
+ ),
+ "q-bio.BM":Category(
+ id="q-bio.BM",
+ full_name="Biomolecules",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="DNA, RNA, proteins, lipids, etc.; molecular structures and folding kinetics; molecular interactions; single-molecule manipulation.",
+ ),
+ "q-bio.CB":Category(
+ id="q-bio.CB",
+ full_name="Cell Behavior",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="Cell-cell signaling and interaction; morphogenesis and development; apoptosis; bacterial conjugation; viral-host interaction; immunology",
+ ),
+ "q-bio.GN":Category(
+ id="q-bio.GN",
+ full_name="Genomics",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="DNA sequencing and assembly; gene and motif finding; RNA editing and alternative splicing; genomic structure and processes (replication, transcription, methylation, etc); mutational processes.",
+ ),
+ "q-bio.MN":Category(
+ id="q-bio.MN",
+ full_name="Molecular Networks",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="Gene regulation, signal transduction, proteomics, metabolomics, gene and enzymatic networks",
+ ),
+ "q-bio.NC":Category(
+ id="q-bio.NC",
+ full_name="Neurons and Cognition",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="Synapse, cortex, neuronal dynamics, neural network, sensorimotor control, behavior, attention",
+ ),
+ "q-bio.OT":Category(
+ id="q-bio.OT",
+ full_name="Other Quantitative Biology",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=True,
+ description="Work in quantitative biology that does not fit into the other q-bio classifications",
+ ),
+ "q-bio.PE":Category(
+ id="q-bio.PE",
+ full_name="Populations and Evolution",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="Population dynamics, spatio-temporal and epidemiological models, dynamic speciation, co-evolution, biodiversity, foodwebs, aging; molecular evolution and phylogeny; directed evolution; origin of life",
+ ),
+ "q-bio.QM":Category(
+ id="q-bio.QM",
+ full_name="Quantitative Methods",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="All experimental, numerical, statistical and mathematical contributions of value to biology",
+ ),
+ "q-bio.SC":Category(
+ id="q-bio.SC",
+ full_name="Subcellular Processes",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="Assembly and control of subcellular structures (channels, organelles, cytoskeletons, capsules, etc.); molecular motors, transport, subcellular localization; mitosis and meiosis",
+ ),
+ "q-bio.TO":Category(
+ id="q-bio.TO",
+ full_name="Tissues and Organs",
+ is_active=True,
+ in_archive="q-bio",
+ is_general=False,
+ description="Blood flow in vessels, biomechanics of bones, electrical waves, endocrine system, tumor growth",
+ ),
+ "q-fin.CP":Category(
+ id="q-fin.CP",
+ full_name="Computational Finance",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Computational methods, including Monte Carlo, PDE, lattice and other numerical methods with applications to financial modeling",
+ ),
+ "q-fin.EC":Category(
+ id="q-fin.EC",
+ full_name="Economics",
+ is_active=True,
+ alt_name="econ.GN",
+ in_archive="q-fin",
+ is_general=False,
+ description="q-fin.EC is an alias for econ.GN. Economics, including micro and macro economics, international economics, theory of the firm, labor economics, and other economic topics outside finance",
+ ),
+ "q-fin.GN":Category(
+ id="q-fin.GN",
+ full_name="General Finance",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Development of general quantitative methodologies with applications in finance",
+ ),
+ "q-fin.MF":Category(
+ id="q-fin.MF",
+ full_name="Mathematical Finance",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Mathematical and analytical methods of finance, including stochastic, probabilistic and functional analysis, algebraic, geometric and other methods",
+ ),
+ "q-fin.PM":Category(
+ id="q-fin.PM",
+ full_name="Portfolio Management",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Security selection and optimization, capital allocation, investment strategies and performance measurement",
+ ),
+ "q-fin.PR":Category(
+ id="q-fin.PR",
+ full_name="Pricing of Securities",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Valuation and hedging of financial securities, their derivatives, and structured products",
+ ),
+ "q-fin.RM":Category(
+ id="q-fin.RM",
+ full_name="Risk Management",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Measurement and management of financial risks in trading, banking, insurance, corporate and other applications",
+ ),
+ "q-fin.ST":Category(
+ id="q-fin.ST",
+ full_name="Statistical Finance",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Statistical, econometric and econophysics analyses with applications to financial markets and economic data",
+ ),
+ "q-fin.TR":Category(
+ id="q-fin.TR",
+ full_name="Trading and Market Microstructure",
+ is_active=True,
+ in_archive="q-fin",
+ is_general=False,
+ description="Market microstructure, liquidity, exchange and auction design, automated trading, agent-based modeling and market-making",
+ ),
+ "quant-ph":Category(
+ id="quant-ph",
+ full_name="Quantum Physics",
+ is_active=True,
+ in_archive="quant-ph",
+ is_general=False,
+ ),
+ "solv-int":Category(
+ id="solv-int",
+ full_name="Exactly Solvable and Integrable Systems",
+ is_active=False,
+ alt_name="nlin.SI",
+ in_archive="solv-int",
+ is_general=False,
+ ),
+ "stat.AP":Category(
+ id="stat.AP",
+ full_name="Applications",
+ is_active=True,
+ in_archive="stat",
+ is_general=False,
+ description="Biology, Education, Epidemiology, Engineering, Environmental Sciences, Medical, Physical Sciences, Quality Control, Social Sciences",
+ ),
+ "stat.CO":Category(
+ id="stat.CO",
+ full_name="Computation",
+ is_active=True,
+ in_archive="stat",
+ is_general=False,
+ description="Algorithms, Simulation, Visualization",
+ ),
+ "stat.ME":Category(
+ id="stat.ME",
+ full_name="Methodology",
+ is_active=True,
+ in_archive="stat",
+ is_general=False,
+ description="Design, Surveys, Model Selection, Multiple Testing, Multivariate Methods, Signal and Image Processing, Time Series, Smoothing, Spatial Statistics, Survival Analysis, Nonparametric and Semiparametric Methods",
+ ),
+ "stat.ML":Category(
+ id="stat.ML",
+ full_name="Machine Learning",
+ is_active=True,
+ in_archive="stat",
+ is_general=False,
+ description="Covers machine learning papers (supervised, unsupervised, semi-supervised learning, graphical models, reinforcement learning, bandits, high dimensional inference, etc.) with a statistical or theoretical grounding",
+ ),
+ "stat.OT":Category(
+ id="stat.OT",
+ full_name="Other Statistics",
+ is_active=True,
+ in_archive="stat",
+ is_general=False,
+ description="Work in statistics that does not fit into the other stat classifications",
+ ),
+ "stat.TH":Category(
+ id="stat.TH",
+ full_name="Statistics Theory",
+ is_active=True,
+ alt_name="math.ST",
+ in_archive="stat",
+ is_general=False,
+ description="stat.TH is an alias for math.ST. Asymptotics, Bayesian Inference, Decision Theory, Estimation, Foundations, Inference, Testing.",
+ ),
+ "supr-con":Category(
+ id="supr-con",
+ full_name="Superconductivity",
+ is_active=False,
+ alt_name="cond-mat.supr-con",
+ in_archive="supr-con",
+ is_general=False,
+ ),
+ "test":Category(
+ id="test",
+ full_name="Test",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.dis-nn":Category(
+ id="test.dis-nn",
+ full_name="Test Disruptive Networks",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.mes-hall":Category(
+ id="test.mes-hall",
+ full_name="Test Hall",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.mtrl-sci":Category(
+ id="test.mtrl-sci",
+ full_name="Test Mtrl-Sci",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.soft":Category(
+ id="test.soft",
+ full_name="Test Soft",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.stat-mech":Category(
+ id="test.stat-mech",
+ full_name="Test Mechanics",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.str-el":Category(
+ id="test.str-el",
+ full_name="Test Electrons",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ ),
+ "test.supr-con":Category(
+ id="test.supr-con",
+ full_name="Test Superconductivity",
+ is_active=False,
+ in_archive="test",
+ is_general=False,
+ )
}
-CATEGORIES_ACTIVE = {key: value for key, value in CATEGORIES.items()
- if 'is_active' in CATEGORIES[key] and
- CATEGORIES[key]['is_active']}
+CATEGORIES_ACTIVE = {key: cat for key, cat in CATEGORIES.items()
+ if cat.is_active}
CATEGORY_ALIASES = {
'math.MP': 'math-ph',
@@ -2194,8 +1943,8 @@ class tCategory(TypedDict):
}
"""
Equivalences: category alias: canonical category
-
+The name on the right is considered the canonical one
This model is based on the notion that only two categories may be
equivalent--not more. There would have to be some significant changes
-to the (classic) code to support three-way equivalences.
+to the (classic) code to support three-way equivalences, this code could upgrade to a list of alternate names.
"""
diff --git a/arxiv/taxonomy/taxonomy_test.py b/arxiv/taxonomy/taxonomy_test.py
new file mode 100644
index 000000000..c90bb737c
--- /dev/null
+++ b/arxiv/taxonomy/taxonomy_test.py
@@ -0,0 +1,154 @@
+"""Tests for arXiv taxonomy module."""
+from unittest import TestCase
+from datetime import date
+from typing import Union
+
+from arxiv.taxonomy.definitions import GROUPS, ARCHIVES, \
+ ARCHIVES_ACTIVE, CATEGORIES, ARCHIVES_SUBSUMED, \
+ LEGACY_ARCHIVE_AS_PRIMARY, LEGACY_ARCHIVE_AS_SECONDARY, CATEGORY_ALIASES, CATEGORIES_ACTIVE
+from arxiv.taxonomy.category import Category, Archive, Group
+
+
+class TestTaxonomy(TestCase):
+ """Tests for the arXiv category taxonomy definitions."""
+
+ def test_groups(self):
+ """Tests for the highest level of the category taxonomy (groups)."""
+ for key, value in GROUPS.items():
+ self.assertRegex(key, r'^grp_[a-z\-_]+$', "group name format is correct")
+ self.assertIsInstance(value.id, str, 'id is a str')
+ self.assertIsInstance(value.start_year, int, 'start_year is an integer')
+ self.assertGreater(value.start_year, 1990, 'start_year > 1990')
+ if value.default_archive:
+ self.assertIn(
+ value.default_archive,
+ ARCHIVES,
+ f'default_archive {value.default_archive} is not a valid archive for group {value}'
+ )
+ self.assertIsInstance(value.full_name, str)
+ self.assertIsInstance(value.canonical_id, str)
+ self.assertIn(value.canonical_id,GROUPS.keys(), "all groups currently cannonical for themselves")
+ self.assertIsInstance(value.display(), str)
+
+ archives=value.get_archives(True)
+ self.assertGreater(len(archives),0,"group contains archives")
+ self.assertTrue(all(isinstance(item, Archive) for item in archives), "archives fetched are Archive")
+ active_archives=value.get_archives()
+ self.assertGreaterEqual(len(archives),len(active_archives),"all archives equal or outnumber active archvies")
+ self.assertTrue(all(item.is_active for item in active_archives), "only fetched active archives")
+
+ def test_archives(self):
+ """Tests for the middle level of the category taxonomy (archives)."""
+ for key, value in ARCHIVES.items():
+ self.assertIsInstance(value.id, str, 'id is a str')
+ self.assertIsInstance(value.full_name, str, 'full_name is a str')
+ self.assertIsInstance(value.start_date, date)
+ self.assertGreaterEqual(value.start_date, date(1991, 8, 1))
+ if value.end_date:
+ self.assertIsInstance(value.end_date, date)
+ self.assertGreater(
+ value.end_date,
+ value.start_date,
+ 'end_date greater than start_date'
+ )
+ self.assertIsInstance(value.display(), str)
+ self.assertIsInstance(value.canonical_id, str)
+ self.assertIsInstance(value.get_canonical(), Union[Archive, Category], "cannonical name either the archive or a category")
+
+ cats=value.get_categories(True)
+ self.assertTrue(all(isinstance(item, Category) for item in cats), "categories fetched are Category")
+ active_cats=value.get_categories()
+ self.assertGreaterEqual(len(cats),len(active_cats),"all categories equal or outnumber active categories")
+ self.assertTrue(all(item.is_active for item in active_cats), "only fetched active categories")
+
+ self.assertIsInstance(value.in_group, str, 'in_group is a str')
+ self.assertIn(value.in_group, GROUPS.keys(), f'{value.in_group} is a valid group')
+ self.assertIsInstance(value.get_group(), Group, "fetches group object")
+ self.assertEqual(value.in_group, value.get_group().id, "in_group and get_group point to same group")
+ if value.alt_name:
+ self.assertIn(key, list(ARCHIVES_SUBSUMED.keys())+list(CATEGORY_ALIASES.keys())+list(CATEGORY_ALIASES.values()), "alternate names are recorded")
+
+ def test_active_archives(self):
+ """Tests for active (non-defunct) archives."""
+ for key, value in ARCHIVES_ACTIVE.items():
+ self.assertFalse(value.end_date)
+
+ def test_archives_subsumed(self):
+ """Tests for defunct archives that have been subsumed by categories."""
+ for key, value in ARCHIVES_SUBSUMED.items():
+ self.assertIn(key, ARCHIVES.keys(), '{} is a valid archive'.format(key))
+ subsumed=ARCHIVES[key]
+ self.assertIsInstance(subsumed.end_date,date,"is a defunct archive")
+ self.assertIn(
+ value,
+ CATEGORIES.keys(),
+ '{} is a valid category'.format(value)
+ )
+ subsuming_cat=subsumed.get_canonical()
+ self.assertIsInstance(subsuming_cat, Category, "canonical version of subsumed archive is category")
+ self.assertFalse(subsuming_cat.get_archive().end_date, '{} is not in a defunct archive'.format(value))
+ self.assertEqual(subsumed.canonical_id, value, f"canonical of archive {subsumed.canonical_id} is subsuming category {value}")
+ self.assertEqual(subsumed.alt_name, value, "subsumed archive knows its pair")
+ self.assertEqual(subsuming_cat.alt_name, key, "subsuming category knows its old archive")
+ self.assertEqual(subsuming_cat.display(True), subsuming_cat.display(False), "display string always the same for canonical name")
+ self.assertNotEqual(subsumed.display(True), subsumed.display(False), "display has different text for canonincal and non canonical options")
+
+ def test_legacy_archives_as_categories(self):
+ """Test for archives that were used as primary/secondary categories."""
+ for key, value in LEGACY_ARCHIVE_AS_PRIMARY.items():
+ self.assertIn(key, ARCHIVES.keys(), '{} is a valid archive'.format(key))
+ self.assertIsInstance(value, date)
+
+ for key, value in LEGACY_ARCHIVE_AS_SECONDARY.items():
+ self.assertIn(key, ARCHIVES.keys(), '{} is a valid archive'.format(key))
+ self.assertIsInstance(value, date)
+
+ def test_categories(self):
+ """Test for the lowest level of the category taxonomy (categories)."""
+ for key, value in CATEGORIES.items():
+ self.assertIsInstance(value.id, str, 'id is a str')
+ self.assertIsInstance(value.full_name, str, 'full_name is a str')
+ self.assertIsInstance(value.is_active, bool, 'is active is bool')
+
+ self.assertIsInstance(value.in_archive, str, 'in_archive is a str')
+ self.assertIn(value.in_archive, ARCHIVES.keys(), f'{value.in_archive} is a valid archive')
+ parent=value.get_archive()
+ self.assertIsInstance(parent, Archive, "fetches Archive object")
+ self.assertEqual(value.in_archive, parent.id, "in_archive and get_archive point to same archive")
+ self.assertIsInstance(value.canonical_id, str, "cannonical id is string")
+ self.assertIsInstance(value.get_canonical(), Category, "cannonical version is category")
+ self.assertEqual(value.canonical_id,value.get_canonical().id)
+ self.assertIsInstance(value.display(), str, "display test is string")
+
+ if value.alt_name:
+ self.assertIn(key, list(ARCHIVES_SUBSUMED.keys())+list(ARCHIVES_SUBSUMED.values())+list(CATEGORY_ALIASES.values())+list(CATEGORY_ALIASES.keys()), "alternate names are recorded")
+
+ def test_active_categories(self):
+ """Tests for active (non-defunct) categories."""
+ for key, value in CATEGORIES_ACTIVE.items():
+ self.assertTrue(value.get_archive().is_active,"category in active archive")
+ self.assertFalse(value.get_archive().end_date)
+
+ def test_aliases(self):
+ """Test for category aliases. (value is the canonical name)"""
+ for key, value in CATEGORY_ALIASES.items():
+ self.assertNotEqual(key, value,
+ 'alias should be different from canonical')
+ self.assertIn(key, CATEGORIES.keys())
+ self.assertIn(value, CATEGORIES.keys())
+ canon=CATEGORIES[value]
+ not_canon=CATEGORIES[key]
+ self.assertIn(f'{key} is an alias for {value}.',
+ not_canon.description,
+ 'Category description for an alias should indicate '
+ 'that it is an alias for some other category')
+
+ self.assertEqual(canon.id, canon.canonical_id, "canonical category is canonical")
+ self.assertNotEqual(not_canon.id, not_canon.canonical_id, "non-canonical category is not canonical")
+ self.assertEqual(canon.id, not_canon.canonical_id, "alias knows its canonical category")
+ self.assertEqual(canon, not_canon.get_canonical(), "alias knows its canonical category")
+ self.assertEqual(not_canon.alt_name, canon.id, "alias knows its pair")
+ self.assertEqual(canon.alt_name, not_canon.id, "alias knows its pair")
+ self.assertEqual(canon.display(True), canon.display(False), "display string always the same for canonical name")
+ self.assertNotEqual(not_canon.display(True), not_canon.display(False), "display has different text for canonincal and non canonical options")
+
diff --git a/arxiv/taxonomy/tests.py b/arxiv/taxonomy/tests.py
deleted file mode 100644
index 699ac790f..000000000
--- a/arxiv/taxonomy/tests.py
+++ /dev/null
@@ -1,161 +0,0 @@
-"""Tests for arXiv taxonomy module."""
-from unittest import TestCase
-from datetime import date
-from .definitions import GROUPS, ARCHIVES, \
- ARCHIVES_ACTIVE, CATEGORIES, ARCHIVES_SUBSUMED, \
- LEGACY_ARCHIVE_AS_PRIMARY, LEGACY_ARCHIVE_AS_SECONDARY, CATEGORY_ALIASES
-from .category import Category, Archive, Group
-
-
-class TestTaxonomy(TestCase):
- """Tests for the arXiv category taxonomy definitions."""
-
- def test_groups(self):
- """Tests for the highest level of the category taxonomy (groups)."""
- for key, value in GROUPS.items():
- self.assertRegexpMatches(key, r'^grp_[a-z\-_]+$')
- self.assertIn('name', value, 'name defined for {}'.format(key))
- self.assertIsInstance(value['name'], str, 'name is a str')
- self.assertIn(
- 'start_year', value, 'start_year defined for {}'.format(key))
- self.assertIsInstance(
- value['start_year'], int, 'start_year is an integer')
- self.assertGreater(value['start_year'],
- 1990, 'start_year > 1990')
- if 'default_archive' in value:
- self.assertIn(
- value['default_archive'],
- ARCHIVES,
- 'default_archive {} is a valid archive'.format(
- value['default_archive'])
- )
-
- group = Group(key)
- self.assertIsInstance(group.name, str)
- self.assertIsInstance(group.canonical, Category)
- self.assertIsInstance(group.display, str)
- self.assertIsInstance(group.unalias(), Category)
-
- def test_archives(self):
- """Tests for the middle level of the category taxonomy (archives)."""
- for key, value in ARCHIVES.items():
- self.assertIn('name', value, 'name defined for {}'.format(key))
- self.assertIsInstance(value['name'], str, 'name is a str')
- self.assertIn('in_group', value,
- 'in_group defined for {}'.format(key))
- self.assertIn(value['in_group'], GROUPS,
- '{} is a valid group'.format(value['in_group']))
- self.assertIn('start_date', value,
- 'start_date defined for {}'.format(key))
- # start_dt = datetime.strptime(value['start_date'], '%Y-%m')
- self.assertIsInstance(value['start_date'], date)
- self.assertGreaterEqual(value['start_date'], date(1991, 8, 1))
- if 'end_date' in value:
- # end_dt = datetime.strptime(value['end_date'], '%Y-%m')
- self.assertIsInstance(value['end_date'], date)
- self.assertGreater(
- value['end_date'],
- value['start_date'],
- 'end_date greater than start_date'
- )
-
- archive = Archive(key)
- self.assertIsInstance(archive.name, str)
- self.assertIsInstance(archive.canonical, Category)
- self.assertIsInstance(archive.display, str)
- self.assertIsInstance(archive.unalias(), Category)
-
- def test_active_archives(self):
- """Tests for active (non-defunct) archives."""
- for key, value in ARCHIVES_ACTIVE.items():
- self.assertNotIn('end_date', value)
-
- archive = Archive(key)
- self.assertIsInstance(archive.name, str)
- self.assertIsInstance(archive.canonical, Category)
- self.assertIsInstance(archive.display, str)
- self.assertIsInstance(archive.unalias(), Category)
-
- def test_archives_subsumed(self):
- """Tests for defunct archives that have been subsumed by categories."""
- for key, value in ARCHIVES_SUBSUMED.items():
- self.assertIn(key, ARCHIVES, '{} is a valid archive'.format(key))
- self.assertIn(
- 'end_date',
- ARCHIVES[key],
- '{} is a defunct archive'.format(key)
- )
- self.assertIn(
- value,
- CATEGORIES,
- '{} is a valid category'.format(value)
- )
- self.assertNotIn(
- 'end_date',
- ARCHIVES[CATEGORIES[value]['in_archive']],
- '{} is not in a defunct archive'.format(value)
- )
- archive = Archive(key)
- self.assertIsInstance(archive.name, str)
- self.assertIsInstance(archive.canonical, Category)
- self.assertIsInstance(archive.display, str)
- self.assertIsInstance(archive.unalias(), Category)
-
- def test_legacy_archives_as_categories(self):
- """Test for archives that were used as primary/secondary categories."""
- for key, value in LEGACY_ARCHIVE_AS_PRIMARY.items():
- self.assertIn(key, ARCHIVES, '{} is a valid archive'.format(key))
- # dt = datetime.strptime(value, '%Y-%m')
- self.assertIsInstance(value, date)
-
- archive = Archive(key)
- self.assertIsInstance(archive.name, str)
- self.assertIsInstance(archive.canonical, Category)
- self.assertIsInstance(archive.display, str)
- self.assertIsInstance(archive.unalias(), Category)
-
- for key, value in LEGACY_ARCHIVE_AS_SECONDARY.items():
- self.assertIn(key, ARCHIVES, '{} is a valid archive'.format(key))
- # dt = datetime.strptime(value, '%Y-%m')
- self.assertIsInstance(value, date)
-
- archive = Archive(key)
- self.assertIsInstance(archive.name, str)
- self.assertIsInstance(archive.canonical, Category)
- self.assertIsInstance(archive.display, str)
- self.assertIsInstance(archive.unalias(), Category)
-
- def test_categories(self):
- """Test for the lowest level of the category taxonomy (categories)."""
- for key, value in CATEGORIES.items():
- self.assertIn('name', value, 'name defined for {}'.format(key))
- self.assertIsInstance(value['name'], str, 'name is a str')
- self.assertIn('in_archive', value,
- 'in_archive defined for {}'.format(key))
- self.assertIn(value['in_archive'], ARCHIVES,
- '{} is a valid archive'.format(value['in_archive']))
- self.assertIn('is_active', value),
- self.assertIsInstance(value['is_active'], bool)
-
- category = Category(key)
- self.assertIsInstance(category.name, str)
- self.assertIsInstance(category.canonical, Category)
- self.assertIsInstance(category.display, str)
- self.assertIsInstance(category.unalias(), Category)
-
- def test_aliases(self):
- """Test for category aliases."""
- for key, value in CATEGORY_ALIASES.items():
- self.assertNotEqual(key, value,
- 'alias should be different from canonical')
- self.assertIn(key, CATEGORIES)
- self.assertIn(value, CATEGORIES)
-
- self.assertIn(f'{key} is an alias for {value}.',
- CATEGORIES[key]['description'],
- 'Category description for an alias should indicate '
- 'that it is an alias for some other category')
-
- category = Category(key)
- self.assertIsInstance(category.unalias(), Category)
- self.assertNotEqual(category.unalias(), category)
diff --git a/fourohfour/tests.py b/fourohfour/test_404.py
similarity index 100%
rename from fourohfour/tests.py
rename to fourohfour/test_404.py
diff --git a/poetry.lock b/poetry.lock
index 83660ef06..ec685bf5e 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand.
[[package]]
name = "alabaster"
@@ -245,26 +245,6 @@ files = [
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
-[[package]]
-name = "cloudpathlib"
-version = "0.18.1"
-description = "pathlib-style classes for cloud storage services."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "cloudpathlib-0.18.1-py3-none-any.whl", hash = "sha256:20efd5d772c75df91bb2ac52e053be53fd9000f5e9755fd92375a2a9fe6005e0"},
- {file = "cloudpathlib-0.18.1.tar.gz", hash = "sha256:ffd22f324bfbf9c3f2bc1bec6e8372cb372a0feef17c7f2b48030cd6810ea859"},
-]
-
-[package.dependencies]
-google-cloud-storage = {version = "*", optional = true, markers = "extra == \"gs\""}
-
-[package.extras]
-all = ["cloudpathlib[azure]", "cloudpathlib[gs]", "cloudpathlib[s3]"]
-azure = ["azure-storage-blob (>=12)"]
-gs = ["google-cloud-storage"]
-s3 = ["boto3"]
-
[[package]]
name = "colorama"
version = "0.4.6"
@@ -1290,21 +1270,6 @@ files = [
plugins = ["importlib-metadata"]
windows-terminal = ["colorama (>=0.4.6)"]
-[[package]]
-name = "pymysql"
-version = "1.1.0"
-description = "Pure Python MySQL Driver"
-optional = true
-python-versions = ">=3.7"
-files = [
- {file = "PyMySQL-1.1.0-py3-none-any.whl", hash = "sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7"},
- {file = "PyMySQL-1.1.0.tar.gz", hash = "sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96"},
-]
-
-[package.extras]
-ed25519 = ["PyNaCl (>=1.4.0)"]
-rsa = ["cryptography"]
-
[[package]]
name = "pytest"
version = "7.4.3"
@@ -1774,6 +1739,17 @@ secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
zstd = ["zstandard (>=0.18.0)"]
+[[package]]
+name = "validators"
+version = "0.23.1"
+description = "Python Data Validation for Humans™"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "validators-0.23.1-py3-none-any.whl", hash = "sha256:e812ad5c0a80e44ed81bf01e42da2435705988131b83add5c9204f781cb9a4fa"},
+ {file = "validators-0.23.1.tar.gz", hash = "sha256:106d8ca7e4516d0c77e1b7c112723834dbf39e4abdbfca2574ff7cf183db1786"},
+]
+
[[package]]
name = "webencodings"
version = "0.5.1"
@@ -1819,10 +1795,7 @@ markupsafe = "*"
[package.extras]
email = ["email-validator"]
-[extras]
-mysql = ["PyMySQL", "sqlalchemy"]
-
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
-content-hash = "8e182285808978adf515e9548d01da170c2437150db823d01cb50b6d57d5b3d6"
+content-hash = "5dcbc0d2ebe8712815642b782dc6ef696bf2a91f7e05734c151b13b3f115a5b5"
diff --git a/pyproject.toml b/pyproject.toml
index e64da4671..1e6763a48 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,12 +28,11 @@ markupsafe = "*"
google-cloud-storage = "^2.5.0"
google-cloud-logging = "^3.8.0"
google-cloud-pubsub = "^2.18.4"
-PyMySQL = { version = "~=1.1", optional= true}
sqlalchemy = "~=2.0.27"
google-auth = "^2.23.4"
google-cloud-monitoring = "^2.16.0"
fire = "^0.5.0"
-cloudpathlib = {extras = ["gs"], version = "*"}
+validators = "*"
[tool.poetry.dev-dependencies]
pydocstyle = "*"
@@ -44,12 +43,8 @@ hypothesis = "*"
sphinx = "*"
sphinxcontrib-websupport = "*"
sphinx-autodoc-typehints = "*"
-mypy-extensions = "*"
click = "*"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
-
-[tool.poetry.extras]
-mysql = ["PyMySQL", "SqlAlchemy"]