Software Gardening Almanack Example#
This notebook demonstrates installing and using the Software Gardening Almanack Python package. The Almanack is an open-source handbook of applied guidance and tools for sustainable software development and maintenance.
# install the almanack from pypi
import json
import pandas as pd
import almanack
!pip install almanack
Requirement already satisfied: almanack in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (0.0.0.post1.dev0+9ddcab3)
Requirement already satisfied: charset-normalizer<4.0.0,>=3.4.0 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (3.4.1)
Requirement already satisfied: defusedxml<0.8.0,>=0.7.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.7.1)
Requirement already satisfied: fire<0.8,>=0.6 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.7.0)
Requirement already satisfied: pygit2<2.0.0,>=1.15.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (1.15.1)
Requirement already satisfied: pyyaml<7.0.0,>=6.0.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (6.0.2)
Requirement already satisfied: requests<3.0.0,>=2.32.3 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (2.32.3)
Requirement already satisfied: tabulate<0.10.0,>=0.9.0 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from almanack) (0.9.0)
Requirement already satisfied: termcolor in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from fire<0.8,>=0.6->almanack) (2.4.0)
Requirement already satisfied: cffi>=1.16.0 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from pygit2<2.0.0,>=1.15.1->almanack) (1.16.0)
Requirement already satisfied: idna<4,>=2.5 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from requests<3.0.0,>=2.32.3->almanack) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from requests<3.0.0,>=2.32.3->almanack) (1.26.19)
Requirement already satisfied: certifi>=2017.4.17 in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from requests<3.0.0,>=2.32.3->almanack) (2024.7.4)
Requirement already satisfied: pycparser in /home/runner/.cache/pypoetry/virtualenvs/almanack-1GdAbBV3-py3.11/lib/python3.11/site-packages (from cffi>=1.16.0->pygit2<2.0.0,>=1.15.1->almanack) (2.21)
# clone the almanack repo for example usage below
# we will apply the almanack tool to the almanack repo
!git clone https://github.com/software-gardening/almanack
Cloning into 'almanack'...
remote: Enumerating objects: 2633, done.
remote: Counting objects: 0% (1/1015)
remote: Counting objects: 1% (11/1015)
remote: Counting objects: 2% (21/1015)
remote: Counting objects: 3% (31/1015)
remote: Counting objects: 4% (41/1015)
remote: Counting objects: 5% (51/1015)
remote: Counting objects: 6% (61/1015)
remote: Counting objects: 7% (72/1015)
remote: Counting objects: 8% (82/1015)
remote: Counting objects: 9% (92/1015)
remote: Counting objects: 10% (102/1015)
remote: Counting objects: 11% (112/1015)
remote: Counting objects: 12% (122/1015)
remote: Counting objects: 13% (132/1015)
remote: Counting objects: 14% (143/1015)
remote: Counting objects: 15% (153/1015)
remote: Counting objects: 16% (163/1015)
remote: Counting objects: 17% (173/1015)
remote: Counting objects: 18% (183/1015)
remote: Counting objects: 19% (193/1015)
remote: Counting objects: 20% (203/1015)
remote: Counting objects: 21% (214/1015)
remote: Counting objects: 22% (224/1015)
remote: Counting objects: 23% (234/1015)
remote: Counting objects: 24% (244/1015)
remote: Counting objects: 25% (254/1015)
remote: Counting objects: 26% (264/1015)
remote: Counting objects: 27% (275/1015)
remote: Counting objects: 28% (285/1015)
remote: Counting objects: 29% (295/1015)
remote: Counting objects: 30% (305/1015)
remote: Counting objects: 31% (315/1015)
remote: Counting objects: 32% (325/1015)
remote: Counting objects: 33% (335/1015)
remote: Counting objects: 34% (346/1015)
remote: Counting objects: 35% (356/1015)
remote: Counting objects: 36% (366/1015)
remote: Counting objects: 37% (376/1015)
remote: Counting objects: 38% (386/1015)
remote: Counting objects: 39% (396/1015)
remote: Counting objects: 40% (406/1015)
remote: Counting objects: 41% (417/1015)
remote: Counting objects: 42% (427/1015)
remote: Counting objects: 43% (437/1015)
remote: Counting objects: 44% (447/1015)
remote: Counting objects: 45% (457/1015)
remote: Counting objects: 46% (467/1015)
remote: Counting objects: 47% (478/1015)
remote: Counting objects: 48% (488/1015)
remote: Counting objects: 49% (498/1015)
remote: Counting objects: 50% (508/1015)
remote: Counting objects: 51% (518/1015)
remote: Counting objects: 52% (528/1015)
remote: Counting objects: 53% (538/1015)
remote: Counting objects: 54% (549/1015)
remote: Counting objects: 55% (559/1015)
remote: Counting objects: 56% (569/1015)
remote: Counting objects: 57% (579/1015)
remote: Counting objects: 58% (589/1015)
remote: Counting objects: 59% (599/1015)
remote: Counting objects: 60% (609/1015)
remote: Counting objects: 61% (620/1015)
remote: Counting objects: 62% (630/1015)
remote: Counting objects: 63% (640/1015)
remote: Counting objects: 64% (650/1015)
remote: Counting objects: 65% (660/1015)
remote: Counting objects: 66% (670/1015)
remote: Counting objects: 67% (681/1015)
remote: Counting objects: 68% (691/1015)
remote: Counting objects: 69% (701/1015)
remote: Counting objects: 70% (711/1015)
remote: Counting objects: 71% (721/1015)
remote: Counting objects: 72% (731/1015)
remote: Counting objects: 73% (741/1015)
remote: Counting objects: 74% (752/1015)
remote: Counting objects: 75% (762/1015)
remote: Counting objects: 76% (772/1015)
remote: Counting objects: 77% (782/1015)
remote: Counting objects: 78% (792/1015)
remote: Counting objects: 79% (802/1015)
remote: Counting objects: 80% (812/1015)
remote: Counting objects: 81% (823/1015)
remote: Counting objects: 82% (833/1015)
remote: Counting objects: 83% (843/1015)
remote: Counting objects: 84% (853/1015)
remote: Counting objects: 85% (863/1015)
remote: Counting objects: 86% (873/1015)
remote: Counting objects: 87% (884/1015)
remote: Counting objects: 88% (894/1015)
remote: Counting objects: 89% (904/1015)
remote: Counting objects: 90% (914/1015)
remote: Counting objects: 91% (924/1015)
remote: Counting objects: 92% (934/1015)
remote: Counting objects: 93% (944/1015)
remote: Counting objects: 94% (955/1015)
remote: Counting objects: 95% (965/1015)
remote: Counting objects: 96% (975/1015)
remote: Counting objects: 97% (985/1015)
remote: Counting objects: 98% (995/1015)
remote: Counting objects: 99% (1005/1015)
remote: Counting objects: 100% (1015/1015)
remote: Counting objects: 100% (1015/1015), done.
remote: Compressing objects: 0% (1/571)
remote: Compressing objects: 1% (6/571)
remote: Compressing objects: 2% (12/571)
remote: Compressing objects: 2% (15/571)
remote: Compressing objects: 3% (18/571)
remote: Compressing objects: 3% (21/571)
remote: Compressing objects: 4% (23/571)
remote: Compressing objects: 5% (29/571)
remote: Compressing objects: 6% (35/571)
remote: Compressing objects: 7% (40/571)
remote: Compressing objects: 8% (46/571)
remote: Compressing objects: 9% (52/571)
remote: Compressing objects: 10% (58/571)
remote: Compressing objects: 11% (63/571)
remote: Compressing objects: 12% (69/571)
remote: Compressing objects: 13% (75/571)
remote: Compressing objects: 14% (80/571)
remote: Compressing objects: 15% (86/571)
remote: Compressing objects: 16% (92/571)
remote: Compressing objects: 17% (98/571)
remote: Compressing objects: 18% (103/571)
remote: Compressing objects: 19% (109/571)
remote: Compressing objects: 20% (115/571)
remote: Compressing objects: 21% (120/571)
remote: Compressing objects: 22% (126/571)
remote: Compressing objects: 23% (132/571)
remote: Compressing objects: 24% (138/571)
remote: Compressing objects: 25% (143/571)
remote: Compressing objects: 26% (149/571)
remote: Compressing objects: 27% (155/571)
remote: Compressing objects: 28% (160/571)
remote: Compressing objects: 29% (166/571)
remote: Compressing objects: 30% (172/571)
remote: Compressing objects: 31% (178/571)
remote: Compressing objects: 32% (183/571)
remote: Compressing objects: 33% (189/571)
remote: Compressing objects: 34% (195/571)
remote: Compressing objects: 35% (200/571)
remote: Compressing objects: 36% (206/571)
remote: Compressing objects: 37% (212/571)
remote: Compressing objects: 38% (217/571)
remote: Compressing objects: 39% (223/571)
remote: Compressing objects: 40% (229/571)
remote: Compressing objects: 41% (235/571)
remote: Compressing objects: 42% (240/571)
remote: Compressing objects: 43% (246/571)
remote: Compressing objects: 44% (252/571)
remote: Compressing objects: 45% (257/571)
remote: Compressing objects: 46% (263/571)
remote: Compressing objects: 47% (269/571)
remote: Compressing objects: 48% (275/571)
remote: Compressing objects: 49% (280/571)
remote: Compressing objects: 50% (286/571)
remote: Compressing objects: 51% (292/571)
remote: Compressing objects: 52% (297/571)
remote: Compressing objects: 53% (303/571)
remote: Compressing objects: 54% (309/571)
remote: Compressing objects: 55% (315/571)
remote: Compressing objects: 56% (320/571)
remote: Compressing objects: 57% (326/571)
remote: Compressing objects: 58% (332/571)
remote: Compressing objects: 59% (337/571)
remote: Compressing objects: 60% (343/571)
remote: Compressing objects: 61% (349/571)
remote: Compressing objects: 62% (355/571)
remote: Compressing objects: 63% (360/571)
remote: Compressing objects: 64% (366/571)
remote: Compressing objects: 65% (372/571)
remote: Compressing objects: 66% (377/571)
remote: Compressing objects: 67% (383/571)
remote: Compressing objects: 68% (389/571)
remote: Compressing objects: 69% (394/571)
remote: Compressing objects: 70% (400/571)
remote: Compressing objects: 71% (406/571)
remote: Compressing objects: 72% (412/571)
remote: Compressing objects: 73% (417/571)
remote: Compressing objects: 74% (423/571)
remote: Compressing objects: 75% (429/571)
remote: Compressing objects: 76% (434/571)
remote: Compressing objects: 77% (440/571)
remote: Compressing objects: 78% (446/571)
remote: Compressing objects: 79% (452/571)
remote: Compressing objects: 80% (457/571)
remote: Compressing objects: 81% (463/571)
remote: Compressing objects: 82% (469/571)
remote: Compressing objects: 83% (474/571)
remote: Compressing objects: 84% (480/571)
remote: Compressing objects: 85% (486/571)
remote: Compressing objects: 86% (492/571)
remote: Compressing objects: 87% (497/571)
remote: Compressing objects: 88% (503/571)
remote: Compressing objects: 89% (509/571)
remote: Compressing objects: 90% (514/571)
remote: Compressing objects: 91% (520/571)
remote: Compressing objects: 92% (526/571)
remote: Compressing objects: 93% (532/571)
remote: Compressing objects: 94% (537/571)
remote: Compressing objects: 95% (543/571)
remote: Compressing objects: 96% (549/571)
remote: Compressing objects: 97% (554/571)
remote: Compressing objects: 98% (560/571)
remote: Compressing objects: 99% (566/571)
remote: Compressing objects: 100% (571/571)
remote: Compressing objects: 100% (571/571), done.
Receiving objects: 0% (1/2633)
Receiving objects: 1% (27/2633)
Receiving objects: 2% (53/2633)
Receiving objects: 3% (79/2633)
Receiving objects: 4% (106/2633)
Receiving objects: 5% (132/2633)
Receiving objects: 6% (158/2633)
Receiving objects: 7% (185/2633)
Receiving objects: 8% (211/2633), 3.93 MiB | 7.84 MiB/s
Receiving objects: 9% (237/2633), 3.93 MiB | 7.84 MiB/s
Receiving objects: 10% (264/2633), 3.93 MiB | 7.84 MiB/s
Receiving objects: 10% (268/2633), 21.91 MiB | 21.91 MiB/s
Receiving objects: 11% (290/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 12% (316/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 13% (343/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 14% (369/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 15% (395/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 16% (422/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 17% (448/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 18% (474/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 19% (501/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 20% (527/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 21% (553/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 22% (580/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 23% (606/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 24% (632/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 25% (659/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 26% (685/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 27% (711/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 28% (738/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 29% (764/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 30% (790/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 31% (817/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 32% (843/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 33% (869/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 34% (896/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 35% (922/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 36% (948/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 37% (975/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 38% (1001/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 39% (1027/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 40% (1054/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 41% (1080/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 42% (1106/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 43% (1133/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 44% (1159/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 45% (1185/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 46% (1212/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 47% (1238/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 48% (1264/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 49% (1291/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 50% (1317/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 51% (1343/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 52% (1370/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 53% (1396/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 54% (1422/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 55% (1449/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 56% (1475/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 57% (1501/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 58% (1528/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 59% (1554/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 60% (1580/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 61% (1607/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 62% (1633/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 63% (1659/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 64% (1686/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 65% (1712/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 66% (1738/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 67% (1765/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 68% (1791/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 69% (1817/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 70% (1844/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 71% (1870/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 72% (1896/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 73% (1923/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 74% (1949/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 75% (1975/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 76% (2002/2633), 61.85 MiB | 41.23 MiB/s
Receiving objects: 76% (2009/2633), 79.96 MiB | 25.57 MiB/s
Receiving objects: 77% (2028/2633), 79.96 MiB | 25.57 MiB/s
Receiving objects: 78% (2054/2633), 79.96 MiB | 25.57 MiB/s
Receiving objects: 78% (2055/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 79% (2081/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 80% (2107/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 81% (2133/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 82% (2160/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 83% (2186/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 84% (2212/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 85% (2239/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 86% (2265/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 87% (2291/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 88% (2318/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 89% (2344/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 90% (2370/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 91% (2397/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 92% (2423/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 93% (2449/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 94% (2476/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 95% (2502/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 96% (2528/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 97% (2555/2633), 92.49 MiB | 22.43 MiB/s
Receiving objects: 98% (2581/2633), 99.72 MiB | 20.97 MiB/s
Receiving objects: 99% (2607/2633), 99.72 MiB | 20.97 MiB/s
remote: Total 2633 (delta 797), reused 447 (delta 443), pack-reused 1618 (from 1)
Receiving objects: 100% (2633/2633), 99.72 MiB | 20.97 MiB/s
Receiving objects: 100% (2633/2633), 100.21 MiB | 21.00 MiB/s, done.
Resolving deltas: 0% (0/1335)
Resolving deltas: 1% (14/1335)
Resolving deltas: 2% (27/1335)
Resolving deltas: 3% (41/1335)
Resolving deltas: 4% (54/1335)
Resolving deltas: 5% (67/1335)
Resolving deltas: 6% (81/1335)
Resolving deltas: 7% (94/1335)
Resolving deltas: 8% (107/1335)
Resolving deltas: 9% (121/1335)
Resolving deltas: 10% (134/1335)
Resolving deltas: 11% (147/1335)
Resolving deltas: 12% (161/1335)
Resolving deltas: 13% (174/1335)
Resolving deltas: 14% (187/1335)
Resolving deltas: 15% (201/1335)
Resolving deltas: 16% (214/1335)
Resolving deltas: 17% (227/1335)
Resolving deltas: 18% (241/1335)
Resolving deltas: 19% (254/1335)
Resolving deltas: 20% (267/1335)
Resolving deltas: 21% (281/1335)
Resolving deltas: 22% (294/1335)
Resolving deltas: 23% (308/1335)
Resolving deltas: 24% (321/1335)
Resolving deltas: 25% (334/1335)
Resolving deltas: 26% (348/1335)
Resolving deltas: 27% (361/1335)
Resolving deltas: 28% (374/1335)
Resolving deltas: 29% (388/1335)
Resolving deltas: 30% (401/1335)
Resolving deltas: 31% (414/1335)
Resolving deltas: 32% (428/1335)
Resolving deltas: 33% (441/1335)
Resolving deltas: 34% (454/1335)
Resolving deltas: 35% (468/1335)
Resolving deltas: 36% (481/1335)
Resolving deltas: 37% (494/1335)
Resolving deltas: 38% (508/1335)
Resolving deltas: 39% (521/1335)
Resolving deltas: 40% (534/1335)
Resolving deltas: 41% (548/1335)
Resolving deltas: 42% (561/1335)
Resolving deltas: 43% (575/1335)
Resolving deltas: 44% (588/1335)
Resolving deltas: 45% (601/1335)
Resolving deltas: 46% (615/1335)
Resolving deltas: 47% (628/1335)
Resolving deltas: 48% (641/1335)
Resolving deltas: 49% (655/1335)
Resolving deltas: 50% (668/1335)
Resolving deltas: 51% (681/1335)
Resolving deltas: 52% (695/1335)
Resolving deltas: 53% (708/1335)
Resolving deltas: 54% (721/1335)
Resolving deltas: 55% (735/1335)
Resolving deltas: 56% (748/1335)
Resolving deltas: 57% (761/1335)
Resolving deltas: 58% (775/1335)
Resolving deltas: 59% (788/1335)
Resolving deltas: 60% (801/1335)
Resolving deltas: 61% (815/1335)
Resolving deltas: 62% (829/1335)
Resolving deltas: 63% (842/1335)
Resolving deltas: 64% (855/1335)
Resolving deltas: 65% (868/1335)
Resolving deltas: 66% (882/1335)
Resolving deltas: 67% (895/1335)
Resolving deltas: 68% (908/1335)
Resolving deltas: 69% (922/1335)
Resolving deltas: 70% (935/1335)
Resolving deltas: 71% (948/1335)
Resolving deltas: 72% (962/1335)
Resolving deltas: 73% (975/1335)
Resolving deltas: 74% (988/1335)
Resolving deltas: 75% (1002/1335)
Resolving deltas: 76% (1015/1335)
Resolving deltas: 77% (1028/1335)
Resolving deltas: 78% (1042/1335)
Resolving deltas: 79% (1055/1335)
Resolving deltas: 80% (1068/1335)
Resolving deltas: 81% (1082/1335)
Resolving deltas: 82% (1095/1335)
Resolving deltas: 83% (1109/1335)
Resolving deltas: 84% (1122/1335)
Resolving deltas: 85% (1135/1335)
Resolving deltas: 86% (1149/1335)
Resolving deltas: 87% (1162/1335)
Resolving deltas: 88% (1175/1335)
Resolving deltas: 89% (1189/1335)
Resolving deltas: 90% (1202/1335)
Resolving deltas: 91% (1215/1335)
Resolving deltas: 92% (1229/1335)
Resolving deltas: 93% (1242/1335)
Resolving deltas: 94% (1255/1335)
Resolving deltas: 95% (1269/1335)
Resolving deltas: 96% (1282/1335)
Resolving deltas: 97% (1295/1335)
Resolving deltas: 98% (1309/1335)
Resolving deltas: 99% (1322/1335)
Resolving deltas: 100% (1335/1335)
Resolving deltas: 100% (1335/1335), done.
%%time
# gather the almanack table using the almanack repo as a reference
almanack_table = almanack.metrics.data.get_table("almanack")
# show the almanack table as a Pandas DataFrame
pd.DataFrame(almanack_table)
CPU times: user 2.46 s, sys: 92.2 ms, total: 2.55 s
Wall time: 6.33 s
name | id | result-type | sustainability_correlation | description | correction_guidance | result | |
---|---|---|---|---|---|---|---|
0 | repo-path | SGA-META-0001 | str | 0 | Repository path (local directory). | None | /home/runner/work/almanack/almanack/src/book/s... |
1 | repo-commits | SGA-META-0002 | int | 0 | Total number of commits for the repository. | None | 181 |
2 | repo-file-count | SGA-META-0003 | int | 0 | Total number of files tracked within the repos... | None | 123 |
3 | repo-commit-time-range | SGA-META-0004 | tuple | 0 | Starting commit and most recent commit for the... | None | (2024-03-05, 2025-04-15) |
4 | repo-days-of-development | SGA-META-0005 | int | 0 | Integer representing the number of days of dev... | None | 407 |
5 | repo-commits-per-day | SGA-META-0006 | float | 0 | Floating point number which represents the num... | None | 0.444717 |
6 | almanack-table-datetime | SGA-META-0007 | str | 0 | String representing the date when this table w... | None | 2025-04-15T21:50:00.312428Z |
7 | almanack-version | SGA-META-0008 | str | 0 | String representing the version of the almanac... | None | 0.0.0.post1.dev0+9ddcab3 |
8 | repo-primary-language | SGA-META-0009 | str | 0 | Detected primary programming language of the r... | None | Jupyter Notebook |
9 | repo-primary-license | SGA-META-0010 | str | 0 | Detected primary license of the repository. | None | bsd-3-clause |
10 | repo-doi | SGA-META-0011 | int | 0 | Repository DOI value detected from CITATION.cf... | None | 10.5281/zenodo.14765834 |
11 | repo-doi-publication-date | SGA-META-0012 | str | 0 | Repository DOI publication date detected from ... | None | None |
12 | repo-almanack-score | SGA-META-0013 | dict | 0 | Dictionary of length three, including the foll... | None | {'almanack-score-numerator': 11, 'almanack-sco... |
13 | repo-includes-readme | SGA-GL-0001 | bool | 1 | Boolean value indicating the presence of a REA... | Consider adding a README file to the repository. | True |
14 | repo-includes-contributing | SGA-GL-0002 | bool | 1 | Boolean value indicating the presence of a CON... | Consider adding a CONTRIBUTING file to the rep... | True |
15 | repo-includes-code-of-conduct | SGA-GL-0003 | bool | 1 | Boolean value indicating the presence of a COD... | Consider adding a CODE_OF_CONDUCT file to the ... | True |
16 | repo-includes-license | SGA-GL-0004 | bool | 1 | Boolean value indicating the presence of a LIC... | Consider adding a LICENSE file to the repository. | True |
17 | repo-is-citable | SGA-GL-0005 | bool | 1 | Boolean value indicating the presence of a CIT... | Consider adding a CITATION file to the reposit... | True |
18 | repo-default-branch-not-master | SGA-GL-0006 | bool | 1 | Boolean value indicating that the repo uses a ... | Consider using a default source control branch... | True |
19 | repo-includes-common-docs | SGA-GL-0007 | bool | 1 | Boolean value indicating whether the repo incl... | Consider including project documentation throu... | True |
20 | repo-unique-contributors | SGA-GL-0008 | int | 0 | Count of unique contributors since the beginni... | None | 5 |
21 | repo-unique-contributors-past-year | SGA-GL-0009 | int | 0 | Count of unique contributors within the last y... | None | 4 |
22 | repo-unique-contributors-past-182-days | SGA-GL-0010 | int | 0 | Count of unique contributors within the last 1... | None | 2 |
23 | repo-tags-count | SGA-GL-0011 | int | 0 | Count of the number of tags within the reposit... | None | 7 |
24 | repo-tags-count-past-year | SGA-GL-0012 | int | 0 | Count of the number of tags within the reposit... | None | 7 |
25 | repo-tags-count-past-182-days | SGA-GL-0013 | int | 0 | Count of the number of tags within the reposit... | None | 5 |
26 | repo-stargazers-count | SGA-GL-0014 | int | 0 | Count of the number of stargazers on repositor... | None | 9 |
27 | repo-uses-issues | SGA-GL-0015 | bool | 1 | Whether the repository uses issues (for exampl... | Consider leveraging issues for tracking bugs a... | True |
28 | repo-issues-open-count | SGA-GL-0016 | int | 0 | Count of open issues for repository. | None | 43 |
29 | repo-pull-requests-enabled | SGA-GL-0017 | bool | 1 | Whether the repository enables pull requests. | Consider enabling pull requests for the reposi... | True |
30 | repo-forks-count | SGA-GL-0018 | int | 0 | Count of forks of the repository. | None | 2 |
31 | repo-subscribers-count | SGA-GL-0019 | int | 0 | Count of subscribers (or watchers) of the repo... | None | 1 |
32 | repo-packages-ecosystems | SGA-GL-0020 | list | 0 | List of package platforms or services where th... | None | [pypi] |
33 | repo-packages-ecosystems-count | SGA-GL-0021 | int | 0 | Count of package platforms or services where t... | None | 1 |
34 | repo-packages-versions-count | SGA-GL-0022 | int | 0 | Count of package versions on package hosts or ... | None | 8 |
35 | repo-social-media-platforms | SGA-GL-0023 | list | 0 | Social media platforms detected within the rea... | None | [] |
36 | repo-social-media-platforms-count | SGA-GL-0024 | int | 0 | Count of social media platforms detected withi... | None | 0 |
37 | repo-doi-valid-format | SGA-GL-0025 | bool | 1 | Whether the DOI found in the CITATION.cff file... | DOI within the CITATION.cff file is not of a v... | True |
38 | repo-doi-https-resolvable | SGA-GL-0026 | bool | 1 | Whether the DOI found in the CITATION.cff file... | DOI within the CITATION.cff file is not https ... | True |
39 | repo-doi-cited-by-count | SGA-GL-0027 | int | 0 | How many other works cite the DOI for the repo... | None | None |
40 | repo-days-between-doi-publication-date-and-lat... | SGA-GL-0028 | int | 0 | The number of days between the most recent com... | None | None |
41 | repo-gh-workflow-success-ratio | SGA-SF-0001 | float | 0 | Ratio of succeeding workflow runs out of queri... | None | 0.81 |
42 | repo-gh-workflow-succeeding-runs | SGA-SF-0002 | int | 0 | Number of succeeding workflow runs out of quer... | None | 100 |
43 | repo-gh-workflow-failing-runs | SGA-SF-0003 | int | 0 | Number of failing workflow runs out of queried... | None | 81 |
44 | repo-gh-workflow-queried-total | SGA-SF-0004 | int | 0 | Total number of workflow runs from GitHub (onl... | None | 19 |
45 | repo-code-coverage-percent | SGA-SF-0005 | float | 0 | Percentage of code coverage for repository giv... | None | None |
46 | repo-date-of-last-coverage-run | SGA-SF-0006 | str | 0 | Date of code coverage run for repository given... | None | None |
47 | repo-days-between-last-coverage-run-latest-commit | SGA-SF-0007 | int | 0 | Days between last coverage run date and latest... | None | None |
48 | repo-code-coverage-total-lines | SGA-SF-0008 | int | 0 | Total lines of code used for code coverage wit... | None | None |
49 | repo-code-coverage-executed-lines | SGA-SF-0009 | int | 0 | Total lines covered code within repository giv... | None | None |
50 | repo-agg-info-entropy | SGA-VS-0001 | float | 0 | Aggregated information entropy for all files w... | None | 0.003481 |
51 | repo-file-info-entropy | SGA-VS-0002 | dict | 0 | File-level information entropy for all files w... | None | {'.alexignore': 8.097830150742987e-05, '.githu... |
# print the json with indentation
print(json.dumps(almanack_table, indent=4))
[
{
"name": "repo-path",
"id": "SGA-META-0001",
"result-type": "str",
"sustainability_correlation": 0,
"description": "Repository path (local directory).",
"correction_guidance": null,
"result": "/home/runner/work/almanack/almanack/src/book/seed-bank/almanack-example/almanack"
},
{
"name": "repo-commits",
"id": "SGA-META-0002",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Total number of commits for the repository.",
"correction_guidance": null,
"result": 181
},
{
"name": "repo-file-count",
"id": "SGA-META-0003",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Total number of files tracked within the repository.",
"correction_guidance": null,
"result": 123
},
{
"name": "repo-commit-time-range",
"id": "SGA-META-0004",
"result-type": "tuple",
"sustainability_correlation": 0,
"description": "Starting commit and most recent commit for the repository.",
"correction_guidance": null,
"result": [
"2024-03-05",
"2025-04-15"
]
},
{
"name": "repo-days-of-development",
"id": "SGA-META-0005",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Integer representing the number of days of development between most recent commit and first commit.",
"correction_guidance": null,
"result": 407
},
{
"name": "repo-commits-per-day",
"id": "SGA-META-0006",
"result-type": "float",
"sustainability_correlation": 0,
"description": "Floating point number which represents the number of commits per day (using days of development).",
"correction_guidance": null,
"result": 0.44471744471744473
},
{
"name": "almanack-table-datetime",
"id": "SGA-META-0007",
"result-type": "str",
"sustainability_correlation": 0,
"description": "String representing the date when this table was generated in the format of '%Y-%m-%dT%H:%M:%S.%fZ', for example: 2024-11-22T18:20:30.123456Z .",
"correction_guidance": null,
"result": "2025-04-15T21:50:00.312428Z"
},
{
"name": "almanack-version",
"id": "SGA-META-0008",
"result-type": "str",
"sustainability_correlation": 0,
"description": "String representing the version of the almanack which was used to generate this table.",
"correction_guidance": null,
"result": "0.0.0.post1.dev0+9ddcab3"
},
{
"name": "repo-primary-language",
"id": "SGA-META-0009",
"result-type": "str",
"sustainability_correlation": 0,
"description": "Detected primary programming language of the repository.",
"correction_guidance": null,
"result": "Jupyter Notebook"
},
{
"name": "repo-primary-license",
"id": "SGA-META-0010",
"result-type": "str",
"sustainability_correlation": 0,
"description": "Detected primary license of the repository.",
"correction_guidance": null,
"result": "bsd-3-clause"
},
{
"name": "repo-doi",
"id": "SGA-META-0011",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Repository DOI value detected from CITATION.cff file.",
"correction_guidance": null,
"result": "10.5281/zenodo.14765834"
},
{
"name": "repo-doi-publication-date",
"id": "SGA-META-0012",
"result-type": "str",
"sustainability_correlation": 0,
"description": "Repository DOI publication date detected from CITATION.cff file and OpenAlex.org.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-almanack-score",
"id": "SGA-META-0013",
"result-type": "dict",
"sustainability_correlation": 0,
"description": "Dictionary of length three, including the following: 1) number of Almanack boolean metrics that passed (numerator), 2) number of total Almanack boolean metrics considered (denominator), and 3) a score that represents how likely the repository will be maintained over time based (numerator / denominator).",
"correction_guidance": null,
"result": {
"almanack-score-numerator": 11,
"almanack-score-denominator": 11,
"almanack-score": 1.0
}
},
{
"name": "repo-includes-readme",
"id": "SGA-GL-0001",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating the presence of a README file in the repository.",
"correction_guidance": "Consider adding a README file to the repository.",
"result": true
},
{
"name": "repo-includes-contributing",
"id": "SGA-GL-0002",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating the presence of a CONTRIBUTING file in the repository.",
"correction_guidance": "Consider adding a CONTRIBUTING file to the repository.",
"result": true
},
{
"name": "repo-includes-code-of-conduct",
"id": "SGA-GL-0003",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating the presence of a CODE_OF_CONDUCT file in the repository.",
"correction_guidance": "Consider adding a CODE_OF_CONDUCT file to the repository.",
"result": true
},
{
"name": "repo-includes-license",
"id": "SGA-GL-0004",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating the presence of a LICENSE file in the repository.",
"correction_guidance": "Consider adding a LICENSE file to the repository.",
"result": true
},
{
"name": "repo-is-citable",
"id": "SGA-GL-0005",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating the presence of a CITATION file or some other means of indicating how to cite the work.",
"correction_guidance": "Consider adding a CITATION file to the repository (e.g. citation.cff, etc.).",
"result": true
},
{
"name": "repo-default-branch-not-master",
"id": "SGA-GL-0006",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating that the repo uses a default branch name besides 'master'.",
"correction_guidance": "Consider using a default source control branch name other than 'master'.",
"result": true
},
{
"name": "repo-includes-common-docs",
"id": "SGA-GL-0007",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Boolean value indicating whether the repo includes common documentation directory and files associated with building docsites.",
"correction_guidance": "Consider including project documentation through the 'docs/' directory.",
"result": true
},
{
"name": "repo-unique-contributors",
"id": "SGA-GL-0008",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of unique contributors since the beginning of the repository.",
"correction_guidance": null,
"result": 5
},
{
"name": "repo-unique-contributors-past-year",
"id": "SGA-GL-0009",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of unique contributors within the last year from now (where now is a reference to table value of almanack-table-datetime).",
"correction_guidance": null,
"result": 4
},
{
"name": "repo-unique-contributors-past-182-days",
"id": "SGA-GL-0010",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of unique contributors within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).",
"correction_guidance": null,
"result": 2
},
{
"name": "repo-tags-count",
"id": "SGA-GL-0011",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of the number of tags within the repository.",
"correction_guidance": null,
"result": 7
},
{
"name": "repo-tags-count-past-year",
"id": "SGA-GL-0012",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of the number of tags within the repository within the last year from now (where now is a reference to table value of almanack-table-datetime).",
"correction_guidance": null,
"result": 7
},
{
"name": "repo-tags-count-past-182-days",
"id": "SGA-GL-0013",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of the number of tags within the repository within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).",
"correction_guidance": null,
"result": 5
},
{
"name": "repo-stargazers-count",
"id": "SGA-GL-0014",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of the number of stargazers on repository remote hosting platform.",
"correction_guidance": null,
"result": 9
},
{
"name": "repo-uses-issues",
"id": "SGA-GL-0015",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Whether the repository uses issues (for example, as a bug and/or feature tracking tool.",
"correction_guidance": "Consider leveraging issues for tracking bugs and/or features within your repository hosting platform.",
"result": true
},
{
"name": "repo-issues-open-count",
"id": "SGA-GL-0016",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of open issues for repository.",
"correction_guidance": null,
"result": 43
},
{
"name": "repo-pull-requests-enabled",
"id": "SGA-GL-0017",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Whether the repository enables pull requests.",
"correction_guidance": "Consider enabling pull requests for the repository through your repository hosting platform.",
"result": true
},
{
"name": "repo-forks-count",
"id": "SGA-GL-0018",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of forks of the repository.",
"correction_guidance": null,
"result": 2
},
{
"name": "repo-subscribers-count",
"id": "SGA-GL-0019",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of subscribers (or watchers) of the repository.",
"correction_guidance": null,
"result": 1
},
{
"name": "repo-packages-ecosystems",
"id": "SGA-GL-0020",
"result-type": "list",
"sustainability_correlation": 0,
"description": "List of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).",
"correction_guidance": null,
"result": [
"pypi"
]
},
{
"name": "repo-packages-ecosystems-count",
"id": "SGA-GL-0021",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).",
"correction_guidance": null,
"result": 1
},
{
"name": "repo-packages-versions-count",
"id": "SGA-GL-0022",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of package versions on package hosts or services where the repository was detected (leveraging the ecosyste.ms packages API).",
"correction_guidance": null,
"result": 8
},
{
"name": "repo-social-media-platforms",
"id": "SGA-GL-0023",
"result-type": "list",
"sustainability_correlation": 0,
"description": "Social media platforms detected within the readme.",
"correction_guidance": null,
"result": []
},
{
"name": "repo-social-media-platforms-count",
"id": "SGA-GL-0024",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Count of social media platforms detected within the readme.",
"correction_guidance": null,
"result": 0
},
{
"name": "repo-doi-valid-format",
"id": "SGA-GL-0025",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Whether the DOI found in the CITATION.cff file is of a valid format.",
"correction_guidance": "DOI within the CITATION.cff file is not of a valid format or missing.",
"result": true
},
{
"name": "repo-doi-https-resolvable",
"id": "SGA-GL-0026",
"result-type": "bool",
"sustainability_correlation": 1,
"description": "Whether the DOI found in the CITATION.cff file is https resolvable.",
"correction_guidance": "DOI within the CITATION.cff file is not https resolvable or missing.",
"result": true
},
{
"name": "repo-doi-cited-by-count",
"id": "SGA-GL-0027",
"result-type": "int",
"sustainability_correlation": 0,
"description": "How many other works cite the DOI for the repository found within the CITATION.cff as discovered by the OpenAlex.org API.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-days-between-doi-publication-date-and-latest-commit",
"id": "SGA-GL-0028",
"result-type": "int",
"sustainability_correlation": 0,
"description": "The number of days between the most recent commit and DOI for the repository's publication date as discovered by the OpenAlex.org API.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-gh-workflow-success-ratio",
"id": "SGA-SF-0001",
"result-type": "float",
"sustainability_correlation": 0,
"description": "Ratio of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
"correction_guidance": null,
"result": 0.81
},
{
"name": "repo-gh-workflow-succeeding-runs",
"id": "SGA-SF-0002",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Number of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
"correction_guidance": null,
"result": 100
},
{
"name": "repo-gh-workflow-failing-runs",
"id": "SGA-SF-0003",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Number of failing workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
"correction_guidance": null,
"result": 81
},
{
"name": "repo-gh-workflow-queried-total",
"id": "SGA-SF-0004",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Total number of workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).",
"correction_guidance": null,
"result": 19
},
{
"name": "repo-code-coverage-percent",
"id": "SGA-SF-0005",
"result-type": "float",
"sustainability_correlation": 0,
"description": "Percentage of code coverage for repository given detected code coverage data.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-date-of-last-coverage-run",
"id": "SGA-SF-0006",
"result-type": "str",
"sustainability_correlation": 0,
"description": "Date of code coverage run for repository given detected code coverage data.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-days-between-last-coverage-run-latest-commit",
"id": "SGA-SF-0007",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Days between last coverage run date and latest commit date.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-code-coverage-total-lines",
"id": "SGA-SF-0008",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Total lines of code used for code coverage within repository given detected code coverage data.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-code-coverage-executed-lines",
"id": "SGA-SF-0009",
"result-type": "int",
"sustainability_correlation": 0,
"description": "Total lines covered code within repository given detected code coverage data.",
"correction_guidance": null,
"result": null
},
{
"name": "repo-agg-info-entropy",
"id": "SGA-VS-0001",
"result-type": "float",
"sustainability_correlation": 0,
"description": "Aggregated information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Represents value from 0 to 1 where 0 equals no information entropy and 1 represents maximum information entropy.",
"correction_guidance": null,
"result": 0.003481125817924669
},
{
"name": "repo-file-info-entropy",
"id": "SGA-VS-0002",
"result-type": "dict",
"sustainability_correlation": 0,
"description": "File-level information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Shows all files and their corresponding information entropy measurements relative to the other files found within the range of commits.",
"correction_guidance": null,
"result": {
".alexignore": 8.097830150742987e-05,
".github/ISSUE_TEMPLATE/bug.yml": 0.002292497833746086,
".github/ISSUE_TEMPLATE/config.yml": 8.097830150742987e-05,
".github/ISSUE_TEMPLATE/feature.yml": 0.0020656978918468477,
".github/PULL_REQUEST_TEMPLATE.md": 0.0011701890580090926,
".github/actions/install-node-env/action.yml": 0.0004771501191130552,
".github/actions/install-python-env/action.yml": 0.0009471830972097647,
".github/dependabot.yml": 0.0011150088382026761,
".github/release-drafter.yml": 0.0006876899126423689,
".github/workflows/deploy-book.yml": 0.00127952661762561,
".github/workflows/draft-release.yml": 0.0007462950276903029,
".github/workflows/entropy-check.yml": 0.001835184128356774,
".github/workflows/pre-commit-checks.yml": 0.0010872827576245768,
".github/workflows/publish-pypi.yml": 0.0008618312058264572,
".github/workflows/pytest-tests.yml": 0.0011426434473941027,
".gitignore": 0.0038720004783875657,
".linkcheckerrc.ini": 0.0005685290226546406,
".pre-commit-config.yaml": 0.004799666701980044,
".pre-commit-hooks.yaml": 0.00041507639550952694,
".vale.ini": 0.0004771501191130552,
"CITATION.cff": 0.004821895556359322,
"CODE_OF_CONDUCT.md": 0.00011746241425725711,
"CONTRIBUTING.md": 0.00011746241425725711,
"LICENSE": 0.000890398099786692,
"LICENSE.txt": 0.000890398099786692,
"README.md": 0.0026877654319695785,
"coverage.xml": 0.021881633625513673,
"docs/readme.md": 0.00011746241425725711,
"media/coverage-badge.svg": 4.277136998369417e-05,
"pa11y.json": 0.00025455059416638225,
"package-lock.json": 0.02882094137213742,
"package.json": 0.00018736110517456593,
"poetry.lock": 0.0625315589678386,
"pyproject.toml": 0.004732874681446033,
"src/almanack/__init__.py": 0.0007753795294995523,
"src/almanack/book.py": 0.0018609954946444017,
"src/almanack/cli.py": 0.004799666701980044,
"src/almanack/git.py": 0.008999907303236583,
"src/almanack/metrics/data.py": 0.017357027668570467,
"src/almanack/metrics/entropy/calculate_entropy.py": 0.0029543654696303147,
"src/almanack/metrics/entropy/processing_repositories.py": 0.001963734275341387,
"src/almanack/metrics/garden_lattice/connectedness.py": 0.00665542861027857,
"src/almanack/metrics/garden_lattice/practicality.py": 0.0030982027376619133,
"src/almanack/metrics/garden_lattice/understanding.py": 0.0016529919226945468,
"src/almanack/metrics/metrics.yml": 0.00998192649127175,
"src/almanack/metrics/remote.py": 0.002491317069119771,
"src/almanack/reporting/report.py": 0.0032409997736440434,
"src/book/_config.yml": 0.0014144452831130587,
"src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.odp": 0.0,
"src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.pdf": 0.0,
"src/book/_static/custom.css": 0.0004462400188944573,
"src/book/_toc.yml": 0.0010594625914899874,
"src/book/assets/640px-Forgard2-003.gif": 0.0,
"src/book/assets/640px-Rundes_Fenster_mit_Gitter.jpeg": 0.0,
"src/book/assets/Sundial_2916_HDR.jpeg": 0.0,
"src/book/assets/almanack-influencing-software.png": 0.0,
"src/book/assets/garden-lattice-understanding-transfer.png": 0.0,
"src/book/assets/software-gardening-almanack-logo.png": 0.0,
"src/book/assets/software-gardening-logo.png": 0.0,
"src/book/assets/software-lifecycle.png": 0.0,
"src/book/assets/xkcd_dependency.png": 0.0,
"src/book/favicon.png": 0.0,
"src/book/garden-circle/contributing.md": 0.004710575206573887,
"src/book/garden-circle/garden-circle.md": 0.00018736110517456593,
"src/book/garden-circle/garden-map.md": 0.0013337170069908733,
"src/book/garden-circle/package-api.md": 0.003026417601510769,
"src/book/garden-circle/pavilion.md": 0.00038363807480726146,
"src/book/garden-lattice/garden-lattice.md": 0.00127952661762561,
"src/book/garden-lattice/understanding.md": 0.0031697279059317357,
"src/book/introduction.md": 0.003941043143731677,
"src/book/references.bib": 0.007259467860171952,
"src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.03361171775302876,
"src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.004844106989777077,
"src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.003848941660825222,
"src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links_with_github_data.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/gather-software-information-entropy.ipynb": 0.004124201495167061,
"src/book/seed-bank/pubmed-github-repositories/images/pubmed-lines-of-code-and-time.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-forks.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-open-issues.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-forks.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-gh-stars.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-open-issues.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-top-5-langs.png": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_1.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_10.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_11.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_12.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_13.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_14.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_15.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_16.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_17.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_18.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_19.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_2.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_20.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_3.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_4.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_5.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_6.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_7.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_8.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_9.parquet": 0.0,
"src/book/seed-bank/pubmed-github-repositories/visualize-pubmed-repo-sofware-entropy.ipynb": 0.057763340710810254,
"src/book/seed-bank/seed-bank.md": 0.00018736110517456593,
"src/book/software-forest/software-forest.md": 0.0013066601011828436,
"src/book/verdant-sundial/verdant-sundial.md": 0.0013337170069908733,
"styles/config/vocabularies/almanack/accept.txt": 0.0008043268021533052,
"tests/__init__.py": 0.0,
"tests/conftest.py": 0.004486579770508568,
"tests/data/almanack/coverage/python/coverage.json": 4.277136998369417e-05,
"tests/data/almanack/coverage/python/coverage.lcov": 0.02001052908150922,
"tests/data/almanack/repo_setup/create_repo.py": 0.006571342649999315,
"tests/data/almanack/repo_setup/insert_code.py": 0.0016529919226945468,
"tests/data/jupyter-book/sandbox.md": 0.0005382798890204358,
"tests/metrics/test_calculate_entropy.py": 0.001679187864939773,
"tests/metrics/test_data.py": 0.02215975602509297,
"tests/metrics/test_garden_lattice.py": 0.002267467529199701,
"tests/test_almanack.py": 0.0010872827576245768,
"tests/test_build.py": 0.0018867554128015227,
"tests/test_cli.py": 0.003026417601510769,
"tests/test_git.py": 0.009197922298568223,
"tests/utils.py": 0.0010872827576245768
}
}
]
%%time
# show the same results from the CLI
!almanack table "./almanack"
[{"name": "repo-path", "id": "SGA-META-0001", "result-type": "str", "sustainability_correlation": 0, "description": "Repository path (local directory).", "correction_guidance": null, "result": "/home/runner/work/almanack/almanack/src/book/seed-bank/almanack-example/almanack"}, {"name": "repo-commits", "id": "SGA-META-0002", "result-type": "int", "sustainability_correlation": 0, "description": "Total number of commits for the repository.", "correction_guidance": null, "result": 181}, {"name": "repo-file-count", "id": "SGA-META-0003", "result-type": "int", "sustainability_correlation": 0, "description": "Total number of files tracked within the repository.", "correction_guidance": null, "result": 123}, {"name": "repo-commit-time-range", "id": "SGA-META-0004", "result-type": "tuple", "sustainability_correlation": 0, "description": "Starting commit and most recent commit for the repository.", "correction_guidance": null, "result": ["2024-03-05", "2025-04-15"]}, {"name": "repo-days-of-development", "id": "SGA-META-0005", "result-type": "int", "sustainability_correlation": 0, "description": "Integer representing the number of days of development between most recent commit and first commit.", "correction_guidance": null, "result": 407}, {"name": "repo-commits-per-day", "id": "SGA-META-0006", "result-type": "float", "sustainability_correlation": 0, "description": "Floating point number which represents the number of commits per day (using days of development).", "correction_guidance": null, "result": 0.44471744471744473}, {"name": "almanack-table-datetime", "id": "SGA-META-0007", "result-type": "str", "sustainability_correlation": 0, "description": "String representing the date when this table was generated in the format of '%Y-%m-%dT%H:%M:%S.%fZ', for example: 2024-11-22T18:20:30.123456Z .", "correction_guidance": null, "result": "2025-04-15T21:50:19.129574Z"}, {"name": "almanack-version", "id": "SGA-META-0008", "result-type": "str", "sustainability_correlation": 0, "description": "String representing the version of the almanack which was used to generate this table.", "correction_guidance": null, "result": "0.0.0.post1.dev0+9ddcab3"}, {"name": "repo-primary-language", "id": "SGA-META-0009", "result-type": "str", "sustainability_correlation": 0, "description": "Detected primary programming language of the repository.", "correction_guidance": null, "result": "Jupyter Notebook"}, {"name": "repo-primary-license", "id": "SGA-META-0010", "result-type": "str", "sustainability_correlation": 0, "description": "Detected primary license of the repository.", "correction_guidance": null, "result": "bsd-3-clause"}, {"name": "repo-doi", "id": "SGA-META-0011", "result-type": "int", "sustainability_correlation": 0, "description": "Repository DOI value detected from CITATION.cff file.", "correction_guidance": null, "result": "10.5281/zenodo.14765834"}, {"name": "repo-doi-publication-date", "id": "SGA-META-0012", "result-type": "str", "sustainability_correlation": 0, "description": "Repository DOI publication date detected from CITATION.cff file and OpenAlex.org.", "correction_guidance": null, "result": null}, {"name": "repo-almanack-score", "id": "SGA-META-0013", "result-type": "dict", "sustainability_correlation": 0, "description": "Dictionary of length three, including the following: 1) number of Almanack boolean metrics that passed (numerator), 2) number of total Almanack boolean metrics considered (denominator), and 3) a score that represents how likely the repository will be maintained over time based (numerator / denominator).", "correction_guidance": null, "result": {"almanack-score-numerator": 11, "almanack-score-denominator": 11, "almanack-score": 1.0}}, {"name": "repo-includes-readme", "id": "SGA-GL-0001", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a README file in the repository.", "correction_guidance": "Consider adding a README file to the repository.", "result": true}, {"name": "repo-includes-contributing", "id": "SGA-GL-0002", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a CONTRIBUTING file in the repository.", "correction_guidance": "Consider adding a CONTRIBUTING file to the repository.", "result": true}, {"name": "repo-includes-code-of-conduct", "id": "SGA-GL-0003", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a CODE_OF_CONDUCT file in the repository.", "correction_guidance": "Consider adding a CODE_OF_CONDUCT file to the repository.", "result": true}, {"name": "repo-includes-license", "id": "SGA-GL-0004", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a LICENSE file in the repository.", "correction_guidance": "Consider adding a LICENSE file to the repository.", "result": true}, {"name": "repo-is-citable", "id": "SGA-GL-0005", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating the presence of a CITATION file or some other means of indicating how to cite the work.", "correction_guidance": "Consider adding a CITATION file to the repository (e.g. citation.cff, etc.).", "result": true}, {"name": "repo-default-branch-not-master", "id": "SGA-GL-0006", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating that the repo uses a default branch name besides 'master'.", "correction_guidance": "Consider using a default source control branch name other than 'master'.", "result": true}, {"name": "repo-includes-common-docs", "id": "SGA-GL-0007", "result-type": "bool", "sustainability_correlation": 1, "description": "Boolean value indicating whether the repo includes common documentation directory and files associated with building docsites.", "correction_guidance": "Consider including project documentation through the 'docs/' directory.", "result": true}, {"name": "repo-unique-contributors", "id": "SGA-GL-0008", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique contributors since the beginning of the repository.", "correction_guidance": null, "result": 5}, {"name": "repo-unique-contributors-past-year", "id": "SGA-GL-0009", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique contributors within the last year from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "result": 4}, {"name": "repo-unique-contributors-past-182-days", "id": "SGA-GL-0010", "result-type": "int", "sustainability_correlation": 0, "description": "Count of unique contributors within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "result": 2}, {"name": "repo-tags-count", "id": "SGA-GL-0011", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of tags within the repository.", "correction_guidance": null, "result": 7}, {"name": "repo-tags-count-past-year", "id": "SGA-GL-0012", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of tags within the repository within the last year from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "result": 7}, {"name": "repo-tags-count-past-182-days", "id": "SGA-GL-0013", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of tags within the repository within the last 182 days from now (where now is a reference to table value of almanack-table-datetime).", "correction_guidance": null, "result": 5}, {"name": "repo-stargazers-count", "id": "SGA-GL-0014", "result-type": "int", "sustainability_correlation": 0, "description": "Count of the number of stargazers on repository remote hosting platform.", "correction_guidance": null, "result": 9}, {"name": "repo-uses-issues", "id": "SGA-GL-0015", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the repository uses issues (for example, as a bug and/or feature tracking tool.", "correction_guidance": "Consider leveraging issues for tracking bugs and/or features within your repository hosting platform.", "result": true}, {"name": "repo-issues-open-count", "id": "SGA-GL-0016", "result-type": "int", "sustainability_correlation": 0, "description": "Count of open issues for repository.", "correction_guidance": null, "result": 43}, {"name": "repo-pull-requests-enabled", "id": "SGA-GL-0017", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the repository enables pull requests.", "correction_guidance": "Consider enabling pull requests for the repository through your repository hosting platform.", "result": true}, {"name": "repo-forks-count", "id": "SGA-GL-0018", "result-type": "int", "sustainability_correlation": 0, "description": "Count of forks of the repository.", "correction_guidance": null, "result": 2}, {"name": "repo-subscribers-count", "id": "SGA-GL-0019", "result-type": "int", "sustainability_correlation": 0, "description": "Count of subscribers (or watchers) of the repository.", "correction_guidance": null, "result": 1}, {"name": "repo-packages-ecosystems", "id": "SGA-GL-0020", "result-type": "list", "sustainability_correlation": 0, "description": "List of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).", "correction_guidance": null, "result": ["pypi"]}, {"name": "repo-packages-ecosystems-count", "id": "SGA-GL-0021", "result-type": "int", "sustainability_correlation": 0, "description": "Count of package platforms or services where the repository was detected (leveraging the ecosyste.ms packages API).", "correction_guidance": null, "result": 1}, {"name": "repo-packages-versions-count", "id": "SGA-GL-0022", "result-type": "int", "sustainability_correlation": 0, "description": "Count of package versions on package hosts or services where the repository was detected (leveraging the ecosyste.ms packages API).", "correction_guidance": null, "result": 8}, {"name": "repo-social-media-platforms", "id": "SGA-GL-0023", "result-type": "list", "sustainability_correlation": 0, "description": "Social media platforms detected within the readme.", "correction_guidance": null, "result": []}, {"name": "repo-social-media-platforms-count", "id": "SGA-GL-0024", "result-type": "int", "sustainability_correlation": 0, "description": "Count of social media platforms detected within the readme.", "correction_guidance": null, "result": 0}, {"name": "repo-doi-valid-format", "id": "SGA-GL-0025", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the DOI found in the CITATION.cff file is of a valid format.", "correction_guidance": "DOI within the CITATION.cff file is not of a valid format or missing.", "result": true}, {"name": "repo-doi-https-resolvable", "id": "SGA-GL-0026", "result-type": "bool", "sustainability_correlation": 1, "description": "Whether the DOI found in the CITATION.cff file is https resolvable.", "correction_guidance": "DOI within the CITATION.cff file is not https resolvable or missing.", "result": true}, {"name": "repo-doi-cited-by-count", "id": "SGA-GL-0027", "result-type": "int", "sustainability_correlation": 0, "description": "How many other works cite the DOI for the repository found within the CITATION.cff as discovered by the OpenAlex.org API.", "correction_guidance": null, "result": null}, {"name": "repo-days-between-doi-publication-date-and-latest-commit", "id": "SGA-GL-0028", "result-type": "int", "sustainability_correlation": 0, "description": "The number of days between the most recent commit and DOI for the repository's publication date as discovered by the OpenAlex.org API.", "correction_guidance": null, "result": null}, {"name": "repo-gh-workflow-success-ratio", "id": "SGA-SF-0001", "result-type": "float", "sustainability_correlation": 0, "description": "Ratio of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "result": 0.81}, {"name": "repo-gh-workflow-succeeding-runs", "id": "SGA-SF-0002", "result-type": "int", "sustainability_correlation": 0, "description": "Number of succeeding workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "result": 100}, {"name": "repo-gh-workflow-failing-runs", "id": "SGA-SF-0003", "result-type": "int", "sustainability_correlation": 0, "description": "Number of failing workflow runs out of queried workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "result": 81}, {"name": "repo-gh-workflow-queried-total", "id": "SGA-SF-0004", "result-type": "int", "sustainability_correlation": 0, "description": "Total number of workflow runs from GitHub (only applies to GitHub hosted repositories which use workflows).", "correction_guidance": null, "result": 19}, {"name": "repo-code-coverage-percent", "id": "SGA-SF-0005", "result-type": "float", "sustainability_correlation": 0, "description": "Percentage of code coverage for repository given detected code coverage data.", "correction_guidance": null, "result": null}, {"name": "repo-date-of-last-coverage-run", "id": "SGA-SF-0006", "result-type": "str", "sustainability_correlation": 0, "description": "Date of code coverage run for repository given detected code coverage data.", "correction_guidance": null, "result": null}, {"name": "repo-days-between-last-coverage-run-latest-commit", "id": "SGA-SF-0007", "result-type": "int", "sustainability_correlation": 0, "description": "Days between last coverage run date and latest commit date.", "correction_guidance": null, "result": null}, {"name": "repo-code-coverage-total-lines", "id": "SGA-SF-0008", "result-type": "int", "sustainability_correlation": 0, "description": "Total lines of code used for code coverage within repository given detected code coverage data.", "correction_guidance": null, "result": null}, {"name": "repo-code-coverage-executed-lines", "id": "SGA-SF-0009", "result-type": "int", "sustainability_correlation": 0, "description": "Total lines covered code within repository given detected code coverage data.", "correction_guidance": null, "result": null}, {"name": "repo-agg-info-entropy", "id": "SGA-VS-0001", "result-type": "float", "sustainability_correlation": 0, "description": "Aggregated information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Represents value from 0 to 1 where 0 equals no information entropy and 1 represents maximum information entropy.", "correction_guidance": null, "result": 0.003481125817924669}, {"name": "repo-file-info-entropy", "id": "SGA-VS-0002", "result-type": "dict", "sustainability_correlation": 0, "description": "File-level information entropy for all files within a repository given a range between two commits (by default, the first and latest commits). Shows all files and their corresponding information entropy measurements relative to the other files found within the range of commits.", "correction_guidance": null, "result": {".alexignore": 8.097830150742987e-05, ".github/ISSUE_TEMPLATE/bug.yml": 0.002292497833746086, ".github/ISSUE_TEMPLATE/config.yml": 8.097830150742987e-05, ".github/ISSUE_TEMPLATE/feature.yml": 0.0020656978918468477, ".github/PULL_REQUEST_TEMPLATE.md": 0.0011701890580090926, ".github/actions/install-node-env/action.yml": 0.0004771501191130552, ".github/actions/install-python-env/action.yml": 0.0009471830972097647, ".github/dependabot.yml": 0.0011150088382026761, ".github/release-drafter.yml": 0.0006876899126423689, ".github/workflows/deploy-book.yml": 0.00127952661762561, ".github/workflows/draft-release.yml": 0.0007462950276903029, ".github/workflows/entropy-check.yml": 0.001835184128356774, ".github/workflows/pre-commit-checks.yml": 0.0010872827576245768, ".github/workflows/publish-pypi.yml": 0.0008618312058264572, ".github/workflows/pytest-tests.yml": 0.0011426434473941027, ".gitignore": 0.0038720004783875657, ".linkcheckerrc.ini": 0.0005685290226546406, ".pre-commit-config.yaml": 0.004799666701980044, ".pre-commit-hooks.yaml": 0.00041507639550952694, ".vale.ini": 0.0004771501191130552, "CITATION.cff": 0.004821895556359322, "CODE_OF_CONDUCT.md": 0.00011746241425725711, "CONTRIBUTING.md": 0.00011746241425725711, "LICENSE": 0.000890398099786692, "LICENSE.txt": 0.000890398099786692, "README.md": 0.0026877654319695785, "coverage.xml": 0.021881633625513673, "docs/readme.md": 0.00011746241425725711, "media/coverage-badge.svg": 4.277136998369417e-05, "pa11y.json": 0.00025455059416638225, "package-lock.json": 0.02882094137213742, "package.json": 0.00018736110517456593, "poetry.lock": 0.0625315589678386, "pyproject.toml": 0.004732874681446033, "src/almanack/__init__.py": 0.0007753795294995523, "src/almanack/book.py": 0.0018609954946444017, "src/almanack/cli.py": 0.004799666701980044, "src/almanack/git.py": 0.008999907303236583, "src/almanack/metrics/data.py": 0.017357027668570467, "src/almanack/metrics/entropy/calculate_entropy.py": 0.0029543654696303147, "src/almanack/metrics/entropy/processing_repositories.py": 0.001963734275341387, "src/almanack/metrics/garden_lattice/connectedness.py": 0.00665542861027857, "src/almanack/metrics/garden_lattice/practicality.py": 0.0030982027376619133, "src/almanack/metrics/garden_lattice/understanding.py": 0.0016529919226945468, "src/almanack/metrics/metrics.yml": 0.00998192649127175, "src/almanack/metrics/remote.py": 0.002491317069119771, "src/almanack/reporting/report.py": 0.0032409997736440434, "src/book/_config.yml": 0.0014144452831130587, "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.odp": 0.0, "src/book/_static/OSSci Monthly Call Jan 2025 - Software_Gardening_Almanack.pdf": 0.0, "src/book/_static/custom.css": 0.0004462400188944573, "src/book/_toc.yml": 0.0010594625914899874, "src/book/assets/640px-Forgard2-003.gif": 0.0, "src/book/assets/640px-Rundes_Fenster_mit_Gitter.jpeg": 0.0, "src/book/assets/Sundial_2916_HDR.jpeg": 0.0, "src/book/assets/almanack-influencing-software.png": 0.0, "src/book/assets/garden-lattice-understanding-transfer.png": 0.0, "src/book/assets/software-gardening-almanack-logo.png": 0.0, "src/book/assets/software-gardening-logo.png": 0.0, "src/book/assets/software-lifecycle.png": 0.0, "src/book/assets/xkcd_dependency.png": 0.0, "src/book/favicon.png": 0.0, "src/book/garden-circle/contributing.md": 0.004710575206573887, "src/book/garden-circle/garden-circle.md": 0.00018736110517456593, "src/book/garden-circle/garden-map.md": 0.0013337170069908733, "src/book/garden-circle/package-api.md": 0.003026417601510769, "src/book/garden-circle/pavilion.md": 0.00038363807480726146, "src/book/garden-lattice/garden-lattice.md": 0.00127952661762561, "src/book/garden-lattice/understanding.md": 0.0031697279059317357, "src/book/introduction.md": 0.003941043143731677, "src/book/references.bib": 0.007259467860171952, "src/book/seed-bank/almanack-example/almanack-example.ipynb": 0.03361171775302876, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_data.py": 0.004844106989777077, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/generate_github_enriched_data.py": 0.003848941660825222, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/gather-pubmed-repos/pubmed_github_links_with_github_data.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/gather-software-information-entropy.ipynb": 0.004124201495167061, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-lines-of-code-and-time.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-forks.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/pubmed-stars-and-open-issues.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-forks.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-gh-stars.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-open-issues.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/images/software-information-entropy-top-5-langs.png": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_1.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_10.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_11.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_12.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_13.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_14.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_15.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_16.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_17.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_18.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_19.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_2.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_20.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_3.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_4.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_5.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_6.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_7.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_8.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/repository_analysis_results/repository_analysis_results_batch_9.parquet": 0.0, "src/book/seed-bank/pubmed-github-repositories/visualize-pubmed-repo-sofware-entropy.ipynb": 0.057763340710810254, "src/book/seed-bank/seed-bank.md": 0.00018736110517456593, "src/book/software-forest/software-forest.md": 0.0013066601011828436, "src/book/verdant-sundial/verdant-sundial.md": 0.0013337170069908733, "styles/config/vocabularies/almanack/accept.txt": 0.0008043268021533052, "tests/__init__.py": 0.0, "tests/conftest.py": 0.004486579770508568, "tests/data/almanack/coverage/python/coverage.json": 4.277136998369417e-05, "tests/data/almanack/coverage/python/coverage.lcov": 0.02001052908150922, "tests/data/almanack/repo_setup/create_repo.py": 0.006571342649999315, "tests/data/almanack/repo_setup/insert_code.py": 0.0016529919226945468, "tests/data/jupyter-book/sandbox.md": 0.0005382798890204358, "tests/metrics/test_calculate_entropy.py": 0.001679187864939773, "tests/metrics/test_data.py": 0.02215975602509297, "tests/metrics/test_garden_lattice.py": 0.002267467529199701, "tests/test_almanack.py": 0.0010872827576245768, "tests/test_build.py": 0.0018867554128015227, "tests/test_cli.py": 0.003026417601510769, "tests/test_git.py": 0.009197922298568223, "tests/utils.py": 0.0010872827576245768}}]
CPU times: user 34.2 ms, sys: 13.3 ms, total: 47.5 ms
Wall time: 3.8 s
%%time
# show the same results from the CLI
!almanack check "./almanack"
Running Software Gardening Almanack checks.
Datetime: 2025-04-15T21:50:22.970291Z
Almanack version: 0.0.0.post1.dev0+9ddcab3
Target repository path: ./almanack
Software Gardening Almanack score: 100.00% (11/11)
CPU times: user 43.9 ms, sys: 12.3 ms, total: 56.2 ms
Wall time: 4.16 s