Download scripts/generate_pdf_diagrams.py from deeep-sec/campus-placement-engine: direct link, hf CLI and curl.
- Browser
- Download file 15.3 kB
-
https://huggingface.co/deeep-sec/campus-placement-engine/resolve/main/scripts/generate_pdf_diagrams.py
- Command line
-
hf download hf://deeep-sec/campus-placement-engine/scripts/generate_pdf_diagrams.py
-
curl -L -o generate_pdf_diagrams.py https://huggingface.co/deeep-sec/campus-placement-engine/resolve/main/scripts/generate_pdf_diagrams.py
15.3 kB
| import os | |
| import matplotlib | |
| matplotlib.use('Agg') | |
| import matplotlib.pyplot as plt | |
| import matplotlib.patches as patches | |
| OUT_DIR = r"C:\Users\Nitro-V\.gemini\antigravity\scratch\deviathon-placement-engine\docs\pdf_assets" | |
| os.makedirs(OUT_DIR, exist_ok=True) | |
| plt.rcParams['font.sans-serif'] = 'DejaVu Sans' | |
| plt.rcParams['font.family'] = 'sans-serif' | |
| def create_architecture_diagram(): | |
| fig, ax = plt.subplots(figsize=(10, 4.0), dpi=300) | |
| ax.set_xlim(0, 100) | |
| ax.set_ylim(0, 50) | |
| ax.axis('off') | |
| fig.patch.set_facecolor('#F8FAFC') | |
| rect_client = patches.FancyBboxPatch((2, 4), 22, 42, boxstyle="round,pad=0.8", ec="#94A3B8", fc="#FFFFFF", lw=1.5) | |
| ax.add_patch(rect_client) | |
| ax.text(13, 43, "CLIENT TIER (WEB & LAN)", ha='center', va='center', fontsize=8, fontweight='bold', color='#1E293B') | |
| for y_pos, label, sub in [(34, "Officer Workspace", "React 18 / Tailwind"), (22, "Student Mobile PWA", "Offline-Ready Portal"), (10, "Recruiter Portal", "Roster & Evaluation")]: | |
| b = patches.FancyBboxPatch((4, y_pos-3), 18, 7, boxstyle="round,pad=0.4", ec="#CBD5E1", fc="#F1F5F9", lw=1) | |
| ax.add_patch(b) | |
| ax.text(13, y_pos+1.5, label, ha='center', va='center', fontsize=7.5, fontweight='bold', color='#0F172A') | |
| ax.text(13, y_pos-1.2, sub, ha='center', va='center', fontsize=6.2, color='#64748B') | |
| rect_app = patches.FancyBboxPatch((27, 4), 46, 42, boxstyle="round,pad=0.8", ec="#3B82F6", fc="#EFF6FF", lw=1.8) | |
| ax.add_patch(rect_app) | |
| ax.text(50, 43, "APPLICATION SERVER (FastAPI on Port 8000)", ha='center', va='center', fontsize=8.5, fontweight='bold', color='#1D4ED8') | |
| rect_core = patches.FancyBboxPatch((29, 8), 42, 30, boxstyle="round,pad=0.6", ec="#10B981", fc="#FFFFFF", lw=2) | |
| ax.add_patch(rect_core) | |
| ax.text(50, 35.5, "PURE FUNCTIONAL DOMAIN CORE", ha='center', va='center', fontsize=8.2, fontweight='bold', color='#047857') | |
| ax.text(50, 33, "(Zero Database I/O, 100% Deterministic)", ha='center', va='center', fontsize=6.2, fontstyle='italic', color='#059669') | |
| core_mods = [ | |
| (31, 23, "Deterministic Extractor", "100% Offline / Regex AST"), | |
| (51, 23, "Eligibility AST Engine", "13 Rules / Protected Isolation"), | |
| (31, 11, "OR-Tools CP-SAT Solver", "0-Clash Math Scheduling"), | |
| (51, 11, "What-If Simulation", "Delta Engine & Dynamic Headlines") | |
| ] | |
| for x_pos, y_pos, title, desc in core_mods: | |
| mb = patches.FancyBboxPatch((x_pos, y_pos-1.5), 18, 8, boxstyle="round,pad=0.4", ec="#A7F3D0", fc="#ECFDF5", lw=1) | |
| ax.add_patch(mb) | |
| ax.text(x_pos+9, y_pos+3.5, title, ha='center', va='center', fontsize=7, fontweight='bold', color='#065F46') | |
| ax.text(x_pos+9, y_pos+0.5, desc, ha='center', va='center', fontsize=5.8, color='#047857') | |
| rect_db = patches.FancyBboxPatch((76, 4), 22, 42, boxstyle="round,pad=0.8", ec="#94A3B8", fc="#FFFFFF", lw=1.5) | |
| ax.add_patch(rect_db) | |
| ax.text(87, 43, "LOCAL STORAGE & SECURITY", ha='center', va='center', fontsize=7.8, fontweight='bold', color='#1E293B') | |
| for y_pos, label, sub in [(34, "SQLite (WAL Mode)", "PRAGMA foreign_keys=ON"), (22, "Field-Level Crypto", "AES-256 Fernet for PII"), (10, "HMAC Audit Ledger", "SHA-256 Hash Chaining")]: | |
| b = patches.FancyBboxPatch((78, y_pos-3), 18, 7, boxstyle="round,pad=0.4", ec="#CBD5E1", fc="#F8FAFC", lw=1) | |
| ax.add_patch(b) | |
| ax.text(87, y_pos+1.5, label, ha='center', va='center', fontsize=7.2, fontweight='bold', color='#0F172A') | |
| ax.text(87, y_pos-1.2, sub, ha='center', va='center', fontsize=6.0, color='#64748B') | |
| ax.annotate('', xy=(27, 25), xytext=(24, 25), arrowprops=dict(arrowstyle="<->", color="#3B82F6", lw=2)) | |
| ax.annotate('', xy=(76, 25), xytext=(72, 25), arrowprops=dict(arrowstyle="<->", color="#10B981", lw=2)) | |
| plt.tight_layout() | |
| out_file = os.path.join(OUT_DIR, "diagram1_architecture.png") | |
| plt.savefig(out_file, dpi=300, facecolor=fig.get_facecolor(), bbox_inches='tight') | |
| plt.close() | |
| def create_extraction_diagram(): | |
| fig, ax = plt.subplots(figsize=(10, 3.8), dpi=300) | |
| ax.set_xlim(0, 100) | |
| ax.set_ylim(0, 50) | |
| ax.axis('off') | |
| fig.patch.set_facecolor('#F8FAFC') | |
| ax.text(50, 46, "DETERMINISTIC DOCUMENT INGESTION & EXTRACTION PIPELINE", ha='center', va='center', fontsize=9.5, fontweight='bold', color='#0F172A') | |
| stages = [ | |
| (12, 24, "1. Ingestion & Normalize", "PDF, DOCX, EML, Plaintext\nWhitespace & Unicode cleanup", "#F1F5F9", "#475569"), | |
| (37, 24, "2. Regex AST Matcher", "13 Rule Primitives\nCGPA, CTC, Branches, Backlogs", "#DBEAFE", "#1E40AF"), | |
| (62, 24, "3. Confidence Scoring", "High / Medium / Low\nField-level extraction scores", "#FEF3C7", "#92400E"), | |
| (87, 24, "4. Structured Contract", "Human-in-the-loop review\nImmutable Drive Creation", "#ECFDF5", "#065F46") | |
| ] | |
| for x_pos, y_pos, title, sub, fc, tc in stages: | |
| b = patches.FancyBboxPatch((x_pos-10, y_pos-10), 20, 20, boxstyle="round,pad=0.6", ec=tc, fc=fc, lw=1.5) | |
| ax.add_patch(b) | |
| ax.text(x_pos, y_pos+5, title, ha='center', va='center', fontsize=7.2, fontweight='bold', color=tc, multialignment='center') | |
| ax.text(x_pos, y_pos-3, sub, ha='center', va='center', fontsize=6.0, color='#1E293B', multialignment='center') | |
| for i in range(3): | |
| x1 = stages[i][0] + 10 | |
| x2 = stages[i+1][0] - 10 | |
| ax.annotate('', xy=(x2, 24), xytext=(x1, 24), arrowprops=dict(arrowstyle="->", color="#3B82F6", lw=2)) | |
| perf_badge = patches.FancyBboxPatch((20, 2), 60, 5.5, boxstyle="round,pad=0.4", ec="#059669", fc="#10B981", lw=1.2) | |
| ax.add_patch(perf_badge) | |
| ax.text(50, 4.8, "BENCHMARK: 25/25 REAL-WORLD CIRCULARS (100%) | AVG SPEED: 14.6ms | ZERO LLM COST", ha='center', va='center', fontsize=6.8, fontweight='bold', color='#FFFFFF') | |
| plt.tight_layout() | |
| out_file = os.path.join(OUT_DIR, "diagram2_extraction.png") | |
| plt.savefig(out_file, dpi=300, facecolor=fig.get_facecolor(), bbox_inches='tight') | |
| plt.close() | |
| def create_ast_diagram(): | |
| fig, ax = plt.subplots(figsize=(10, 4.0), dpi=300) | |
| ax.set_xlim(0, 100) | |
| ax.set_ylim(0, 50) | |
| ax.axis('off') | |
| fig.patch.set_facecolor('#F8FAFC') | |
| ax.text(50, 47, "TYPED RULE AST & TWO-TIER EXPLAINABILITY", ha='center', va='center', fontsize=9.5, fontweight='bold', color='#0F172A') | |
| r_box = patches.FancyBboxPatch((40, 36), 20, 7.5, boxstyle="round,pad=0.5", ec="#2563EB", fc="#DBEAFE", lw=1.8) | |
| ax.add_patch(r_box) | |
| ax.text(50, 41, "Drive RuleSet Root", ha='center', va='center', fontsize=8, fontweight='bold', color='#1E40AF') | |
| ax.text(50, 38, "Logical AND Operator", ha='center', va='center', fontsize=6.5, color='#2563EB') | |
| leaves = [ | |
| (12, 23, "Academic Criteria", "CGPA >= 7.50\n10th/12th >= 70%"), | |
| (37, 23, "Backlog Policy", "Active Backlogs == 0\nDead History <= 1"), | |
| (62, 23, "Eligible Branches", "CS, IT, ECE, AI\n(Alias Normalization)"), | |
| (87, 23, "Offer Policies", "Strict 1-Offer OR\nTiered Multiplier") | |
| ] | |
| for x_pos, y_pos, title, sub in leaves: | |
| b = patches.FancyBboxPatch((x_pos-9, y_pos-4), 18, 8.5, boxstyle="round,pad=0.4", ec="#10B981", fc="#ECFDF5", lw=1.2) | |
| ax.add_patch(b) | |
| ax.text(x_pos, y_pos+3, title, ha='center', va='center', fontsize=7.2, fontweight='bold', color='#065F46') | |
| ax.text(x_pos, y_pos-1, sub, ha='center', va='center', fontsize=6.0, color='#047857', multialignment='center') | |
| ax.annotate('', xy=(x_pos, y_pos+5), xytext=(50, 36), arrowprops=dict(arrowstyle="->", color="#94A3B8", lw=1.2)) | |
| cand_box = patches.FancyBboxPatch((5, 3), 42, 9, boxstyle="round,pad=0.6", ec="#F59E0B", fc="#FFFBEB", lw=1.5) | |
| ax.add_patch(cand_box) | |
| ax.text(26, 10, "Candidate Empathic Explanation (1-Line)", ha='center', va='center', fontsize=7.5, fontweight='bold', color='#92400E') | |
| ax.text(26, 6, '"Not eligible: Your CGPA is 6.80 and this drive requires 7.50 or above."', ha='center', va='center', fontsize=6.5, fontstyle='italic', color='#B45309') | |
| off_box = patches.FancyBboxPatch((53, 3), 42, 9, boxstyle="round,pad=0.6", ec="#6366F1", fc="#EEF2FF", lw=1.5) | |
| ax.add_patch(off_box) | |
| ax.text(74, 10, "Officer Cryptographic Trace (Audit Proof)", ha='center', va='center', fontsize=7.5, fontweight='bold', color='#3730A3') | |
| ax.text(74, 6, 'Rule #CGPA_MIN | Cutoff: 7.50 | Value: 6.80 | Δ: -0.70\nSHA-256 Snapshot: 8f3c7a9... (Zero Bias Certified)', ha='center', va='center', fontsize=6.2, color='#4338CA', multialignment='center') | |
| ax.annotate('', xy=(26, 12), xytext=(50, 18), arrowprops=dict(arrowstyle="->", color="#F59E0B", lw=1.5)) | |
| ax.annotate('', xy=(74, 12), xytext=(50, 18), arrowprops=dict(arrowstyle="->", color="#6366F1", lw=1.5)) | |
| plt.tight_layout() | |
| out_file = os.path.join(OUT_DIR, "diagram3_ast.png") | |
| plt.savefig(out_file, dpi=300, facecolor=fig.get_facecolor(), bbox_inches='tight') | |
| plt.close() | |
| def create_scheduler_diagram(): | |
| fig, ax = plt.subplots(figsize=(10, 4.0), dpi=300) | |
| ax.set_xlim(0, 100) | |
| ax.set_ylim(0, 50) | |
| ax.axis('off') | |
| fig.patch.set_facecolor('#F8FAFC') | |
| ax.text(50, 47, "GOOGLE OR-TOOLS CP-SAT CONSTRAINT SCHEDULER", ha='center', va='center', fontsize=9.5, fontweight='bold', color='#0F172A') | |
| times = ["09:00 - 10:00", "10:15 - 11:15", "11:30 - 12:30", "13:30 - 14:30", "14:45 - 15:45"] | |
| for i, t in enumerate(times): | |
| ax.text(25 + i*16, 41, t, ha='center', va='center', fontsize=6.8, fontweight='bold', color='#475569') | |
| rooms = ["Lab A (Panel 1)", "Lab B (Panel 2)", "Auditorium", "Seminar Hall"] | |
| colors = ["#DBEAFE", "#ECFDF5", "#FEF3C7", "#F3E8FF"] | |
| border_colors = ["#2563EB", "#059669", "#D97706", "#7C3AED"] | |
| for r_idx, r_name in enumerate(rooms): | |
| y = 33 - r_idx * 7.5 | |
| b = patches.FancyBboxPatch((1, y-2.5), 15, 5.5, boxstyle="round,pad=0.3", ec="#94A3B8", fc="#F1F5F9", lw=1) | |
| ax.add_patch(b) | |
| ax.text(8.5, y+0.2, r_name, ha='center', va='center', fontsize=6.5, fontweight='bold', color='#1E293B') | |
| for c_idx in range(5): | |
| x = 18 + c_idx * 16 | |
| slot_b = patches.FancyBboxPatch((x, y-2.5), 14, 5.5, boxstyle="round,pad=0.3", ec=border_colors[r_idx], fc=colors[r_idx], lw=1) | |
| ax.add_patch(slot_b) | |
| cand = f"Drive {(r_idx+1)*2}\nCandidate #{101+r_idx*10+c_idx}" | |
| ax.text(x+7, y+0.2, cand, ha='center', va='center', fontsize=5.8, fontweight='bold', color='#0F172A', multialignment='center') | |
| badge = patches.FancyBboxPatch((20, 1.5), 60, 5.5, boxstyle="round,pad=0.4", ec="#059669", fc="#10B981", lw=1.2) | |
| ax.add_patch(badge) | |
| ax.text(50, 4.3, "BENCHMARK: 600 STUDENTS / 12 DRIVES / 8 ROOMS IN 1.05s | 0 CLASHES GUARANTEED", ha='center', va='center', fontsize=6.8, fontweight='bold', color='#FFFFFF') | |
| plt.tight_layout() | |
| out_file = os.path.join(OUT_DIR, "diagram4_scheduler.png") | |
| plt.savefig(out_file, dpi=300, facecolor=fig.get_facecolor(), bbox_inches='tight') | |
| plt.close() | |
| def create_whatif_diagram(): | |
| fig, ax = plt.subplots(figsize=(10, 3.8), dpi=300) | |
| ax.set_xlim(0, 100) | |
| ax.set_ylim(0, 50) | |
| ax.axis('off') | |
| fig.patch.set_facecolor('#F8FAFC') | |
| ax.text(50, 46, "WHAT-IF IMPACT SIMULATION & SECOND-ORDER PROJECTION", ha='center', va='center', fontsize=9.5, fontweight='bold', color='#0F172A') | |
| steps = [ | |
| (12, 24, "1. Officer Adjustment", "Slider: CGPA 7.0 -> 6.5\nor relax backlogs to 1", "#DBEAFE", "#1E40AF"), | |
| (37, 24, "2. Pure In-Memory Delta", "Runs in 18ms without\nwriting to SQLite database", "#ECFDF5", "#065F46"), | |
| (62, 24, "3. Consequence Engine", "Identifies newly eligible pool,\ncalculates room displacement", "#FEF3C7", "#92400E"), | |
| (87, 24, "4. Dynamic Headline", '"Adds 38 candidates;\n6 clash with Northwind test"', "#F3E8FF", "#5B21B6") | |
| ] | |
| for x_pos, y_pos, title, sub, fc, tc in steps: | |
| b = patches.FancyBboxPatch((x_pos-10, y_pos-10), 20, 20, boxstyle="round,pad=0.6", ec=tc, fc=fc, lw=1.5) | |
| ax.add_patch(b) | |
| ax.text(x_pos, y_pos+5, title, ha='center', va='center', fontsize=7.2, fontweight='bold', color=tc, multialignment='center') | |
| ax.text(x_pos, y_pos-3, sub, ha='center', va='center', fontsize=6.0, color='#1E293B', multialignment='center') | |
| for i in range(3): | |
| x1 = steps[i][0] + 10 | |
| x2 = steps[i+1][0] - 10 | |
| ax.annotate('', xy=(x2, 24), xytext=(x1, 24), arrowprops=dict(arrowstyle="->", color="#3B82F6", lw=2)) | |
| ctrl_badge = patches.FancyBboxPatch((20, 2), 60, 5.5, boxstyle="round,pad=0.4", ec="#2563EB", fc="#3B82F6", lw=1.2) | |
| ax.add_patch(ctrl_badge) | |
| ax.text(50, 4.8, "SAFEGUARDS: MONOTONIC VERSIONING | IMMUTABLE SNAPSHOTS | 1-CLICK ROLLBACK", ha='center', va='center', fontsize=6.8, fontweight='bold', color='#FFFFFF') | |
| plt.tight_layout() | |
| out_file = os.path.join(OUT_DIR, "diagram5_whatif.png") | |
| plt.savefig(out_file, dpi=300, facecolor=fig.get_facecolor(), bbox_inches='tight') | |
| plt.close() | |
| def create_security_diagram(): | |
| fig, ax = plt.subplots(figsize=(10, 3.8), dpi=300) | |
| ax.set_xlim(0, 100) | |
| ax.set_ylim(0, 50) | |
| ax.axis('off') | |
| fig.patch.set_facecolor('#F8FAFC') | |
| ax.text(50, 46, "ENTERPRISE SECURITY, CRYPTOGRAPHY & DATA PRIVACY", ha='center', va='center', fontsize=9.5, fontweight='bold', color='#0F172A') | |
| pillars = [ | |
| (12, 24, "AES-256 Fernet Crypto", "Encrypted PII columns\n(Phone, Email, CGPA, Address)", "#F1F5F9", "#334155"), | |
| (37, 24, "HMAC-SHA256 Audit Trail", "Cryptographic chaining\nTamper-proof event ledger", "#EEF2FF", "#3730A3"), | |
| (62, 24, "Strict Data Sovereignty", "Self-contained architecture\nZero third-party cloud leaks", "#ECFDF5", "#065F46"), | |
| (87, 24, "Cryptographic Wipe", "PBKDF2 encrypted backups\n1-click season cleanup", "#FEF2F2", "#991B1B") | |
| ] | |
| for x_pos, y_pos, title, sub, fc, tc in pillars: | |
| b = patches.FancyBboxPatch((x_pos-10, y_pos-10), 20, 20, boxstyle="round,pad=0.6", ec=tc, fc=fc, lw=1.5) | |
| ax.add_patch(b) | |
| ax.text(x_pos, y_pos+5, title, ha='center', va='center', fontsize=7.2, fontweight='bold', color=tc, multialignment='center') | |
| ax.text(x_pos, y_pos-3, sub, ha='center', va='center', fontsize=6.0, color='#1E293B', multialignment='center') | |
| for i in range(3): | |
| x1 = pillars[i][0] + 10 | |
| x2 = pillars[i+1][0] - 10 | |
| ax.annotate('', xy=(x2, 24), xytext=(x1, 24), arrowprops=dict(arrowstyle="<->", color="#94A3B8", lw=1.5)) | |
| sec_badge = patches.FancyBboxPatch((20, 2), 60, 5.5, boxstyle="round,pad=0.4", ec="#059669", fc="#10B981", lw=1.2) | |
| ax.add_patch(sec_badge) | |
| ax.text(50, 4.8, "COMPLIANCE: STRIDE THREAT MODEL AUDITED | ARGON2ID AUTH | CSRF HARDENED", ha='center', va='center', fontsize=6.8, fontweight='bold', color='#FFFFFF') | |
| plt.tight_layout() | |
| out_file = os.path.join(OUT_DIR, "diagram6_security.png") | |
| plt.savefig(out_file, dpi=300, facecolor=fig.get_facecolor(), bbox_inches='tight') | |
| plt.close() | |
| if __name__ == "__main__": | |
| create_architecture_diagram() | |
| create_extraction_diagram() | |
| create_ast_diagram() | |
| create_scheduler_diagram() | |
| create_whatif_diagram() | |
| create_security_diagram() | |
| print("All 6 diagrams generated successfully!") | |