aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornatsuoto <[email protected]>2026-07-11 16:02:30 +0530
committernatsuoto <[email protected]>2026-07-11 16:02:30 +0530
commit76be07d4429ebbe6b629e79b04db123f44482b32 (patch)
tree5c673e2436f4f7182b52146c679f0754e161e37f
parent99d903fc48900adad28709ef27b2f51211c77007 (diff)
downloadedify-76be07d4429ebbe6b629e79b04db123f44482b32.tar.xz
edify-76be07d4429ebbe6b629e79b04db123f44482b32.zip
feat(library): 12 patterns across transport/publishing/product/medical categories
-rw-r--r--edify/library/medical/__init__.py2
-rw-r--r--edify/library/medical/medical.py12
-rw-r--r--edify/library/product/__init__.py4
-rw-r--r--edify/library/product/barcode.py5
-rw-r--r--edify/library/product/gtin.py5
-rw-r--r--edify/library/product/mpn.py5
-rw-r--r--edify/library/publishing/__init__.py7
-rw-r--r--edify/library/publishing/arxiv.py7
-rw-r--r--edify/library/publishing/doi.py5
-rw-r--r--edify/library/publishing/isbn.py5
-rw-r--r--edify/library/publishing/issn.py5
-rw-r--r--edify/library/publishing/pmc.py5
-rw-r--r--edify/library/publishing/pmid.py5
-rw-r--r--edify/library/transport/__init__.py3
-rw-r--r--edify/library/transport/aircraft.py5
-rw-r--r--edify/library/transport/vehicle.py5
16 files changed, 85 insertions, 0 deletions
diff --git a/edify/library/medical/__init__.py b/edify/library/medical/__init__.py
new file mode 100644
index 0000000..914507f
--- /dev/null
+++ b/edify/library/medical/__init__.py
@@ -0,0 +1,2 @@
+from edify.library.medical.medical import medical
+__all__ = ["medical"]
diff --git a/edify/library/medical/medical.py b/edify/library/medical/medical.py
new file mode 100644
index 0000000..67840f1
--- /dev/null
+++ b/edify/library/medical/medical.py
@@ -0,0 +1,12 @@
+"""``medical`` — medical-coding-system code shape (SNOMED, ICD, NPI, RxNorm, LOINC)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+medical = RegexBackedPattern(
+ r"^(?:"
+ r"\d{6,18}"
+ r"|[A-TV-Z][0-9][A-Z0-9](?:\.[A-Z0-9]{1,4})?"
+ r"|\d{10}"
+ r"|\d{1,7}-\d"
+ r")$"
+)
+"""Callable :class:`Pattern` for medical-coding-system codes."""
diff --git a/edify/library/product/__init__.py b/edify/library/product/__init__.py
new file mode 100644
index 0000000..79bcdce
--- /dev/null
+++ b/edify/library/product/__init__.py
@@ -0,0 +1,4 @@
+from edify.library.product.barcode import barcode
+from edify.library.product.gtin import gtin
+from edify.library.product.mpn import mpn
+__all__ = ["barcode", "gtin", "mpn"]
diff --git a/edify/library/product/barcode.py b/edify/library/product/barcode.py
new file mode 100644
index 0000000..9526075
--- /dev/null
+++ b/edify/library/product/barcode.py
@@ -0,0 +1,5 @@
+"""``barcode`` — generic barcode value shape (numeric or alphanumeric)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+barcode = RegexBackedPattern(r"^[A-Z0-9]{6,48}$")
+"""Callable :class:`Pattern` for a generic barcode value shape."""
diff --git a/edify/library/product/gtin.py b/edify/library/product/gtin.py
new file mode 100644
index 0000000..9551330
--- /dev/null
+++ b/edify/library/product/gtin.py
@@ -0,0 +1,5 @@
+"""``gtin`` — GTIN barcode number (8/12/13/14 digits, includes UPC and EAN)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+gtin = RegexBackedPattern(r"^\d{8}$|^\d{12}$|^\d{13}$|^\d{14}$")
+"""Callable :class:`Pattern` for the GTIN family: 8-, 12-, 13-, or 14-digit barcode number."""
diff --git a/edify/library/product/mpn.py b/edify/library/product/mpn.py
new file mode 100644
index 0000000..e6ec73a
--- /dev/null
+++ b/edify/library/product/mpn.py
@@ -0,0 +1,5 @@
+"""``mpn`` — Manufacturer Part Number (permissive alphanumeric)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+mpn = RegexBackedPattern(r"^[A-Z0-9][A-Z0-9\-_.]{1,63}$")
+"""Callable :class:`Pattern` for a permissive Manufacturer Part Number."""
diff --git a/edify/library/publishing/__init__.py b/edify/library/publishing/__init__.py
new file mode 100644
index 0000000..2a72746
--- /dev/null
+++ b/edify/library/publishing/__init__.py
@@ -0,0 +1,7 @@
+from edify.library.publishing.arxiv import arxiv
+from edify.library.publishing.doi import doi
+from edify.library.publishing.isbn import isbn
+from edify.library.publishing.issn import issn
+from edify.library.publishing.pmc import pmc
+from edify.library.publishing.pmid import pmid
+__all__ = ["arxiv", "doi", "isbn", "issn", "pmc", "pmid"]
diff --git a/edify/library/publishing/arxiv.py b/edify/library/publishing/arxiv.py
new file mode 100644
index 0000000..53bd772
--- /dev/null
+++ b/edify/library/publishing/arxiv.py
@@ -0,0 +1,7 @@
+"""``arxiv`` — arXiv identifier shape (new format ``YYMM.NNNNN`` or legacy ``category/YYMMNNN``)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+arxiv = RegexBackedPattern(
+ r"^(?:\d{4}\.\d{4,5}(?:v\d+)?|[a-z]{2,10}(?:\.[A-Z]{2})?/\d{7}(?:v\d+)?)$"
+)
+"""Callable :class:`Pattern` for an arXiv identifier."""
diff --git a/edify/library/publishing/doi.py b/edify/library/publishing/doi.py
new file mode 100644
index 0000000..a35f1d7
--- /dev/null
+++ b/edify/library/publishing/doi.py
@@ -0,0 +1,5 @@
+"""``doi`` — DOI shape."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+doi = RegexBackedPattern(r"^10\.\d{4,9}/[-._;()/:A-Za-z0-9]+$")
+"""Callable :class:`Pattern` for the DOI shape."""
diff --git a/edify/library/publishing/isbn.py b/edify/library/publishing/isbn.py
new file mode 100644
index 0000000..aa15470
--- /dev/null
+++ b/edify/library/publishing/isbn.py
@@ -0,0 +1,5 @@
+"""``isbn`` — ISBN-10 or ISBN-13 shape (with or without dashes)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+isbn = RegexBackedPattern(r"^(?:\d[- ]?){9}[\dXx]$|^(?:\d[- ]?){12}\d$")
+"""Callable :class:`Pattern` for ISBN-10 or ISBN-13 shape (with or without dash/space separators)."""
diff --git a/edify/library/publishing/issn.py b/edify/library/publishing/issn.py
new file mode 100644
index 0000000..72b22f1
--- /dev/null
+++ b/edify/library/publishing/issn.py
@@ -0,0 +1,5 @@
+"""``issn`` — ISSN shape (``NNNN-NNNC``)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+issn = RegexBackedPattern(r"^\d{4}-\d{3}[\dXx]$")
+"""Callable :class:`Pattern` for the ISSN shape."""
diff --git a/edify/library/publishing/pmc.py b/edify/library/publishing/pmc.py
new file mode 100644
index 0000000..c8e0d30
--- /dev/null
+++ b/edify/library/publishing/pmc.py
@@ -0,0 +1,5 @@
+"""``pmc`` — PMC identifier shape (``PMCnnnnn...``)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+pmc = RegexBackedPattern(r"^PMC\d{1,9}$")
+"""Callable :class:`Pattern` for a PubMed Central identifier."""
diff --git a/edify/library/publishing/pmid.py b/edify/library/publishing/pmid.py
new file mode 100644
index 0000000..229f2f0
--- /dev/null
+++ b/edify/library/publishing/pmid.py
@@ -0,0 +1,5 @@
+"""``pmid`` — PubMed identifier shape (1-8 digits)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+pmid = RegexBackedPattern(r"^\d{1,8}$")
+"""Callable :class:`Pattern` for a PubMed identifier (1-8 digits)."""
diff --git a/edify/library/transport/__init__.py b/edify/library/transport/__init__.py
new file mode 100644
index 0000000..5786e46
--- /dev/null
+++ b/edify/library/transport/__init__.py
@@ -0,0 +1,3 @@
+from edify.library.transport.aircraft import aircraft
+from edify.library.transport.vehicle import vehicle
+__all__ = ["aircraft", "vehicle"]
diff --git a/edify/library/transport/aircraft.py b/edify/library/transport/aircraft.py
new file mode 100644
index 0000000..93247bb
--- /dev/null
+++ b/edify/library/transport/aircraft.py
@@ -0,0 +1,5 @@
+"""``aircraft`` — aircraft-registration shape (e.g. ``N123AB``, ``G-ABCD``)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+aircraft = RegexBackedPattern(r"^[A-Z]{1,2}-?[A-Z0-9]{1,5}$")
+"""Callable :class:`Pattern` for an aircraft-registration mark."""
diff --git a/edify/library/transport/vehicle.py b/edify/library/transport/vehicle.py
new file mode 100644
index 0000000..bce70bd
--- /dev/null
+++ b/edify/library/transport/vehicle.py
@@ -0,0 +1,5 @@
+"""``vehicle`` — vehicle/vessel/container identifier shape (permissive alphanumeric)."""
+from __future__ import annotations
+from edify.library._support.regex import RegexBackedPattern
+vehicle = RegexBackedPattern(r"^[A-Z0-9][A-Z0-9\- ]{3,17}$")
+"""Callable :class:`Pattern` for a permissive transport-vehicle identifier."""