Software Gardening Almanack Example

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