isnady 0.3.1 → 0.3.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.
Files changed (3) hide show
  1. package/README.md +72 -18
  2. package/index.js +1 -1
  3. package/package.json +1 -1
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.3.1-1D4777?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI">
11
+ <img src="https://img.shields.io/badge/PyPI-v0.3.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.3.1-14304F?style=for-the-badge&logo=npm" alt="npm">
16
+ <img src="https://img.shields.io/badge/npm-v0.3.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.3.1).** Search, chains of transmission, narrators, books, scholars, statistics and
48
+ > **Pre-alpha (0.3.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
 
@@ -204,9 +204,11 @@ administrator prompt on Windows). If an old copy starts even for `iy update`, ru
204
204
 
205
205
  ## 🚀 Quick Start
206
206
 
207
- 1. **Open isnady** — `iy`, or the desktop application.
207
+ 1. **Open isnady** — `iy`, or the desktop application. The first time, with no books yet, it offers to import
208
+ isnady-data at once, in the background.
208
209
  2. **File → Data Sources.** The repository is already chosen: **isnady-data**. Tick the books and
209
- the languages you want and press **Import** — or **Import all**.
210
+ the languages you want and press **Import** — or **Import all**. **Languages for every book** adds a language to
211
+ all the books that have it (or takes it out of all of them) in one step.
210
212
  3. **Import the narrators too** — Ibn Hajar's *Taqrib* for the Sunni books, al-Najashi's *Rijal*
211
213
  for the Shia books — and every name in every chain is matched to its narrator.
212
214
  4. **Search**, open a chain, open a narrator, read a book.
@@ -336,10 +338,12 @@ without authentication (credentials are never stored), are read as well.
336
338
  | **Pasted passages** | Punctuation and quotation marks clinging to the words do not matter |
337
339
  | **Books** | All books, all Sunni, all Shia, or any few ticked one by one |
338
340
  | **Order** | Book by book in the order of the book lists — Sahih al-Bukhari, Sahih Muslim, Sunan Abi Dawud … then the Shia books — and within a book by its numbering |
339
- | **Language** | One language to search in; the languages you do not read are folded behind an arrow on each hadith, a click opens them. The list holds the languages imported; the languages the same books have in isnady-data (Urdu, Indonesian, Bengali, French, Russian, Tamil) are named at its end — choosing them opens **File → Data Sources** to import them |
341
+ | **Language** | One language or several to search in — tick them in the list (Arabic and Turkish, say); the languages you do not read are folded behind an arrow on each hadith, a click opens them. The list holds the languages imported; the languages the same books have in isnady-data (Urdu, Indonesian, Bengali, French, Russian, Tamil) are named at its end — choosing them opens **File → Data Sources** to import them |
340
342
  | **Active books** | A book can be switched off in **Settings → Books and languages**: it stays imported but is left out of searches, book lists and statistics until switched on |
341
343
  | **Grades** | Shown under each hadith with the scholar's name, exactly as given, and explained when you point at them |
342
344
  | **Highlighting** | On the original, diacritised text, diacritics included |
345
+ | **Recent searches** | The last twenty, under the examples on the start page — a click searches again, one link forgets them all; kept with your profile. `iy search --recent`, `iy search --clear-recent` |
346
+ | **Home** | ⌂ beside the box (Alt+Home) brings the page back to how it opens: no words, every filter at its default. Esc empties the box |
343
347
  | **Narrators and scholars** | The same box finds narrators — Sunni and Shia, each marked — and scholars, by Arabic or Latin name |
344
348
 
345
349
  Results appear at once and fill in as you read; the window never waits for them.
@@ -371,7 +375,13 @@ Sahih al-Bukhari 1
371
375
  In the window, each result shows its chain as a row of names ending at whom it reaches, and
372
376
  **View chain** opens it as a timeline from the book to the Prophet ﷺ — or, in a Shia book, to the
373
377
  Imam — with the Arabic text below: the chain in lighter ink, the text of the hadith in full ink.
