Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

超度量 Attention:数值实验报告与实现正确性检查

超度量(p-adic)Attention 的数值实验报告 + 实现正确性检查——树 softmax、层级聚合、离散 ℓ 上的 VAPO 学习。

本仓库对超度量 attention(Bourama Toni「Beyond Archimedean Intelligence」提出的 p-adic 学习方向)的 核心结构做 独立、可复现、双库互证 的数值验证:以公共前缀深度取代点积、树 softmax 取代全局 softmax、层级聚合取代加权和。 仅依赖通用数值计算库(NumPy / PyTorch),clone 后开箱即跑。

⚠️ 口径说明

  1. 双库一致 ≠ 理论成立。"PASS" 仅代表 numpy 与 torch 算同一公式结果一致(排除单库实现 bug); 理论是否成立由每个 numpy 脚本自身的 容差判定 决定(见「验证清单」与脚本内的 结论 行)。
  2. 本仓库是 有限样本数值实验(固定 seed + 有限配置),验证的是结论在容差内的自洽性, 不是数学证明;"数值验证/verification" 指判定方法学的严谨性,不指证明性质。
  3. 验证实质分层:多数 [T] 恒等式(如 T1 归一化)由"每层局部归一化"的定义必然推出, 只要实现没写错就 100% 成立——它们验证的是 实现正确性,不是"树 softmax 是个好 attention"。 真正有信息量的非平凡验证是少数 机制行为 项:NT4/H4/V5(层级树显著异于标准 softmax)、 A5-2(树 softmax 更易集中)、A2(剪枝均匀退化的充要条件)、VAPO 基线对照(B 系列)。 突变测试(K 系列,7/7 真实 bug 全部被恒等式组抓住)为 T 类 PASS 的含金量提供独立支撑。
  4. 判定方式的三层分工:恒等式为确定有理数的(T1/T3/NT2/A3/线性 Φ/穷举格点)用 fractions.Fraction 精确对拍(不依赖 float64 容差);机制行为项(NT4/H4/V5/A5-2) 用 符号置换检验 + bootstrap 置信区间(p<0.01 或方向全称判定),不再用"拍脑袋"固定阈值; 给不出统计显著性的降级表述为"工程观察"。

声明(Acknowledgement)

本仓库的数学验证源于长期基于实践的探索与迭代沉淀,并非凭空生成。在推导与双库对拍的论证过程中, AI 以协作工具的身份参与了部分计算推演;而所有结论的灵感、方向与验证设计,均来自人类——AI 是让论证 更严谨的辅助,而非结论的来源。如实披露这一协作过程,是对学术诚实的坚持,也坦然面向 AI 辅助研究走向 常态的未来。

目录结构

.
├── formulas/                        # 数学核心公式(自包含推导,速查)
│   └── 超度量attention核心公式.md
├── verification/                    # 前瞻设计草图 + 验证脚本
│   ├── toni_padic_ultrametric_attention_sketch_2026_08_17.md     # 超度量 attention 机制设计
│   ├── toni_padic_tree_softmax_math_sketch_2026_08_17.md         # 树 softmax 数学完整展开
│   ├── validate_math_tree_softmax.py             # 树 softmax(numpy 单库,理论判定)
│   ├── validate_math_tree_softmax_torch.py       # 树 softmax(numpy + torch 双库互证,thin 聚合入口)
│   ├── tree_checks_*.py / tree_torch_util.py     # 按主题拆分的可独立运行模块(入口聚合,行为不变)
│   ├── tree_checks_exhaustive.py                 # P2: 小规模穷举(quick ≤10 叶 / full ≤12 叶全部树形,Fraction 精确断言)
│   ├── validate_math_vapo_discrete_learning.py   # VAPO/GIST 离散 ℓ 学习实验
│   ├── validate_math_vapo_baselines.py           # P0: VAPO vs random/greedy 基线对照(置换检验)
│   ├── validate_math_padic_vp.py                 # P0: padic_compare 与标准 v_p(低位)一致互证 + 代数律 M6/M7
│   ├── validate_math_mutation.py                 # P0: 突变测试(bug 注入 → kill rate 7/7)
│   ├── validate_math_statistical_calibration.py  # P2: 统计检验工具自校准(置换检验/bootstrap 行为校准)
│   ├── validate_math_exp_error_bound.py          # P2: exp 显式误差界 + Decimal 高精度参考(有界验证)
│   └── run_all.bat                               # Windows 一键跑全部脚本
├── benchmarks/                                   # S3/S6 工程量化基准(复现 README 耗时表)
│   ├── bench_s3_fd_vs_autograd.py                # FD vs autograd Jacobian 耗时微基准
│   └── bench_s6_quick_vs_full.py                 # quick/full 规模实测(子进程复跑计时)
└── results/                                      # 运行结果(JSON,quick/full 分文件,含判定与耗时)

