From 077d7a778362a2cc390caca0d4c8780fa860cd82 Mon Sep 17 00:00:00 2001 From: FireHorse Date: Fri, 10 Apr 2026 18:18:15 +1000 Subject: [PATCH] Cleanup: remove tracked pycache files, update .gitignore, finalize refactor deletions --- .gitignore | 7 +- data/__pycache__/__init__.cpython-313.pyc | Bin 139 -> 0 bytes data/__pycache__/career_db.cpython-313.pyc | Bin 4821 -> 0 bytes data/__pycache__/match_cache.cpython-313.pyc | Bin 2034 -> 0 bytes .../player_history.cpython-313.pyc | Bin 4841 -> 0 bytes data/__pycache__/season_cache.cpython-313.pyc | Bin 2059 -> 0 bytes .../prediction_engine.cpython-313.pyc | Bin 7841 -> 0 bytes storylines.py | 145 ------------------ tags/__pycache__/__init__.cpython-313.pyc | Bin 139 -> 0 bytes tags/__pycache__/clutch.cpython-313.pyc | Bin 1944 -> 0 bytes tags/__pycache__/consistency.cpython-313.pyc | Bin 1990 -> 0 bytes .../objective_domination.cpython-313.pyc | Bin 4023 -> 0 bytes .../objective_payload.cpython-313.pyc | Bin 4171 -> 0 bytes tags/__pycache__/sharpshooter.cpython-313.pyc | Bin 977 -> 0 bytes tags/__pycache__/slayer.cpython-313.pyc | Bin 1581 -> 0 bytes team_identity.py | 115 -------------- 16 files changed, 6 insertions(+), 261 deletions(-) delete mode 100644 data/__pycache__/__init__.cpython-313.pyc delete mode 100644 data/__pycache__/career_db.cpython-313.pyc delete mode 100644 data/__pycache__/match_cache.cpython-313.pyc delete mode 100644 data/__pycache__/player_history.cpython-313.pyc delete mode 100644 data/__pycache__/season_cache.cpython-313.pyc delete mode 100644 predictions/__pycache__/prediction_engine.cpython-313.pyc delete mode 100644 storylines.py delete mode 100644 tags/__pycache__/__init__.cpython-313.pyc delete mode 100644 tags/__pycache__/clutch.cpython-313.pyc delete mode 100644 tags/__pycache__/consistency.cpython-313.pyc delete mode 100644 tags/__pycache__/objective_domination.cpython-313.pyc delete mode 100644 tags/__pycache__/objective_payload.cpython-313.pyc delete mode 100644 tags/__pycache__/sharpshooter.cpython-313.pyc delete mode 100644 tags/__pycache__/slayer.cpython-313.pyc delete mode 100644 team_identity.py diff --git a/.gitignore b/.gitignore index 532d13c..8663d13 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,10 @@ obs_exports/ # Python cache __pycache__/ *.pyc +career_stats.json +final_db.json +data/*.db +*.db -*.db \ No newline at end of file +career_stats.json +final_db.json \ No newline at end of file diff --git a/data/__pycache__/__init__.cpython-313.pyc b/data/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 95542baa49d628c2c6844cdd89d5d30364a04dc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmey&%ge<81p5L`XM*U*AOZ#$p^VQgK*m&tbOudEzm*I{OhDdekklPO4oID^M%Q=wcA# NBQql-V-Yiu1pqUvAZGvo diff --git a/data/__pycache__/career_db.cpython-313.pyc b/data/__pycache__/career_db.cpython-313.pyc deleted file mode 100644 index 9cc0a8d5e1d00aa712417b6708fbacb5edee6664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4821 zcma)AT~Hg>6~3$0&q`YT3yFUTg!wZFu)$zR;=#r?fdGz|P3%BMvz8W+Emq2|6oNBx z-RXPj6;&Sw1GExNTmHt)<0SoD+E-{httR>i4YHog%jw7}uP z1-~Tx9{T_KWuP%VG6GA+uSqlV9^lG{UjnIlo2Qmg76GrRgFd9aTF=`MD zEa5{}iP^gd2_#E0CTt)WS@OC?w>%jcGh-RkJP=GZUQs6)o$5raQD0Fov*xN-V81X4 zp4oNe3iw%hs(1@)_MzDVctWujhI-ZTssa1OQj8UkgARlwQZn>lnT4^{=2u{4K?~e9euDy-&jZAr0bdH+Q=;Y5+OSZqZM3D z>ccccw3_e?)ht?Z{IG;+nfxh29ApJY97}Y~Ajp=Cx>T?M<$TG)ty!oV)q-GJ1-ov= zTCq%@vC65@VA`UjK(nSQR`ZCpvDjY4z}TRz5Y$F>A0Ve|R|a19#Ea!jdz5Br*35*W zM%KWDRjd)$%~fLIBP~Avtr8tIb?OE)^{LjWQ=jv?PuHD{V;TvS{6mCtQ1_W7*2Q#S z9|Sk+U^?}@v2LalOKY>oI#2X3<`pa>HI|V&mR0>rmR(g#7jp_*GF^4-tEiXkPrfC0 zCG!8_b5;MM<-(6Dv1T1U^p;053?s<^acP1`cvuhXVAb#Hg-Uf+WO}9I`iU79S}OAh zUa<2*^t;tFK+Ej^$if3X3o8v;Y7pyUz4{7*kM%JnK50W%Uc0Mf;r!Lu`GSK6wx*6ec_BStY|;V0S`5US!3Gsc`_#?O-mBm`E%y8L>l zPMwT!!W-BCGr^ocPloYj4nMjlaK}tahA?DV@T{Q@G=Qq-KipJnpb5drgi)`OA+$#H zO)cIXVlKaN`OsPj3#ITvVdmP!K!kxjbv7#RLLw*)(xIZRAAQGDoJ0P zz8SlglQx!%KJ00b}S2vt0IZ#q_ogSi}>CUJ@8Tt^D_#?#p5}Vi*GB|Dqf+g zj#9c?Vi=p@^H9W}nTWp;5q}1KM#U&V78P@)^-?SeUWE24p;$IK=zw@h#BHT`8oy5A zS2up)$`c3h3!l@9Rf?xYJ|=Qoid*aEP9%;BnMg`F@rwTifG(w^tjG)N*$u^|>vaKL z+srAgCmo>P6XKpNE$~8C5(lw2?wX!1CZxqpC^}cI4Ez+&VPv3IdNPe-kE`vUYOHuP zrbbU}-8JR1Yl9QeGE&ewrV~kF{TrNN5SWuf0-Ray^D5TFtr%p8m!JaQ%kkp2V#nX-`h8Gm$Z73AQn8l(Uy6SFed_-18gAv1sf7L~1=io?khE{ZleM z1q=rM|HAi6bbFygrX!!z?MDsB+w{B{xqUk$JGTn~InY~j_2rG_smq^k$Wu!P*O}53 zlYeK|B0Iu`$>N3_8Gq~;Ke!n`NZgTcrt*gJm1_rY-jJ`{JXn3VbmiThx!n(C|LNlG zM?pC{{n$T!5MRqvhi25?TeQe+!~3Ih+jtq6M!EgW{<7SDzT6cp-jlmtJF*ykw!G!g zi5i-oHAMUjPEfxK-G*^(!6f9{E| z{h?IyMee`xEYQBYEeHC(2n@-Ap+5yi9@wCIXwOdXgQYz2jPmY`mZ-+v>D|OHuF6yd z=rZNsSuRn{yPQmgV8oco5(SYj%<0rwHAm%@19+zP6LfGH`EotgU_klkW46dP?0FVW)Z5Zu6nRc-mHWHXf2NJ_|+5;r?Gc_nZeq)1O`_g_&l z%T&*y8#$UEzE(W7A1bv>ACiV{Rn<|VI*-O6V$UxU$mY!7**#kfKDLhRzxjlsKeqnZ zy3@NmUEm&5z2A|@b_Ob%cK`F+cL@m8cW;5kna`{vs_7Qv3gIc*N=Lz{stYx(nx#ij#Jc#0OEqM4^?_$lf>HosvY+#(Oqe*-YBygUE^ diff --git a/data/__pycache__/match_cache.cpython-313.pyc b/data/__pycache__/match_cache.cpython-313.pyc deleted file mode 100644 index 3b2746a9c52cce05563212038f8e311ee51cf617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2034 zcmah~PfXip6#x7$b{vP03<#y|VrVM}qscZ(2URzTCX9CN=oB~7szi#s!~xUbWVS;K zt17xnDHmW>1(hbXM|R`bYYVp>R-jdx%K>S-bSET`Dz%rr&xy%YQO#D~d*A!>d*6HC z^Os$(mq+ki{{4me2aV8Qc;P%uRoMLpg!@QB5^)jf6;9}cy(V>1B6TW_5}XrO;|Whq zcBBt@dL4U>r`aB&vXZDCvLfl+2jUOP#7XpioEzdAYS@m{hSF|{kz9SGh$OZJ>7HRC z%)Q3up~=vQX_kyL(P&OKMhc2NTvj5(@|a>o<&qj5|IA{ta&|zuy-N11XtizKRpbLb|W$~5AC(A-XB zjVB4GvmI5X+=bA`D7D|kBq5O!CDDBpi8L}LII)R3N2>8Qlq4NIgM@Cv>+DWM$5ATa z_`=Rzc>mp$MnSgy^GGx~9yJcAl*CG0AF0tvI&r9GaipHAAR@3IFh7o6W8SOGePCrR z4sMONq3;tCFM0YXn2z`AN;1b$E9yc{2Xk=Vd6=RQ65$>C=}Rhv@7tyE4AVbi%n$L%_;5{6O179-EgY6DVSeU%XCls@+YlfIF7Yd?1wPH>& zWwijRqAtqfusW`26-!3VMfjwl7@|GpqM8@wad4G?C@2wrl8KBOMa?4gNv3S(Pxjig zuVsrlRU00fWTQ5E^fkU+z{HyBm{Kg87IFPG9(ho?R4u1yX1LBGi-tv)WOKx#M~kXv z`M&MH5<8!X^~cT+Wa1YRmdpOAz^PbLG;qR+=|WM?S?+-wS*2vESaGgj8n8HB`LV1R zreRUTifPsBvT7(9C@y1|vRMXxxmb_=-kdh~{agOVxzR_*mf3ZG@8kZh;NgXdUnU;;@7;Vup+Mi7zZY=p0@Gj5wJ&xo zwmjpHPsMgg0nYgZZ5`_0&BjmX?l|rUUEm*xTDXx&}QSIg{$*d@1>^s9iC>q zTVDTM=VEqgaNT?AF|j4o&t90hFgLo?zb-@|O@<4P+!Q-OJ&CwMeoFVmUFhiV=__ovWHKjLW62!!Z3I3=p zHmB+u{2y3cCX-hSN+x5u_lH*ZV;7jRYYMm-_JRL~c0q~sHrsS|te7hol&|zoSi%$_ z1K;G(9D;a-+^>-574mJf9aHqSP&YexcX0O7-AjvshrtKIhoJ|drRI%8pDzz?2xq6< tn=m`=^X&^=^IeM*OW}>csVUz!BJX&9_Do-Xlv_ui?7CWsCOr)J{{l(Gq{{#R diff --git a/data/__pycache__/player_history.cpython-313.pyc b/data/__pycache__/player_history.cpython-313.pyc deleted file mode 100644 index 9d0727b9b89876a3735767dd52101712884d2373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4841 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 e8uRJ9L?+8i954+|YCF9k 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 Fe*m!whjst} diff --git a/storylines.py b/storylines.py deleted file mode 100644 index a8565bc..0000000 --- a/storylines.py +++ /dev/null @@ -1,145 +0,0 @@ -from rankings import load_career_db -from tags.objective_domination import ( - compute_dom_objective_for_career_player, - compute_dom_objective_for_match_player, - compute_dom_objective_team_scores -) - - -def matchup_storyline(teamA_players, teamB_players): - """ - Composition-aware storyline generator. - Accepts two lists of player entries (5 per team). - """ - - if not teamA_players or not teamB_players: - return "Not enough selected players to generate a storyline." - - # --- Helper averages --- - def avg_slayer(players): - return sum(p.get("slayer_score_raw", 0.0) for p in players) / max(1, len(players)) - - def avg_obj_payload(players): - return sum( - p.get("objective_payload_components", {}).get("payload_score_raw", 0.0) - for p in players - ) / max(1, len(players)) - - def avg_sharp(players): - return sum( - p.get("sharpshooter_components", {}).get("accuracy_norm", 0.0) - for p in players - ) / max(1, len(players)) - - def avg_obj_dom(players): - return sum( - compute_dom_objective_for_career_player( - p.get("career_entry", {}) - ).get("dom_score_raw", 0.0) - for p in players - ) / max(1, len(players)) - - def avg_consistency(players): - return sum( - p.get("consistency_components", {}).get("consistency_norm", 0.0) - for p in players - ) / max(1, len(players)) - - def avg_clutch(players): - return sum( - p.get("clutch_components", {}).get("clutch_norm", 0.0) - for p in players - ) / max(1, len(players)) - - - - # --- Compute team averages --- - a_slayer = avg_slayer(teamA_players) - b_slayer = avg_slayer(teamB_players) - - a_obj = avg_obj_payload(teamA_players) - b_obj = avg_obj_payload(teamB_players) - - a_sharp = avg_sharp(teamA_players) - b_sharp = avg_sharp(teamB_players) - - a_dom = avg_obj_dom(teamA_players) - b_dom = avg_obj_dom(teamB_players) - - a_consistency = avg_consistency(teamA_players) - b_consistency = avg_consistency(teamB_players) - - a_clutch = avg_clutch(teamA_players) - b_clutch = avg_clutch(teamB_players) - - # --- Team names --- - team_a = teamA_players[0].get("team", "Team A") - team_b = teamB_players[0].get("team", "Team B") - - # --- Build storyline --- - lines = [] - lines.append(f"MATCH STORYLINE — {team_a} vs {team_b}\n") - - # Slayer storyline - if a_slayer > b_slayer: - lines.append(f"{team_a} bring stronger slaying on paper.") - elif b_slayer > a_slayer: - lines.append(f"{team_b} bring stronger slaying on paper.") - else: - lines.append("Slaying power looks evenly matched.") - - # Payload storyline - if a_obj > b_obj: - lines.append(f"{team_a} have the edge in Payload objective presence.") - elif b_obj > a_obj: - lines.append(f"{team_b} have the edge in Payload objective presence.") - else: - lines.append("Payload objective presence looks evenly matched.") - - # Domination storyline - if a_dom > b_dom: - lines.append(f"{team_a} show stronger Domination objective capability.") - elif b_dom > a_dom: - lines.append(f"{team_b} show stronger Domination objective capability.") - else: - lines.append("Domination objective capability looks evenly matched.") - - - # Consistency storyline - if a_consistency > b_consistency: - lines.append(f"{team_a} bring steadier map-to-map performance.") - elif b_consistency > a_consistency: - lines.append(f"{team_b} bring steadier map-to-map performance.") - else: - lines.append("Both teams show similar consistency across maps.") - - # Clutch Storyline - if a_clutch > b_clutch: - lines.append(f"{team_a} show stronger clutch performance in high-pressure moments.") - elif b_clutch > a_clutch: - lines.append(f"{team_b} show stronger clutch performance in high-pressure moments.") - else: - lines.append("Both teams show similar clutch performance.") - - - # Sharpshooter storyline - sharp_delta = a_sharp - b_sharp - sharp_pct = sharp_delta * 100 - - if sharp_delta > 0.02: - lines.append( - f"{team_a} bring a Sharpshooter Advantage of {sharp_pct:.1f}%, " - f"landing more shots and converting more headshots than {team_b}." - ) - elif sharp_delta < -0.02: - lines.append( - f"{team_b} hold a Sharpshooter Edge of {abs(sharp_pct):.1f}%, " - f"which could punish {team_a} in long‑range duels." - ) - else: - lines.append( - "Both teams are evenly matched in Sharpshooting, so aim consistency " - "won’t be a deciding factor unless someone pops off." - ) - - return "\n".join(lines) \ No newline at end of file diff --git a/tags/__pycache__/__init__.cpython-313.pyc b/tags/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 6c536ecb423a5bc49c73904962bc8b2bf9e948e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmey&%ge<81p5L`XM*U*AOZ#$p^VQgK*m&tbOudEzm*I{OhDdekklPO4oID^M%Q=wcA# NBQql-V-Yiu1pqgxAbbD- diff --git a/tags/__pycache__/clutch.cpython-313.pyc b/tags/__pycache__/clutch.cpython-313.pyc deleted file mode 100644 index 62869a9347ad1b37080415eb7d2dcc7be5e0b9eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1944 zcma)7O-$QX9Dk1Uiqt3Z-v8tG z|Godmb2z4HA3*EYPv7SM@c{4(R+`Jv5RN;M@BpxYB^H1TSdw-0fZK#jWQnBn2?j0l zO)SZiO?U|a*2@v&NQZF%R!%Eia<*53wLZXlID+-Mkc`>J z8WoG4YrP!0FSUzUx}S^1-5P(5U_GMeIqq(YTEP>r7fW%TW(VyGy=P3r*D?)?qnLWy7}Be{y0g*THsRn~jLHa5`70la8WS5#b_D{^r>alF`zK2;rNNit8m+ zP#DOFl3av^{QE+N;R_{|&oK%w$pVuY`C0pTG|9XR737k{ly8u^E(?lMLeAN>wLG5} zM83=s>uEd4zb)klm$VyoJABT z>~REh;C#jIB2Au1#e>d5G8dP2roVhO0i6bXjCpP;tg; z&LRs^)*_4WJ+$S;WEACBfMr2Wqub@O6)FfYTN2U`)s9M0Wc)?S_}i1+c*D9)YD%IXYM)V!EoRaA&H6=s#y6N;hrGS0|; zQ0Wts%pgYm^Wh#iTx|L0UQ1=%TKuu diff --git a/tags/__pycache__/consistency.cpython-313.pyc b/tags/__pycache__/consistency.cpython-313.pyc deleted file mode 100644 index 7d4079b8c55ae38304d9c826cf5bc590807a202b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990 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 diff --git a/tags/__pycache__/objective_payload.cpython-313.pyc b/tags/__pycache__/objective_payload.cpython-313.pyc deleted file mode 100644 index 5401541896074b8ebeb40c02a087e4aa5b3e14c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4171 zcma)9O>h&*74FgKcl7^bVeDNz#y?;i%f{dh@p>U(V1ZyTJ4}_faII>P#7C#nC+o zTR1C}bebBmza#?JlBOK_azUmc@BEu0I(YO6)Za}UHG!sEQj&$Y9BoZVxe?+l9NqS3 zyQ5jW|&_A&cpl0 zK^kfgsmTcE=OBV;p*$|^}2i!o+CgRzViR$UfZMa6}rTEHSJFR|z4 zTt*Vqj4T~dOoghDjxo%foXg9SD5=T}GtMqxQ4yu2cumH+8FmQ^u#zkh4LLzgE{jC9 zpt7HfptiLkB2`e9n-W4%#6ntR^U%YpnViTk%l2`qfBckS&;Wt4nYSkXNTXFp94>)s?w+0PqBf|^)J zc}YV0TVub^@DG{|w0-8=U#*k$7qjulGxzD()Y1s8(`ixF>8vQ}GXogsV*j&VT7&hR5tb73$E}?A}`6FwY z)lAh@n`-!mOCSH;9eUo!YJG>b_gV6P@I9@&SL+|thQ?k6T>)krxm?WaDC+92I=;GE zn%ANSO4qeuq;y3KM@v_=aHMqgg*Q^BG=E^Nuv(~mR=d&gAKCIB+c;jfYCiv(xGGjI zRfUF+-SQ39&X#E{7<$z8psRAP7Hk9uwt`1%cgyzYZhxi!7pF8&Z}o27!XE@(vJn_9U4|il@5YV#p;+BFQTkZ(M{5_>C+hyu(j^%31S%tScW=#F`=ZXC ztTWS3BF~&p`|8Z)(i{xGH>ULtX$SkYgTq?aAuaMAG34Np4Z8Myu%X8eHniDy;1*Dl z__>+Ly%<{g#K&(m~qRp}*}}-A60UQ@n+zIY*3! z$H9637IWdAN?^GO$m3bDC}vG42Fw>!g$0jh1y+Ih$N~}@J{@BS%(ie?5+MB3#Gqo8k&1qiW8o$a{PE~I_=GXb!sf`9Up-u_qZK_F2n7ffHOWsw{~5Uqk4d^h0!!jAZeFpQ9K2V zV+I%p7!(&tOw-o-r9zJF}9!w+JX0 ziT83|Q)_&H+~WMx7XPzA`1k}HTpXi{LM{P}2WNoKe8d_A3K-7Od?t0QMUIT&m1E5y zYkA~IC$cnS&>e#guoJAI{mnbMhaT%>K(jte=dH zQw9*?07y1>Y{1=KJj6jVO85#6lOh7eODhxrg|t%08L)^CK!8i%C6^Lf9c|jp5awrnXa7E{K2*2 zYOx~Kgogj?@QkjQA+1!Li8t$)3z z9vUn=v~bUcZC$R1V`V3dgh1zmzS_-=%k`n@df(*d#e{}$G?)x z_AlM9hEVU3?W4#OD$N_fKSEuD`?JDhv}{m8OpwX2%h$-5(6py>HYcYFS@ASJ2jk>H hP!2+|O;Z&0SLA-}xj|9(f95Sd%Dyu?N`(y3{{p}z@a_Nr diff --git a/tags/__pycache__/sharpshooter.cpython-313.pyc b/tags/__pycache__/sharpshooter.cpython-313.pyc deleted file mode 100644 index 1b1a1bc88849119411f6c46776119d31b3ca1fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmZ`&%WD%s7@y5%pUK*ozS9SmNXw!Psp6$-dx+Yq(5lNy3V~(V-EJan5@$C^3d$bs z$rdcFo>Dxhw|eWppm>S7taB=O@)pTI;7rokBIH~4+wbxFo-^B06d4dQpMEc7Spa@f zrAy4I(4vq%pn(KHz+u#o+4WF>Kwc6FT33m659r{@c`ro}(ikmtBh-63knI2?LPLP}?e_ z2}M3T)%FXTtaGy*iI;VrerM^#5nbrYMN#K;UKeyx7qw^~=ww%w70kK$lIQ-Wi@{L~ zZbHX4EE{fknD1yDrvtyML1CAm%rC|S6{O_z7HMIM?y&E+wh6OJ7Gjs&r10keFwikee zCnN$S285Xq9!L<#%!EXNxP+J*5jl|)u7r^o5w0%NX_R?oi+GC?mSs%bRjH=`VZSoO zb5O2SbmA?^l5yW2rK+UJBs3ZeH5nH`tk_zF&hvyD>c^b8?yf7}d~Mrrc_;WK@2LOI zAF~^kvLPpgiu6Fn4*n~D%n1h8RK?-M`@;R_aQ}{6(T)4pTEAu0NvKJ4Cd?Ey&?wQB9qkP9PJ*w=7jbfg7) z=Q73%@C5s3q3?pPBZ~{2eA4)^{;n0|Pjii2bN@{01{1yDqPbdMx7eA}&BkW)$fUaL z^&We}l z>#bBbvRr?!&s{sa+2P{m%~tf=TOBsro@p05?*JN%wldVP+utJ`hZN6)Bg|V>t#nwC-@yq;hX-N* Q^UrCDq6V%M b["slayer_score"]: - summary.append(f"{team_a_name} lean slayer-heavy.") - elif b["slayer_score"] > a["slayer_score"]: - summary.append(f"{team_b_name} lean slayer-heavy.") - - # --- Payload Objective --- - if a["payload_score"] > b["payload_score"]: - summary.append(f"{team_a_name} show stronger Payload objective focus.") - elif b["payload_score"] > a["payload_score"]: - summary.append(f"{team_b_name} show stronger Payload objective focus.") - - # --- Domination Objective --- - if a["objdom_score"] > b["objdom_score"]: - summary.append(f"{team_a_name} show stronger Domination objective presence.") - elif b["objdom_score"] > a["objdom_score"]: - summary.append(f"{team_b_name} show stronger Domination objective presence.") - - # --- Consistency --- - if a["consistency_score"] > b["consistency_score"]: - summary.append(f"{team_a_name} are the steadier team.") - elif b["consistency_score"] > a["consistency_score"]: - summary.append(f"{team_b_name} are the steadier team.") - - # --- Clutch --- - if a["clutch_score"] > b["clutch_score"]: - summary.append(f"{team_a_name} excel in clutch situations.") - elif b["clutch_score"] > a["clutch_score"]: - summary.append(f"{team_b_name} excel in clutch situations.") - - # --- Sharpshooter --- - if a["sharpshooter_score"] > b["sharpshooter_score"]: - summary.append(f"{team_a_name} bring stronger aim and headshot conversion.") - elif b["sharpshooter_score"] > a["sharpshooter_score"]: - summary.append(f"{team_b_name} bring stronger aim and headshot conversion.") - - return " ".join(summary) \ No newline at end of file