374
- Every link says who the narrator is and what his critic says of him; a click opens him.
378
+ Every link says who the narrator is and what his critic says of him; a click opens him, and pointing at him says
379
+ how he was identified (by his name, by the narrators around him, or as the famous one of that name).
380
+
381
+ Choose a book and a number, or let isnady choose: the number field shows the book's range ("1 – 7563 · 7,583
382
+ hadith"), the arrow keys and the mouse wheel go to the next or the previous hadith, typing lists the numbers that
383
+ begin so, a number the book does not have offers the nearest, and **Random hadith** picks one. `iy chain kafi`
384
+ prints the range.
375
385
 
376
386
  <p align="center">
377
387
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/chain.png" alt="Isnad Chains — the chain of Sahih al-Bukhari 1 as a timeline from the book to the Prophet" width="850">
@@ -475,11 +485,25 @@ The **Narrators** page lists every narrator of the imported rijal works — **Al
475
485
  - what his critic says, in the critic's own words: Ibn Hajar's verdict and its rank for a Sunni
476
486
  narrator; al-Najashi's words, reliability and creed for a Shia narrator — the entry as written one
477
487
  click away;
488
+ - **the entry of the classical work beside the life written for isnady**: for 109 of the written lives, al-Dhahabi's
489
+ *Siyar A'lam al-Nubala'* in its own words — "vol. 2, no. 126" for Abu Hurayra — downloaded once on request (about
490
+ 22 MB, from OpenITI) and kept in your data folder; the Prophet's life ﷺ points to Ibn Hisham's *Sira* and to
491
+ al-Tirmidhi's *al-Shama'il* in isnady;
478
492
  - tabaqa and death year, the books his hadith appear in (Ibn Hajar's marks);
479
493
  - **whom he narrates from and who narrates from him** in the imported chains, and the compilers who
480
494
  narrate from him directly;
481
495
  - every hadith whose chain includes him, each a click from its chain.
482
496
 
497
+ **Who a name in a chain is.** A chain names its men as the narrators named each other — "Ibrahim", "Abu Ishaq",
498
+ "al-Hasan" — and isnady reads each name against the Taqrib (or al-Najashi on road B) by the name itself, the
499
+ generation, the books, and then by its neighbours: whom the same pair of teacher and student is in the chains where
500
+ they are named in full; a client named "mawla of X" by his patron; the well-known men a bare name means in a given
501
+ circle (Ibrahim from 'Alqama is al-Nakha'i, Abu Ishaq from al-Bara' is al-Sabi'i, al-Humaydi's Sufyan is Ibn
502
+ 'Uyayna, Abu Nu'aym's al-Thawri, "Hisham from his father" Hisham b. 'Urwa); and last, a bare name still open is the
503
+ famous man of that name when nothing else excludes him ("Anas" Anas b. Malik, "Malik" Malik b. Anas, "Ibn 'Umar"
504
+ 'Abd Allah b. 'Umar). The unnamed men of the Taqrib ("'Ata' b. Yasar from one of the Companions") are never matched
505
+ to a name. About 262,000 links are identified this way — two of every three in the Sunni chains.
506
+
483
507
  Sunni narrators filter by tabaqa, rank and book; Shia narrators by the Imami assessment.
484
508
 
485
509
  <p align="center">
@@ -511,7 +535,9 @@ itself, two levels deep, from the editions in OpenITI: the Musnad in its 13 part
511
535
  Household of the Prophet ﷺ, the Companions who narrated most, the Companions of Mecca, Medina, Syria and Kufa, the
512
536
  Ansar, the Tribes) and under them the musnad of each Companion — 1,252 in all, Abu Bakr al-Siddiq's first —; al-Darimi
513
537
  in its 24 books (Introduction, Purification, Prayer …) and 1,382 chapters (bab). The parts and books are named in
