{"record":{"id":"b30f9ee0adee55c3","repo":"rohitg00/ai-engineering-from-scratch","slug":"d-model-must-be-even-for-sinusoidal-got-d-model","errorCode":null,"errorMessage":"d_model must be even for sinusoidal, got {d_model}","messagePattern":"d_model must be even for sinusoidal, got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phases/19-capstone-projects/32-token-positional-embeddings/code/main.py","lineNumber":98,"sourceCode":"        positions = torch.arange(seq_len, device=self.embedding.weight.device)\n        return self.embedding(positions)\n\n\nclass SinusoidalPositionalEmbedding(nn.Module):\n    \"\"\"Parameter-free position-to-vector mapping.\n\n    pe[p, 2k]     = sin(p / 10000^(2k/d_model))\n    pe[p, 2k+1]   = cos(p / 10000^(2k/d_model))\n    \"\"\"\n\n    def __init__(self, max_context_length: int, d_model: int, base: float = 10000.0) -> None:\n        super().__init__()\n        if max_context_length < 1:\n            raise ValueError(f\"max_context_length must be >= 1, got {max_context_length}\")\n        if d_model < 1:\n            raise ValueError(f\"d_model must be >= 1, got {d_model}\")\n        if d_model % 2 != 0:\n            raise ValueError(f\"d_model must be even for sinusoidal, got {d_model}\")\n        self.max_context_length = max_context_length\n        self.d_model = d_model\n        self.base = base\n        pe = self._build_table(max_context_length, d_model, base)\n        self.register_buffer(\"pe\", pe, persistent=False)\n\n    @staticmethod\n    def _build_table(max_context_length: int, d_model: int, base: float) -> torch.Tensor:\n        pos = torch.arange(max_context_length, dtype=torch.float32).unsqueeze(1)\n        i = torch.arange(d_model // 2, dtype=torch.float32)\n        denom = base ** (2 * i / d_model)\n        angle = pos / denom\n        pe = torch.zeros(max_context_length, d_model, dtype=torch.float32)\n        pe[:, 0::2] = torch.sin(angle)\n        pe[:, 1::2] = torch.cos(angle)\n        return pe\n\n    def forward(self, seq_len: int) -> torch.Tensor:","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/19-capstone-projects/32-token-positional-embeddings/code/main.py#L80-L116","documentation":"Error \"d_model must be even for sinusoidal, got {d_model}\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at phases/19-capstone-projects/32-token-positional-embeddings/code/main.py:98 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}