Authenticate GitHub Client
%load_ext autoreload
%autoreload 2
import datetime
import logging
import os
# Initialize logger.
logging.basicConfig(level=logging.INFO)
_LOG = logging.getLogger(__name__)import github_utils!sudo /bin/bash -c "(source /venv/bin/activate; pip install --quiet jupyterlab-vim PyGithub)"
!jupyter labextension enableAuthenticate GitHub Client¶
os.environ["GITHUB_ACCESS_TOKEN"] = "*"access_token = os.getenv("GITHUB_ACCESS_TOKEN")
if not access_token:
_LOG.error("GITHUB_ACCESS_TOKEN not set. Exiting.")
raise ValueError("Set GITHUB_ACCESS_TOKEN environment variable")
client = github_utils.GitHubAPI(access_token=access_token).get_client()users = github_utils.get_github_contributors(
client, repo_names=["causify-ai/cmamp"]
)
_LOG.info("users: %s", users){'causify-ai/cmamp': ['gpsaggese', 'gitpaulsmith', 'rheenina', 'DanilYachmenev', 'PomazkinG', 'jsmerix', 'tamriq', 'gad26032', 'plyq', 'mongolianjesus', 'dremdem', 'Shayawnn', 'sonaalKant', 'Sameep2808', 'sonniki', 'heanhsok', 'samarth9008', 'Vedanshu7', 'mindfreakthemon', 'max-rsrch', 'pavolrabatin', 'Shaunak01', 'amrawadk', 'Jd8111997', 'tkpratardan', 'alinakhay', 'Tsallagov', 'neha2801-create', 'katerynak', 'aish-nidhi', 'jayati1397', 'elforeee', 'k0nsta', 'why2000', 'lizvladi', 'Vitaly-Protasov', 'cma0416', 'OlgaVakhonina', 'tuimazy2008', 'enotdima', 'zet694', 'daberezina', 'jserebr', 'pavel-particle', 'k911mipt', 'LibertasSpZ', 'RichardProchadzka', 'sumedha-24', 'andsilver', 'vvandriichuk']}
active_users_total = [
"gpsaggese",
"tkpratardan",
"Shaunak01",
"sonniki",
"heanhsok",
"Shayawnn",
"rheenina",
"PomazkinG",
"gitpaulsmith",
"samarth9008",
"Vedanshu7",
"dremdem",
"cma0416",
"aangelo9",
"indrayudd",
"aver81",
"madhurlak0810",
"PranavShashidhara",
"srinivassaitangudu",
"sandeepthalapanane",
]Pre-fetch all the data from last 6 months in cache¶
# Use a long window for caching and a narrow slice for final analysis.
period_full = github_utils.utc_period("2025-01-01", "2025-07-14")repos = [
"helpers",
"tutorials",
"cmamp",
"kaizenflow",
"orange",
"sports_analytics",
]
org = "causify-ai"github_utils.prefetch_periodic_user_repo_data(
client, org, repos, active_users_total, period_full
) helpers/gpsaggese: 65 commits, 59 PRs, 65 LOC entries, 17 issues assigned, 5 closed
helpers/tkpratardan: 7 commits, 8 PRs, 7 LOC entries, 4 issues assigned, 1 closed
helpers/Shaunak01: 33 commits, 37 PRs, 33 LOC entries, 48 issues assigned, 39 closed
helpers/sonniki: 52 commits, 53 PRs, 52 LOC entries, 44 issues assigned, 38 closed
helpers/heanhsok: 87 commits, 96 PRs, 87 LOC entries, 49 issues assigned, 36 closed
helpers/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 3 issues assigned, 0 closed
helpers/rheenina: 0 commits, 1 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/PomazkinG: 0 commits, 3 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/gitpaulsmith: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
helpers/samarth9008: 2 commits, 3 PRs, 2 LOC entries, 4 issues assigned, 3 closed
helpers/Vedanshu7: 1 commits, 1 PRs, 1 LOC entries, 2 issues assigned, 2 closed
helpers/dremdem: 23 commits, 26 PRs, 23 LOC entries, 15 issues assigned, 14 closed
helpers/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/aangelo9: 19 commits, 20 PRs, 19 LOC entries, 20 issues assigned, 16 closed
helpers/indrayudd: 13 commits, 16 PRs, 13 LOC entries, 20 issues assigned, 15 closed
helpers/aver81: 1 commits, 4 PRs, 1 LOC entries, 5 issues assigned, 1 closed
helpers/madhurlak0810: 2 commits, 3 PRs, 2 LOC entries, 4 issues assigned, 0 closed
helpers/PranavShashidhara: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
helpers/srinivassaitangudu: 37 commits, 19 PRs, 37 LOC entries, 14 issues assigned, 9 closed
helpers/sandeepthalapanane: 28 commits, 31 PRs, 28 LOC entries, 33 issues assigned, 20 closed
tutorials/gpsaggese: 13 commits, 10 PRs, 13 LOC entries, 5 issues assigned, 2 closed
tutorials/tkpratardan: 15 commits, 19 PRs, 15 LOC entries, 12 issues assigned, 11 closed
tutorials/Shaunak01: 8 commits, 9 PRs, 8 LOC entries, 9 issues assigned, 7 closed
tutorials/sonniki: 8 commits, 5 PRs, 8 LOC entries, 1 issues assigned, 1 closed
tutorials/heanhsok: 8 commits, 8 PRs, 8 LOC entries, 1 issues assigned, 0 closed
tutorials/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/PomazkinG: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/gitpaulsmith: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/dremdem: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
tutorials/aangelo9: 8 commits, 9 PRs, 8 LOC entries, 12 issues assigned, 8 closed
tutorials/indrayudd: 5 commits, 7 PRs, 5 LOC entries, 10 issues assigned, 5 closed
tutorials/aver81: 1 commits, 2 PRs, 1 LOC entries, 5 issues assigned, 2 closed
tutorials/madhurlak0810: 0 commits, 1 PRs, 0 LOC entries, 3 issues assigned, 0 closed
tutorials/PranavShashidhara: 0 commits, 0 PRs, 0 LOC entries, 2 issues assigned, 0 closed
tutorials/srinivassaitangudu: 0 commits, 0 PRs, 0 LOC entries, 1 issues assigned, 0 closed
tutorials/sandeepthalapanane: 0 commits, 0 PRs, 0 LOC entries, 1 issues assigned, 0 closed
cmamp/gpsaggese: 16 commits, 12 PRs, 16 LOC entries, 21 issues assigned, 8 closed
cmamp/tkpratardan: 18 commits, 21 PRs, 18 LOC entries, 25 issues assigned, 17 closed
cmamp/Shaunak01: 41 commits, 46 PRs, 41 LOC entries, 64 issues assigned, 53 closed
cmamp/sonniki: 40 commits, 40 PRs, 40 LOC entries, 38 issues assigned, 32 closed
cmamp/heanhsok: 99 commits, 130 PRs, 99 LOC entries, 149 issues assigned, 104 closed
cmamp/Shayawnn: 47 commits, 50 PRs, 47 LOC entries, 67 issues assigned, 39 closed
cmamp/rheenina: 55 commits, 68 PRs, 55 LOC entries, 74 issues assigned, 63 closed
cmamp/PomazkinG: 38 commits, 50 PRs, 38 LOC entries, 52 issues assigned, 40 closed
cmamp/gitpaulsmith: 4 commits, 4 PRs, 4 LOC entries, 4 issues assigned, 2 closed
cmamp/samarth9008: 25 commits, 31 PRs, 25 LOC entries, 45 issues assigned, 36 closed
cmamp/Vedanshu7: 59 commits, 98 PRs, 59 LOC entries, 90 issues assigned, 76 closed
cmamp/dremdem: 9 commits, 27 PRs, 9 LOC entries, 26 issues assigned, 18 closed
cmamp/cma0416: 12 commits, 22 PRs, 12 LOC entries, 26 issues assigned, 21 closed
cmamp/aangelo9: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
Prefetching user-repo data: 74%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 89/120 [00:00<00:00, 284.82it/s]cmamp/indrayudd: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/aver81: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/madhurlak0810: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/PranavShashidhara: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/srinivassaitangudu: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
cmamp/sandeepthalapanane: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/gpsaggese: 0 commits, 0 PRs, 0 LOC entries, 1 issues assigned, 1 closed
kaizenflow/tkpratardan: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Shaunak01: 1 commits, 1 PRs, 1 LOC entries, 1 issues assigned, 1 closed
kaizenflow/sonniki: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/heanhsok: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/PomazkinG: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/gitpaulsmith: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
kaizenflow/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/dremdem: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/aangelo9: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/indrayudd: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/aver81: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/madhurlak0810: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/PranavShashidhara: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/srinivassaitangudu: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
kaizenflow/sandeepthalapanane: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/gpsaggese: 5 commits, 0 PRs, 5 LOC entries, 0 issues assigned, 0 closed
orange/tkpratardan: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/Shaunak01: 0 commits, 0 PRs, 0 LOC entries, 3 issues assigned, 3 closed
orange/sonniki: 2 commits, 1 PRs, 2 LOC entries, 0 issues assigned, 0 closed
orange/heanhsok: 31 commits, 20 PRs, 31 LOC entries, 3 issues assigned, 3 closed
orange/Shayawnn: 1 commits, 0 PRs, 1 LOC entries, 0 issues assigned, 0 closed
orange/rheenina: 1 commits, 1 PRs, 1 LOC entries, 0 issues assigned, 0 closed
orange/PomazkinG: 0 commits, 1 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/gitpaulsmith: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/dremdem: 1 commits, 2 PRs, 1 LOC entries, 1 issues assigned, 0 closed
orange/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/aangelo9: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/indrayudd: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/aver81: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/madhurlak0810: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/PranavShashidhara: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/srinivassaitangudu: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
orange/sandeepthalapanane: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/gpsaggese: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/tkpratardan: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Shaunak01: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/sonniki: 2 commits, 1 PRs, 2 LOC entries, 1 issues assigned, 1 closed
sports_analytics/heanhsok: 6 commits, 5 PRs, 6 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Shayawnn: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/rheenina: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/PomazkinG: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/gitpaulsmith: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/samarth9008: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/Vedanshu7: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/dremdem: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/cma0416: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/aangelo9: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/indrayudd: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/aver81: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/madhurlak0810: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/PranavShashidhara: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
sports_analytics/srinivassaitangudu: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
Prefetching user-repo data: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 120/120 [00:00<00:00, 292.47it/s]
INFO:github_utils:Prefetched 120 user-repo combos in 0.41 seconds for period 2025-01-01 00:00:00+00:00 to 2025-07-14 00:00:00+00:00.
sports_analytics/sandeepthalapanane: 0 commits, 0 PRs, 0 LOC entries, 0 issues assigned, 0 closed
full_time_users = [
"gpsaggese",
"tkpratardan",
"Shaunak01",
"sonniki",
"heanhsok",
"Shayawnn",
"rheenina",
"PomazkinG",
"gitpaulsmith",
"samarth9008",
"Vedanshu7",
"dremdem",
"cma0416",
]intern_users = [
"aangelo9",
"indrayudd",
"aver81",
"madhurlak0810",
"PranavShashidhara",
"srinivassaitangudu",
"sandeepthalapanane",
]Intern Evaluation¶
combined_df_intern = github_utils.collect_all_metrics(
client, org, repos, intern_users, period_full
)Compare Intern Total performance across all repos since last 3 months¶
github_utils.plot_multi_metrics_totals_by_user(
combined=combined_df_intern,
metrics=["prs", "issues_closed"],
users=intern_users,
repos=repos,
start=datetime.datetime(2025, 3, 1),
end=datetime.datetime(2025, 7, 14),
)
github_utils.plot_multi_metrics_totals_by_user(
combined=combined_df_intern,
metrics=["additions", "deletions"],
users=intern_users,
repos=repos,
start=datetime.datetime(2025, 3, 1),
end=datetime.datetime(2025, 7, 14),
)
Performance Evaluation - Intern - Last 3 Months (based on Issues and PRs closed)¶
metrics = ["prs", "issues_closed"]
summary_users = github_utils.summarize_users_across_repos(
combined_df_intern, users=intern_users, repos=repos
)
stats = github_utils.compute_percentile_ranks(summary_users, metrics)
github_utils.visualize_user_metric_comparison(stats, score_type="percentile")Loading...

Full Time Evaluation¶
combined_df_fulltime = github_utils.collect_all_metrics(
client, org, repos, full_time_users, period_full
)Compare Full time contributors total performance across all repos since last 3 months¶
github_utils.plot_multi_metrics_totals_by_user(
combined=combined_df_fulltime,
metrics=["prs", "issues_closed"],
users=full_time_users,
repos=repos,
start=datetime.datetime(2025, 3, 1),
end=datetime.datetime(2025, 7, 14),
)
github_utils.plot_multi_metrics_totals_by_user(
combined=combined_df_fulltime,
metrics=["additions", "deletions"],
users=full_time_users,
repos=repos,
start=datetime.datetime(2025, 3, 1),
end=datetime.datetime(2025, 7, 14),
)
Performance Evaluation - FullTime - Last 3 Months (based on Issues and PRs closed)¶
metrics = ["prs", "issues_closed"]
summary_users_fulltime = github_utils.summarize_users_across_repos(
combined_df_fulltime, users=full_time_users, repos=repos
)
stats = github_utils.compute_percentile_ranks(summary_users_fulltime, metrics)
github_utils.visualize_user_metric_comparison(
stats, score_type="percentile", top_n=10
)Loading...