514
- the interface language, the Companions and the chapters in the Arabic of the book.
538
+ the interface language; the musnad of every Companion in Turkish and English too ("Hz. Ebû Bekir es-Sıddîk (r.a.)
539
+ müsnedi", "Musnad of Abu Bakr al-Siddiq (RA)"), and al-Darimi's 1,382 chapters as well ("Temizlik", "Purification"…
540
+ "Abdestin fazileti", "The virtue of ablution").
515
541
 
516
542
  The shelf holds the Sunni and the Shia books together, each under its own heading — *All*, *Sunni*
517
543
  or *Shia* at the top shows one of them alone — and every Shia book carries a gold *Shia* tag. Books
@@ -564,6 +590,7 @@ it. Every result is computed once and saved as JSON in your data folder (`derive
564
590
 
565
591
  | Section | What it shows |
566
592
  |---|---|
593
+ | **All books** | the first entry of the book list: every section measured on both roads at once, each road under its own heading — never added together |
567
594
  | **Overview** | the corpus at a glance: books, hadith, chains, narrators, grades |
568
595
  | **Narrators** | reliability, concentration (the busiest 10% carry 75% of the transmission — the Lorenz curve) and the pillars of transmission |
569
596
  | **Chains** | length, the weakest link, and the time between narrators (who could not have met) |
@@ -636,7 +663,10 @@ Shia are shown as the line of the Prophet's family ﷺ that the Sunni genealogis
636
663
  is the Shia's belief, shown as theirs (where the Sunni historians differ — a son of al-Hasan al-'Askari — the box
637
664
  is dashed and both are given).
638
665
 
639
- Click a name for what the sources say about it; a narrator opens on the Narrators page, which has the links to
666
+ Click a name for what the sources say about it. The Prophet ﷺ opens his life, with the sira to read; a prophet
667
+ whose name the Qur'an and the hadith give opens the hadith that speak of him — the Sunni books and the Shia books
668
+ apart, each a click from its book; a Companion, a caliph or an Imam whose life isnady has opens it, and the Narrators
669
+ page links back to his place in the tree of Quraysh. A narrator opens on the Narrators page, which has the links to
640
670
  his family and his line of learning too. `iy tree prophets`, `iy tree prophets Musa`, `iy tree family "Ibn
641
671
  Umar"`, `iy tree learning al-Zuhri --depth 2 --width 4`.
642
672
 
@@ -651,13 +681,17 @@ Umar"`, `iy tree learning al-Zuhri --depth 2 --width 4`.
651
681
 
652
682
  ## ⭐ Bookmarks
653
683
 
654
- Every hadith card, narrator, scholar, term of Learn and chapter of Books has a ☆: one click keeps it among
655
- your **Bookmarks**. There they live in folders of your own — nested as deep as you like, one bookmark in as
684
+ Every hadith card, narrator, scholar, term of Learn, chapter of Books and place in the Genealogies has a ☆: one
685
+ click keeps it among your **Bookmarks**, and the star says what it keeps ("Add this narrator to your bookmarks").
686
+ Each bookmark shows its kind — Hadith, Narrator, Scholar, Term, Chapter, Genealogy — and a line on what it is (a
687
+ narrator's road, tabaqa, death and verdict; which tree); the list filters by kind, and a narrator kept as a
688
+ narrator and the same man kept as a place in his family tree are two bookmarks. There they live in folders of your own — nested as deep as you like, one bookmark in as
656
689
  many folders as you want, dragged onto a folder to file it — each with a note of your own, found by words or by
657
690
  kind, opened with a click where it belongs. They are kept in `bookmarks.json` in isnady's data folder (yours
658
691
  alone, never published) and can be exported and imported as a file; a hadith is kept by its book and number, so a
659
692
  bookmark survives a new import. `iy bookmark add hadith bukhari:1 --folder "Intention/Deeds" --note "…"`,
660
- `iy bookmark list`, `iy bookmark folders`, `iy bookmark export file.json`.
693
+ `iy bookmark list`, `iy bookmark list tree`, `iy bookmark add tree prophets:musa`, `iy bookmark folders`,
694
+ `iy bookmark export file.json`.
661
695
 
662
696
  <p align="center">
663
697
  <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">
@@ -738,6 +772,18 @@ nothing to restart. `iy config set view.ui_language tr`. The hadith texts keep t
738
772
  <img src="https://raw.githubusercontent.com/bayramkotan/isnady/main/assets/screenshots/preferences.png" alt="Preferences — font, size, line spacing and colour for each script" width="760">
739
773
  </p>
740
774
 
775
+ **Back and forward**, as in a browser: ◀ ▶ under the name in the sidebar, Alt+Left / Alt+Right, the mouse's back
776
+ and forward buttons — every narrator, chain, book, scholar, term and tree opened is a step, and pointing at the
777
+ button says where it goes.
778
+
779
+ **A new version starts clean:** what the earlier version computed (`cache/`, `derived/`) is deleted once and computed
780
+ again, and the footer says so; the settings, bookmarks, profiles, recent searches, the database and the downloaded
781
+ works are kept. **Help → Check for Updates** asks PyPI and npm (whichever isnady is installed from — both, ticked,
782
+ when both are behind) and shows what is new; `iy update --check`, `iy update --npm`. A page that cannot be built
783
+ shows a plain card instead of stopping isnady, the details go to `isnady.log` in the data folder, and an import that
784
+ was cut short is named on the Search page at the next start. On the very first start, with no books yet, isnady
785
+ offers to import isnady-data in the background, the progress in the bar at the bottom.
786
+
741
787
  **Settings → Books and languages** switches imported books on and off (Sunni and Shia apart) and
742
788
  chooses the languages the texts are shown in; the others are folded behind an arrow on each hadith.
743
789
 
@@ -767,6 +813,12 @@ and a folder named `isnady-data` beside a portable application is used instead:
767
813
 
768
814
  ---
769
815
 
816
+ **Profiles.** Several people can use one isnady, each with their own settings, place in the books and bookmarks:
817
+ **File → Profiles** makes, switches, renames, deletes, exports and imports them (one `.isnady-profile.zip` file
818
+ carries a profile to another computer). The books and the database are shared. The first profile is the data folder
819
+ itself, so nothing changes for anyone who never makes a second one. `iy profile list`, `iy profile new Ayşe`,
820
+ `iy profile use Ayşe`, `iy profile export Ayşe ~/`; `ISNADY_PROFILE=Ayşe iy …` for one command.
821
+
770
822
  ## ⌨️ CLI
771
823
 
772
824
  Everything the window does also works without it — on a server, over SSH, or in a script. The
@@ -776,21 +828,23 @@ command line never loads Qt. Every command that takes a book accepts its full na
776
828
  | Short | Example | What it does |
777
829
  |:------|:-----|:-------------|
778
830
  | `iy` | `isnady` | Open the window |
779
- | `iy search WORDS` | `iy search niyet --book abudawud` | Search; `--mode all\|any\|phrase\|meaning`, `--whole-words`, `--book`, `--language`, `--limit`; `--in narrators\|scholars`, `--tradition sunni\|shia` |
780
- | `iy chain BOOK NUMBER` | `iy chain kafi 5:1740` | One chain, narrator by narrator, with who each one is and whom it reaches; `--raw` adds the wording |
831
+ | `iy search WORDS` | `iy search niyet --book abudawud` | Search; `--mode all\|any\|phrase\|meaning`, `--whole-words`, `--book`, `--language`, `--limit`; `--in narrators\|scholars`, `--tradition sunni\|shia`; `--recent`, `--clear-recent` |
832
+ | `iy chain BOOK NUMBER` | `iy chain kafi 5:1740` | One chain, narrator by narrator, with who each one is and whom it reaches; `--raw` adds the wording; without a number, the book's range |
781
833
  | `iy isnads` | `iy isnads --rebuild` | Read every chain and report per book: split, reaching the Prophet or a Ma'sum, identified |
782
834
  | `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 |
783
835
  | `iy book [KEY [CHAPTER]]` | `iy book bukhari 2` | The books; a book's chapters; a chapter read in order |
784
836
  | `iy scholar [NAME]` | `iy scholar albani` | The scholars in the data, or one of them with his measured statistics |
785
837
  | `iy tahric BOOK NUMBER` | `iy tahric bukhari 1` | Other narrations of a hadith in the imported books (takhrij) |
786
- | `iy stats [SECTION]` | `iy stats graders --book abudawud` | `corpus`, `narrators`, `chains`, `grades`, `books`, `graders`, `model`, `lab`; `--csv DIR`, `--recompute` |
838
+ | `iy stats [SECTION]` | `iy stats graders --book abudawud` | `corpus`, `narrators`, `chains`, `grades`, `books`, `graders`, `model`, `lab`; `--csv DIR`, `--recompute`; `--book @all` measures both roads |
787
839
  | `iy term [NAME]` | `iy term --search tadlis` | The glossary, English, Turkish or Arabic (`--lang tr`, `--lang ar`) |
788
- | `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`) |
789
- | `iy tree WHICH [NAME]` | `iy tree family "Ibn Umar"` | Genealogies: `prophets`, `quraysh`, a narrator's `family`, his line of `learning` (`--depth`, `--width`) |
840
+ | `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 |
841
+ | `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 |
842
+ | `iy profile ACTION` | `iy profile new Ayşe --copy default` | Profiles: `list`, `new`, `use`, `rename`, `delete`, `export`, `import` |
790
843
  | `iy bookmark ACTION` | `iy bookmark add hadith bukhari:1 --folder Prayer` | Bookmarks: `list`, `folders`, `add`, `remove`, `export`, `import` |
791
844
  | `iy ai build` | `iy ai status` | Learn the meaning index from the imported texts |
792
845
  | `iy catalog list` | `iy catalog list --repo lk-hadith-corpus` | The books of the repository in use, and your own, with what is imported |
793
846
  | `iy catalog import ID` | `iy catalog import sahih_muslim --language tur` | Import a book; `--all` imports every one; `remove`, `add`, `delete` manage the list |
847
+ | `iy catalog languages` | `iy catalog languages add tr en` | One language for every book: the list, `add`, `remove` (Arabic stays) |
794
848
  | `iy repo [list\|use\|show\|add\|remove]` | `iy repo add ~/isnady-data` | The data repositories: isnady-data (default), the optional ones, yours — a GitHub or Hugging Face address, a URL, or a folder |
795
849
  | `iy database [use FILE]` | `iy database use isnady-db-<date>.zip` | A ready database from a file; your own is kept beside it |
796
850
  | `iy import FORMAT FILE-OR-URL` | `iy import isnady ~/my_book/book.json` | Import a file of your own; `--book`, `--language`, `--license`, `--user`, `--token-env`, `--api-key-env` |
@@ -800,7 +854,7 @@ command line never loads Qt. Every command that takes a book accepts its full na
800
854
  | `iy datadir [FOLDER]` | `iy datadir /data/isnady` | Show or move the data folder; `--as-is`, `--default` |
801
855
  | `iy config list\|get\|set\|reset` | | Settings — the same as Edit → Preferences |
802
856
  | `iy shortcut` | `iy shortcut --no-desktop` | A desktop and applications-menu shortcut |
803
- | `iy update` | | Update every copy of isnady where it is installed |
857
+ | `iy update` | `iy update --check` | Update every copy of isnady where it is installed; `--check` only looks (PyPI and npm, what is new); `--npm` the npm package |
804
858
  | `iy doctor` | | Every copy of isnady on this computer and which one each command starts |
805
859
  | `iy -V` / `iy -h` | | Version / help |
806
860
 
package/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * database (used by both the Python and JavaScript packages) exists.
7
7
  */
8
8
 
9
- export const version = "0.3.1";
9
+ export const version = "0.3.3";
10
10
  export const name = "isnady";
11
11
 
12
12
  /** Returns basic package information. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isnady",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Hadith search with full isnad chains, narrator biographies, jarh wa ta'dil verdicts and reliability scores",
5
5
  "type": "module",
6
6
  "main": "./index.js",