python.object-model
=======================
model_attr_mutation
^^^^^^^^^^^^^^^^^^^

.. note::

    Tags: :doc:`python.object-model <python.object-model>`

    Support Level: NOT_SUPPORTED_YET

Original source code:

.. code-block:: python

    # mypy: allow-untyped-defs
    import torch
    from torch._export.db.case import SupportLevel
    
    
    class ModelAttrMutation(torch.nn.Module):
        """
        Attribute mutation is not supported.
        """
    
        def __init__(self) -> None:
            super().__init__()
            self.attr_list = [torch.randn(3, 2), torch.randn(3, 2)]
    
        def recreate_list(self):
            return [torch.zeros(3, 2), torch.zeros(3, 2)]
    
        def forward(self, x):
            self.attr_list = self.recreate_list()
            return x.sum() + self.attr_list[0].sum()
    
    
    example_args = (torch.randn(3, 2),)
    tags = {"python.object-model"}
    support_level = SupportLevel.NOT_SUPPORTED_YET
    model = ModelAttrMutation()
    

    torch.export.export(model, example_args)

Result:

.. code-block::

    AssertionError: Mutating module attribute attr_list during export.


optional_input
^^^^^^^^^^^^^^

.. note::

    Tags: :doc:`python.object-model <python.object-model>`

    Support Level: NOT_SUPPORTED_YET

Original source code:

.. code-block:: python

    # mypy: allow-untyped-defs
    import torch
    from torch._export.db.case import SupportLevel
    
    
    class OptionalInput(torch.nn.Module):
        """
        Tracing through optional input is not supported yet
        """
    
        def forward(self, x, y=torch.randn(2, 3)):
            if y is not None:
                return x + y
            return x
    
    
    example_args = (torch.randn(2, 3),)
    tags = {"python.object-model"}
    support_level = SupportLevel.NOT_SUPPORTED_YET
    model = OptionalInput()
    

    torch.export.export(model, example_args)

Result:

.. code-block::

    Unsupported: Tracing through optional input is not supported yet