另有 `.github/workflows/ci.yml`:push/PR 自动装依赖并逐个跑全部验证脚本(失败即红灯;
注意 `validate_math_vapo_baselines.py` 的 B2"学习增量未证实"是如实记录的发现,不算失败)。

核心概念

概念 含义
相似度 $\ell(q,k_j)=v_p(q-k_j)$ 用 p-adic 编码的 低位 $v_p$(q−k 被 p 整除的幂次) 取代点积,作为 query/key 的相似度
树 softmax 在超度量球树上自底向上局部归一化 + 自顶向下路径累积(全局 softmax 的严格推广)
层级聚合 沿球树层级混合 value,保留超度量球嵌套结构
VAPO / GIST 离散 $\ell$ 上无梯度的扰动式学习(v-PuNNs 路径)

定位:与其他相关项目的关系

本仓库从验证角度处理 p-adic/超度量 attention:唯一交付物是「树 softmax + 层级聚合」这一 完整超度量 attention 结构的数学自洽性验证(显式性质 + 推导 + 双库数值核验)。它与两个 同样涉及「p-adic/超度量 + 深度学习」但目标不同的公开项目互补而不交叉,对比如下:

维度 本仓库(ultrametric-verification) model_guided_research v-PuNNs-HiPaN
目的 验证超度量 attention 的数学是否自洽 在完整 GPT 中尝试 11 种 exotic attention 机制 在层级分类任务上跑 v-PuNNs,做 SOTA
是否做 Attention ✅ 是(树 softmax) ✅ 是(其中的一种可切换机制) ❌ 否(逐深度分类,非 attention)
数学结构 树 softmax:层级竞争归一化,标准 softmax 的严格推广 LCP-kernel:直接 α^lcp(q,k),无层级归一化 p-adic 特征球神经元
采用方式 整条 attention 用超度量结构(非众多替代之一) 作为 11 种可选机制之一(--attention-type 切换) 分类器主体为 p-adic 球
交付形态 纯验证脚本 + 定理/证明,无模型 生产级 GPT(nanochat)+ 训练基础设施 Jupyter 分类实验 + 论文定理
数据 纯合成(随机树/得分);无真实任务 文本语料(训练 nanochat) WordNet / Gene Ontology 等真实层级数据
与标准 attention 关系 严格推广(单层可精确退化) 替代机制(drop-in) 不适用

三点说明,保持与本仓库定位一致:

  • 不做模型、不跑 SOTA、不是替代实现。本仓库不提供可插入生产 Transformer 的 attention 内核, 也不在真实数据上比准确率;这些是上面两仓各自的目标。这里只回答一个问题:在一个完全采用 超度量结构的 attention 里,树 softmax 这一层级归一化在数学上是否良定义、是否按预期退化、数值与 梯度结构是否如定理所述
  • 全量而非部分采用。与本仓库相关的是「树 softmax / 层级聚合」这条完整结构,而非把某种 p-adic kernel 作为备选机制接入既有模型。因此验证对象是整条结构的性质(归一化、退化、剪枝、 可微性、稀疏梯度),而非某一种 kernel 的可行性。
  • VAPO/GIST 的边界。本仓库的 VAPO 是一份最小化合成实验,用于检查"离散 ℓ 上无梯度学习 是否至少可行、以及是否依赖指数得分放大",不是真实任务 benchmark(后者见 v-PuNNs-HiPaN)。

双库互证

角色 说明
NumPy 基线计算库 全部脚本必选
PyTorch 互证对照库 与 numpy 算同一公式,逐项比对(T 类机器精度)

快速开始

# 依赖(结果 JSON 因 torch 脚本生成)
pip install numpy torch

