kpihx-lab 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kpihx_lab-0.2.0/PKG-INFO +33 -0
- kpihx_lab-0.2.0/pyproject.toml +116 -0
- kpihx_lab-0.2.0/setup.cfg +4 -0
- kpihx_lab-0.2.0/src/kpihx_lab.egg-info/PKG-INFO +33 -0
- kpihx_lab-0.2.0/src/kpihx_lab.egg-info/SOURCES.txt +12 -0
- kpihx_lab-0.2.0/src/kpihx_lab.egg-info/dependency_links.txt +1 -0
- kpihx_lab-0.2.0/src/kpihx_lab.egg-info/entry_points.txt +2 -0
- kpihx_lab-0.2.0/src/kpihx_lab.egg-info/requires.txt +31 -0
- kpihx_lab-0.2.0/src/kpihx_lab.egg-info/top_level.txt +1 -0
- kpihx_lab-0.2.0/src/lab/__init__.py +25 -0
- kpihx_lab-0.2.0/src/lab/ai.py +113 -0
- kpihx_lab-0.2.0/src/lab/cli.py +22 -0
- kpihx_lab-0.2.0/src/lab/kit.py +82 -0
- kpihx_lab-0.2.0/src/lab/logo.py +785 -0
kpihx_lab-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kpihx-lab
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: KpihX scientific and AI exploration environment (rapid scripts, plotting, numerics, hardware-accelerated prototyping)
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Requires-Dist: numpy>=2.5.2
|
|
7
|
+
Requires-Dist: scipy>=1.18.1
|
|
8
|
+
Requires-Dist: matplotlib>=3.11.1
|
|
9
|
+
Requires-Dist: seaborn>=0.13.0
|
|
10
|
+
Requires-Dist: ipykernel>=7.4.0
|
|
11
|
+
Requires-Dist: scikit-learn>=1.9.1
|
|
12
|
+
Requires-Dist: kagglehub[hf-datasets,pandas-datasets,polars-datasets]>=1.0.2
|
|
13
|
+
Requires-Dist: polars>=2.0.0rc2
|
|
14
|
+
Requires-Dist: pandas>=3.0.6
|
|
15
|
+
Requires-Dist: typer>=0.27.2
|
|
16
|
+
Requires-Dist: rich>=15.0.0
|
|
17
|
+
Provides-Extra: cpu
|
|
18
|
+
Requires-Dist: torch>=2.8; extra == "cpu"
|
|
19
|
+
Requires-Dist: torchvision>=0.23; extra == "cpu"
|
|
20
|
+
Provides-Extra: xpu
|
|
21
|
+
Requires-Dist: torch>=2.8; extra == "xpu"
|
|
22
|
+
Requires-Dist: torchvision>=0.23; extra == "xpu"
|
|
23
|
+
Requires-Dist: transformers>=4.57; extra == "xpu"
|
|
24
|
+
Requires-Dist: accelerate>=1.10.1; extra == "xpu"
|
|
25
|
+
Requires-Dist: huggingface_hub>=0.34.4; extra == "xpu"
|
|
26
|
+
Requires-Dist: safetensors>=0.6.2; extra == "xpu"
|
|
27
|
+
Provides-Extra: cuda
|
|
28
|
+
Requires-Dist: torch>=2.8; extra == "cuda"
|
|
29
|
+
Requires-Dist: torchvision>=0.23; extra == "cuda"
|
|
30
|
+
Requires-Dist: transformers>=4.57; extra == "cuda"
|
|
31
|
+
Requires-Dist: accelerate>=1.10.1; extra == "cuda"
|
|
32
|
+
Requires-Dist: huggingface_hub>=0.34.4; extra == "cuda"
|
|
33
|
+
Requires-Dist: safetensors>=0.6.2; extra == "cuda"
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "kpihx-lab"
|
|
3
|
+
version = "0.2.0"
|
|
4
|
+
description = "KpihX scientific and AI exploration environment (rapid scripts, plotting, numerics, hardware-accelerated prototyping)"
|
|
5
|
+
requires-python = ">=3.12"
|
|
6
|
+
|
|
7
|
+
# Base scientific stack. Kept deliberately small: this environment is loaded on
|
|
8
|
+
# every exploratory script, so it stays fast to sync and easy to reason about.
|
|
9
|
+
# Everything heavier is an optional profile below.
|
|
10
|
+
dependencies = [
|
|
11
|
+
"numpy>=2.5.2",
|
|
12
|
+
"scipy>=1.18.1",
|
|
13
|
+
"matplotlib>=3.11.1",
|
|
14
|
+
"seaborn>=0.13.0",
|
|
15
|
+
# In base so make kernel works on a bare sync.
|
|
16
|
+
"ipykernel>=7.4.0",
|
|
17
|
+
"scikit-learn>=1.9.1",
|
|
18
|
+
"kagglehub[hf-datasets,pandas-datasets,polars-datasets]>=1.0.2",
|
|
19
|
+
"polars>=2.0.0rc2",
|
|
20
|
+
"pandas>=3.0.6",
|
|
21
|
+
"typer>=0.27.2",
|
|
22
|
+
"rich>=15.0.0",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
# ---------------------------------------------------------------------------
|
|
26
|
+
# Optional profiles: hardware axes and domain axes are separate on purpose
|
|
27
|
+
# ---------------------------------------------------------------------------
|
|
28
|
+
# Hardware profiles are mutually exclusive: a machine gets exactly one torch
|
|
29
|
+
# backend. Domain profiles stack freely on top.
|
|
30
|
+
#
|
|
31
|
+
# Usage: bare sync = base only, plus exactly one hardware backend.
|
|
32
|
+
# uv sync base numerics only
|
|
33
|
+
# uv sync --extra cpu + CPU torch
|
|
34
|
+
# uv sync --extra xpu + Intel Arc (XPU) torch
|
|
35
|
+
# uv sync --extra cuda + NVIDIA CUDA torch
|
|
36
|
+
[project.optional-dependencies]
|
|
37
|
+
cpu = [
|
|
38
|
+
"torch>=2.8",
|
|
39
|
+
"torchvision>=0.23",
|
|
40
|
+
]
|
|
41
|
+
xpu = [
|
|
42
|
+
"torch>=2.8",
|
|
43
|
+
"torchvision>=0.23",
|
|
44
|
+
"transformers>=4.57",
|
|
45
|
+
"accelerate>=1.10.1",
|
|
46
|
+
"huggingface_hub>=0.34.4",
|
|
47
|
+
"safetensors>=0.6.2",
|
|
48
|
+
]
|
|
49
|
+
cuda = [
|
|
50
|
+
"torch>=2.8",
|
|
51
|
+
"torchvision>=0.23",
|
|
52
|
+
"transformers>=4.57",
|
|
53
|
+
"accelerate>=1.10.1",
|
|
54
|
+
"huggingface_hub>=0.34.4",
|
|
55
|
+
"safetensors>=0.6.2",
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
[project.scripts]
|
|
59
|
+
lab = "lab.cli:app"
|
|
60
|
+
|
|
61
|
+
[tool.uv]
|
|
62
|
+
package = true
|
|
63
|
+
# On Intel Arc, this entry makes the XPU wheels rank correctly against PyPI
|
|
64
|
+
# during resolution. Removing it is how PyTorch silently resolves to a CUDA
|
|
65
|
+
# build and the model ends up on the CPU. Rationale and full doctrine:
|
|
66
|
+
# k-ai/references/pyproject-hardware.md, template: AI/nobg/pyproject.toml.
|
|
67
|
+
index-strategy = "unsafe-best-match"
|
|
68
|
+
prerelease = "allow"
|
|
69
|
+
# One accelerator backend per environment, never a mixture.
|
|
70
|
+
conflicts = [
|
|
71
|
+
[{ extra = "cpu" }, { extra = "xpu" }, { extra = "cuda" }],
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
# ---------------------------------------------------------------------------
|
|
75
|
+
# PyTorch indexes
|
|
76
|
+
# ---------------------------------------------------------------------------
|
|
77
|
+
# Index flags mirror the verified k-nobg template exactly. `explicit = true`
|
|
78
|
+
# keeps an index out of general resolution so the base numeric workflow is
|
|
79
|
+
# unaffected; the XPU index is left non-explicit on purpose, that combination is
|
|
80
|
+
# the one measured working on this machine.
|
|
81
|
+
[[tool.uv.index]]
|
|
82
|
+
name = "pytorch-cpu"
|
|
83
|
+
url = "https://download.pytorch.org/whl/cpu"
|
|
84
|
+
explicit = true
|
|
85
|
+
|
|
86
|
+
[[tool.uv.index]]
|
|
87
|
+
name = "pytorch-xpu"
|
|
88
|
+
url = "https://download.pytorch.org/whl/xpu"
|
|
89
|
+
|
|
90
|
+
[[tool.uv.index]]
|
|
91
|
+
name = "pytorch-cuda"
|
|
92
|
+
url = "https://download.pytorch.org/whl/cu126"
|
|
93
|
+
explicit = true
|
|
94
|
+
|
|
95
|
+
[tool.uv.sources]
|
|
96
|
+
# This binding is what actually selects the accelerator.
|
|
97
|
+
torch = [
|
|
98
|
+
{ index = "pytorch-cpu", extra = "cpu" },
|
|
99
|
+
{ index = "pytorch-xpu", extra = "xpu" },
|
|
100
|
+
{ index = "pytorch-cuda", extra = "cuda" },
|
|
101
|
+
]
|
|
102
|
+
torchvision = [
|
|
103
|
+
{ index = "pytorch-cpu", extra = "cpu" },
|
|
104
|
+
{ index = "pytorch-xpu", extra = "xpu" },
|
|
105
|
+
{ index = "pytorch-cuda", extra = "cuda" },
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
# ---------------------------------------------------------------------------
|
|
109
|
+
# Development
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
[tool.ruff]
|
|
112
|
+
line-length = 100
|
|
113
|
+
target-version = "py312"
|
|
114
|
+
|
|
115
|
+
[tool.ruff.lint]
|
|
116
|
+
select = ["E", "F", "W", "I", "UP", "B", "ISC"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kpihx-lab
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: KpihX scientific and AI exploration environment (rapid scripts, plotting, numerics, hardware-accelerated prototyping)
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Requires-Dist: numpy>=2.5.2
|
|
7
|
+
Requires-Dist: scipy>=1.18.1
|
|
8
|
+
Requires-Dist: matplotlib>=3.11.1
|
|
9
|
+
Requires-Dist: seaborn>=0.13.0
|
|
10
|
+
Requires-Dist: ipykernel>=7.4.0
|
|
11
|
+
Requires-Dist: scikit-learn>=1.9.1
|
|
12
|
+
Requires-Dist: kagglehub[hf-datasets,pandas-datasets,polars-datasets]>=1.0.2
|
|
13
|
+
Requires-Dist: polars>=2.0.0rc2
|
|
14
|
+
Requires-Dist: pandas>=3.0.6
|
|
15
|
+
Requires-Dist: typer>=0.27.2
|
|
16
|
+
Requires-Dist: rich>=15.0.0
|
|
17
|
+
Provides-Extra: cpu
|
|
18
|
+
Requires-Dist: torch>=2.8; extra == "cpu"
|
|
19
|
+
Requires-Dist: torchvision>=0.23; extra == "cpu"
|
|
20
|
+
Provides-Extra: xpu
|
|
21
|
+
Requires-Dist: torch>=2.8; extra == "xpu"
|
|
22
|
+
Requires-Dist: torchvision>=0.23; extra == "xpu"
|
|
23
|
+
Requires-Dist: transformers>=4.57; extra == "xpu"
|
|
24
|
+
Requires-Dist: accelerate>=1.10.1; extra == "xpu"
|
|
25
|
+
Requires-Dist: huggingface_hub>=0.34.4; extra == "xpu"
|
|
26
|
+
Requires-Dist: safetensors>=0.6.2; extra == "xpu"
|
|
27
|
+
Provides-Extra: cuda
|
|
28
|
+
Requires-Dist: torch>=2.8; extra == "cuda"
|
|
29
|
+
Requires-Dist: torchvision>=0.23; extra == "cuda"
|
|
30
|
+
Requires-Dist: transformers>=4.57; extra == "cuda"
|
|
31
|
+
Requires-Dist: accelerate>=1.10.1; extra == "cuda"
|
|
32
|
+
Requires-Dist: huggingface_hub>=0.34.4; extra == "cuda"
|
|
33
|
+
Requires-Dist: safetensors>=0.6.2; extra == "cuda"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
pyproject.toml
|
|
2
|
+
src/kpihx_lab.egg-info/PKG-INFO
|
|
3
|
+
src/kpihx_lab.egg-info/SOURCES.txt
|
|
4
|
+
src/kpihx_lab.egg-info/dependency_links.txt
|
|
5
|
+
src/kpihx_lab.egg-info/entry_points.txt
|
|
6
|
+
src/kpihx_lab.egg-info/requires.txt
|
|
7
|
+
src/kpihx_lab.egg-info/top_level.txt
|
|
8
|
+
src/lab/__init__.py
|
|
9
|
+
src/lab/ai.py
|
|
10
|
+
src/lab/cli.py
|
|
11
|
+
src/lab/kit.py
|
|
12
|
+
src/lab/logo.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
numpy>=2.5.2
|
|
2
|
+
scipy>=1.18.1
|
|
3
|
+
matplotlib>=3.11.1
|
|
4
|
+
seaborn>=0.13.0
|
|
5
|
+
ipykernel>=7.4.0
|
|
6
|
+
scikit-learn>=1.9.1
|
|
7
|
+
kagglehub[hf-datasets,pandas-datasets,polars-datasets]>=1.0.2
|
|
8
|
+
polars>=2.0.0rc2
|
|
9
|
+
pandas>=3.0.6
|
|
10
|
+
typer>=0.27.2
|
|
11
|
+
rich>=15.0.0
|
|
12
|
+
|
|
13
|
+
[cpu]
|
|
14
|
+
torch>=2.8
|
|
15
|
+
torchvision>=0.23
|
|
16
|
+
|
|
17
|
+
[cuda]
|
|
18
|
+
torch>=2.8
|
|
19
|
+
torchvision>=0.23
|
|
20
|
+
transformers>=4.57
|
|
21
|
+
accelerate>=1.10.1
|
|
22
|
+
huggingface_hub>=0.34.4
|
|
23
|
+
safetensors>=0.6.2
|
|
24
|
+
|
|
25
|
+
[xpu]
|
|
26
|
+
torch>=2.8
|
|
27
|
+
torchvision>=0.23
|
|
28
|
+
transformers>=4.57
|
|
29
|
+
accelerate>=1.10.1
|
|
30
|
+
huggingface_hub>=0.34.4
|
|
31
|
+
safetensors>=0.6.2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
lab
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""KπX-Labs Explore/lab core package."""
|
|
2
|
+
|
|
3
|
+
from lab.kit import Context
|
|
4
|
+
from lab.ai import pred_eval
|
|
5
|
+
from lab.logo import (
|
|
6
|
+
Logo,
|
|
7
|
+
KπX_BOLD,
|
|
8
|
+
KπX_COMPACT,
|
|
9
|
+
KπX_π_BOLD,
|
|
10
|
+
KπX_π_COMPACT,
|
|
11
|
+
π_BLOCK,
|
|
12
|
+
π_π,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"Context",
|
|
17
|
+
"pred_eval",
|
|
18
|
+
"Logo",
|
|
19
|
+
"KπX_BOLD",
|
|
20
|
+
"KπX_COMPACT",
|
|
21
|
+
"KπX_π_BOLD",
|
|
22
|
+
"KπX_π_COMPACT",
|
|
23
|
+
"π_BLOCK",
|
|
24
|
+
"π_π",
|
|
25
|
+
]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""KπX-Labs AI utility kit."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Sequence
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
import matplotlib.pyplot as plt
|
|
7
|
+
import numpy as np
|
|
8
|
+
import seaborn as sns
|
|
9
|
+
from sklearn.metrics import (
|
|
10
|
+
confusion_matrix,
|
|
11
|
+
classification_report,
|
|
12
|
+
precision_recall_curve,
|
|
13
|
+
auc,
|
|
14
|
+
log_loss,
|
|
15
|
+
matthews_corrcoef,
|
|
16
|
+
average_precision_score,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
def pred_eval(
|
|
20
|
+
gts,
|
|
21
|
+
preds,
|
|
22
|
+
probas,
|
|
23
|
+
criterion=log_loss,
|
|
24
|
+
display: bool = True,
|
|
25
|
+
plot: bool = True,
|
|
26
|
+
labels: Sequence | None = None,
|
|
27
|
+
) -> tuple[dict[str, Any], np.ndarray | None]:
|
|
28
|
+
"""Evaluate predictions against ground truths.
|
|
29
|
+
|
|
30
|
+
Knows nothing about the model, the split or the task: just gts, preds and
|
|
31
|
+
probas in, metrics and optional visuals out.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
gts: Ground truth labels, shape (n_samples,).
|
|
35
|
+
preds: Predicted labels, shape (n_samples,), same label space as gts.
|
|
36
|
+
probas: Predicted probabilities of the positive class, shape (n_samples,).
|
|
37
|
+
criterion: Loss callable, signature criterion(gts, probas). Defaults to
|
|
38
|
+
sklearn.metrics.log_loss.
|
|
39
|
+
display: If True, print metrics and classification report.
|
|
40
|
+
plot: If True, draw confusion matrix and PR curve.
|
|
41
|
+
labels: Explicit class order. Inferred (sorted) when None.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
(results, axs).
|
|
45
|
+
results: dict with keys "loss", "cm", "class_report", "mcc",
|
|
46
|
+
"avg_pr", "pr_auc", "pr", "rec", "threshold", "labels".
|
|
47
|
+
axs: ndarray of 2 Axes (cm + PR) when plot=True, else None.
|
|
48
|
+
"""
|
|
49
|
+
# Class order shared by the confusion matrix, the report and the axes.
|
|
50
|
+
# Without an explicit order, both label sets must agree before deriving it.
|
|
51
|
+
if labels:
|
|
52
|
+
labels = list(labels)
|
|
53
|
+
else:
|
|
54
|
+
classes_gts = set(gts)
|
|
55
|
+
classes_preds = set(preds)
|
|
56
|
+
if classes_gts != classes_preds:
|
|
57
|
+
raise ValueError(
|
|
58
|
+
"gts and preds must share the same classes, got "
|
|
59
|
+
f"{sorted(classes_gts)} for gts and {sorted(classes_preds)} for preds. "
|
|
60
|
+
"Pass labels= to force the class order explicitly."
|
|
61
|
+
)
|
|
62
|
+
labels = sorted(classes_gts)
|
|
63
|
+
|
|
64
|
+
# Metrics, computed unconditionally so `results` stays complete when silent.
|
|
65
|
+
loss = criterion(gts, probas)
|
|
66
|
+
cm = confusion_matrix(gts, preds, labels=labels)
|
|
67
|
+
class_report = classification_report(gts, preds, labels=labels, output_dict=True, zero_division=0)
|
|
68
|
+
mcc = matthews_corrcoef(gts, preds)
|
|
69
|
+
avg_pr = average_precision_score(gts, probas)
|
|
70
|
+
pr, rec, threshold = precision_recall_curve(gts, probas)
|
|
71
|
+
pr_auc = auc(rec, pr)
|
|
72
|
+
|
|
73
|
+
results = {
|
|
74
|
+
"loss": loss,
|
|
75
|
+
"cm": cm,
|
|
76
|
+
"class_report": class_report,
|
|
77
|
+
"mcc": mcc,
|
|
78
|
+
"avg_pr": avg_pr,
|
|
79
|
+
"pr_auc": pr_auc,
|
|
80
|
+
"pr": pr,
|
|
81
|
+
"rec": rec,
|
|
82
|
+
"threshold": threshold,
|
|
83
|
+
"labels": labels,
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if display:
|
|
87
|
+
print("Loss:", loss)
|
|
88
|
+
print("MCC:", mcc)
|
|
89
|
+
print("AVG-PR:", avg_pr)
|
|
90
|
+
print("PR-AUC:", pr_auc)
|
|
91
|
+
print("Classification report")
|
|
92
|
+
print(classification_report(gts, preds, labels=labels, zero_division=0))
|
|
93
|
+
|
|
94
|
+
axs = None
|
|
95
|
+
if plot:
|
|
96
|
+
# Two panels: confusion matrix on the left, PR curve on the right.
|
|
97
|
+
fig, axs = plt.subplots(1, 2, figsize=(12, 5))
|
|
98
|
+
|
|
99
|
+
sns.heatmap(cm, annot=True, ax=axs[0], xticklabels=labels, yticklabels=labels)
|
|
100
|
+
axs[0].set_title("Confusion matrix")
|
|
101
|
+
axs[0].set_xlabel("Predicted label")
|
|
102
|
+
axs[0].set_ylabel("Ground truth")
|
|
103
|
+
|
|
104
|
+
axs[1].plot(rec, pr, label="PR curve")
|
|
105
|
+
axs[1].set_xlabel("recall")
|
|
106
|
+
axs[1].set_ylabel("precision")
|
|
107
|
+
axs[1].set_title("PR curve")
|
|
108
|
+
axs[1].legend()
|
|
109
|
+
|
|
110
|
+
plt.tight_layout()
|
|
111
|
+
plt.show()
|
|
112
|
+
|
|
113
|
+
return results, axs
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
|
|
5
|
+
from lab.kit import Context
|
|
6
|
+
|
|
7
|
+
app = typer.Typer(help="KπX-Labs CLI environment diagnostic and utilities.", no_args_is_help=True)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@app.callback()
|
|
11
|
+
def lab() -> None:
|
|
12
|
+
"""KπX-Labs CLI environment diagnostic and utilities."""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@app.command()
|
|
16
|
+
def context() -> None:
|
|
17
|
+
"""Print the sovereign environment context side-by-side with the KπX logo."""
|
|
18
|
+
Context.display()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
if __name__ == "__main__":
|
|
22
|
+
app()
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import platform
|
|
3
|
+
import socket
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from lab.logo import Logo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Context:
|
|
11
|
+
"""Runtime execution context and sovereign environment detection for KπX-Labs."""
|
|
12
|
+
|
|
13
|
+
# PEP 405 Axiom: local runtime runs in a dedicated virtualenv, cloud runtimes share the system Python
|
|
14
|
+
IS_LOCAL = sys.prefix != sys.base_prefix
|
|
15
|
+
ROOT = Path(sys.prefix).parent if IS_LOCAL else Path.cwd()
|
|
16
|
+
|
|
17
|
+
# Default ASCII banner: KπX_π_COMPACT size 8 with KπX-Labs badge
|
|
18
|
+
LOGO = Logo.KπX_Labs
|
|
19
|
+
|
|
20
|
+
@classmethod
|
|
21
|
+
def resolve(cls, *path_segments: str) -> Path:
|
|
22
|
+
"""Resolve a path relative to the project root, irrespective of the active runtime."""
|
|
23
|
+
return cls.ROOT.joinpath(*path_segments)
|
|
24
|
+
|
|
25
|
+
@classmethod
|
|
26
|
+
def get_info(cls) -> dict[str, str]:
|
|
27
|
+
"""Collect diagnostic and hardware specs across local and cloud environments."""
|
|
28
|
+
if cls.IS_LOCAL:
|
|
29
|
+
runtime = f"Local ({Path(sys.prefix).name})"
|
|
30
|
+
elif Path("/kaggle/working").exists():
|
|
31
|
+
runtime = "Kaggle Cloud Container"
|
|
32
|
+
elif Path("/content").exists():
|
|
33
|
+
runtime = "Google Colab Cloud"
|
|
34
|
+
else:
|
|
35
|
+
runtime = "Remote Server"
|
|
36
|
+
|
|
37
|
+
device = "CPU"
|
|
38
|
+
try:
|
|
39
|
+
import torch
|
|
40
|
+
if torch.cuda.is_available():
|
|
41
|
+
device = f"CUDA {torch.version.cuda} ({torch.cuda.get_device_name(0)})"
|
|
42
|
+
elif getattr(torch, "xpu", None) and torch.xpu.is_available():
|
|
43
|
+
device = f"Intel XPU ({torch.xpu.get_device_name(0)})"
|
|
44
|
+
else:
|
|
45
|
+
device = "CPU (torch)"
|
|
46
|
+
except Exception:
|
|
47
|
+
if Path("/proc/driver/nvidia/version").exists():
|
|
48
|
+
device = "Nvidia GPU present"
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
"OS": f"{platform.system()} {platform.release()} ({platform.machine()})",
|
|
52
|
+
"Host": socket.gethostname(),
|
|
53
|
+
"Runtime": runtime,
|
|
54
|
+
"Python": f"{platform.python_version()} @ {sys.executable}",
|
|
55
|
+
"Base": str(sys.base_prefix),
|
|
56
|
+
"Root": str(cls.ROOT),
|
|
57
|
+
"Device": device,
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def display(cls, logo_str: str | None = None, stream=None) -> None:
|
|
62
|
+
"""Render the KπX Fastfetch-style banner and runtime metadata side-by-side."""
|
|
63
|
+
info = cls.get_info()
|
|
64
|
+
chosen = logo_str or cls.LOGO
|
|
65
|
+
raw_art = chosen.value if hasattr(chosen, "value") else str(chosen)
|
|
66
|
+
logo_lines = raw_art.rstrip("\n").splitlines()
|
|
67
|
+
items = list(info.items())
|
|
68
|
+
key_width = max(len(k) for k, _ in items)
|
|
69
|
+
logo_width = max(len(line) for line in logo_lines)
|
|
70
|
+
|
|
71
|
+
out = stream or sys.stdout
|
|
72
|
+
print(file=out)
|
|
73
|
+
total_lines = max(len(logo_lines), len(items))
|
|
74
|
+
for i in range(total_lines):
|
|
75
|
+
left = logo_lines[i] if i < len(logo_lines) else " " * logo_width
|
|
76
|
+
if i < len(items):
|
|
77
|
+
k, v = items[i]
|
|
78
|
+
right = f"\033[1;36m{k:<{key_width}}\033[0m : {v}"
|
|
79
|
+
else:
|
|
80
|
+
right = ""
|
|
81
|
+
print(f" \033[1;34m{left}\033[0m {right}", file=out)
|
|
82
|
+
print(file=out)
|
|
@@ -0,0 +1,785 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class KπX_BOLD(str, Enum):
|
|
5
|
+
"""KπX BOLD family in solid Unicode block elements."""
|
|
6
|
+
|
|
7
|
+
# 6 lines
|
|
8
|
+
S6 = """\
|
|
9
|
+
██▌ ▗▟█▛▘ ▝██▖ ▟█▛▘
|
|
10
|
+
██▌ ▗▟█▛▘ ▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜█▙ ▟█▛
|
|
11
|
+
██▙▟██▘ ▝ ▐██ ██▌ ▜███▀
|
|
12
|
+
██▛▀▀██▖ ▐██ ██▌ ▗▟█▜█▙
|
|
13
|
+
██▌ ▝▜█▙ ▐█▛ ██▌ ▗██▘ ▀██▖
|
|
14
|
+
██▌ ▀██▄ ██▌ ▜██▟ ▄█▛▘ ▝██▖"""
|
|
15
|
+
|
|
16
|
+
S6_LABS = """\
|
|
17
|
+
██▌ ▗▟█▛▘ KπX-Labs ▝██▖ ▟█▛▘
|
|
18
|
+
██▌ ▗▟█▛▘ ▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜█▙ ▟█▛
|
|
19
|
+
██▙▟██▘ ▝ ▐██ ██▌ ▜███▀
|
|
20
|
+
██▛▀▀██▖ ▐██ ██▌ ▗▟█▜█▙
|
|
21
|
+
██▌ ▝▜█▙ ▐█▛ ██▌ ▗██▘ ▀██▖
|
|
22
|
+
██▌ ▀██▄ ██▌ ▜██▟ ▄█▛▘ ▝██▖"""
|
|
23
|
+
|
|
24
|
+
# 8 lines
|
|
25
|
+
S8 = """\
|
|
26
|
+
███▌ ▄███▀ ▝▜██▄ ▟██▛
|
|
27
|
+
███▌ ▄███▀ ▜██▙ ▟██▛
|
|
28
|
+
███▌ ▄███▀ ▐████████████████▘ ▝██▙▄███▘
|
|
29
|
+
███▙████▖ ▐███ ███ ▝█████▘
|
|
30
|
+
████▛▀███▄ ▐███ ███ ▄█████▄
|
|
31
|
+
███▌ ▜██▙▖ ▐██▌ ███ ▟██▀ ▜██▙
|
|
32
|
+
███▌ ▝███▙ ▟██▌ ███▖ ▗███▘ ▀███▖
|
|
33
|
+
███▌ ▜███▖ ▗███ ▀████▌ ▄██▛▘ ▝███▖"""
|
|
34
|
+
|
|
35
|
+
S8_LABS = """\
|
|
36
|
+
███▌ ▄███▀ ▝▜██▄ ▟██▛
|
|
37
|
+
███▌ ▄███▀ KπX-Labs ▜██▙ ▟██▛
|
|
38
|
+
███▌ ▄███▀ ▐████████████████▘ ▝██▙▄███▘
|
|
39
|
+
███▙████▖ ▐███ ███ ▝█████▘
|
|
40
|
+
████▛▀███▄ ▐███ ███ ▄█████▄
|
|
41
|
+
███▌ ▜██▙▖ ▐██▌ ███ ▟██▀ ▜██▙
|
|
42
|
+
███▌ ▝███▙ ▟██▌ ███▖ ▗███▘ ▀███▖
|
|
43
|
+
███▌ ▜███▖ ▗███ ▀████▌ ▄██▛▘ ▝███▖"""
|
|
44
|
+
|
|
45
|
+
# 10 lines
|
|
46
|
+
S10 = """\
|
|
47
|
+
████ ▗▟███▛▘ ▜███▙ ▟███▛
|
|
48
|
+
████ ▗▟███▛▘ ▝███▙▖ ▟███▀
|
|
49
|
+
████ ▗▟███▛▘ ▗▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜███▖ ▗████▘
|
|
50
|
+
████ ▄███▛▘ ▐█▀▀▜███▛▀▀▀▀▜███▛▀▀▀▘ ▀███▄███▛
|
|
51
|
+
████▄█████▖ ▐███▌ ▐███▌ ▝█████▛
|
|
52
|
+
██████▀████▄ ▐███▌ ▐███▌ ▟██████▖
|
|
53
|
+
████▘ ▜███▙▖ ▟███ ▐███▌ ▗███▛▘▜███▄
|
|
54
|
+
████ ▝▜███▙ ████ ▐███▌ ▄███▛ ▀███▙
|
|
55
|
+
████ ▀████▖ ▗███▛ ▐███▙▖▄ ▟███▀ ▝████▖
|
|
56
|
+
████ ▝▜███▙▖ ▟███☖ ▜█████▌ ▗████▘ ▝▜███▖"""
|
|
57
|
+
|
|
58
|
+
S10_LABS = """\
|
|
59
|
+
████ ▗▟███▛▘ ▜███▙ ▟███▛
|
|
60
|
+
████ ▗▟███▛▘ KπX-Labs ▝███▙▖ ▟███▀
|
|
61
|
+
████ ▗▟███▛▘ ▗▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜███▖ ▗████▘
|
|
62
|
+
████ ▄███▛▘ ▐█▀▀▜███▛▀▀▀▀▜███▛▀▀▀▘ ▀███▄███▛
|
|
63
|
+
████▄█████▖ ▐███▌ ▐███▌ ▝█████▛
|
|
64
|
+
██████▀████▄ ▐███▌ ▐███▌ ▟██████▖
|
|
65
|
+
████▘ ▜███▙▖ ▟███ ▐███▌ ▗███▛▘▜███▄
|
|
66
|
+
████ ▝▜███▙ ████ ▐███▌ ▄███▛ ▀███▙
|
|
67
|
+
████ ▀████▖ ▗███▛ ▐███▙▖▄ ▟███▀ ▝████▖
|
|
68
|
+
████ ▝▜███▙▖ ▟███☖ ▜█████▌ ▗████▘ ▝▜███▖"""
|
|
69
|
+
|
|
70
|
+
# 12 lines
|
|
71
|
+
S12 = """\
|
|
72
|
+
█████ ▗▟████▛▘ ▝████▙ ▟████▛
|
|
73
|
+
█████ ▗▟████▛▘ ▝▜████▖ ▟████▘
|
|
74
|
+
█████ ▗▟████▀▘ ▜████▖ ▗████▛▘
|
|
75
|
+
█████ ▗▟████▀ █████████████████████████ ▝████▙ ▄████▛
|
|
76
|
+
█████ ▗▟████▀ ▀▀▀▀▜████▀▀▀▀▀▀▜████▀▀▀▀▀ ▝▜████████▀
|
|
77
|
+
█████▟██████▖ ▐████ ▐████ ▜██████▘
|
|
78
|
+
███████▛▜████▙ ▐████ ▐████ ▄███████▙▖
|
|
79
|
+
█████▀ ▀█████▄ ▐████ ▐████ ▟████▀▜████▖
|
|
80
|
+
█████ ▜████▙▖ ▟████ ▐████ ▗████▛▘ ▜████▄
|
|
81
|
+
█████ ▝█████▄ ████▛ ▐████▖ ▄████▛ ▀████▙
|
|
82
|
+
█████ ▀█████▖ ▐████▌ ▝████▙▄▄▄ ▟████▀ ▝████▙▖
|
|
83
|
+
█████ ▝▜████▙▖ █████ ▀███████ ▗█████▘ ▝▜████▖"""
|
|
84
|
+
|
|
85
|
+
S12_LABS = """\
|
|
86
|
+
█████ ▗▟████▛▘ ▝████▙ ▟████▛
|
|
87
|
+
█████ ▗▟████▛▘ ▝▜████▖ ▟████▘
|
|
88
|
+
█████ ▗▟████▀▘ KπX-Labs ▜████▖ ▗████▛▘
|
|
89
|
+
█████ ▗▟████▀ █████████████████████████ ▝████▙ ▄████▛
|
|
90
|
+
█████ ▗▟████▀ ▀▀▀▀▜████▀▀▀▀▀▀▜████▀▀▀▀▀ ▝▜████████▀
|
|
91
|
+
█████▟██████▖ ▐████ ▐████ ▜██████▘
|
|
92
|
+
███████▛▜████▙ ▐████ ▐████ ▄███████▙▖
|
|
93
|
+
█████▀ ▀█████▄ ▐████ ▐████ ▟████▀▜████▖
|
|
94
|
+
█████ ▜████▙▖ ▟████ ▐████ ▗████▛▘ ▜████▄
|
|
95
|
+
█████ ▝█████▄ ████▛ ▐████▖ ▄████▛ ▀████▙
|
|
96
|
+
█████ ▀█████▖ ▐████▌ ▝████▙▄▄▄ ▟████▀ ▝████▙▖
|
|
97
|
+
█████ ▝▜████▙▖ █████ ▀███████ ▗█████▘ ▝▜████▖"""
|
|
98
|
+
|
|
99
|
+
# 16 lines
|
|
100
|
+
S16 = """\
|
|
101
|
+
███████ ▟██████▛▘ ▜██████▖ ▟██████▘
|
|
102
|
+
███████ ▟██████▛▘ ▝██████▙ ▗▟██████▘
|
|
103
|
+
███████ ▗▄██████▛▘ ▝▜█████▙ ▗██████▛
|
|
104
|
+
███████ ▄██████▛▘ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜██████▖ ▄██████▀
|
|
105
|
+
███████ ▄██████▛▘ █████████████████████████████████▌ ▝██████▖ ▟██████▘
|
|
106
|
+
███████ ▄██████▛▘ █████████████████████████████████▌ ▝▜█████▙▟█████▛▘
|
|
107
|
+
███████ ▄██████▛▘ ▐█████▌ ██████▌ ▜██████████▛
|
|
108
|
+
████████████████▄ ▐█████▌ ██████▌ ▐████████▌
|
|
109
|
+
██████████▛███████▖ ▐█████▌ ██████▌ ▄██████████▄
|
|
110
|
+
████████▀ ▝▜██████▙ ▐█████▌ ██████▌ ▟█████▛██████▙
|
|
111
|
+
███████ ▝███████▄ ██████▌ ██████▌ ▗██████▛ ▝▜█████▙▖
|
|
112
|
+
███████ ▜██████▙▖ ██████▘ ██████▌ ▗██████▀ ▜██████▖
|
|
113
|
+
███████ ▝███████▄ ▐██████ ██████▌ ▟██████▘ ▀██████▄
|
|
114
|
+
███████ ▀███████▖ ▟█████▛ ██████▙ ▗▟█████▛ ▝██████▙
|
|
115
|
+
███████ ▝▜██████▙ ▗██████▌ ▐██████████ ▗██████▛ ▝▜██████▖
|
|
116
|
+
███████ ▀███████▄ ▐██████ ▝▜████████▖ ▟██████▘ ▜██████▖"""
|
|
117
|
+
|
|
118
|
+
S16_LABS = """\
|
|
119
|
+
███████ ▟██████▛▘ ▜██████▖ ▟██████▘
|
|
120
|
+
███████ ▟██████▛▘ ▝██████▙ ▗▟██████▘
|
|
121
|
+
███████ ▗▄██████▛▘ KπX-Labs ▝▜█████▙ ▗██████▛
|
|
122
|
+
███████ ▄██████▛▘ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜██████▖ ▄██████▀
|
|
123
|
+
███████ ▄██████▛▘ █████████████████████████████████▌ ▝██████▖ ▟██████▘
|
|
124
|
+
███████ ▄██████▛▘ █████████████████████████████████▌ ▝▜█████▙▟█████▛▘
|
|
125
|
+
███████ ▄██████▛▘ ▐█████▌ ██████▌ ▜██████████▛
|
|
126
|
+
████████████████▄ ▐█████▌ ██████▌ ▐████████▌
|
|
127
|
+
██████████▛███████▖ ▐█████▌ ██████▌ ▄██████████▄
|
|
128
|
+
████████▀ ▝▜██████▙ ▐█████▌ ██████▌ ▟█████▛██████▙
|
|
129
|
+
███████ ▝███████▄ ██████▌ ██████▌ ▗██████▛ ▝▜█████▙▖
|
|
130
|
+
███████ ▜██████▙▖ ██████▘ ██████▌ ▗██████▀ ▜██████▖
|
|
131
|
+
███████ ▝███████▄ ▐██████ ██████▌ ▟██████▘ ▀██████▄
|
|
132
|
+
███████ ▀███████▖ ▟█████▛ ██████▙ ▗▟█████▛ ▝██████▙
|
|
133
|
+
███████ ▝▜██████▙ ▗██████▌ ▐██████████ ▗██████▛ ▝▜██████▖
|
|
134
|
+
███████ ▀███████▄ ▐██████ ▝▜████████▖ ▟██████▘ ▜██████▖"""
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class KπX_COMPACT(str, Enum):
|
|
138
|
+
"""KπX COMPACT family in condensed Unicode block elements."""
|
|
139
|
+
|
|
140
|
+
# 6 lines
|
|
141
|
+
S6 = """\
|
|
142
|
+
██▌ ▗▟█▀ ▝██ ▟█▛
|
|
143
|
+
██▌▄█▛▘ ▗▄▄▄▄▄▄▄▄▖ ▝█▙▟█▛
|
|
144
|
+
█████ ▝▘██▌ ██▌ ▐███
|
|
145
|
+
██▛▜█▙ ██▌ ██▌ ▟███▖
|
|
146
|
+
██▌ ▜█▙ ██ ██▌ ▟█▛▝██▖
|
|
147
|
+
██▌ ▜█▙ ▗██ ▜██▖ ▟█▛ ▝██"""
|
|
148
|
+
|
|
149
|
+
S6_LABS = """\
|
|
150
|
+
██▌ ▗▟█▀ KπX-Labs ▝██ ▟█▛
|
|
151
|
+
██▌▄█▛▘ ▗▄▄▄▄▄▄▄▄▖ ▝█▙▟█▛
|
|
152
|
+
█████ ▝▘██▌ ██▌ ▐███
|
|
153
|
+
██▛▜█▙ ██▌ ██▌ ▟███▖
|
|
154
|
+
██▌ ▜█▙ ██ ██▌ ▟█▛▝██▖
|
|
155
|
+
██▌ ▜█▙ ▗██ ▜██▖ ▟█▛ ▝██"""
|
|
156
|
+
|
|
157
|
+
# 8 lines
|
|
158
|
+
S8 = """\
|
|
159
|
+
███ ▗███▘ ███ ▗██▛
|
|
160
|
+
███ ▄██▛ ▝██▙ ▗██▛
|
|
161
|
+
███▗▟██▘ ███████████▌ ▝██▙██▛
|
|
162
|
+
██████▖ ███ ███ ▝████
|
|
163
|
+
███▛▜██▖ ██▛ ███ ▐████▖
|
|
164
|
+
███ ▜██▖ ██▌ ███ ▗██▛▜██▖
|
|
165
|
+
███ ▜██▙ ▗██▌ ███ ▗██▛ ▜██▖
|
|
166
|
+
███ ▜██▌ ▐██▘ ▝███▌ ▗██▛ ███"""
|
|
167
|
+
|
|
168
|
+
S8_LABS = """\
|
|
169
|
+
███ ▗███▘ ███ ▗██▛
|
|
170
|
+
███ ▄██▛ KπX-Labs ▝██▙ ▗██▛
|
|
171
|
+
███▗▟██▘ ███████████▌ ▝██▙██▛
|
|
172
|
+
██████▖ ███ ███ ▝████
|
|
173
|
+
███▛▜██▖ ██▛ ███ ▐████▖
|
|
174
|
+
███ ▜██▖ ██▌ ███ ▗██▛▜██▖
|
|
175
|
+
███ ▜██▙ ▗██▌ ███ ▗██▛ ▜██▖
|
|
176
|
+
███ ▜██▌ ▐██▘ ▝███▌ ▗██▛ ███"""
|
|
177
|
+
|
|
178
|
+
# 10 lines
|
|
179
|
+
S10 = """\
|
|
180
|
+
███▌ ▗███▛ ▜███ ███▛
|
|
181
|
+
███▌ ▟███▘ ▜██▙ ▟██▛
|
|
182
|
+
███▌ ▗▟██▛ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▜██▙ ▟██▛
|
|
183
|
+
███▌▄███▘ █▛▀███▛▀▀▜███▀▀ ▜█████▛
|
|
184
|
+
███████▙ ███ ▐███ ▜████
|
|
185
|
+
████▛███▙ ███ ▐███ ▗█████▖
|
|
186
|
+
███▌ ▝▜██▙ ███ ▐███ ▗███▀███▖
|
|
187
|
+
███▌ ▜███▖ ▐███ ▐███ ▗███▘ ▝███▖
|
|
188
|
+
███▌ ▜███▖ ▐███ ▐███▄▖ ▗███▌ ▐███▖
|
|
189
|
+
███▌ ▜███▖ ███▌ ▜████ ▗███▛ ▜███"""
|
|
190
|
+
|
|
191
|
+
S10_LABS = """\
|
|
192
|
+
███▌ ▗███▛ ▜███ ███▛
|
|
193
|
+
███▌ ▟███▘ KπX-Labs ▜██▙ ▟██▛
|
|
194
|
+
███▌ ▗▟██▛ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▜██▙ ▟██▛
|
|
195
|
+
███▌▄███▘ █▛▀███▛▀▀▜███▀▀ ▜█████▛
|
|
196
|
+
███████▙ ███ ▐███ ▜████
|
|
197
|
+
████▛███▙ ███ ▐███ ▗█████▖
|
|
198
|
+
███▌ ▝▜██▙ ███ ▐███ ▗███▀███▖
|
|
199
|
+
███▌ ▜███▖ ▐███ ▐███ ▗███▘ ▝███▖
|
|
200
|
+
███▌ ▜███▖ ▐███ ▐███▄▖ ▗███▌ ▐███▖
|
|
201
|
+
███▌ ▜███▖ ███▌ ▜████ ▗███▛ ▜███"""
|
|
202
|
+
|
|
203
|
+
# 12 lines
|
|
204
|
+
S12 = """\
|
|
205
|
+
████ ▗████▘ ▝████ ▟███▌
|
|
206
|
+
████ ▟███▛ ▝███▙ ▟███▛
|
|
207
|
+
████ ▗████▀ ▝███▙ ▟███▛
|
|
208
|
+
████ ▟███▛▘ ▐█████████████████▌ ▝███▙▗███▛
|
|
209
|
+
████▗▟███▀ ▝▀▀▀███▛▀▀▀▜███▛▀▀▘ ▝██████▛
|
|
210
|
+
█████████▖ ███▌ ▐███▌ ▐█████
|
|
211
|
+
█████▛████▖ ███▌ ▐███▌ ▗██████▌
|
|
212
|
+
████▀ ▝████▄ ███▌ ▐███▌ ████▜███▖
|
|
213
|
+
████ ▝▜███▙ ▐███▌ ▐███▌ ▟███▘ ▜███▖
|
|
214
|
+
████ ▜███▙ ▐███▌ ▐███▌ ▟███▘ ▝████▖
|
|
215
|
+
████ ▜███▙ ████ ▝████▄▄ ▟███▘ ▝████▖
|
|
216
|
+
████ ▜████ ███▛ ▀█████ ▟███▌ ▝████"""
|
|
217
|
+
|
|
218
|
+
S12_LABS = """\
|
|
219
|
+
████ ▗████▘ ▝████ ▟███▌
|
|
220
|
+
████ ▟███▛ ▝███▙ ▟███▛
|
|
221
|
+
████ ▗████▀ KπX-Labs ▝███▙ ▟███▛
|
|
222
|
+
████ ▟███▛▘ ▐█████████████████▌ ▝███▙▗███▛
|
|
223
|
+
████▗▟███▀ ▝▀▀▀███▛▀▀▀▜███▛▀▀▘ ▝██████▛
|
|
224
|
+
█████████▖ ███▌ ▐███▌ ▐█████
|
|
225
|
+
█████▛████▖ ███▌ ▐███▌ ▗██████▌
|
|
226
|
+
████▀ ▝████▄ ███▌ ▐███▌ ████▜███▖
|
|
227
|
+
████ ▝▜███▙ ▐███▌ ▐███▌ ▟███▘ ▜███▖
|
|
228
|
+
████ ▜███▙ ▐███▌ ▐███▌ ▟███▘ ▝████▖
|
|
229
|
+
████ ▜███▙ ████ ▝████▄▄ ▟███▘ ▝████▖
|
|
230
|
+
████ ▜████ ███▛ ▀█████ ▟███▌ ▝████"""
|
|
231
|
+
|
|
232
|
+
# 16 lines
|
|
233
|
+
S16 = """\
|
|
234
|
+
█████▌ ▄█████▀ ▜█████ ▗█████▘
|
|
235
|
+
█████▌ ▗▟█████▘ ▜████▙ ▗█████▘
|
|
236
|
+
█████▌ ▗█████▛ ▜████▙ █████▌
|
|
237
|
+
█████▌ ▟█████▘ ▗▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜████▙ ▟████▛
|
|
238
|
+
█████▌ ▗█████▛ ▐███████████████████████▌ ▜████▙ ▟████▛
|
|
239
|
+
█████▌ ▟█████▘ ▐███████████████████████▌ ▜█████████▛
|
|
240
|
+
█████▙▟████▛ ▐████ ▐████▌ ▜███████▛
|
|
241
|
+
████████████▖ ▟████ ▐████▌ ███████
|
|
242
|
+
█████████████▄ █████ ▐████▌ ▟███████▙
|
|
243
|
+
██████▀ ▝█████▙ █████ ▐████▌ ▟█████████▙
|
|
244
|
+
█████▌ ▝█████▙ █████ ▐████▌ ▐████▛▝█████▌
|
|
245
|
+
█████▌ ▝█████▙ █████ ▐████▌ ▗████▛ ▝█████▖
|
|
246
|
+
█████▌ ▝▜█████▖ ▐████▛ ▐████▌ ▗█████▘ ▝█████▖
|
|
247
|
+
█████▌ ▜█████▖ ▐████▌ ▐█████▖ ▗█████▘ ▝█████▖
|
|
248
|
+
█████▌ ▜█████▖ █████▘ ████████ ▗█████▘ ▝█████▖
|
|
249
|
+
█████▌ ▜█████▖ ▗█████ ▝▜██████▖ ▗█████▘ ▜█████"""
|
|
250
|
+
|
|
251
|
+
S16_LABS = """\
|
|
252
|
+
█████▌ ▄█████▀ ▜█████ ▗█████▘
|
|
253
|
+
█████▌ ▗▟█████▘ ▜████▙ ▗█████▘
|
|
254
|
+
█████▌ ▗█████▛ KπX-Labs ▜████▙ █████▌
|
|
255
|
+
█████▌ ▟█████▘ ▗▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖ ▜████▙ ▟████▛
|
|
256
|
+
█████▌ ▗█████▛ ▐███████████████████████▌ ▜████▙ ▟████▛
|
|
257
|
+
█████▌ ▟█████▘ ▐███████████████████████▌ ▜█████████▛
|
|
258
|
+
█████▙▟████▛ ▐████ ▐████▌ ▜███████▛
|
|
259
|
+
████████████▖ ▟████ ▐████▌ ███████
|
|
260
|
+
█████████████▄ █████ ▐████▌ ▟███████▙
|
|
261
|
+
██████▀ ▝█████▙ █████ ▐████▌ ▟█████████▙
|
|
262
|
+
█████▌ ▝█████▙ █████ ▐████▌ ▐████▛▝█████▌
|
|
263
|
+
█████▌ ▝█████▙ █████ ▐████▌ ▗████▛ ▝█████▖
|
|
264
|
+
█████▌ ▝▜█████▖ ▐████▛ ▐████▌ ▗█████▘ ▝█████▖
|
|
265
|
+
█████▌ ▜█████▖ ▐████▌ ▐█████▖ ▗█████▘ ▝█████▖
|
|
266
|
+
█████▌ ▜█████▖ █████▘ ████████ ▗█████▘ ▝█████▖
|
|
267
|
+
█████▌ ▜█████▖ ▗█████ ▝▜██████▖ ▗█████▘ ▜█████"""
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class KπX_π_BOLD(str, Enum):
|
|
271
|
+
"""KπX BOLD family drawn with the 'π' glyph."""
|
|
272
|
+
|
|
273
|
+
# 6 lines
|
|
274
|
+
S6 = """\
|
|
275
|
+
ππ πππ ππ πππ
|
|
276
|
+
ππ πππ πππππππππππ πππ πππ
|
|
277
|
+
ππππππ πππ ππ ππππ
|
|
278
|
+
πππ πππ ππ ππ πππππ
|
|
279
|
+
ππ πππ πππ ππ ππ πππ
|
|
280
|
+
ππ πππ ππ ππππ πππ ππ"""
|
|
281
|
+
|
|
282
|
+
S6_LABS = """\
|
|
283
|
+
ππ πππ KπX-Labs ππ πππ
|
|
284
|
+
ππ πππ πππππππππππ πππ πππ
|
|
285
|
+
ππππππ πππ ππ ππππ
|
|
286
|
+
πππ πππ ππ ππ πππππ
|
|
287
|
+
ππ πππ πππ ππ ππ πππ
|
|
288
|
+
ππ πππ ππ ππππ πππ ππ"""
|
|
289
|
+
|
|
290
|
+
# 8 lines
|
|
291
|
+
S8 = """\
|
|
292
|
+
πππ ππππ πππ ππππ
|
|
293
|
+
πππ πππ ππππ ππππ
|
|
294
|
+
πππ πππ ππππππππππππππππ πππ πππ
|
|
295
|
+
ππππππππ πππ πππ πππππ
|
|
296
|
+
πππππ πππ πππ πππ πππππππ
|
|
297
|
+
πππ ππππ πππ πππ ππππ ππππ
|
|
298
|
+
πππ ππππ πππ πππ πππ πππ
|
|
299
|
+
πππ ππππ πππ πππππ ππππ πππ"""
|
|
300
|
+
|
|
301
|
+
S8_LABS = """\
|
|
302
|
+
πππ ππππ πππ ππππ
|
|
303
|
+
πππ πππ KπX-Labs ππππ ππππ
|
|
304
|
+
πππ πππ ππππππππππππππππ πππ πππ
|
|
305
|
+
ππππππππ πππ πππ πππππ
|
|
306
|
+
πππππ πππ πππ πππ πππππππ
|
|
307
|
+
πππ ππππ πππ πππ ππππ ππππ
|
|
308
|
+
πππ ππππ πππ πππ πππ πππ
|
|
309
|
+
πππ ππππ πππ πππππ ππππ πππ"""
|
|
310
|
+
|
|
311
|
+
# 10 lines
|
|
312
|
+
S10 = """\
|
|
313
|
+
ππππ πππππ πππππ πππππ
|
|
314
|
+
ππππ πππππ ππππ ππππ
|
|
315
|
+
ππππ πππππ ππππππππππππππππππππ ππππ ππππ
|
|
316
|
+
ππππ πππππ ππππππππππππππππππππ πππππππππ
|
|
317
|
+
ππππππππππ ππππ ππππ ππππππ
|
|
318
|
+
ππππππππππππ ππππ ππππ πππππππ
|
|
319
|
+
ππππ πππππ ππππ ππππ ππππ πππππ
|
|
320
|
+
ππππ πππππ ππππ ππππ πππππ πππππ
|
|
321
|
+
ππππ πππππ ππππ ππππ ππππ ππππ
|
|
322
|
+
ππππ πππππ ππππ ππππππ ππππ ππππ"""
|
|
323
|
+
|
|
324
|
+
S10_LABS = """\
|
|
325
|
+
ππππ πππππ πππππ πππππ
|
|
326
|
+
ππππ πππππ KπX-Labs ππππ ππππ
|
|
327
|
+
ππππ πππππ ππππππππππππππππππππ ππππ ππππ
|
|
328
|
+
ππππ πππππ ππππππππππππππππππππ πππππππππ
|
|
329
|
+
ππππππππππ ππππ ππππ ππππππ
|
|
330
|
+
ππππππππππππ ππππ ππππ πππππππ
|
|
331
|
+
ππππ πππππ ππππ ππππ ππππ πππππ
|
|
332
|
+
ππππ πππππ ππππ ππππ πππππ πππππ
|
|
333
|
+
ππππ πππππ ππππ ππππ ππππ ππππ
|
|
334
|
+
ππππ πππππ ππππ ππππππ ππππ ππππ"""
|
|
335
|
+
|
|
336
|
+
# 12 lines
|
|
337
|
+
S12 = """\
|
|
338
|
+
πππππ ππππππ πππππ ππππππ
|
|
339
|
+
πππππ ππππππ πππππ πππππ
|
|
340
|
+
πππππ ππππππ πππππ πππππ
|
|
341
|
+
πππππ ππππππ πππππππππππππππππππππππππ πππππ πππππ
|
|
342
|
+
πππππ ππππππ π ππππππ ππππππ πππππππππ
|
|
343
|
+
ππππππππππππ ππππ πππππ πππππππ
|
|
344
|
+
ππππππππππππππ ππππ πππππ ππππππππ
|
|
345
|
+
πππππ πππππ πππππ πππππ πππππ πππππ
|
|
346
|
+
πππππ ππππππ πππππ πππππ πππππ ππππππ
|
|
347
|
+
πππππ ππππππ πππππ πππππ πππππ ππππππ
|
|
348
|
+
πππππ ππππππ ππππ πππππππ πππππ πππππ
|
|
349
|
+
πππππ ππππππ πππππ πππππππ πππππ πππππ"""
|
|
350
|
+
|
|
351
|
+
S12_LABS = """\
|
|
352
|
+
πππππ ππππππ πππππ ππππππ
|
|
353
|
+
πππππ ππππππ πππππ πππππ
|
|
354
|
+
πππππ ππππππ KπX-Labs πππππ πππππ
|
|
355
|
+
πππππ ππππππ πππππππππππππππππππππππππ πππππ πππππ
|
|
356
|
+
πππππ ππππππ π ππππππ ππππππ πππππππππ
|
|
357
|
+
ππππππππππππ ππππ πππππ πππππππ
|
|
358
|
+
ππππππππππππππ ππππ πππππ ππππππππ
|
|
359
|
+
πππππ πππππ πππππ πππππ πππππ πππππ
|
|
360
|
+
πππππ ππππππ πππππ πππππ πππππ ππππππ
|
|
361
|
+
πππππ ππππππ πππππ πππππ πππππ ππππππ
|
|
362
|
+
πππππ ππππππ ππππ πππππππ πππππ πππππ
|
|
363
|
+
πππππ ππππππ πππππ πππππππ πππππ πππππ"""
|
|
364
|
+
|
|
365
|
+
# 16 lines
|
|
366
|
+
S16 = """\
|
|
367
|
+
πππππππ ππππππππ πππππππ πππππππ
|
|
368
|
+
πππππππ ππππππππ πππππππ πππππππ
|
|
369
|
+
πππππππ ππππππππ πππππππ πππππππ
|
|
370
|
+
πππππππ ππππππππ πππππππ πππππππ
|
|
371
|
+
πππππππ ππππππππ ππππππππππππππππππππππππππππππππππ ππππππ πππππππ
|
|
372
|
+
πππππππ ππππππππ πππππππππππππππππππππππππππππππππ ππππππππππππππ
|
|
373
|
+
πππππππ ππππππππ πππππππ ππππππ ππππππππππππ
|
|
374
|
+
πππππππππππππππππ πππππππ ππππππ ππππππππππ
|
|
375
|
+
ππππππππππππππππππ πππππππ ππππππ ππππππππππ
|
|
376
|
+
πππππππππ ππππππππ πππππππ ππππππ ππππππππππππππ
|
|
377
|
+
πππππππ πππππππ ππππππ ππππππ πππππππ πππππππ
|
|
378
|
+
πππππππ ππππππππ ππππππ ππππππ ππππππ πππππππ
|
|
379
|
+
πππππππ ππππππππ ππππππ ππππππ πππππππ ππππππππ
|
|
380
|
+
πππππππ ππππππππ πππππππ πππππππ πππππππ πππππππ
|
|
381
|
+
πππππππ ππππππππ ππππππ πππππππππππ πππππππ πππππππ
|
|
382
|
+
πππππππ ππππππππ πππππππ πππππππππ πππππππ πππππππ"""
|
|
383
|
+
|
|
384
|
+
S16_LABS = """\
|
|
385
|
+
πππππππ ππππππππ πππππππ πππππππ
|
|
386
|
+
πππππππ ππππππππ πππππππ πππππππ
|
|
387
|
+
πππππππ ππππππππ ππππππ πππππππ
|
|
388
|
+
πππππππ ππππππππ KπX-Labs πππππππ πππππππ
|
|
389
|
+
πππππππ ππππππππ ππππππππππππππππππππππππππππππππππ ππππππ πππππππ
|
|
390
|
+
πππππππ ππππππππ πππππππππππππππππππππππππππππππππ ππππππππππππππ
|
|
391
|
+
πππππππ ππππππππ πππππππ ππππππ ππππππππππππ
|
|
392
|
+
πππππππππππππππππ πππππππ ππππππ ππππππππππ
|
|
393
|
+
ππππππππππππππππππ πππππππ ππππππ ππππππππππ
|
|
394
|
+
πππππππππ ππππππππ πππππππ ππππππ ππππππππππππππ
|
|
395
|
+
πππππππ πππππππ ππππππ ππππππ πππππππ πππππππ
|
|
396
|
+
πππππππ ππππππππ ππππππ ππππππ ππππππ πππππππ
|
|
397
|
+
πππππππ ππππππππ ππππππ ππππππ πππππππ ππππππππ
|
|
398
|
+
πππππππ ππππππππ πππππππ πππππππ πππππππ πππππππ
|
|
399
|
+
πππππππ ππππππππ ππππππ πππππππππππ πππππππ πππππππ
|
|
400
|
+
πππππππ ππππππππ πππππππ πππππππππ πππππππ πππππππ"""
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
class KπX_π_COMPACT(str, Enum):
|
|
404
|
+
"""KπX COMPACT family rendered using the 'π' character."""
|
|
405
|
+
|
|
406
|
+
# 6 lines
|
|
407
|
+
S6 = """\
|
|
408
|
+
ππ πππ ππ πππ
|
|
409
|
+
ππ ππ ππππππππ πππππ
|
|
410
|
+
πππππ ππ ππ πππ
|
|
411
|
+
ππππππ ππ ππ ππππ
|
|
412
|
+
ππ πππ ππ ππ πππ ππ
|
|
413
|
+
ππ πππ ππ πππ πππ ππ"""
|
|
414
|
+
|
|
415
|
+
S6_LABS = """\
|
|
416
|
+
ππ πππ KπX-Labs ππ πππ
|
|
417
|
+
ππ ππ ππππππππ πππππ
|
|
418
|
+
πππππ ππ ππ πππ
|
|
419
|
+
ππππππ ππ ππ ππππ
|
|
420
|
+
ππ πππ ππ ππ πππ ππ
|
|
421
|
+
ππ πππ ππ πππ πππ ππ"""
|
|
422
|
+
|
|
423
|
+
# 8 lines (Default sovereign choice requested by KπX)
|
|
424
|
+
S8 = """\
|
|
425
|
+
πππ πππ πππ πππ
|
|
426
|
+
πππ ππππ πππ πππ
|
|
427
|
+
πππ πππ ππππππππππππ ππππππ
|
|
428
|
+
ππππππ πππ πππ ππππ
|
|
429
|
+
πππππππ πππ πππ πππππ
|
|
430
|
+
πππ πππ πππ πππ ππππππ
|
|
431
|
+
πππ ππππ πππ πππ πππ πππ
|
|
432
|
+
πππ ππππ πππ ππππ πππ πππ"""
|
|
433
|
+
|
|
434
|
+
S8_LABS = """\
|
|
435
|
+
πππ πππ πππ πππ
|
|
436
|
+
πππ ππππ KπX-Labs πππ πππ
|
|
437
|
+
πππ πππ ππππππππππππ ππππππ
|
|
438
|
+
ππππππ πππ πππ ππππ
|
|
439
|
+
πππππππ πππ πππ πππππ
|
|
440
|
+
πππ πππ πππ πππ ππππππ
|
|
441
|
+
πππ ππππ πππ πππ πππ πππ
|
|
442
|
+
πππ ππππ πππ ππππ πππ πππ"""
|
|
443
|
+
|
|
444
|
+
# 10 lines
|
|
445
|
+
S10 = """\
|
|
446
|
+
πππ ππππ ππππ ππππ
|
|
447
|
+
πππ ππππ ππππ ππππ
|
|
448
|
+
πππ ππππ ππππππππππππππ ππππ ππππ
|
|
449
|
+
ππππππππ πππππππππππππππ πππππππ
|
|
450
|
+
ππππππππ πππ ππππ πππππ
|
|
451
|
+
πππππππππ πππ ππππ πππππ
|
|
452
|
+
ππππ ππππ πππ ππππ πππππππ
|
|
453
|
+
πππ ππππ πππ ππππ πππ πππ
|
|
454
|
+
πππ ππππ ππππ πππ πππ ππππ
|
|
455
|
+
πππ ππππ ππππ πππππ ππππ ππππ"""
|
|
456
|
+
|
|
457
|
+
S10_LABS = """\
|
|
458
|
+
πππ ππππ ππππ ππππ
|
|
459
|
+
πππ ππππ KπX-Labs ππππ ππππ
|
|
460
|
+
πππ ππππ ππππππππππππππ ππππ ππππ
|
|
461
|
+
ππππππππ πππππππππππππππ πππππππ
|
|
462
|
+
ππππππππ πππ ππππ πππππ
|
|
463
|
+
πππππππππ πππ ππππ πππππ
|
|
464
|
+
ππππ ππππ πππ ππππ πππππππ
|
|
465
|
+
πππ ππππ πππ ππππ πππ πππ
|
|
466
|
+
πππ ππππ ππππ πππ πππ ππππ
|
|
467
|
+
πππ ππππ ππππ πππππ ππππ ππππ"""
|
|
468
|
+
|
|
469
|
+
# 12 lines
|
|
470
|
+
S12 = """\
|
|
471
|
+
ππππ ππππ ππππ πππππ
|
|
472
|
+
ππππ πππππ ππππ πππππ
|
|
473
|
+
ππππ ππππ ππππ πππππ
|
|
474
|
+
ππππ πππππ ππππππππππππππππππ ππππ ππππ
|
|
475
|
+
ππππ πππππ π ππππ πππππ πππππππ
|
|
476
|
+
πππππππππ ππππ ππππ ππππππ
|
|
477
|
+
ππππππππππ ππππ ππππ ππππππ
|
|
478
|
+
ππππ ππππ ππππ ππππ ππππππππ
|
|
479
|
+
ππππ πππππ ππππ ππππ ππππ ππππ
|
|
480
|
+
ππππ πππππ ππππ ππππ ππππ ππππ
|
|
481
|
+
ππππ πππππ ππππ ππππππ ππππ ππππ
|
|
482
|
+
ππππ πππππ ππππ πππππ ππππ ππππ"""
|
|
483
|
+
|
|
484
|
+
S12_LABS = """\
|
|
485
|
+
ππππ ππππ ππππ πππππ
|
|
486
|
+
ππππ πππππ ππππ πππππ
|
|
487
|
+
ππππ ππππ KπX-Labs ππππ πππππ
|
|
488
|
+
ππππ πππππ ππππππππππππππππππ ππππ ππππ
|
|
489
|
+
ππππ πππππ π ππππ πππππ πππππππ
|
|
490
|
+
πππππππππ ππππ ππππ ππππππ
|
|
491
|
+
ππππππππππ ππππ ππππ ππππππ
|
|
492
|
+
ππππ ππππ ππππ ππππ ππππππππ
|
|
493
|
+
ππππ πππππ ππππ ππππ ππππ ππππ
|
|
494
|
+
ππππ πππππ ππππ ππππ ππππ ππππ
|
|
495
|
+
ππππ πππππ ππππ ππππππ ππππ ππππ
|
|
496
|
+
ππππ πππππ ππππ πππππ ππππ ππππ"""
|
|
497
|
+
|
|
498
|
+
# 16 lines
|
|
499
|
+
S16 = """\
|
|
500
|
+
πππππ πππππππ ππππππ πππππ
|
|
501
|
+
πππππ ππππππ ππππππ πππππ
|
|
502
|
+
πππππ ππππππ ππππππ ππππππ
|
|
503
|
+
πππππ ππππππ ππππππ ππππππ
|
|
504
|
+
πππππ ππππππ ππππππππππππππππππππππππ ππππππ ππππππ
|
|
505
|
+
πππππ ππππππ ππππππππππππππππππππππππ πππππππππππ
|
|
506
|
+
ππππππππππππ πππππ πππππ πππππππππ
|
|
507
|
+
ππππππππππππ πππππ πππππ πππππππ
|
|
508
|
+
πππππππππππππ πππππ πππππ πππππππππ
|
|
509
|
+
πππππππ ππππππ πππππ πππππ πππππππππππ
|
|
510
|
+
πππππ ππππππ πππππ πππππ ππππππ πππππ
|
|
511
|
+
πππππ ππππππ πππππ πππππ πππππ πππππ
|
|
512
|
+
πππππ ππππππ πππππ πππππ πππππ πππππ
|
|
513
|
+
πππππ ππππππ ππππππ πππππ πππππ πππππ
|
|
514
|
+
πππππ ππππππ πππππ ππππππππ πππππ πππππ
|
|
515
|
+
πππππ ππππππ πππππ πππππππ πππππ ππππππ"""
|
|
516
|
+
|
|
517
|
+
S16_LABS = """\
|
|
518
|
+
πππππ πππππππ ππππππ πππππ
|
|
519
|
+
πππππ ππππππ ππππππ πππππ
|
|
520
|
+
πππππ ππππππ ππππππ ππππππ
|
|
521
|
+
πππππ ππππππ KπX-Labs ππππππ ππππππ
|
|
522
|
+
πππππ ππππππ ππππππππππππππππππππππππ ππππππ ππππππ
|
|
523
|
+
πππππ ππππππ ππππππππππππππππππππππππ πππππππππππ
|
|
524
|
+
ππππππππππππ πππππ πππππ πππππππππ
|
|
525
|
+
ππππππππππππ πππππ πππππ πππππππ
|
|
526
|
+
πππππππππππππ πππππ πππππ πππππππππ
|
|
527
|
+
πππππππ ππππππ πππππ πππππ πππππππππππ
|
|
528
|
+
πππππ ππππππ πππππ πππππ ππππππ πππππ
|
|
529
|
+
πππππ ππππππ πππππ πππππ πππππ πππππ
|
|
530
|
+
πππππ ππππππ πππππ πππππ πππππ πππππ
|
|
531
|
+
πππππ ππππππ ππππππ πππππ πππππ πππππ
|
|
532
|
+
πππππ ππππππ πππππ ππππππππ πππππ πππππ
|
|
533
|
+
πππππ ππππππ πππππ πππππππ πππππ ππππππ"""
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
class π_BLOCK(str, Enum):
|
|
537
|
+
"""Isolated central 'π' glyph in solid Unicode block elements."""
|
|
538
|
+
|
|
539
|
+
S6 = """\
|
|
540
|
+
▄▄▄▄▄▄▄▄▄▄▄▄▖
|
|
541
|
+
▐██ ██▌
|
|
542
|
+
▐██ ██▌
|
|
543
|
+
▐█▛ ██▌
|
|
544
|
+
██▌ ▜██▟ """
|
|
545
|
+
|
|
546
|
+
S6_LABS = """\
|
|
547
|
+
KπX-Labs
|
|
548
|
+
▄▄▄▄▄▄▄▄▄▄▄▄▖
|
|
549
|
+
▐██ ██▌
|
|
550
|
+
▐██ ██▌
|
|
551
|
+
▐█▛ ██▌
|
|
552
|
+
██▌ ▜██▟ """
|
|
553
|
+
|
|
554
|
+
S8 = """\
|
|
555
|
+
▐████████████████▘
|
|
556
|
+
▐███ ███
|
|
557
|
+
▐███ ███
|
|
558
|
+
▐██▌ ███
|
|
559
|
+
▟██▌ ███▖
|
|
560
|
+
▗███ ▀████▌"""
|
|
561
|
+
|
|
562
|
+
S8_LABS = """\
|
|
563
|
+
KπX-Labs
|
|
564
|
+
▐████████████████▘
|
|
565
|
+
▐███ ███
|
|
566
|
+
▐███ ███
|
|
567
|
+
▐██▌ ███
|
|
568
|
+
▟██▌ ███▖
|
|
569
|
+
▗███ ▀████▌"""
|
|
570
|
+
|
|
571
|
+
S9 = """\
|
|
572
|
+
█████████████████████████
|
|
573
|
+
▀▀▀▀▜████▀▀▀▀▀▀▜████▀▀▀▀▀
|
|
574
|
+
▐████ ▐████
|
|
575
|
+
▐████ ▐████
|
|
576
|
+
▐████ ▐████
|
|
577
|
+
▟████ ▐████
|
|
578
|
+
████▛ ▐████▖
|
|
579
|
+
▐████▌ ▝████▙▄▄▄
|
|
580
|
+
█████ ▀███████"""
|
|
581
|
+
|
|
582
|
+
S9_LABS = """\
|
|
583
|
+
KπX-Labs
|
|
584
|
+
█████████████████████████
|
|
585
|
+
▀▀▀▀▜████▀▀▀▀▀▀▜████▀▀▀▀▀
|
|
586
|
+
▐████ ▐████
|
|
587
|
+
▐████ ▐████
|
|
588
|
+
▐████ ▐████
|
|
589
|
+
▟████ ▐████
|
|
590
|
+
████▛ ▐████▖
|
|
591
|
+
▐████▌ ▝████▙▄▄▄
|
|
592
|
+
█████ ▀███████"""
|
|
593
|
+
|
|
594
|
+
S12 = """\
|
|
595
|
+
█████████████████████████
|
|
596
|
+
▀▀▀▀▜████▀▀▀▀▀▀▜████▀▀▀▀▀
|
|
597
|
+
▐████ ▐████
|
|
598
|
+
▐████ ▐████
|
|
599
|
+
▐████ ▐████
|
|
600
|
+
▟████ ▐████
|
|
601
|
+
████▛ ▐████▖
|
|
602
|
+
▐████▌ ▝████▙▄▄▄
|
|
603
|
+
█████ ▀███████
|
|
604
|
+
█████ ██████▌
|
|
605
|
+
█████ ██████ """
|
|
606
|
+
|
|
607
|
+
S12_LABS = """\
|
|
608
|
+
KπX-Labs
|
|
609
|
+
█████████████████████████
|
|
610
|
+
▀▀▀▀▜████▀▀▀▀▀▀▜████▀▀▀▀▀
|
|
611
|
+
▐████ ▐████
|
|
612
|
+
▐████ ▐████
|
|
613
|
+
▐████ ▐████
|
|
614
|
+
▟████ ▐████
|
|
615
|
+
████▛ ▐████▖
|
|
616
|
+
▐████▌ ▝████▙▄▄▄
|
|
617
|
+
█████ ▀███████
|
|
618
|
+
█████ ██████▌
|
|
619
|
+
█████ ██████ """
|
|
620
|
+
|
|
621
|
+
S16 = """\
|
|
622
|
+
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖
|
|
623
|
+
█████████████████████████████████▌
|
|
624
|
+
█████████████████████████████████▌
|
|
625
|
+
▐█████▌ ██████▌
|
|
626
|
+
▐█████▌ ██████▌
|
|
627
|
+
▐█████▌ ██████▌
|
|
628
|
+
▐█████▌ ██████▌
|
|
629
|
+
██████▌ ██████▌
|
|
630
|
+
██████▘ ██████▌
|
|
631
|
+
▐██████ ██████▌
|
|
632
|
+
▟█████▛ ██████▙
|
|
633
|
+
▗██████▌ ▐██████████
|
|
634
|
+
▐██████ ▝▜████████▖
|
|
635
|
+
██████▌ █████████
|
|
636
|
+
██████ ████████ """
|
|
637
|
+
|
|
638
|
+
S16_LABS = """\
|
|
639
|
+
KπX-Labs
|
|
640
|
+
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▖
|
|
641
|
+
█████████████████████████████████▌
|
|
642
|
+
█████████████████████████████████▌
|
|
643
|
+
▐█████▌ ██████▌
|
|
644
|
+
▐█████▌ ██████▌
|
|
645
|
+
▐█████▌ ██████▌
|
|
646
|
+
▐█████▌ ██████▌
|
|
647
|
+
██████▌ ██████▌
|
|
648
|
+
██████▘ ██████▌
|
|
649
|
+
▐██████ ██████▌
|
|
650
|
+
▟█████▛ ██████▙
|
|
651
|
+
▗██████▌ ▐██████████
|
|
652
|
+
▐██████ ▝▜████████▖
|
|
653
|
+
██████▌ █████████
|
|
654
|
+
██████ ████████ """
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
class π_π(str, Enum):
|
|
658
|
+
"""Isolated central 'π' glyph rendered using the 'π' character."""
|
|
659
|
+
|
|
660
|
+
S6 = """\
|
|
661
|
+
πππππππππππ
|
|
662
|
+
πππ ππ
|
|
663
|
+
ππ ππ
|
|
664
|
+
πππ ππ
|
|
665
|
+
ππ ππππ """
|
|
666
|
+
|
|
667
|
+
S6_LABS = """\
|
|
668
|
+
KπX-Labs
|
|
669
|
+
πππππππππππ
|
|
670
|
+
πππ ππ
|
|
671
|
+
ππ ππ
|
|
672
|
+
πππ ππ
|
|
673
|
+
ππ ππππ """
|
|
674
|
+
|
|
675
|
+
S8 = """\
|
|
676
|
+
ππππππππππππππππ
|
|
677
|
+
πππ πππ
|
|
678
|
+
πππ πππ
|
|
679
|
+
πππ πππ
|
|
680
|
+
πππ πππ
|
|
681
|
+
πππ πππππ"""
|
|
682
|
+
|
|
683
|
+
S8_LABS = """\
|
|
684
|
+
KπX-Labs
|
|
685
|
+
ππππππππππππππππ
|
|
686
|
+
πππ πππ
|
|
687
|
+
πππ πππ
|
|
688
|
+
πππ πππ
|
|
689
|
+
πππ πππ
|
|
690
|
+
πππ πππππ """
|
|
691
|
+
|
|
692
|
+
S9 = """\
|
|
693
|
+
πππππππππππππππππππππππππ
|
|
694
|
+
π ππππππ ππππππ
|
|
695
|
+
ππππ πππππ
|
|
696
|
+
ππππ πππππ
|
|
697
|
+
πππππ πππππ
|
|
698
|
+
πππππ πππππ
|
|
699
|
+
πππππ πππππ
|
|
700
|
+
ππππ πππππππ
|
|
701
|
+
πππππ πππππππ """
|
|
702
|
+
|
|
703
|
+
S9_LABS = """\
|
|
704
|
+
KπX-Labs
|
|
705
|
+
πππππππππππππππππππππππππ
|
|
706
|
+
π ππππππ ππππππ
|
|
707
|
+
ππππ πππππ
|
|
708
|
+
ππππ πππππ
|
|
709
|
+
πππππ πππππ
|
|
710
|
+
πππππ πππππ
|
|
711
|
+
πππππ πππππ
|
|
712
|
+
ππππ πππππππ
|
|
713
|
+
πππππ πππππππ """
|
|
714
|
+
|
|
715
|
+
S12 = """\
|
|
716
|
+
πππππππππππππππππππππππππ
|
|
717
|
+
π ππππππ ππππππ
|
|
718
|
+
ππππ πππππ
|
|
719
|
+
ππππ πππππ
|
|
720
|
+
πππππ πππππ
|
|
721
|
+
πππππ πππππ
|
|
722
|
+
πππππ πππππ
|
|
723
|
+
ππππ πππππππ
|
|
724
|
+
πππππ πππππππ
|
|
725
|
+
πππππ ππππππ
|
|
726
|
+
πππππ πππππ """
|
|
727
|
+
|
|
728
|
+
S12_LABS = """\
|
|
729
|
+
KπX-Labs
|
|
730
|
+
πππππππππππππππππππππππππ
|
|
731
|
+
π ππππππ ππππππ
|
|
732
|
+
ππππ πππππ
|
|
733
|
+
ππππ πππππ
|
|
734
|
+
πππππ πππππ
|
|
735
|
+
πππππ πππππ
|
|
736
|
+
πππππ πππππ
|
|
737
|
+
ππππ πππππππ
|
|
738
|
+
πππππ πππππππ
|
|
739
|
+
πππππ ππππππ
|
|
740
|
+
πππππ πππππ """
|
|
741
|
+
|
|
742
|
+
S16 = """\
|
|
743
|
+
ππππππππππππππππππππππππππππππππππ
|
|
744
|
+
ππππππππππππππππππππππππππππππππππ
|
|
745
|
+
πππππππ ππππππ
|
|
746
|
+
πππππππ ππππππ
|
|
747
|
+
πππππππ ππππππ
|
|
748
|
+
πππππππ ππππππ
|
|
749
|
+
ππππππ ππππππ
|
|
750
|
+
ππππππ ππππππ
|
|
751
|
+
ππππππ ππππππ
|
|
752
|
+
πππππππ πππππππ
|
|
753
|
+
ππππππ πππππππππππ
|
|
754
|
+
ππππππ πππππππππ
|
|
755
|
+
ππππππ πππππππ
|
|
756
|
+
πππππ ππππππ
|
|
757
|
+
ππππ πππππ """
|
|
758
|
+
|
|
759
|
+
S16_LABS = """\
|
|
760
|
+
KπX-Labs
|
|
761
|
+
ππππππππππππππππππππππππππππππππππ
|
|
762
|
+
ππππππππππππππππππππππππππππππππππ
|
|
763
|
+
πππππππ ππππππ
|
|
764
|
+
πππππππ ππππππ
|
|
765
|
+
πππππππ ππππππ
|
|
766
|
+
πππππππ ππππππ
|
|
767
|
+
ππππππ ππππππ
|
|
768
|
+
ππππππ ππππππ
|
|
769
|
+
ππππππ ππππππ
|
|
770
|
+
πππππππ πππππππ
|
|
771
|
+
ππππππ πππππππππππ
|
|
772
|
+
ππππππ πππππππππ
|
|
773
|
+
ππππππ πππππππ
|
|
774
|
+
πππππ ππππππ
|
|
775
|
+
ππππ πππππ """
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
class Logo(str, Enum):
|
|
779
|
+
"""Main selector for signature and default logo configurations."""
|
|
780
|
+
|
|
781
|
+
KπX = KπX_π_COMPACT.S8.value
|
|
782
|
+
KπX_Labs = KπX_π_COMPACT.S8_LABS.value
|
|
783
|
+
|
|
784
|
+
π = π_π.S8.value
|
|
785
|
+
π_Labs = π_π.S8_LABS.value
|