{"id":48379443,"url":"https://github.com/duoan/TorchCode","last_synced_at":"2026-04-21T09:00:47.204Z","repository":{"id":341957029,"uuid":"1172198295","full_name":"duoan/TorchCode","owner":"duoan","description":"🔥 LeetCode for PyTorch — practice implementing softmax, attention, GPT-2 and more from scratch with instant auto-grading. Jupyter-based, self-hosted or try online.","archived":false,"fork":false,"pushed_at":"2026-03-04T04:16:38.000Z","size":54,"stargazers_count":127,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-04T08:12:06.010Z","etag":null,"topics":["interview","leetcode","pytorch"],"latest_commit_sha":null,"homepage":"https://huggingface.co/spaces/duoan/TorchCode","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/duoan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-04T03:25:54.000Z","updated_at":"2026-03-04T08:09:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/duoan/TorchCode","commit_stats":null,"previous_names":["duoan/torchcode"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/duoan/TorchCode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duoan%2FTorchCode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duoan%2FTorchCode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duoan%2FTorchCode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duoan%2FTorchCode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/duoan","download_url":"https://codeload.github.com/duoan/TorchCode/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duoan%2FTorchCode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32084721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T06:27:27.065Z","status":"ssl_error","status_checked_at":"2026-04-21T06:27:21.250Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interview","leetcode","pytorch"],"created_at":"2026-04-05T19:00:33.144Z","updated_at":"2026-04-21T09:00:47.198Z","avatar_url":"https://github.com/duoan.png","language":"Jupyter Notebook","funding_links":["https://buymeacoffee.com/duoan"],"categories":["Jupyter Notebook"],"sub_categories":[],"readme":"---\ntitle: TorchCode\nemoji: 🔥\ncolorFrom: red\ncolorTo: yellow\nsdk: docker\napp_port: 7860\npinned: false\n---\n\n\u003cdiv align=\"center\"\u003e\n\n# 🔥 TorchCode\n\n**Crack the PyTorch interview.**\n\nPractice implementing operators and architectures from scratch — the exact skills top ML teams test for.\n\n*Like LeetCode, but for tensors. Self-hosted. Jupyter-based. Instant feedback.*\n\n[![PyTorch](https://img.shields.io/badge/PyTorch-ee4c2c?style=for-the-badge\u0026logo=pytorch\u0026logoColor=white)](https://pytorch.org)\n[![Jupyter](https://img.shields.io/badge/Jupyter-F37626?style=for-the-badge\u0026logo=jupyter\u0026logoColor=white)](https://jupyter.org)\n[![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://www.docker.com)\n[![Python](https://img.shields.io/badge/Python_3.11-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](LICENSE)\n\n[![GitHub stars](https://img.shields.io/github/stars/duoan/TorchCode?style=social)](https://github.com/duoan/TorchCode)\n[![GitHub Container Registry](https://img.shields.io/badge/ghcr.io-TorchCode-blue?style=flat-square\u0026logo=github)](https://ghcr.io/duoan/torchcode)\n[![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Spaces-TorchCode-blue?style=flat-square)](https://huggingface.co/spaces/duoan/TorchCode)\n![Problems](https://img.shields.io/badge/problems-40-orange?style=flat-square)\n![GPU](https://img.shields.io/badge/GPU-not%20required-brightgreen?style=flat-square)\n\n[![Star History Chart](https://api.star-history.com/svg?repos=duoan/TorchCode\u0026type=Date)](https://star-history.com/#duoan/TorchCode\u0026Date)\n\n\u003c/div\u003e\n\n---\n\n## 🎯 Why TorchCode?\n\nTop companies (Meta, Google DeepMind, OpenAI, etc.) expect ML engineers to implement core operations **from memory on a whiteboard**. Reading papers isn't enough — you need to write `softmax`, `LayerNorm`, `MultiHeadAttention`, and full Transformer blocks code.\n\nTorchCode gives you a **structured practice environment** with:\n\n| | Feature | |\n|---|---|---|\n| 🧩 | **40 curated problems** | The most frequently asked PyTorch interview topics |\n| ⚖️ | **Automated judge** | Correctness checks, gradient verification, and timing |\n| 🎨 | **Instant feedback** | Colored pass/fail per test case, just like competitive programming |\n| 💡 | **Hints when stuck** | Nudges without full spoilers |\n| 📖 | **Reference solutions** | Study optimal implementations after your attempt |\n| 📊 | **Progress tracking** | What you've solved, best times, and attempt counts |\n| 🔄 | **One-click reset** | Toolbar button to reset any notebook back to its blank template — practice the same problem as many times as you want |\n| [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](#) | **Open in Colab** | Every notebook has an \"Open in Colab\" badge + toolbar button — run problems in Google Colab with zero setup |\n\nNo cloud. No signup. No GPU needed. Just `make run` — or try it instantly on Hugging Face.\n\n---\n\n## 🚀 Quick Start\n\n### Option 0 — Try it online (zero install)\n\n**[Launch on Hugging Face Spaces](https://huggingface.co/spaces/duoan/TorchCode)** — opens a full JupyterLab environment in your browser. Nothing to install.\n\nOr open any problem directly in Google Colab — every notebook has an [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/01_relu.ipynb) badge.\n\n### Option 0b — Use the judge in Colab (pip)\n\nIn Google Colab, install the judge from PyPI so you can run `check(...)` without cloning the repo:\n\n```bash\n!pip install torch-judge\n```\n\nThen in a notebook cell:\n\n```python\nfrom torch_judge import check, status, hint, reset_progress\nstatus()           # list all problems and your progress\ncheck(\"relu\")      # run tests for the \"relu\" task\nhint(\"relu\")       # show a hint\n```\n\n### Option 1 — Pull the pre-built image (fastest)\n\n```bash\ndocker run -p 8888:8888 -e PORT=8888 ghcr.io/duoan/torchcode:latest\n```\n\nIf the registry image is unavailable for your platform, use Option 2 instead. This is the common path on Apple Silicon / `arm64`.\n\n### Option 2 — Build locally\n\n```bash\nmake run\n```\n\n`make run` will try the prebuilt image first and automatically fall back to a local build when needed.\n\nOpen **\u003chttp://localhost:8888\u003e** — that's it. Works with both Docker and Podman (auto-detected).\n\n---\n\n## 📋 Problem Set\n\n\u003e **Frequency**: 🔥 = very likely in interviews, ⭐ = commonly asked, 💡 = emerging / differentiator\n\n### 🧱 Fundamentals — \"Implement X from scratch\"\n\nThe bread and butter of ML coding interviews. You'll be asked to write these without `torch.nn`.\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 1 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/01_relu.ipynb\" target=\"_blank\"\u003eReLU\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/01_relu.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `relu(x)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | 🔥 | Activation functions, element-wise ops |\n| 2 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/02_softmax.ipynb\" target=\"_blank\"\u003eSoftmax\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/02_softmax.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `my_softmax(x, dim)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | 🔥 | Numerical stability, exp/log tricks |\n| 16 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/16_cross_entropy.ipynb\" target=\"_blank\"\u003eCross-Entropy Loss\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/16_cross_entropy.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `cross_entropy_loss(logits, targets)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | 🔥 | Log-softmax, logsumexp trick |\n| 17 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/17_dropout.ipynb\" target=\"_blank\"\u003eDropout\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/17_dropout.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `MyDropout` (nn.Module) | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | 🔥 | Train/eval mode, inverted scaling |\n| 18 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/18_embedding.ipynb\" target=\"_blank\"\u003eEmbedding\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/18_embedding.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `MyEmbedding` (nn.Module) | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | 🔥 | Lookup table, `weight[indices]` |\n| 19 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/19_gelu.ipynb\" target=\"_blank\"\u003eGELU\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/19_gelu.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `my_gelu(x)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | ⭐ | Gaussian error linear unit, `torch.erf` |\n| 20 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/20_weight_init.ipynb\" target=\"_blank\"\u003eKaiming Init\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/20_weight_init.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `kaiming_init(weight)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | ⭐ | `std = sqrt(2/fan_in)`, variance scaling |\n| 21 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/21_gradient_clipping.ipynb\" target=\"_blank\"\u003eGradient Clipping\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/21_gradient_clipping.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `clip_grad_norm(params, max_norm)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | ⭐ | Norm-based clipping, direction preservation |\n| 31 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/31_gradient_accumulation.ipynb\" target=\"_blank\"\u003eGradient Accumulation\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/31_gradient_accumulation.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `accumulated_step(model, opt, ...)` | ![Easy](https://img.shields.io/badge/Easy-4CAF50?style=flat-square) | 💡 | Micro-batching, loss scaling |\n| 40 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/40_linear_regression.ipynb\" target=\"_blank\"\u003eLinear Regression\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/40_linear_regression.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `LinearRegression` (3 methods) | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 🔥 | Normal equation, GD from scratch, nn.Linear |\n| 3 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/03_linear.ipynb\" target=\"_blank\"\u003eLinear Layer\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/03_linear.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `SimpleLinear` (nn.Module) | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 🔥 | `y = xW^T + b`, Kaiming init, `nn.Parameter` |\n| 4 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/04_layernorm.ipynb\" target=\"_blank\"\u003eLayerNorm\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/04_layernorm.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `my_layer_norm(x, γ, β)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 🔥 | Normalization, running stats, affine transform |\n| 7 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/07_batchnorm.ipynb\" target=\"_blank\"\u003eBatchNorm\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/07_batchnorm.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `my_batch_norm(x, γ, β)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | Batch vs layer statistics, train/eval behavior |\n| 8 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/08_rmsnorm.ipynb\" target=\"_blank\"\u003eRMSNorm\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/08_rmsnorm.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `rms_norm(x, weight)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | LLaMA-style norm, simpler than LayerNorm |\n| 15 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/15_mlp.ipynb\" target=\"_blank\"\u003eSwiGLU MLP\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/15_mlp.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `SwiGLUMLP` (nn.Module) | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | Gated FFN, `SiLU(gate) * up`, LLaMA/Mistral-style |\n| 22 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/22_conv2d.ipynb\" target=\"_blank\"\u003eConv2d\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/22_conv2d.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `my_conv2d(x, weight, ...)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 🔥 | Convolution, unfold, stride/padding |\n\n### 🧠 Attention Mechanisms — The heart of modern ML interviews\n\nIf you're interviewing for any role touching LLMs or Transformers, expect at least one of these.\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 23 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/23_cross_attention.ipynb\" target=\"_blank\"\u003eCross-Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/23_cross_attention.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `MultiHeadCrossAttention` (nn.Module) | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | Encoder-decoder, Q from decoder, K/V from encoder |\n| 5 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/05_attention.ipynb\" target=\"_blank\"\u003eScaled Dot-Product Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/05_attention.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `scaled_dot_product_attention(Q, K, V)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 🔥 | `softmax(QK^T/√d_k)V`, the foundation of everything |\n| 6 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/06_multihead_attention.ipynb\" target=\"_blank\"\u003eMulti-Head Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/06_multihead_attention.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `MultiHeadAttention` (nn.Module) | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 🔥 | Parallel heads, split/concat, projection matrices |\n| 9 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/09_causal_attention.ipynb\" target=\"_blank\"\u003eCausal Self-Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/09_causal_attention.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `causal_attention(Q, K, V)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 🔥 | Autoregressive masking with `-inf`, GPT-style |\n| 10 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/10_gqa.ipynb\" target=\"_blank\"\u003eGrouped Query Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/10_gqa.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `GroupQueryAttention` (nn.Module) | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | ⭐ | GQA (LLaMA 2), KV sharing across heads |\n| 11 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/11_sliding_window.ipynb\" target=\"_blank\"\u003eSliding Window Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/11_sliding_window.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `sliding_window_attention(Q, K, V, w)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | ⭐ | Mistral-style local attention, O(n·w) complexity |\n| 12 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/12_linear_attention.ipynb\" target=\"_blank\"\u003eLinear Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/12_linear_attention.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `linear_attention(Q, K, V)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Kernel trick, `φ(Q)(φ(K)^TV)`, O(n·d²) |\n| 14 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/14_kv_cache.ipynb\" target=\"_blank\"\u003eKV Cache Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/14_kv_cache.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `KVCacheAttention` (nn.Module) | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 🔥 | Incremental decoding, cache K/V, prefill vs decode |\n| 24 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/24_rope.ipynb\" target=\"_blank\"\u003eRoPE\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/24_rope.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `apply_rope(q, k)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 🔥 | Rotary position embedding, relative position via rotation |\n| 25 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/25_flash_attention.ipynb\" target=\"_blank\"\u003eFlash Attention\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/25_flash_attention.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `flash_attention(Q, K, V, block_size)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Tiled attention, online softmax, memory-efficient |\n\n### 🏗️ Architecture \u0026 Adaptation — Put it all together\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 26 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/26_lora.ipynb\" target=\"_blank\"\u003eLoRA\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/26_lora.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `LoRALinear` (nn.Module) | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | Low-rank adaptation, frozen base + `BA` update |\n| 27 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/27_vit_patch.ipynb\" target=\"_blank\"\u003eViT Patch Embedding\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/27_vit_patch.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `PatchEmbedding` (nn.Module) | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 💡 | Image → patches → linear projection |\n| 13 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/13_gpt2_block.ipynb\" target=\"_blank\"\u003eGPT-2 Block\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/13_gpt2_block.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `GPT2Block` (nn.Module) | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | ⭐ | Pre-norm, causal MHA + MLP (4x, GELU), residual connections |\n| 28 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/28_moe.ipynb\" target=\"_blank\"\u003eMixture of Experts\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/28_moe.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `MixtureOfExperts` (nn.Module) | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | ⭐ | Mixtral-style, top-k routing, expert MLPs |\n\n### ⚙️ Training \u0026 Optimization\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 29 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/29_adam.ipynb\" target=\"_blank\"\u003eAdam Optimizer\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/29_adam.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `MyAdam` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | Momentum + RMSProp, bias correction |\n| 30 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/30_cosine_lr.ipynb\" target=\"_blank\"\u003eCosine LR Scheduler\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/30_cosine_lr.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `cosine_lr_schedule(step, ...)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | ⭐ | Linear warmup + cosine annealing |\n\n### 🎯 Inference \u0026 Decoding\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 32 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/32_topk_sampling.ipynb\" target=\"_blank\"\u003eTop-k / Top-p Sampling\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/32_topk_sampling.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `sample_top_k_top_p(logits, ...)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 🔥 | Nucleus sampling, temperature scaling |\n| 33 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/33_beam_search.ipynb\" target=\"_blank\"\u003eBeam Search\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/33_beam_search.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `beam_search(log_prob_fn, ...)` | ![Medium](https://img.shields.io/badge/Medium-FF9800?style=flat-square) | 🔥 | Hypothesis expansion, pruning, eos handling |\n| 34 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/34_speculative_decoding.ipynb\" target=\"_blank\"\u003eSpeculative Decoding\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/34_speculative_decoding.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `speculative_decode(target, draft, ...)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Accept/reject, draft model acceleration |\n\n### 🔬 Advanced — Differentiators\n\n| # | Problem | What You'll Implement | Difficulty | Freq | Key Concepts |\n|:---:|---------|----------------------|:----------:|:----:|--------------|\n| 35 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/35_bpe.ipynb\" target=\"_blank\"\u003eBPE Tokenizer\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/35_bpe.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `SimpleBPE` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Byte-pair encoding, merge rules, subword splits |\n| 36 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/36_int8_quantization.ipynb\" target=\"_blank\"\u003eINT8 Quantization\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/36_int8_quantization.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `Int8Linear` (nn.Module) | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Per-channel quantize, scale/zero-point, buffer vs param |\n| 37 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/37_dpo_loss.ipynb\" target=\"_blank\"\u003eDPO Loss\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/37_dpo_loss.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `dpo_loss(chosen, rejected, ...)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Direct preference optimization, alignment training |\n| 38 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/38_grpo_loss.ipynb\" target=\"_blank\"\u003eGRPO Loss\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/38_grpo_loss.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `grpo_loss(logps, rewards, group_ids, eps)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | Group relative policy optimization, RLAIF, within-group normalized advantages |\n| 39 | \u003ca href=\"https://github.com/duoan/TorchCode/blob/master/templates/39_ppo_loss.ipynb\" target=\"_blank\"\u003ePPO Loss\u003c/a\u003e \u003ca href=\"https://colab.research.google.com/github/duoan/TorchCode/blob/master/templates/39_ppo_loss.ipynb\" target=\"_blank\"\u003e\u003cimg src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\" height=\"20\"\u003e\u003c/a\u003e | `ppo_loss(new_logps, old_logps, advantages, clip_ratio)` | ![Hard](https://img.shields.io/badge/Hard-F44336?style=flat-square) | 💡 | PPO clipped surrogate loss, policy gradient, trust region |\n\n---\n\n## ⚙️ How It Works\n\nEach problem has **two** notebooks:\n\n| File | Purpose |\n|------|---------|\n| `01_relu.ipynb` | ✏️ Blank template — write your code here |\n| `01_relu_solution.ipynb` | 📖 Reference solution — check when stuck |\n\n### Workflow\n\n```text\n1. Open a blank notebook           →  Read the problem description\n2. Implement your solution         →  Use only basic PyTorch ops\n3. Debug freely                    →  print(x.shape), check gradients, etc.\n4. Run the judge cell              →  check(\"relu\")\n5. See instant colored feedback    →  ✅ pass / ❌ fail per test case\n6. Stuck? Get a nudge              →  hint(\"relu\")\n7. Review the reference solution   →  01_relu_solution.ipynb\n8. Click 🔄 Reset in the toolbar  →  Blank slate — practice again!\n```\n\n### In-Notebook API\n\n```python\nfrom torch_judge import check, hint, status\n\ncheck(\"relu\")               # Judge your implementation\nhint(\"causal_attention\")    # Get a hint without full spoiler\nstatus()                    # Progress dashboard — solved / attempted / todo\n```\n\n---\n\n## 📅 Suggested Study Plan\n\n\u003e **Total: ~12–16 hours spread across 3–4 weeks. Perfect for interview prep on a deadline.**\n\n| Week | Focus | Problems | Time |\n|:----:|-------|----------|:----:|\n| **1** | 🧱 Foundations | ReLU → Softmax → CE Loss → Dropout → Embedding → GELU → Linear → LayerNorm → BatchNorm → RMSNorm → SwiGLU MLP → Conv2d | 2–3 hrs |\n| **2** | 🧠 Attention Deep Dive | SDPA → MHA → Cross-Attn → Causal → GQA → KV Cache → Sliding Window → RoPE → Linear Attn → Flash Attn | 3–4 hrs |\n| **3** | 🏗️ Architecture + Training | GPT-2 Block → LoRA → MoE → ViT Patch → Adam → Cosine LR → Grad Clip → Grad Accumulation → Kaiming Init | 3–4 hrs |\n| **4** | 🎯 Inference + Advanced | Top-k/p Sampling → Beam Search → Speculative Decoding → BPE → INT8 Quant → DPO Loss → GRPO Loss → PPO Loss + speed run | 3–4 hrs |\n\n---\n\n## 🏛️ Architecture\n\n```text\n┌──────────────────────────────────────────┐\n│           Docker / Podman Container      │\n│                                          │\n│  JupyterLab (:8888)                      │\n│    ├── templates/  (reset on each run)   │\n│    ├── solutions/  (reference impl)      │\n│    ├── torch_judge/ (auto-grading)       │\n│    ├── torchcode-labext (JLab plugin)    │\n│    │     🔄 Reset — restore template     │\n│    │     🔗 Colab — open in Colab        │\n│    └── PyTorch (CPU), NumPy              │\n│                                          │\n│  Judge checks:                           │\n│    ✓ Output correctness (allclose)       │\n│    ✓ Gradient flow (autograd)            │\n│    ✓ Shape consistency                   │\n│    ✓ Edge cases \u0026 numerical stability    │\n└──────────────────────────────────────────┘\n```\n\nSingle container. Single port. No database. No frontend framework. No GPU.\n\n## 🛠️ Commands\n\n```bash\nmake run    # Build \u0026 start (http://localhost:8888)\nmake stop   # Stop the container\nmake clean  # Stop + remove volumes + reset all progress\n```\n\n## 🧩 Adding Your Own Problems\n\nTorchCode uses auto-discovery — just drop a new file in `torch_judge/tasks/`:\n\n```python\nTASK = {\n    \"id\": \"my_task\",\n    \"title\": \"My Custom Problem\",\n    \"difficulty\": \"medium\",\n    \"function_name\": \"my_function\",\n    \"hint\": \"Think about broadcasting...\",\n    \"tests\": [ ... ],\n}\n```\n\nNo registration needed. The judge picks it up automatically.\n\n---\n\n## 📦 Publishing `torch-judge` to PyPI (maintainers)\n\nThe judge is published as a separate package so Colab/users can `pip install torch-judge` without cloning the repo.\n\n### Automatic (GitHub Action)\n\nPushing to `master` after changing the package version triggers [`.github/workflows/pypi-publish.yml`](.github/workflows/pypi-publish.yml), which builds and uploads to PyPI. No git tag is required.\n\n1. **Bump version** in `torch_judge/_version.py` (e.g. `__version__ = \"0.1.1\"`).\n2. **Configure PyPI Trusted Publisher** (one-time):\n   - PyPI → Your project **torch-judge** → **Publishing** → **Add a new pending publisher**\n   - Owner: `duoan`, Repository: `TorchCode`, Workflow: `pypi-publish.yml`, Environment: (leave empty)\n   - Run the workflow once (push a version bump to `master` or **Actions → Publish torch-judge to PyPI → Run workflow**); PyPI will then link the publisher.\n3. **Release**: commit the version bump and `git push origin master`.\n\nAlternatively, use an API token: add repository secret `PYPI_API_TOKEN` (value = `pypi-...` from PyPI) and set `TWINE_USERNAME=__token__` and `TWINE_PASSWORD` from that secret in the workflow if you prefer not to use Trusted Publishing.\n\n### Manual\n\n```bash\npip install build twine\npython -m build\ntwine upload dist/*\n```\n\nVersion is in `torch_judge/_version.py`; bump it before each release.\n\n---\n\n## ❓ FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDo I need a GPU?\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\nNo. Everything runs on CPU. The problems test correctness and understanding, not throughput.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I keep my solutions between runs?\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\nBlank templates reset on every \u003ccode\u003emake run\u003c/code\u003e so you practice from scratch. Save your work under a different filename if you want to keep it. You can also click the \u003cb\u003e🔄 Reset\u003c/b\u003e button in the notebook toolbar at any time to restore the blank template without restarting.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I use Google Colab instead?\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\nYes! Every notebook has an \u003cb\u003eOpen in Colab\u003c/b\u003e badge at the top. Click it to open the problem directly in Google Colab — no Docker or local setup needed. You can also use the \u003cb\u003eColab\u003c/b\u003e toolbar button inside JupyterLab.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow are solutions graded?\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\nThe judge runs your function against multiple test cases using \u003ccode\u003etorch.allclose\u003c/code\u003e for numerical correctness, verifies gradients flow properly via autograd, and checks edge cases specific to each operation.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWho is this for?\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\nAnyone preparing for ML/AI engineering interviews at top tech companies, or anyone who wants to deeply understand how PyTorch operations work under the hood.\n\u003c/details\u003e\n\n---\n\n## 🤝 Contributors\n\nThanks to everyone who has contributed to TorchCode.\n\n\u003c!-- readme: contributors -start --\u003e\n\u003ctable\u003e\n\t\u003ctbody\u003e\n\t\t\u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/duoan\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/2378740?v=4\" width=\"100;\" alt=\"duoan\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eduoan\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/Ando233\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/74404658?v=4\" width=\"100;\" alt=\"Ando233\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eAndo233\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003ca href=\"https://github.com/ThierryHJ\"\u003e\n                    \u003cimg src=\"https://avatars.githubusercontent.com/u/51846529?v=4\" width=\"100;\" alt=\"ThierryHJ\"/\u003e\n                    \u003cbr /\u003e\n                    \u003csub\u003e\u003cb\u003eThierryHJ\u003c/b\u003e\u003c/sub\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n\t\t\u003c/tr\u003e\n\t\u003ctbody\u003e\n\u003c/table\u003e\n\u003c!-- readme: contributors -end --\u003e\n\nAuto-generated from the [GitHub contributors graph](https://github.com/duoan/TorchCode/graphs/contributors) with avatars and GitHub usernames.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Built for engineers who want to deeply understand what they build.**\n\nIf this helped your interview prep, consider giving it a ⭐\n\n---\n\n### ☕ Buy Me a Coffee\n\n\u003ca href=\"https://buymeacoffee.com/duoan\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\u003c/a\u003e\n\n\u003cimg src=\"./bmc_qr.png\" alt=\"BMC QR Code\" width=\"150\" height=\"150\"\u003e\n\n*Scan to support*\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fduoan%2FTorchCode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fduoan%2FTorchCode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fduoan%2FTorchCode/lists"}