# 树 softmax 单库验证(numpy,含理论判定)
python verification/validate_math_tree_softmax.py

# 树 softmax 双库互证(numpy + torch)
python verification/validate_math_tree_softmax_torch.py

# VAPO 离散学习实验(纯 numpy)
python verification/validate_math_vapo_discrete_learning.py

所有脚本固定随机种子、公开参数,任何环境复跑可对拍;双库脚本结果 JSON 写入 results/

两种运行模式:脚本默认走 quick(8 种子 × 6 种代表性树木形态;VAPO R=10),全套约 4 分钟 (树 numpy 约 15s、树 torch 约 65s、VAPO 约 110s、baselines 约 40s、穷举/互证/突变合计约 1 分钟内), 用于 CI/日常自检。若要 full 长时间扩展验证(50 种子 × 20 种树木形态;VAPO R=25;数小时级), 运行前设环境变量 SGN_VERIFY_FULL=1,或加 --full 参数,例如 set SGN_VERIFY_FULL=1python verification/validate_math_tree_softmax.py本 README 与 formulas 中引用的具体数值(树验证规模、VAPO 收敛率)均为 full 模式结果; quick 模式(默认,用于 CI/日常自检)规模更小、数值略低,但结论一致。

Windows 一键运行:双击 verification/run_all.bat(默认 quick 模式),逐个跑全部 validate_*.pytree_checks_exhaustive.py 脚本并汇总 PASS/FAIL(exit 0 = 全部通过);加 --full 参数切换 full 模式。结果 JSON 按 quick/full 分文件写入 results/,互不覆盖。

编码兼容:脚本头部已 sys.stdout.reconfigure(encoding="utf-8") 兜底,Windows GBK 控制台通常可 直接 python verification/... 运行;若仍报 UnicodeEncodeError,请先 set PYTHONIOENCODING=utf-8 或改用 run_all.bat。Linux/macOS 默认 UTF-8,无需处理。

工程干净化量化(S3 性能组 / S6 quick 收缩 + CI 矩阵)

S3(autograd 换 FD + _MAX_FD_LEAVES 2000→128)实测(本机)

叶数 n FD(中心差分) autograd(逐叶 backward) 说明
32 21.5 ms 128 ms 小树两者均亚秒
128 384 ms 2491 ms FD 上限收缩点:>128 叶不再跑 FD
512 6.7 s 45.9 s FD 随 n 近 O(n²) 增长(4 倍叶数 ≈ 17× 耗时)

结论要点:

  • FD 是真正的耗时源(2n 次 numpy 前向,近 O(n²)):实测 128→512 叶 FD 耗时放大 17.5×, 外推 2000 叶单次 ≥ 100s。_MAX_FD_LEAVES=128 收缩后,>128 叶种子直接跳过 FD (可微性由更小树覆盖),单次 Jacobian 上限从"分钟级"压回 <0.4s —— D1/D4/A6 不再受 O(n²) 拖累。
  • autograd 收益在正确性而非速度:本机 CPU 上逐叶 backward 比 FD 反而慢 ~6×(Python 调度 + 张量内核开销); 它的价值是 D2/D3 提供了独立于数值差分的解析梯度验证路径(autograd 解析 = 中心差分,双库互证), 免维护手写反向公式——速度收益主要来自 FD 上限收缩,而非差分方法本身。
  • 成效验证:quick 全量回归 9 脚本 PASS=9/FAIL=0(树 numpy 全套 16.6s)。

S6(quick 收缩 + CI 矩阵)实测

指标 quick(CI/日常) full(数值回填口径) 收缩比
种子数 × 形态 8 × 6 50 × 20 48/1000 ≈ 4.8%
树 numpy 全套 16.6s ≈285s(core 19.4s + agg/prune 260.7s,仅 numpy 树部分) 单库约 17×
全套(含 torch/VAPO) ≈ 4 分钟 数小时级
CI 任务 9 脚本 × 3 版本矩阵(3.12/3.13/3.14)= 27 次验证,换解释器不红
  • quick 保留 6 种代表性形态(浅/中/深、二叉/高分支、早停率 25-30%),统计检验项(NT4/H4/V5) 效应量与 full 一致(quick 下 p<0.01 稳定达标),保证收缩不减验证效力。
  • CI 三版本矩阵规避 PEP 701 多行 f-string 语法(Python <3.12 直接 SyntaxError), 版本兼容性由 CI 强制保证而非文档声明。

