isnady 0.5.1 → 0.5.3
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.
- package/LICENSE +21 -21
- package/README.md +30 -13
- package/index.d.ts +11 -11
- package/index.js +1 -1
- package/package.json +1 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Bayram Kotan
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Bayram Kotan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<a href="https://pypi.org/project/isnady/">
|
|
11
|
-
<img src="https://img.shields.io/badge/PyPI-v0.5.
|
|
11
|
+
<img src="https://img.shields.io/badge/PyPI-v0.5.3-1D4777?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI">
|
|
12
12
|
</a>
|
|
13
13
|
<img src="https://img.shields.io/pypi/pyversions/isnady?style=for-the-badge&color=A47E24&logo=python&logoColor=white" alt="Python">
|
|
14
14
|
<img src="https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-5B6878?style=for-the-badge" alt="Platform">
|
|
15
15
|
<a href="https://www.npmjs.com/package/isnady">
|
|
16
|
-
<img src="https://img.shields.io/badge/npm-v0.5.
|
|
16
|
+
<img src="https://img.shields.io/badge/npm-v0.5.3-14304F?style=for-the-badge&logo=npm" alt="npm">
|
|
17
17
|
</a>
|
|
18
18
|
<a href="https://github.com/bayramkotan/isnady-data">
|
|
19
19
|
<img src="https://img.shields.io/badge/data-isnady--data-2E6B4F?style=for-the-badge&logo=github" alt="isnady-data">
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/search-arabic.png" alt="Searching النيات finds بالنيات in Sahih al-Bukhari 1, with the chain above the text" width="850">
|
|
46
46
|
</p>
|
|
47
47
|
|
|
48
|
-
> **Pre-alpha (0.5.
|
|
48
|
+
> **Pre-alpha (0.5.3).** Search, chains of transmission, narrators, books, scholars, statistics and
|
|
49
49
|
> the glossary work today, Sunni and Shia, on data you import in one click. Everything is built in
|
|
50
50
|
> the open, one piece at a time.
|
|
51
51
|
|
|
@@ -416,15 +416,18 @@ correct. Names are kept exactly as written, with the clarifications the compiler
|
|
|
416
416
|
|
|
417
417
|
| | Chains (roads) | Read whole | Reaching the Prophet / a Ma'sum | Names identified |
|
|
418
418
|
|:--|--:|--:|--:|--:|
|
|
419
|
-
| Sahih al-Bukhari | 8,085 | 99.7% | 78.
|
|
420
|
-
| Sahih Muslim | 12,
|
|
421
|
-
| Sunan Abi Dawud | 6,
|
|
422
|
-
| al-Kafi (read the Shia way) | 14,436 | 98.8% |
|
|
419
|
+
| Sahih al-Bukhari | 8,085 | 99.7% | 78.3% | 79.8% |
|
|
420
|
+
| Sahih Muslim | 12,382 | 100.0% | 70.6% | 81.3% |
|
|
421
|
+
| Sunan Abi Dawud | 6,422 | 100.0% | 76.7% | 78.3% |
|
|
422
|
+
| al-Kafi (read the Shia way) | 14,436 | 98.8% | 94.6% | 65.2% |
|
|
423
423
|
|
|
424
|
-
(isnady 0.5.
|
|
424
|
+
(isnady 0.5.3, chains isnady-isnad-15, narrators isnady-narrators-16. A road of a tahwil (ح) is a chain of its own;
|
|
425
425
|
"reaching" counts the chains whose last link is the Prophet ﷺ or a Ma'sum — a chain may also end with a Companion's
|
|
426
|
-
own word.
|
|
427
|
-
|
|
426
|
+
own word. Only what the text says is drawn: where a book writes "وعنه" or "بهذا الإسناد", the chain of the hadith
|
|
427
|
+
before it is drawn beside the road, marked as taken from there, and kept out of these figures; a text that merely
|
|
428
|
+
goes on from the hadith before is given no chain. A road of a tahwil whose meeting the text does not name goes on
|
|
429
|
+
as the other road only where the narrators attest it: its last narrator is found narrating from that one in at least
|
|
430
|
+
three other hadith, in chains read whole — and the chain page says so.)
|
|
428
431
|
|
|
429
432
|
In a blind, hand-checked sample of 30 Sunni chains: **no wrong narrator**, 27 complete. The rest are
|
|
430
433
|
kept whole, each with its reason: *tahwil* (ح, a second chain joining), two teachers at one link
|
|
@@ -631,6 +634,12 @@ it. Every result is computed once and saved as JSON in your data folder (`derive
|
|
|
631
634
|
what it was computed from changed — new books or hadith, narrators identified differently, new verdicts or grades,
|
|
632
635
|
books switched off — or the analysis itself; a new version of isnady alone does not.
|
|
633
636
|
|
|
637
|
+
**For readers who never studied statistics:** under every headline an open box, *In plain words*, says what came out
|
|
638
|
+
here ("τb 0.35 — a moderate relation, too clear to be chance"; "the busiest tenth of the narrators carry 84% of all
|
|
639
|
+
appearances — the pivots (madar) the critics speak of"), and its words — Gini, Kendall's τb, the 95% interval, the
|
|
640
|
+
odds ratio, kappa … — open on a click with what they measure, how to read them, what they mean for the science of
|
|
641
|
+
hadith, and an example.
|
|
642
|
+
|
|
634
643
|
**Out of isnady, piece by piece or whole:** every finding has a ⤓ — its chart as a picture (PNG, SVG), a PDF or on
|
|
635
644
|
the clipboard, its figures as CSV, Excel, JSON or Markdown; the page's **Export** writes a section or every section
|
|
636
645
|
as one PDF or one web page with the charts and their tables, every table as one Excel workbook (a sheet each) or as
|
|
@@ -646,6 +655,7 @@ CSV files, and the computed results as JSON (`iy export statistics [BOOK]`).
|
|
|
646
655
|
| **Books** | the books side by side |
|
|
647
656
|
| **Graders** | agreement of every pair (same grade, Cohen's and the ordinal kappa, 95% intervals, Krippendorff's alpha); a **Dawid–Skene model** of each hadith's true grade and each grader's confusion matrix; **strictness**; the **disputed hadith** |
|
|
648
657
|
| **The hadith model** | what each scholar's grade follows — ordinal regression with odds ratios and 95% intervals, and the hadith graded higher or lower than their chain |
|
|
658
|
+
| **Terms explained** | every measure of the page in everyday words — what it measures, how to read it, what it means for the science of hadith, an example (`iy stats --explain`) |
|
|
649
659
|
| **Correlations and tests** | every measure against every other (Spearman's ρ with Benjamini–Hochberg q-values, the partial ρ with the others held equal) and what differs: graders pair by pair (Stuart–Maxwell), books (Kruskal–Wallis, Mann–Whitney with Cliff's δ), whether the model's shape holds (Brant) |
|
|
650
660
|
|
|
651
661
|
<p align="center">
|
|
@@ -663,6 +673,7 @@ iy stats # what the database holds, per book
|
|
|
663
673
|
iy stats graders --book abudawud
|
|
664
674
|
iy stats model --grader albani
|
|
665
675
|
iy stats lab --csv ./lab # every table behind the figures, as CSV
|
|
676
|
+
iy stats --explain kendall # any measure in plain words (or every one: iy stats --explain)
|
|
666
677
|
```
|
|
667
678
|
|
|
668
679
|
---
|
|
@@ -741,6 +752,13 @@ bookmark survives a new import. `iy bookmark add hadith bukhari:1 --folder "Inte
|
|
|
741
752
|
`iy bookmark list`, `iy bookmark list tree`, `iy bookmark add tree prophets:musa`, `iy bookmark folders`,
|
|
742
753
|
`iy bookmark export file.json`.
|
|
743
754
|
|
|
755
|
+
**Where you left off.** Each book remembers by itself the chapter and the hadith you had come to, and opens there
|
|
756
|
+
again ("🔖 You left off at hadith 59" under it on the shelf). Put markers of your own wherever you like and name them
|
|
757
|
+
("Prayer reading", "Ramadan"), as many as you want, in any book; the 🔖 Markers menu of the Books page goes to any of
|
|
758
|
+
them, or to where you left each book. They are kept with your profile, and the same from the command line:
|
|
759
|
+
`iy book bukhari --resume`, `iy book bukhari 3 --mark "Knowledge"`, `iy book --marks`, `iy book --go knowledge`,
|
|
760
|
+
`iy book --unmark knowledge`.
|
|
761
|
+
|
|
744
762
|
<p align="center">
|
|
745
763
|
<img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/bookmarks.png" alt="Bookmarks — folders on the left, a hadith, a narrator, a scholar and a term with their folders and a note" width="850">
|
|
746
764
|
</p>
|
|
@@ -963,10 +981,10 @@ command line never loads Qt. Every command that takes a book accepts its full na
|
|
|
963
981
|
| `iy chain BOOK NUMBER` | `iy chain kafi 5:1740` | One chain, narrator by narrator, with who each one is and whom it reaches, then said in Turkish and English (`--lang tr,en`); `--raw` adds the wording; without a number, the book's range |
|
|
964
982
|
| `iy isnads` | `iy isnads --rebuild` | Read every chain and report per book: split, reaching the Prophet or a Ma'sum, identified |
|
|
965
983
|
| `iy narrator NAME` | `iy narrator "Ibn Umar"` | A narrator: his critic's verdict (Ibn Hajar's rank, or the Imami terms), tabaqa, death year, books; `--limit 1` adds teachers, students and hadith; `--famous` lists the famous Companions by group (`--tradition shia`: Ashab al-Ijma'; `all`: both) |
|
|
966
|
-
| `iy book [KEY [CHAPTER]]` | `iy book bukhari 2` | The books (the Sunni ones; `--tradition shia` or `all`); a book's chapters; a chapter read in order |
|
|
984
|
+
| `iy book [KEY [CHAPTER]]` | `iy book bukhari 2` | The books (the Sunni ones; `--tradition shia` or `all`); a book's chapters; a chapter read in order; `--resume` where you left it, `--mark NAME`, `--marks`, `--go NAME`, `--unmark NAME` |
|
|
967
985
|
| `iy scholar [NAME]` | `iy scholar albani` | The scholars in the data (the Sunni ones; `--tradition shia` or `all`), or one of them with his measured statistics |
|
|
968
986
|
| `iy tahric BOOK NUMBER` | `iy tahric bukhari 1` | Other narrations of a hadith in the imported books (takhrij) |
|
|
969
|
-
| `iy stats [SECTION]` | `iy stats graders --book abudawud` | `corpus`, `narrators`, `chains`, `grades`, `books`, `graders`, `model`, `lab`; `--csv DIR`, `--recompute`; `--book @all` measures both roads |
|
|
987
|
+
| `iy stats [SECTION]` | `iy stats graders --book abudawud` | `corpus`, `narrators`, `chains`, `grades`, `books`, `graders`, `model`, `lab`; `--csv DIR`, `--recompute`; `--book @all` measures both roads; `--explain [TERM]` every measure in plain words |
|
|
970
988
|
| `iy term [NAME]` | `iy term --search tadlis` | The glossary, English, Turkish or Arabic (`--lang tr`, `--lang ar`) |
|
|
971
989
|
| `iy life NAME` | `iy life Abu Hurayra --lang tr` | The life of a Companion, a narrator or a scholar (`--lang en\|tr\|ar`, `--tradition`, `--limit`); `--source` downloads al-Dhahabi's *Siyar* and shows its entry |
|
|
972
990
|
| `iy tree WHICH [NAME]` | `iy tree family "Ibn Umar"` | Genealogies: `prophets`, `quraysh`, a narrator's `family`, his line of `learning` (`--depth`, `--width`); `--hadith` the hadith that speak of a prophet |
|
|
@@ -1028,7 +1046,6 @@ Sunan Abu Dawud #472
|
|
|
1028
1046
|
- **Narrators** — the other half of the names identified through teachers and students (al-Mizzi's
|
|
1029
1047
|
*Tahdhib al-Kamal*), the verdicts of other critics beside Ibn Hajar's, and whether each link could
|
|
1030
1048
|
have met the next; fuller, richer lives of narrators and scholars.
|
|
1031
|
-
- **Statistics in plain words** — every finding said simply first, the method after.
|
|
1032
1049
|
- **Settings and export** — more of isnady set from one place; export as ODS, TEI-XML and BibTeX/RIS, of the
|
|
1033
1050
|
scholars and the glossary, and a preview of an import before it comes in.
|
|
1034
1051
|
- **Every interface language in full** — the 21 listed after English, Türkçe and العربية; the command line
|
package/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export declare const version: string;
|
|
2
|
-
export declare const name: string;
|
|
3
|
-
|
|
4
|
-
export interface IsnadyInfo {
|
|
5
|
-
name: string;
|
|
6
|
-
version: string;
|
|
7
|
-
dataLoaded: boolean;
|
|
8
|
-
homepage: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export declare function info(): IsnadyInfo;
|
|
1
|
+
export declare const version: string;
|
|
2
|
+
export declare const name: string;
|
|
3
|
+
|
|
4
|
+
export interface IsnadyInfo {
|
|
5
|
+
name: string;
|
|
6
|
+
version: string;
|
|
7
|
+
dataLoaded: boolean;
|
|
8
|
+
homepage: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export declare function info(): IsnadyInfo;
|
package/index.js
CHANGED