def forward(self, batch: torch.Tensor) -> list[torch.Tensor]:
        """Forward pass through the decoder ResNet.

        Progressively reconstructs features through multiple decoder layers,
        returning features at different scales.

        Args:
            batch (torch.Tensor): Input tensor of shape ``(B, C, H, W)`` where:
                - ``B`` is batch size
                - ``C`` is number of input channels (512 * block.expansion)
                - ``H`` and ``W`` are spatial dimensions

        Returns:
            list[torch.Tensor]: List of feature tensors at different scales:
                - ``feature_c``: ``(B, 64, H*8, W*8)``
                - ``feature_b``: ``(B, 128, H*4, W*4)``
                - ``feature_a``: ``(B, 256, H*2, W*2)``

        Example:
            >>> model = ResNet(DecoderBasicBlock, [2, 2, 2])
            >>> x = torch.randn(1, 512, 8, 8)
            >>> features = model(x)
            >>> [f.shape for f in features]
            [(1, 64, 64, 64), (1, 128, 32, 32), (1, 256, 16, 16)]
        """
        feature_a = self.layer1(batch)  # 512*8*8->256*16*16
        feature_b = self.layer2(feature_a)  # 256*16*16->128*32*32
        feature_c = self.layer3(feature_b)  # 128*32*32->64*64*64

        return [feature_c, feature_b, feature_a]
Forward pass through the decoder ResNet.

        Progressively reconstructs features through multiple decoder layers,
        returning features at different scales.

        Args:
            batch (torch.Tensor): Input tensor of shape ``(B, C, H, W)`` where:
                - ``B`` is batch size
                - ``C`` is number of input channels (512 * block.expansion)
                - ``H`` and ``W`` are spatial dimensions

        Returns:
            list[torch.Tensor]: List of feature tensors at different scales:
                - ``feature_c``: ``(B, 64, H*8, W*8)``
                - ``feature_b``: ``(B, 128, H*4, W*4)``
                - ``feature_a``: ``(B, 256, H*2, W*2)``

        Example:
            >>> model = ResNet(DecoderBasicBlock, [2, 2, 2])
            >>> x = torch.randn(1, 512, 8, 8)
            >>> features = model(x)
            >>> [f.shape for f in features]
            [(1, 64, 64, 64), (1, 128, 32, 32), (1, 256, 16, 16)]
        
src/anomalib/models/image/reverse_distillation/components/de_resnet.py