基准脚本运行说明(benchmarks/

脚本 命令 预计耗时 输出内容
S3 微基准 python benchmarks/bench_s3_fd_vs_autograd.py 约 1 分钟 32/128/512 叶的 FD 与 autograd 单次 Jacobian 耗时表 + 汇总(FD 缩放比、autograd/FD 比、Jacobian 一致性)
S6 规模实测 python benchmarks/bench_s6_quick_vs_full.py 约 20-30s quick 配置对照表(48 vs 1000 采样点、4.8%、效力保持)→ 子进程复跑 numpy 树全套并实测墙钟
S6 full 口径 python benchmarks/bench_s6_quick_vs_full.py --full 约 5-10 分钟 同 S6,但按 full(50 种子 × 20 形态)复跑并计时,可与 README ≈285s 对照

参数与口径说明:

  • S3 脚本无需参数:档位硬编码为完全二叉 depth 5/7/9 → 32/128/512 叶(脚本内 _DEPTHS), 与 README 表逐行对应;数值随机器负载波动,对照量级即可。
  • S6 --full 参数:等价于环境变量 SGN_VERIFY_FULL=1(与全部验证脚本同口径约定); 不传时默认 quick。脚本通过读 tree_softmax_util.NONCOMPLETE_CONFIGS 自检当前模式的实际采样点数。
  • S6 计时方式:以子进程复跑 verification/validate_math_tree_softmax.py(stdout 原样透传), 墙钟即脚本尾部"耗时 X.Xs";--full 会把该参数透传给子进程。
  • 依赖:两者均需能 import verification/ 共享模块(脚本自动把仓库根下的 verification 加入 sys.path,任意 cwd 运行均可);S3 额外需要 torch(走 tree_torch_util._jacobian_autodiff),S6 仅需 numpy。
  • Windows 编码:两脚本头部已做 utf-8 兜底,与其余验证脚本一致。

验证清单

树 softmax(verification/validate_math_tree_softmax.py / _torch.py

类别 验证项 结论 验证实质
T1 归一化:任意 p 叉树,Σα_j=1 且 α_j≥0 实现正确性(定义必然)
T2 退化:单层树 + Φ=e^x ⇒ 标准 softmax ✅(严格推广) 机制行为
T3 均匀退化:完全树全等分 ⇒ α_j=1/n 实现正确性(定义必然)
NT1/NT2 非完全树归一化、均匀退化 实现正确性(定义必然)
NT4/H4/V5 非完全树与标准 softmax 差异、层级聚合差异、剪枝差异 ✅(符号置换 p<0.01) 机制行为(非平凡)
E1-E3 边界情形(全零兜底、退化、负得分域界定) 实现正确性
H1-H3 层级聚合(Aggregate A/C、B 模式) 实现正确性
A1-A6 pruning 等权保持(乘法平衡)、球权恒等式、深度数值精度、剪枝树梯度零块 A2 为机制行为(非平凡),其余实现正确性
A5-2 树 softmax 集中阈值 < 标准 softmax(构造样本全称方向判定 + bootstrap 95% CI,工程观察) 机制行为(非平凡发现)
W1/B1-B3/L1-L2 W_B=max 结构、B 模式层级加解析式、线性 Φ 语义界限 实现正确性
P1 置换同构不变性:叶权只依赖树的带权同构类(兄弟子块任意置换 + BFS 重编号,诱导叶映射下逐叶一致 ≤ FRAC_TOL) ✅(869 次置换,full 口径) 实现正确性(结构稳健)

30+ 验证项、25 单库 / 20 双库全部 PASS(50 个固定种子 × 20 种树木形态)。核心结论:树 softmax 是良定义的概率映射,且是 标准 softmax 的严格推广;剪枝树保持可微性与稀疏梯度结构。其中多数 PASS 验证的是实现正确性; NT4/H4/V5、A2、A5-2 是有真信息的机制行为验证(见「口径说明」第 3 条)。 判别力由突变测试独立背书(K1:7 个真实 bug 突变体全部被恒等式组抓住,kill rate 7/7=100%; MUT7 为数学等价突变体——Φ 的标度倍被每层归一化消去——单列为标度不变性性质验证)。

可微性的适用范围(D 系列声明)

D 系列(Jacobian 存在性、autograd 解析梯度 vs 中心差分一致性)验证的是连续得分输入下 树 softmax 运算图的可微性。实际 p-adic attention 的得分 $s=f(\ell(q,k))$ 在离散 $\ell$不可微——D 系列 PASS 不解决离散 ℓ 上的梯度问题;离散 ℓ 上的学习是 VAPO 的无梯度 路径(见下节)与开放问题。

VAPO 离散学习(verification/validate_math_vapo_discrete_learning.py

离散 $\ell$ 上学习 target key 的实验中,在两级统计协议(R=25 次独立运行 × 每次 5 试次,full 数值)下, p^ℓ 指数得分下 VAPO/GIST 可收敛(VAPO 2-key 83% / GIST 2-key 84% / VAPO 4-key 99% / GIST 4-key 98%,平均 91%), linear 得分下收敛率≈0-32%——结论:在已测的两种得分函数下,指数放大(p^ℓ)是无梯度扰动学习 可行的关键条件(p^ℓ 下高收敛、linear 下基本不收敛);这是有限样本上的充分性观察, 不是对"可行 ⟺ 指数放大"的全称等价证明。

研究结论(基线对照背书,validate_math_vapo_baselines.py,R=25×5 试次/方,2000 次置换检验; 此处 B1–B4 为基线判定项,勿与树验证的聚合 B 系列(B1–B3)混淆): 在同一任务/预算下对照 random search 与 greedy 两个基线——random 收敛率 100-99%、greedy 100-99%、 VAPO 93-98%(2key/4key,Wilson 95% CI); 学习增量判定 B2(VAPO−random,置换检验 p<0.05)未通过(2key Δ=-7% p=1.0000,4key Δ=-1% p=0.8686); 样本效率 B3(VAPO 中位评估数 < greedy)通过(VAPO 1185/1021 vs greedy 1676)。 即:VAPO 的高收敛率应归因于指数得分的尖锐性(S7 低位口径下扰动命中低位 digit,p^ℓ 即压过其它 key) 加随机命中,而非学习动力学。本实验的"可行性"定位(离散 ℓ 上无梯度搜索在该得分下能找到目标)成立, 但不能读作"p-adic attention 已被证明能学习/泛化"

记号确认:ℓ=v_p(q−k) 的实现口径(M 系列)

padic_compare 自 S7 起按标准 p-adic 赋值实现:从最低位起数 q−k 被 p 整除的幂次 (v_p(x) 的标准低位口径),与整数算术的独立实现 standard_vp 逐对一致(M2 一致率 100.00%, 100000 随机对 × 50 种子,validate_math_padic_vp.py);q=k 时 v_p=∞ 截断为 N_DIGITS(M1 定义自检)。距离 $|q-k|_p=p^{-\ell}$ 满足超度量不等式(M3/M4),低位 digit 重解释下与前缀深度度量同构(M5)。 代数律(M6/M7,同脚本)额外背书:M6 强加法律 $v_p(a+b)\ge\min(v_p(a),v_p(b))$$v_p$ 不等时取等; M7 乘法律 —— $P=256=2^8$ 为合数,须经素因子还原 $v_2(ab)=v_2(a)+v_2(b)$ 后按 $\min(\lfloor (v_2(a)+v_2(b))/8\rfloor, N)$ 聚合;随机(各 100000 对 × 50 种子)+ 定向边界 + 小基数环穷举(b=4=2²)三重证据全过。 仓库内沿用"公共前缀深度"一词时,均指"低位 v_p 对应的最小公共超度量球深度",与标准 v_p 不再存在名义错位。

新增数学验证提升(2026-08-29,四个新验证项)

  • 统计检验工具自校准(C1–C4,verification/validate_math_statistical_calibration.py: 先校准检验管道本身、再让 S5 的真实判定可信。合成 H0 数据下(full 观测值,quick/full 同规模)—— C1 置换检验 type-I 率 0.007(期望≈1%,二项 3σ 上界 0.028)、 C2 _s5_significance 误报率 0.007(含效应量闸门,≤0.05)、 C3 bootstrap 95%CI 覆盖率 0.915(真实均值 μ=0.6 落入比例,3σ 接受区间 [0.90, 1.00])、 C4 强效应(均值 0.8σ)下判定命中率 1.000(功效兜底,≥0.98)。
  • exp 显式误差界(E1–E4,verification/validate_math_exp_error_bound.py: exp 情形叶权为超越数、无法走 Fraction 精确对拍,改用 Decimal(50 位)泰勒截断级数作参考真值, 并推导显式误差界逐项实证(full 观测值,quick/full 同规模)—— E1 余项公式 |T_{44}−T_{36}|=1.42e-20 ≤ E_N=6.98e-19(余项律不被过量低估)、 E2 float64 vs Decimal 参考 max|Δ|=1.11e-16 ≤ 1e-9、 E3 float64 距真值 ≤ 推导界 9.77e-17 + 容差(max_d=5)、 E4 多层累积有界(24 棵树,dev 不随深度/规模暴涨,恒 <1e-9)。 把 exp 情形的"自洽对拍"升级为"有界验证"。(此组 E 系列与树 softmax 边界情形的 E1–E3 分属不同脚本,互不冲突。)
  • v_p 代数律(M6/M7,verification/validate_math_padic_vp.py:见上文「记号确认」节。
  • 置换同构不变性(P1,verification/tree_checks_core.py:见「验证清单」表。

参考与灵感来源(References)

本仓库验证的是通用数学结构与无梯度学习方法,多数结论可独立推导;与外部工作存在直接灵感关联的如下:

主题 灵感来源 说明
超度量 attention 框架 · 赋值深度即公共前缀深度 Toni, B., Beyond Archimedean Intelligence: Toward an Intrinsic p-Adic Theory of Learning, arXiv:2607.14562 [math.DS], 2026. 链接 本仓库的根基:公共前缀深度取代点积信息按嵌套超度量球组织尺度由 valuation 深度决定均源于该理论框架;开放问题 #6 要求以赋值深度表述 attention
离散 ℓ 上无梯度学习(VAPO / GIST-VAPO) N’guessan, G. L. R., v-PuNNs: van der Put Neural Networks for Transparent Ultrametric Representation Learning, arXiv:2508.01010 [cs.LG], 2025. 链接 VAPO(Valuation-Adaptive Perturbation Optimization)与 GIST-VAPO 的出处;本仓库 validate_math_vapo_discrete_learning.py 复现其"离散空间无梯度扰动学习"思路
p-adic 学习基础(分类/回归/表示) Martins, A. F. T., Learning with the p-adics, arXiv:2512.22692 [cs.LG], 2025. 链接 p-adic 作为非阿基米德学习空间的系统奠基;ℤ_p 系数表示、p-adic 线性/回归的工程可行性背景
p-adic 神经网络与普适逼近 Albeverio, S., Khrennikov, A., Tirozzi, B., p-adic dynamical systems and neural networks, 1999.(及 Mihara, T., p-adic Character Neural Network, arXiv:2603.29905, 2026.) 原始 p-adic 神经网络(以特征函数为激活)+ 单可逆 p-adic character 激活的普适逼近定理;为"在 p-adic 上构造神经网络"提供前人根基

其余部分(树 softmax 层级归一化、层级聚合、成败条件 A2/A3/D4)为自包含的数学推导与数值验证; 标准 softmax 的层级推广性质可独立证明。

状态

本仓库对应超度量/p-adic attention 方向的前瞻设计草图 + 数值实验报告,聚焦理论自洽与数值可复现; 工程化实现(内核/硬件路径)不在本仓库范围。

本文验证沿用作者另一数学验证库 math-verification 的同一方法论 (NumPy/PyTorch 双库互证、T/S/E 分级判定、固定种子可复现);两库议题互不相关。

License

MIT

About

超度量(p-adic) Attention 的严格数学验证:公共前缀深度得分、树 softmax、层级聚合、离散 ℓ 无梯度 VAPO 学习,NumPy/PyTorch 双库互证。 Rigorous dual-library (NumPy+PyTorch) verification of ultrametric (p-adic) attention: tree softmax, hierarchical aggregation, derivative-free VAPO learning. Clone and run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages