morrison-turnansky
86d34a43f5
NamedTuple: Allow side effects for dynamic attributes ( #161645 )
...
I confirmed that the tracing was correct i.e. NamedTupleVariable had the correct dynamic attribute added to it.
The problem was that NamedTupleVariable was always marked as immutable. This does not reflect the behavior of namedtuple.
Subclasses of namedtuple may be mutable, so when a NamedTupleVariable is derived from a subclass that is mutable, I made NamedTupleVariable mutable as well. Then side_effects correctly updates the returned object.
Fixes #161610
Pull Request resolved: https://github.com/pytorch/pytorch/pull/161645
Approved by: https://github.com/anijain2305 , https://github.com/StrongerXi
2025-09-09 19:42:02 +00:00
Tugsbayasgalan Manlaibaatar
047603d35b
New export implementation with flat inp/out ( #162167 )
...
This is my first attempt of building new export API. The main thing it addresses is correctly getting input and output relations. Subsequent diffs willl add functionality for dynamic shapes, nn_module_stack etc.
Differential Revision: [D81793205](https://our.internmc.facebook.com/intern/diff/D81793205 )
Pull Request resolved: https://github.com/pytorch/pytorch/pull/162167
Approved by: https://github.com/zhxchen17 , https://github.com/avikchaudhuri
2025-09-06 20:03:52 +00:00
Animesh Jain
33028597bf
[dynamo] Make the MRO walk more narrow ( #162105 )
...
I dont have a failing test case but just saw an extra guard somewhere.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/162105
Approved by: https://github.com/williamwen42 , https://github.com/StrongerXi , https://github.com/jansel
2025-09-04 17:54:33 +00:00
Animesh Jain
68fa882dad
[dynamo] Correctly track mutation class source for MutableMappingVariable ( #161568 )
...
Fixes https://github.com/pytorch/pytorch/issues/161505
Pull Request resolved: https://github.com/pytorch/pytorch/pull/161568
Approved by: https://github.com/Lucaskabela , https://github.com/malfet
2025-08-27 21:47:17 +00:00
Guilherme Leobas
7c8f049d54
[OrderedDict] Implement OrderedDict.move_to_end(key, last=False) ( #155152 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/155152
Approved by: https://github.com/anijain2305
ghstack dependencies: #160156 , #155072
2025-08-27 15:46:40 +00:00
Guilherme Leobas
e3718c4855
[dict] Implement dict.__ior__ and fix return type in dict.__or__ ( #155072 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/155072
Approved by: https://github.com/anijain2305
ghstack dependencies: #160156
2025-08-27 15:46:40 +00:00
Animesh Jain
3d406429b0
[dynamo][vllm] Support typing.get_type_hints ( #161362 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/161362
Approved by: https://github.com/Skylion007 , https://github.com/StrongerXi , https://github.com/jansel
2025-08-27 09:55:31 +00:00
Ryan Guo
a1a555ed7b
[dynamo] Fix graph break on calling functions decorated with special context manager ( #160703 )
...
As title. This is a follow-up of the previous patch, with the goal of
supporting a new pattern that showed up in ComfyUI:
644b23ac0b/comfy/ops.py (L44)
Effectively, the semantics of calling a function decorated with a
context manager is:
```python
@ctx_manager(args)
def f(x):
...
f(x)
# ----->
with ctx_manager(args):
f.__wrapped__(x)
```
Yes, a fresh context manager instance per invokation, see CPython source code:
https://github.com/python/cpython/blob/3.12/Lib/contextlib.py#L119-L122
So Dynamo already
1. knows how to handle the `with ctx_manager(args)` syntax, and has
special handling for a few torch native context managers, like
`sdpa_kernel` in this patch.
2. can trace through a good chunk (at least the ones that matter in this
case) of contextlib.
This patch just let Dynamo trace a bit more into contextlib, and then
keep the torch-native special cases by moving their handling a bit down
the stack, so that no additional logic is introduced -- it's only
refactored.
This also allows us to get rid of some `_sdpa_kernel_variadic` special
handling, since now we will trace through its code, and it boils down to
`sdpa_kernel` anyways.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/160703
Approved by: https://github.com/guilhermeleobas , https://github.com/mlazos
ghstack dependencies: #160684
2025-08-18 20:33:45 +00:00
Guilherme Leobas
c6333f7dae
Fixes for collections.NamedTuple ( #159367 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159367
Approved by: https://github.com/mlazos
ghstack dependencies: #159365 , #159366 , #159368 , #159483 , #159902 , #159864 , #159865
2025-08-18 17:32:59 +00:00
Guilherme Leobas
f019da2979
Implement list(UserDefinedObject) via force_unpack_var_sequence ( #159864 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159864
Approved by: https://github.com/mlazos
ghstack dependencies: #159365 , #159366 , #159368 , #159483 , #159902
2025-08-16 20:44:40 +00:00
Guilherme Leobas
e5621b4d8b
Fixes for collections.Counter ( #159368 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159368
Approved by: https://github.com/mlazos
ghstack dependencies: #159365 , #159366
2025-08-15 19:08:21 +00:00
Guilherme Leobas
2542e71f3f
Change mutation type of MutableMappingVariable to AttributeMutationNew ( #159366 )
...
Also add MutableMappingVariable to `call_or_` / `call_ior`
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159366
Approved by: https://github.com/zou3519
ghstack dependencies: #159365
2025-08-15 19:08:21 +00:00
Guilherme Leobas
3faee0a631
Update nullcontext to return input args ( #158776 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/158776
Approved by: https://github.com/zou3519
2025-08-14 03:02:44 +00:00
Animesh Jain
8d3d1c8443
[dynamo] fixes to propagate tag safeness ( #159807 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159807
Approved by: https://github.com/jansel
2025-08-12 04:50:13 +00:00
Animesh Jain
303c614f3d
[dynamo] Be consistent with UserMethodVariable source ( #160155 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/160155
Approved by: https://github.com/StrongerXi
2025-08-09 04:16:14 +00:00
PyTorch MergeBot
ba37f589d4
Revert "[dynamo] Be consistent with storing func source for UserMethodVariable ( #159696 )"
...
This reverts commit ee62177c19 .
Reverted https://github.com/pytorch/pytorch/pull/159696 on behalf of https://github.com/anijain2305 due to broke internal tests ([comment](https://github.com/pytorch/pytorch/pull/159696#issuecomment-3161196192 ))
2025-08-06 18:41:05 +00:00
Animesh Jain
ee62177c19
[dynamo] Be consistent with storing func source for UserMethodVariable ( #159696 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159696
Approved by: https://github.com/jansel
ghstack dependencies: #159534
2025-08-04 05:12:44 +00:00
Animesh Jain
64cbaa876c
[dynamo][guards] Make class members go through obj.__class__.__dict__ ( #159534 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159534
Approved by: https://github.com/jansel
2025-08-04 05:12:44 +00:00
PyTorch MergeBot
805a102beb
Revert "[dynamo][guards] Make class members go through obj.__class__.__dict__ ( #159534 )"
...
This reverts commit 1616777cd2 .
Reverted https://github.com/pytorch/pytorch/pull/159534 on behalf of https://github.com/malfet due to Broke some inductor test and lint among other things, see 9c18901bfd/1 ([comment](https://github.com/pytorch/pytorch/pull/159534#issuecomment-3146983186 ))
2025-08-03 04:58:32 +00:00
PyTorch MergeBot
6e8d705a22
Revert "[dynamo] Be consistent with storing func source for UserMethodVariable ( #159696 )"
...
This reverts commit be71000ff5 .
Reverted https://github.com/pytorch/pytorch/pull/159696 on behalf of https://github.com/malfet due to Broke some inductor test and lint among other things, see 9c18901bfd/1 ([comment](https://github.com/pytorch/pytorch/pull/159534#issuecomment-3146983186 ))
2025-08-03 04:58:32 +00:00
Animesh Jain
be71000ff5
[dynamo] Be consistent with storing func source for UserMethodVariable ( #159696 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159696
Approved by: https://github.com/jansel
ghstack dependencies: #159186 , #159534
2025-08-02 21:40:38 +00:00
Animesh Jain
1616777cd2
[dynamo][guards] Make class members go through obj.__class__.__dict__ ( #159534 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159534
Approved by: https://github.com/jansel
ghstack dependencies: #159186
2025-08-02 18:04:35 +00:00
Michael Lazos
20b5f694f8
[Dynamo] Make frozen dataclasses hashable ( #159529 )
...
Fixes https://github.com/pytorch/pytorch/issues/159424
Pull Request resolved: https://github.com/pytorch/pytorch/pull/159529
Approved by: https://github.com/oulgen
ghstack dependencies: #159513
2025-07-31 07:03:01 +00:00
William Wen
6fcb2b4413
[dynamo] unimplemented -> unimplemented_v2 for user_defined.py ( #156652 )
...
For https://github.com/pytorch/pytorch/issues/147913
Pull Request resolved: https://github.com/pytorch/pytorch/pull/156652
Approved by: https://github.com/zou3519
Co-authored-by: Sidharth <ssubbarao8@meta.com>
2025-07-25 15:04:17 +00:00
Guilherme Leobas
de85ee73ae
Update context in unimplemented_v2 when exception bubbles up to the interpreter ( #158924 )
...
Before:
```
.Observed exception
Explanation: Dynamo found no exception handler at the top-level compiled function when encountering an exception. Exception will propagate outside the compiled region.
Hint: Dynamo has detected that tracing the code will result in an error when running in eager. Please double check that your code doesn't contain a similar error when actually running eager/uncompiled.
Hint: It may be possible to write Dynamo tracing rules for this code. Please report an issue to PyTorch if you encounter this graph break often and it is causing performance issues.
Developer debug context:
```
After:
```
Observed exception
Explanation: Dynamo found no exception handler at the top-level compiled function when encountering an exception. Exception will propagate outside the compiled region.
Hint: Dynamo has detected that tracing the code will result in an error when running in eager. Please double check that your code doesn't contain a similar error when actually running eager/uncompiled.
Hint: It may be possible to write Dynamo tracing rules for this code. Please report an issue to PyTorch if you encounter this graph break often and it is causing performance issues.
Developer debug context: raised exception TypeError([ConstantVariable(str: "unhashable type: <class 'torch._dynamo.variables.dicts.SetVariable'>")])
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/158924
Approved by: https://github.com/williamwen42 , https://github.com/zou3519
2025-07-24 20:50:22 +00:00
Michael Lazos
89850bbc07
[Dynamo] Use proper sources for constructing dataclass defaults ( #157993 )
...
Partially fixes https://github.com/pytorch/pytorch/issues/154009
Pull Request resolved: https://github.com/pytorch/pytorch/pull/157993
Approved by: https://github.com/williamwen42 , https://github.com/anijain2305
2025-07-18 21:51:40 +00:00
Guilherme Leobas
bfcababbcb
[OrderedDict] Implement explicit OrderedDict dunder method call ( #154943 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/154943
Approved by: https://github.com/zou3519
ghstack dependencies: #154003 , #154793 , #154794 , #154942
2025-07-10 22:50:39 +00:00
Guilherme Leobas
ba8d19ec02
[dict] Allow Dynamo to trace through explicit dict dunder method call ( #154794 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/154794
Approved by: https://github.com/mlazos
ghstack dependencies: #154003 , #154793
2025-07-10 22:50:39 +00:00
Guilherme Leobas
dfcda613b6
Ensure Dynamo can trace through explicit dunder method call ( #154366 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/154366
Approved by: https://github.com/zou3519
ghstack dependencies: #153150 , #152991 , #154539 , #153553 , #154063 , #154064 , #154065 , #154066 , #154263
2025-07-04 00:46:05 +00:00
Guilherme Leobas
0e7f02fe2e
[Dynamo] [FrozensetSubclass] Add support for user defined frozensets ( #154263 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/154263
Approved by: https://github.com/williamwen42
ghstack dependencies: #153150 , #152991 , #154539 , #153553 , #154063 , #154064 , #154065 , #154066
2025-07-04 00:46:05 +00:00
Guilherme Leobas
22abe6ded4
[Dynamo] [SetSubclass] Add support for user defined sets ( #153553 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/153553
Approved by: https://github.com/williamwen42 , https://github.com/zou3519
ghstack dependencies: #153150 , #152991 , #154539
2025-07-04 00:45:25 +00:00
Guilherme Leobas
f651e28f80
[FrozenSet] Fixes for FrozenSet ( #152991 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/152991
Approved by: https://github.com/zou3519
ghstack dependencies: #153150
2025-07-04 00:45:11 +00:00
Animesh Jain
3684be056d
[dynamo] Fix source for lru_cache method ( #157292 )
...
Fixes - https://github.com/pytorch/pytorch/issues/157273
Pull Request resolved: https://github.com/pytorch/pytorch/pull/157292
Approved by: https://github.com/zou3519 , https://github.com/malfet , https://github.com/jansel
2025-06-30 20:53:57 +00:00
Xuehai Pan
1b2146fc6d
[BE][4/16] fix typos in torch/ (torch/_dynamo/) ( #156314 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/156314
Approved by: https://github.com/jingsh
ghstack dependencies: #156313
2025-06-23 02:57:19 +00:00
PyTorch MergeBot
5b427c92a8
Revert "[BE][4/16] fix typos in torch/ (torch/_dynamo/) ( #156314 )"
...
This reverts commit ead741c5fb .
Reverted https://github.com/pytorch/pytorch/pull/156314 on behalf of https://github.com/atalman due to export/test_torchbind.py::TestCompileTorchbind::test_compile_error_on_input_aliasing_contents_backend_aot_eager [GH job link](https://github.com/pytorch/pytorch/actions/runs/15804799771/job/44548489912 ) [HUD commit link](c95f7fa874 ) ([comment](https://github.com/pytorch/pytorch/pull/156313#issuecomment-2994171213 ))
2025-06-22 12:31:57 +00:00
Xuehai Pan
ead741c5fb
[BE][4/16] fix typos in torch/ (torch/_dynamo/) ( #156314 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/156314
Approved by: https://github.com/jingsh
ghstack dependencies: #156313
2025-06-22 08:43:18 +00:00
Animesh Jain
8b0e0e4f23
[dynamo] Support tracing of functools.lru_cached method ( #156125 )
...
Fixes https://github.com/pytorch/pytorch/issues/155841
Pull Request resolved: https://github.com/pytorch/pytorch/pull/156125
Approved by: https://github.com/williamwen42
2025-06-17 18:11:32 +00:00
rzou
a24afbff3f
Support torch.cuda.*Tensor in Dynamo ( #156107 )
...
Summary:
This PR adds support for torch.cuda.FloatTensor and friends in Dynamo.
These are indeed legacy APIs, but that doesn't stop us from adding
support for them in torch.compile.
I add support for these in the same way that we support torch.Tensor:
these APIs can be safely put into the Dynamo graph.
Fixes #130722
Test Plan:
- new test
Pull Request resolved: https://github.com/pytorch/pytorch/pull/156107
Approved by: https://github.com/williamwen42
2025-06-17 16:31:10 +00:00
William Wen
4e833c2005
[dynamo] support tracing weakref callback ( #155761 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/155761
Approved by: https://github.com/StrongerXi , https://github.com/jansel
2025-06-17 00:54:16 +00:00
Yu, Guangye
69acba2b19
[Dynamo] Add generic and XPU-specific Stream&Event in UserDefineClass ( #155787 )
...
# Motivation
- Add XPU-specific Stream and Event to in graph calss list for Dynamo capture.
- Add generic Stream and Event to i graph class list for Dynamo capture.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/155787
Approved by: https://github.com/jansel , https://github.com/EikanWang
2025-06-15 17:09:57 +00:00
Oguz Ulgen
d1947a8707
Migrate from lru_cache to cache ( #155613 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/155613
Approved by: https://github.com/ezyang
ghstack dependencies: #155612
2025-06-11 19:44:18 +00:00
sandishkumarhn
e9c31fb86d
[torch.compile] handle a custom __delattr__ method correctly ( #150899 )
...
Fixes #150765
- handle a custom __delattr__ method correctly
Test:
```
import torch
class MyObject:
def __init__(self, val):
self.val = val
# Flag to track deletion attempts instead of using print
self.deletion_attempted = False
def __delattr__(self, attr):
if attr == "val":
# Set flag instead of printing
self.deletion_attempted = True
else:
super().__delattr__(attr)
@torch.compile(fullgraph=True, backend="eager")
def test(input_tensor):
instance_a = MyObject(1)
instance_b = MyObject(2)
del instance_a.val
del instance_b.val
exists_a = hasattr(instance_a, 'val')
exists_b = hasattr(instance_b, 'val')
deletion_attempted_a = instance_a.deletion_attempted
deletion_attempted_b = instance_b.deletion_attempted
return input_tensor + 1, exists_a, exists_b, deletion_attempted_a, deletion_attempted_b
# Run the test
result = test(torch.ones(1))
print(f"Result tensor: {result[0]}")
print(f"val attribute still exists on instance_a: {result[1]}")
print(f"val attribute still exists on instance_b: {result[2]}")
print(f"Deletion was attempted on instance_a: {result[3]}")
print(f"Deletion was attempted on instance_b: {result[4]}")
```
output:
```
(base) sany@sandishs-Laptop pytorch % python3 test_delattr_fix.py
Result tensor: tensor([2.])
val attribute still exists on instance_a: True
val attribute still exists on instance_b: True
Deletion was attempted on instance_a: True
Deletion was attempted on instance_b: True
```
```
(pytorch-dev) sany@sandishs-Laptop pytorch % python3 -m pytest test/dynamo/test_repros.py::ReproTests::test_delattr_return -v
========================================================= test session starts =========================================================
platform darwin -- Python 3.12.5, pytest-8.3.5, pluggy-1.5.0 -- /Library/Frameworks/Python.framework/Versions/3.12/bin/python3
cachedir: .pytest_cache
rootdir: /Users/sany/git/pytorch
configfile: pytest.ini
plugins: typeguard-4.3.0
collected 1 item
Running 1 items in this shard
test/dynamo/test_repros.py::ReproTests::test_delattr_return PASSED [0.0659s] [100%]
========================================================== 1 passed in 1.71s ==========================================================
(pytorch-dev) sany@sandishs-Laptop pytorch %
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/150899
Approved by: https://github.com/jansel , https://github.com/StrongerXi
2025-06-04 17:27:20 +00:00
Ryan Guo
7183f52675
[dynamo] Support namedtuple subclass ( #153982 )
...
Fixes #133762 . This involves
1. support tuple subclass constructed inside compile region.
2. handle the "fake" global scope associated with NamedTuple-generated
`__new__`.
3. handle `namedtuple._tuplegetter` more faithfully.
Differential Revision: [D75488091](https://our.internmc.facebook.com/intern/diff/D75488091 )
Pull Request resolved: https://github.com/pytorch/pytorch/pull/153982
Approved by: https://github.com/jansel
ghstack dependencies: #154176
2025-05-30 16:14:37 +00:00
Ryan Guo
8002d22ce3
[dynamo] Trace into descriptor with __set__ ( #154176 )
...
As title, this patch basically implements
https://github.com/python/cpython/blob/3.11/Objects/object.c#L1371-L1452 ,
and make the `__get__` handling more robust.
I ran into this while fixing #133762 .
Differential Revision: [D75488090](https://our.internmc.facebook.com/intern/diff/D75488090 )
Pull Request resolved: https://github.com/pytorch/pytorch/pull/154176
Approved by: https://github.com/jansel
2025-05-30 16:14:37 +00:00
Ryan Guo
4c6f0fe22f
[dynamo] Properly handle torch.script.jit under @staticmethod ( #153984 )
...
Fixes #153607 .
Pull Request resolved: https://github.com/pytorch/pytorch/pull/153984
Approved by: https://github.com/williamwen42
2025-05-21 19:45:06 +00:00
angelayi
3fe42d4d5d
[export] Dynamo symint support ( #152677 )
...
Basically adds native _IntWrapper support to dynamo. Here's my process of trying to make symint input support work on dynamo, and how I ended up with this approach [(doc)](https://docs.google.com/document/d/1GvNRQd8BnxlMay_hrEVgEta6VUeUW_hcFeRuB7q1nDY/edit?tab=t.0 ).
What I did was, before passing inputs to dynamo.export, I first wrap them with a class, `_IntWrapper`. When processing dynamic shapes, I will then add the corresponding dynamic shape specification to the `dynamism` field stored on the `_IntWrapper`. If there is no dynamism specified, then this will get unwrapped back to an integer. When dynamo tracing, when we encounter an `_IntWrapper`, we will convert this to a symint if the dynamism was specified as `Dim.DYNAMIC/AUTO`. Dynamo will then trace a graph that contains symint inputs, which will get passed to AOTAutograd and so on.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/152677
Approved by: https://github.com/pianpwk
2025-05-16 07:51:50 +00:00
Guilherme Leobas
a4459cd4e3
Remove property from python_type function ( #152900 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/152900
Approved by: https://github.com/amjames , https://github.com/anijain2305
ghstack dependencies: #153070
2025-05-13 16:26:25 +00:00
Ryan Guo
0904a182c2
[dynamo] Relax guard introduced when tracing __call__ on user defined object ( #152395 )
...
This relaxes the guard introduced in #100444 (which aggressively guard
on the object id, despite Dynamo is just tracing its `__call__` method.
This allows users to bypass the high compilation time issue in #150706
by compiling transformer blocks only. Without this patch, we'd get lots
of unnecessary recompilation, as the block has difference attention
processor instances.
Compiling blocks only _significantly_ speeds up compilation process
(from ~310s to ~32s), and even speeds up e2e performance for some reason
(7.83s to 7.67s).
Pull Request resolved: https://github.com/pytorch/pytorch/pull/152395
Approved by: https://github.com/anijain2305
ghstack dependencies: #152369
2025-04-30 17:34:21 +00:00
Lucas Kabela
03970dfd4c
Add functionality for installing free variables ( #151134 )
...
Pull Request resolved: https://github.com/pytorch/pytorch/pull/151134
Approved by: https://github.com/anijain2305
ghstack dependencies: #152036
2025-04-24 17:57:54 +00:00
Ryan Guo
6a1499d209
[dynamo] handle tensor subclass with non-classmethod __torch_function__ ( #151061 )
...
As title, this patch fixes bugs in
1. emulating `has_torch_function`
2. emulating calling `__torch_function__`
3. building a callable VT for non-classmethod `__torch_function__`
Fixes #120799 , #150265 , #150848 .
Pull Request resolved: https://github.com/pytorch/pytorch/pull/151061
Approved by: https://github.com/anijain2305 , https://github.com/mlazos
ghstack dependencies: #151060
2025-04-15 03:55:34 +00:00