[dynamo][easy] forbid_in_graph check to use getattr_static (#124445)

Pull Request resolved: https://github.com/pytorch/pytorch/pull/124445
Approved by: https://github.com/yanboliang, https://github.com/jansel
diff --git a/test/dynamo_expected_failures/TestFakeSparsity.test_jit_trace b/test/dynamo_expected_failures/TestFakeSparsity.test_jit_trace
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestFakeSparsity.test_jit_trace
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_batch_norm_2d_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_batch_norm_2d_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_batch_norm_2d_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_batch_norm_3d_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_batch_norm_3d_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_batch_norm_3d_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_conv1d_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_conv1d_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_conv1d_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_conv2d_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_conv2d_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_conv2d_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_conv3d_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_conv3d_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_conv3d_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_linear_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_linear_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_linear_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_linear_lowp_cpu_float16 b/test/dynamo_expected_failures/TestMkldnnCPU.test_linear_lowp_cpu_float16
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_linear_lowp_cpu_float16
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_prelu_bf16_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_prelu_bf16_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_prelu_bf16_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_prelu_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_prelu_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_prelu_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_reshape_blocked_format_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_reshape_blocked_format_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_reshape_blocked_format_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_resnet18_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_resnet18_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_resnet18_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestMkldnnCPU.test_resnext50_32x4d_cpu b/test/dynamo_expected_failures/TestMkldnnCPU.test_resnext50_32x4d_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestMkldnnCPU.test_resnext50_32x4d_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestNN.test_ParameterDict_replication b/test/dynamo_expected_failures/TestNN.test_ParameterDict_replication
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestNN.test_ParameterDict_replication
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestNN.test_ParameterList_replication b/test/dynamo_expected_failures/TestNN.test_ParameterList_replication
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestNN.test_ParameterList_replication
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestNNDeviceTypeCPU.test_triplet_margin_with_distance_loss_cpu b/test/dynamo_expected_failures/TestNNDeviceTypeCPU.test_triplet_margin_with_distance_loss_cpu
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestNNDeviceTypeCPU.test_triplet_margin_with_distance_loss_cpu
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestNNParametrization.test_deepcopy_after_parametrization_swap_False b/test/dynamo_expected_failures/TestNNParametrization.test_deepcopy_after_parametrization_swap_False
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestNNParametrization.test_deepcopy_after_parametrization_swap_False
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestScript.test_nn_GRU b/test/dynamo_expected_failures/TestScript.test_nn_GRU
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestScript.test_nn_GRU
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestScript.test_nn_LSTM_with_layers b/test/dynamo_expected_failures/TestScript.test_nn_LSTM_with_layers
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestScript.test_nn_LSTM_with_layers
+++ /dev/null
diff --git a/test/dynamo_expected_failures/TestScript.test_pack_unpack_state b/test/dynamo_expected_failures/TestScript.test_pack_unpack_state
deleted file mode 100644
index e69de29..0000000
--- a/test/dynamo_expected_failures/TestScript.test_pack_unpack_state
+++ /dev/null
diff --git a/torch/_dynamo/trace_rules.py b/torch/_dynamo/trace_rules.py
index daeb862..72a880a 100644
--- a/torch/_dynamo/trace_rules.py
+++ b/torch/_dynamo/trace_rules.py
@@ -3064,7 +3064,7 @@
 
 def is_forbidden(obj) -> bool:
     _maybe_init_lazy_module(obj)
-    return getattr(obj, "_dynamo_forbidden", False)
+    return inspect.getattr_static(obj, "_dynamo_forbidden", False)
 
 
 def is_builtin_callable(obj) -> bool:
diff --git a/torch/_dynamo/variables/nn_module.py b/torch/_dynamo/variables/nn_module.py
index 32ef830..ffd5917 100644
--- a/torch/_dynamo/variables/nn_module.py
+++ b/torch/_dynamo/variables/nn_module.py
@@ -791,7 +791,10 @@
                     kwargs,
                 )
 
-            if id(method.__code__) in self._nn_module_method_ids():
+            if (
+                hasattr(method, "__code__")
+                and id(method.__code__) in self._nn_module_method_ids()
+            ):
                 unimplemented(f"UnspecializedNNModuleVariable missing {name}")
 
             # "_parameters" in self.value.__dict__ checks that module is initialized