@@ -255,6 +255,15 @@ pub fn runZenodoCommand(allocator: std.mem.Allocator, args: []const []const u8)
255255 } else if (std .mem .eql (u8 , subcmd , "tikz" )) {
256256 // Generate TikZ diagram
257257 try generateTikzExamples (allocator );
258+ } else if (std .mem .eql (u8 , subcmd , "reproducibility" )) {
259+ // Generate reproducibility checklist
260+ try generateReproducibilityExamples (allocator );
261+ } else if (std .mem .eql (u8 , subcmd , "results" )) {
262+ // Generate results summary
263+ try generateResultsSummaryExamples (allocator );
264+ } else if (std .mem .eql (u8 , subcmd , "multipanel" )) {
265+ // Generate multi-panel figure
266+ try generateMultiPanelExamples (allocator );
258267 } else {
259268 print ("{s}Unknown subcommand: {s}{s}\n " , .{ RED , subcmd , RESET });
260269 printHelp ();
@@ -2221,6 +2230,9 @@ fn printHelp() void {
22212230 print (" tri zenodo hyperparameters Generate hyperparameter tables for model config\n " , .{});
22222231 print (" tri zenodo dataset Generate dataset description with train/val/test splits\n " , .{});
22232232 print (" tri zenodo tikz Generate TikZ diagrams for architectures\n " , .{});
2233+ print (" tri zenodo reproducibility Generate reproducibility checklist for paper submissions\n " , .{});
2234+ print (" tri zenodo results Generate results summary table with statistics\n " , .{});
2235+ print (" tri zenodo multipanel Generate multi-panel figure layouts (2x2, 1x3, etc)\n " , .{});
22242236 print (" Requires ZENODO_TOKEN in .env\n " , .{});
22252237 print (" Record: {s}\n\n " , .{RECORD_ID });
22262238 print (" Discoveries:\n " , .{});
@@ -2699,6 +2711,103 @@ fn generateTikzExamples(allocator: std.mem.Allocator) !void {
26992711 print ("{s}\n " , .{md });
27002712}
27012713
2714+ /// Generate reproducibility checklist examples (V12)
2715+ fn generateReproducibilityExamples (allocator : std.mem.Allocator ) ! void {
2716+ print ("\n {s}═════════════════════════════════════════════════════════════{s}\n " , .{ GOLDEN , RESET });
2717+ print ("{s}{s} Reproducibility Checklist Generator{s}\n " , .{ BOLD , "REPRODUCIBILITY" , RESET });
2718+ print ("{s}═════════════════════════════════════════════════════════════{s}\n\n " , .{ GOLDEN , RESET });
2719+
2720+ const items = [_ ]zenodo_templates.ChecklistItem {
2721+ .{ .category = "Code" , .question = "Is the code available?" , .response = .yes , .details = "GitHub: github.com/trinity" , .link = "https://github.com/gHashTag/trinity" },
2722+ .{ .category = "Data" , .question = "Is the dataset publicly available?" , .response = .partial , .details = "TinyStories is public, custom datasets are private" },
2723+ .{ .category = "Hyperparameters" , .question = "Are all hyperparameters listed?" , .response = .yes },
2724+ .{ .category = "Random Seed" , .question = "Is the random seed reported?" , .response = .yes },
2725+ .{ .category = "Compute" , .question = "Are compute resources documented?" , .response = .yes , .details = "Training: 4x A100 GPUs, 8 hours" },
2726+ .{ .category = "Dependencies" , .question = "Are all dependencies listed?" , .response = .yes },
2727+ };
2728+
2729+ const checklist = zenodo_templates.ReproducibilityChecklist {
2730+ .conference = "NeurIPS" ,
2731+ .year = 2025 ,
2732+ .items = & items ,
2733+ .paper_title = "HSLM: Ternary Neural Networks with Hierarchical Sparse Language Modeling" ,
2734+ };
2735+
2736+ print ("{s}{s} LaTeX Output:{s}\n\n " , .{ CYAN , BOLD , RESET });
2737+ const latex = try checklist .formatAsLaTeX (allocator );
2738+ defer allocator .free (latex );
2739+ print ("{s}\n " , .{latex });
2740+
2741+ print ("\n {s}{s} Markdown Output:{s}\n\n " , .{ CYAN , BOLD , RESET });
2742+ const md = try checklist .formatAsMarkdown (allocator );
2743+ defer allocator .free (md );
2744+ print ("{s}\n " , .{md });
2745+ }
2746+
2747+ /// Generate results summary examples (V12)
2748+ fn generateResultsSummaryExamples (allocator : std.mem.Allocator ) ! void {
2749+ print ("\n {s}═════════════════════════════════════════════════════════════{s}\n " , .{ GOLDEN , RESET });
2750+ print ("{s}{s} Results Summary Generator{s}\n " , .{ BOLD , "RESULTS SUMMARY" , RESET });
2751+ print ("{s}═════════════════════════════════════════════════════════════{s}\n\n " , .{ GOLDEN , RESET });
2752+
2753+ const results = [_ ]zenodo_templates.StatisticalResult {
2754+ .{ .metric = "HSLM (ours, 1.95M)" , .value = 12.5 , .std_err = 0.2 , .ci = .{ .lower = 12.1 , .upper = 12.9 }, .p_value = 0.001 , .effect_size = 1.8 , .significance = .high , .is_best = true },
2755+ .{ .metric = "GPT-2 Small (117M)" , .value = 15.2 , .std_err = 0.3 , .ci = .{ .lower = 14.6 , .upper = 15.8 }, .p_value = 0.05 , .effect_size = 0.0 , .significance = .low },
2756+ .{ .metric = "LSTM-3L" , .value = 18.4 , .std_err = 0.4 , .ci = .{ .lower = 17.6 , .upper = 19.2 }, .p_value = 0.15 , .effect_size = -0.5 , .significance = .none },
2757+ };
2758+
2759+ const summary = zenodo_templates.ResultsSummary {
2760+ .caption = "Main experimental results on TinyStories validation set" ,
2761+ .label = "tab:main-results" ,
2762+ .dataset = "TinyStories" ,
2763+ .results = & results ,
2764+ .primary_metric = "Validation PPL ↓" ,
2765+ .higher_is_better = false ,
2766+ };
2767+
2768+ print ("{s}{s} LaTeX Output:{s}\n\n " , .{ CYAN , BOLD , RESET });
2769+ const latex = try summary .formatAsLaTeX (allocator );
2770+ defer allocator .free (latex );
2771+ print ("{s}\n " , .{latex });
2772+
2773+ print ("\n {s}{s} Markdown Output:{s}\n\n " , .{ CYAN , BOLD , RESET });
2774+ const md = try summary .formatAsMarkdown (allocator );
2775+ defer allocator .free (md );
2776+ print ("{s}\n " , .{md });
2777+ }
2778+
2779+ /// Generate multi-panel figure examples (V12)
2780+ fn generateMultiPanelExamples (allocator : std.mem.Allocator ) ! void {
2781+ print ("\n {s}═════════════════════════════════════════════════════════════{s}\n " , .{ GOLDEN , RESET });
2782+ print ("{s}{s} Multi-Panel Figure Generator{s}\n " , .{ BOLD , "MULTI-PANEL FIGURE" , RESET });
2783+ print ("{s}═════════════════════════════════════════════════════════════{s}\n\n " , .{ GOLDEN , RESET });
2784+
2785+ const panels = [_ ]zenodo_templates.SubPanel {
2786+ .{ .panel_id = "a" , .caption = "HSLM architecture with ternary embeddings and φ-attention" , .label = "fig:hslm:a" , .width_frac = 0.48 },
2787+ .{ .panel_id = "b" , .caption = "Training loss curve showing convergence" , .label = "fig:hslm:b" , .width_frac = 0.48 },
2788+ .{ .panel_id = "c" , .caption = "Per-layer ablation study" , .label = "fig:hslm:c" , .width_frac = 0.48 },
2789+ .{ .panel_id = "d" , .caption = "FPGA resource utilization" , .label = "fig:hslm:d" , .width_frac = 0.48 },
2790+ };
2791+
2792+ const fig = zenodo_templates.MultiPanelFigure {
2793+ .caption = "HSLM model: (a) architecture, (b) training, (c) ablation, (d) FPGA implementation" ,
2794+ .label = "fig:hslm" ,
2795+ .layout = "2x2" ,
2796+ .panels = & panels ,
2797+ .width = 0.9 ,
2798+ };
2799+
2800+ print ("{s}{s} LaTeX Output:{s}\n\n " , .{ CYAN , BOLD , RESET });
2801+ const latex = try fig .formatAsLaTeX (allocator );
2802+ defer allocator .free (latex );
2803+ print ("{s}\n " , .{latex });
2804+
2805+ print ("\n {s}{s} Markdown Output:{s}\n\n " , .{ CYAN , BOLD , RESET });
2806+ const md = try fig .formatAsMarkdown (allocator );
2807+ defer allocator .free (md );
2808+ print ("{s}\n " , .{md });
2809+ }
2810+
27022811fn curlPut (allocator : std.mem.Allocator , url : []const u8 , token : []const u8 , body : []const u8 ) ! []u8 {
27032812 const auth = try std .fmt .allocPrint (allocator , "Authorization: Bearer {s}" , .{token });
27042813 defer allocator .free (auth );
0 commit comments