Обзор SplendidMoons на GitHub

Репозиторий splendidmoons/splendidmoons на GitHub — это специализированная библиотека на языке Python, предназначенная для вычисления дат буддийского лунного календаря Упосатхи (дней интенсивной практики и очищения) в соответствии со строгими правилами тайской традиции Маханикая (Mahanikaya).

Проект является официальным расчетным ядром для веб-сервиса splendidmoons.github.io. Исторически это более современный порт и замена старого пакета suriya-go, который изначально разрабатывался на языке Go (Golang).

🏛 Назначение и каноническая база

Главная задача библиотеки — автоматизация расчетов тайского лунно-солнечного календаря. Из-за разницы между лунными сутками и солнечным годом буддийский календарь регулярно вставляет добавочные дни или месяцы.

Пакет умеет математически точно определять тип буддийского года, от которого зависят даты всех праздников:

1) YearType.Normal: Обычный год.

2) YearType.Adhikamasa: Год с добавочным 8-м лунным месяцем (високосный месяц).

3) YearType.Adhikavara: Год с добавочным днем (високосный день).

Благодаря этому библиотека позволяет безошибочно рассчитывать главные буддийские праздники Тхеравады, такие как Асалха Пуджа (Asalha Puja), Магха Пуджа и Висакха Пуджа, которые жестко привязаны к этой динамической системе сдвигов.

💻 Технический стек и структура

1) Язык программирования: 100% чистый Python.

2) Менеджмент зависимостей: Проект использует современный инструмент Poetry (в репозитории присутствуют конфигурационные файлы pyproject.toml, poetry.lock и poetry.toml).

3) Качество кода: Включает в себя директорию tests/ с юнит-тестами для проверки корректности математических расчетов календаря на исторических периодах.

🌜Некоторые особенности

1) Чистая математика без внешних API: Библиотека полностью автономна. Она не делает запросов к сторонним серверам для проверки фаз Луны, а рассчитывает типы лет и смещения локально, что гарантирует высокую скорость работы API бэкенда.

2) Идеальное моделирование интеркаляций: В тайском буддийском календаре есть три типа лет: обычный (Normal), с добавочным месяцем (Adhikamasa) и с добавочным днем (Adhikavara). splendidmoons безупречно определяет эти типы на годы вперед, избавляя от необходимости хардкодить таблицы исключений.

3) Пакетный экспорт (CLI): Библиотека имеет готовый консольный интерфейс (CLI), позволяющий одной командой сгенерировать CSV-сетку всех праздников на десятилетие вперед (например, 2020 2030 moondays.csv). Это позволяет не считать данные «на лету» в рантайме, а один залить их в базу данных (PostgreSQL/MySQL) как статичный справочник.

4) Свободная лицензия MIT: Полная юридическая чистота для использования в закрытом коммерческом коде без обязательств открывать исходники вашего приложения.

5) Современный тулинг: Проект собран с использованием Poetry (пакетный менеджер), содержит pyproject.toml и написан на чистом Python 3 без легаси-костылей.

6) Экстремальная узкоспециализированность (Mahanikaya): Это главный архитектурный риск. Библиотека считает дни Упосатхи строго по правилам ордена Маханикая. Если вашему приложению потребуется поддерживать другие буддийские традиции (например, тайский орден Дхаммаюттика, шри-ланкийскую или бирманскую системы), эта библиотека не подойдет, так как в високосные годы даты Упосатхи у них расходятся на один день.

11