Ë
    Z^(hµ”  ã                  ó`  — d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' dd	l(m)Z) erd d
l*m+Z+  e"d«      Z, e"d«      Z- e"d«      Z. e"d«      Z/ e"d«      Z0 e"d«      Z1 e"d«      Z2 e"d«      Z3 e"d«      Z4 e"d«      Z5 e"d«      Z6 e"d«      Z7 e"d«      Z8 e"d«      Z9 e"d«      Z: e"d«      Z; e"d«      Z< e"d«      Z= e"d«      Z> e"d«      Z?dZ@d ZAd!ZBd"ZCd#ZDd$ZEd%ZFd&ZGd'ZHd(ZId)ZJd*ZKd+ZLd,ZM e ee«      «      e>eGf e ee«      «      e>eHf ee«      e9eIf e ee«      «      e>eIf ee«      e9eJf ee«      e9eLf e ee«      «      e>eLfiZNe)ZO	 	 	 	 d2d-„ZP	 	 	 	 	 	 	 	 d3d.„ZQ	 	 	 	 	 	 	 	 d3d/„ZRd4d0„ZSy1)5é    )Úannotations)ÚTYPE_CHECKING)Ú
DerivativeÚDifferentiabilityInfoÚSavedAttributeÚuses_retain_variablesÚuses_single_grad)ÚArrayRefCTypeÚBaseCppTypeÚ	BaseCTypeÚBindingÚboolTÚdoubleTÚintArrayRefTÚiTensorListRefTÚ	ListCTypeÚlongTÚMutRefCTypeÚOptionalCTypeÚoptionalIntArrayRefTÚoptionalSymIntArrayRefTÚscalarTÚstringTÚsymIntArrayRefTÚSymIntTÚTENSOR_LIST_LIKE_CTYPESÚtensorListTÚtensorTÚVectorCType)ÚCodeTemplate)ÚArgumentÚFunctionSchema)ÚFileManageré   )ÚVIEW_FUNCTIONS)ÚSequenceae  #ifdef _WIN32
struct ${op} : public ${superclass} {
  TORCH_API ${op}() = default;
#else
struct TORCH_API ${op} : public ${superclass} {
#endif
  using ${superclass}::${superclass};
  variable_list apply(variable_list&& grads) override;
  std::string name() const override { return "${op}"; }
  void release_variables() override {
    ${thread_lock}
    ${release_variables}
  }
  ${will_release_variables}
  void compiled_args(CompiledNodeArgs& args) const override;
  variable_list apply_with_saved(const variable_list& inputs, SwapSavedVariables& saved) override;
  ${saved_variables}
  ${saved_list_sizes}
};
zebool retain_variables = true;
void will_release_variables() override {
  retain_variables = false;
}
a^  static variable_list ${op}_apply_functional(
  variable_list&& grads,
  std::array<bool,${num_inputs}> needs_input_grad${,apply_functional_args_signature})
{
  IndexRangeGenerator gen;
  ${compute_index_ranges}
  variable_list grad_inputs(gen.size());
  ${body}
  return grad_inputs;
}
inline variable_list ${op}_apply_functional_ivalue(const variable_list& grads, const ivalue_list& args)
{
#ifdef C10_MOBILE
  TORCH_INTERNAL_ASSERT(false, "compiled autograd doesn't work on mobile");
#else
  auto packed_args = PackedArgs(args);
  auto needs_input_grad = packed_args.unpack<std::array<bool, ${num_inputs}>>();
  ${unpack_ivalues}
  return ${op}_apply_functional(variable_list(grads), needs_input_grad${,apply_functional_args});
#endif
}

variable_list ${op}::apply(variable_list&& grads) {
  ${thread_lock}
  ${asserts}
  ${unpacks}
  ${compute_needs_input_grad}
  return ${op}_apply_functional(std::move(grads), needs_input_grad${,apply_functional_args});
}

void ${op}::compiled_args(CompiledNodeArgs& args) const {
    ${compiled_args}
}
variable_list ${op}::apply_with_saved(const variable_list& grads, SwapSavedVariables& saved) {
#ifdef C10_MOBILE
  TORCH_INTERNAL_ASSERT(false, "compiled autograd doesn't work on mobile");
#else
  ${apply_with_saved_before}

  static bool called = false;
  if (!called) {
    called = true;
    ${compute_schema}
    const auto& pyinterface = torch::dynamo::autograd::getPyCompilerInterface();
    pyinterface->bind_function(saved.get_py_compiler(), name(), ${op}_apply_functional_ivalue, schema);
  }

  variable_list output_result;

  PackedArgs packed_args;
  ${asserts}
  ${unpacks}
  ${compute_needs_input_grad}
  packed_args.pack(needs_input_grad);
  ${get_packed_args}

  output_result = compiled_autograd_apply_functional(packed_args, next_edges(), saved, grads, name());

  ${apply_with_saved_after}
  return output_result;
#endif
}

zC  auto grad_input_mask = std::array<bool, ${n}>{
    ${masks}
  };
znIndexRangeGenerator gen;
${compute_index_ranges}
auto needs_input_grad = std::array<bool, ${n}>{
  ${masks}
};z…if (needs_input_grad[/*${name}*/${idx}]) {
  auto grad_result = ${derivative};
  copy_range(grad_inputs, ${name}_ix, grad_result);
}
ax  if (needs_input_grad[/*${name}*/${idx}]) {  // ${name}
  std::vector<Tensor> grad_result;
  grad_result.reserve(grads.size());
  for (const auto & i : c10::irange(grads.size())) {
    if (grads[i].defined()) {
      grad_result.emplace_back(${derivative});
    } else {
      grad_result.emplace_back(Tensor());
    }
  }
  copy_range(grad_inputs, ${name}_ix, grad_result);
}
zw  if (needs_input_grad[/*${name}*/${idx}]) {
    copy_range(grad_inputs, ${name}_ix, std::get<${i}>(grad_result));
  }
zgif (${needs_input_grad}) {
  ${grad_input_mask}
  auto grad_result = ${derivative};
  ${copy_ranges}
}
z`static PyTypeObject ${op}Class;
addClass<${op}>(module, ${op}Class, "${op}", ${op}_properties);
z©${all_getter_definitions}

static struct PyGetSetDef ${op}_properties[] = {
  THP_FUNCTION_DEFAULT_PROPERTIES,
  ${all_getsetdef_structs}
  {nullptr} /* sentinel */
};

zU{(char*)"_saved_${name}", (getter)THP${op}_${name}_getter, nullptr, nullptr, nullptr}z]{(char*)"_raw_saved_${name}", (getter)THP${op}_${name}_raw_getter, nullptr, nullptr, nullptr}z¾PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  auto prop = static_cast<${op}*>(self->cdata.get())->${name};
  ${body}
  END_HANDLE_TH_ERRORS
}
zÆPyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  const auto& prop = static_cast<${op}*>(self->cdata.get())->${name}_;
  ${body}
  END_HANDLE_TH_ERRORS
}
zÊPyObject* THP${op}_${name}_raw_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  const auto& prop = static_cast<${op}*>(self->cdata.get())->${name}_;
  ${body}
  END_HANDLE_TH_ERRORS
}
aW  PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  const auto *node = static_cast<${op}*>(self->cdata.get());
  const auto& prop = node->${name}_;
  if (node->${name}_released_) {
    PyErr_SetString(PyExc_RuntimeError, ERR_BACKWARD_TWICE);
    return nullptr;
  }
  ${body}
  END_HANDLE_TH_ERRORS
}
a[  PyObject* THP${op}_${name}_raw_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  const auto *node = static_cast<${op}*>(self->cdata.get());
  const auto& prop = node->${name}_;
  if (node->${name}_released_) {
    PyErr_SetString(PyExc_RuntimeError, ERR_BACKWARD_TWICE);
    return nullptr;
  }
  ${body}
  END_HANDLE_TH_ERRORS
}
a  PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  auto opt_prop = static_cast<${op}*>(self->cdata.get())->${name};
  if (!opt_prop.has_value()) {
    Py_RETURN_NONE;
  }
  auto prop = opt_prop.value();
  ${body}
  END_HANDLE_TH_ERRORS
}
a#  PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  auto opt_prop = static_cast<${op}*>(self->cdata.get())->${name};
  if (!opt_prop.list.has_value()) {
    Py_RETURN_NONE;
  }
  auto prop = opt_prop.list.value();
  ${body}
  END_HANDLE_TH_ERRORS
}
z3return THPVariable_Wrap(prop.unpack(self->cdata));
zspybind11::object obj = pybind11::cast(prop, pybind11::return_value_policy::reference);
return obj.release().ptr();
zÅPyObject* tup = PyTuple_New((Py_ssize_t) prop.size());
for (auto i: c10::irange(prop.size())) {
  PyTuple_SetItem(tup, (Py_ssize_t) i, THPVariable_Wrap(prop[i].unpack(self->cdata)));
}
return tup;
a  PyObject* tup = PyTuple_New((Py_ssize_t) prop.size());
for (auto i : c10::irange(prop.size())) {
  pybind11::object obj = pybind11::cast(prop[i], pybind11::return_value_policy::reference);
  PyTuple_SetItem(tup, (Py_ssize_t) i, obj.release().ptr());
}
return tup;
zÄPyObject* tup = PyTuple_New((Py_ssize_t) prop.size());
for (auto i : c10::irange(prop.size())) {
  PyTuple_SetItem(tup, (Py_ssize_t) i, PyLong_FromUnsignedLong((uint64_t) prop[i]));
}
return tup;
at  PyObject* tup = PyTuple_New((Py_ssize_t) prop.size());
for (auto i : c10::irange(prop.size())) {
    auto si = prop[i];
    if (auto m = si.maybe_as_int()) {
      PyTuple_SetItem(tup, (Py_ssize_t) i, PyLong_FromUnsignedLong(*m));
    } else {
      auto py_symint = py::cast(si).release().ptr();
      PyTuple_SetItem(tup, (Py_ssize_t) i, py_symint);
    }
}
return tup;
z½PyObject* tup = PyTuple_New((Py_ssize_t) prop.size());
for (auto i : c10::irange(prop.size())) {
  PyTuple_SetItem(tup, (Py_ssize_t) i, PyFloat_FromDouble((double) prop[i]));
}
return tup;
z0return PyLong_FromUnsignedLong((int64_t) prop);
z~if (auto m = prop.maybe_as_int()) {
  return PyLong_FromUnsignedLong(*m);
} else {
  return py::cast(prop).release().ptr();
}
z*return PyFloat_FromDouble((double) prop);
z<if (prop) {
  Py_RETURN_TRUE;
} else {
  Py_RETURN_FALSE;
}
z>return PyUnicode_FromStringAndSize(prop.data(), prop.size());
a  if (prop.isComplex()) {
  auto cprop = prop.to<c10::complex<double>>();
  return PyComplex_FromDoubles(cprop.real(), cprop.imag());
} else if (prop.isFloatingPoint()) {
  return PyFloat_FromDouble(prop.to<double>());
} else if (prop.isIntegral(/*includeBool=*/false)) {
  return PyLong_FromLong(prop.to<int64_t>());
} else if (prop.isBoolean()) {
  if (prop.to<bool>()) {
    Py_RETURN_TRUE;
  } else {
    Py_RETURN_FALSE;
  }
} else {
  PyErr_SetString(PyExc_RuntimeError, "Unknown scalar type");
  return nullptr;
}
aŽ  PyObject* tup = PyTuple_New((Py_ssize_t) prop.size());
for (auto i: c10::irange(prop.size())) {
  if (prop[i].isComplex()) {
    auto cprop = prop[i].to<c10::complex<double>>();
    PyTuple_SetItem(tup, (Py_ssize_t) i, PyComplex_FromDoubles(cprop.real(), cprop.imag()));
  } else if (prop[i].isFloatingPoint()) {
    auto double_prop = prop[i].to<double>();
    PyTuple_SetItem(tup, (Py_ssize_t) i, PyFloat_FromDouble(double_prop));
  } else if (prop[i].isIntegral(/*includeBool=*/false)) {
    auto long_prop = prop[i].to<int64_t>();
    PyTuple_SetItem(tup, (Py_ssize_t) i, PyLong_FromLong(long_prop));
  } else if (prop[i].isBoolean()) {
    if (prop[i].to<bool>()) {
      PyTuple_SetItem(tup, (Py_ssize_t) i, Py_True);
    } else {
      PyTuple_SetItem(tup, (Py_ssize_t) i, Py_False);
    }
  } else {
    PyErr_SetString(PyExc_RuntimeError, "Unknown scalar type");
    return nullptr;
  }
}
return tup;
c                ó¢   — | j                  «       D ��cg c]  }|j                  «       D ]  }|‘Œ Œ }}}t        t        d„ |«      «      S c c}}w )Nc                ó   — | j                   S ©N)Úargs_with_derivatives©Úinfos    úo/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torchgen/packaged/autograd/gen_autograd_functions.pyú<lambda>z1get_infos_with_derivatives_list.<locals>.<lambda>  s   €  D×$>Ñ$>€ ó    )ÚvaluesÚlistÚfilter)Údifferentiability_infosÚdiffinfo_dictr,   Údiff_info_lists       r-   Úget_infos_with_derivatives_listr6     sb   € ð
 5×;Ñ;Ó=÷àØ!×(Ñ(Ó*òð ò 	ðØð€Nñ ô ”Ñ>ÀÓOÓPÐPùós   ”Ac           	     ó  ‡‡‡	‡
— t        |«      }|D �cg c]  }t        |t        «      ‘Œ c}Š|D �cg c]  }t        |t        «      ‘Œ c}Šd}t	        | |d¬«      Š	dD ]   }||z   Š
‰	j                  ‰
‰
ˆˆˆ	ˆ
fd„«       Œ" yc c}w c c}w )z£Functions.h and Functions.cpp body

    These contain the auto-generated subclasses of torch::autograd::Node
    for each every differentiable torch function.
    Ú	FunctionsF©Úinstall_dirÚtemplate_dirÚdry_run)z.hz.cppc                 ó@   •— dd‰j                  «       › d�z   ‰z   ‰ ‰dœS )Nú@úgenerated from ú/)Úgenerated_commentÚautograd_function_declarationsÚautograd_function_definitions)Útemplate_dir_for_comments)ÚdeclarationsÚdefinitionsÚfmÚfnames   €€€€r-   r.   z,gen_autograd_functions_lib.<locals>.<lambda>,  s9   ø€ Ø%(Ø# B×$@Ñ$@Ó$BÐ#CÀ1ÐEñ&Fàñ&ð 3?Ø1<ñ€ r/   N)r6   Úprocess_functionÚFUNCTION_DECLARATIONÚFUNCTION_DEFINITIONr#   Úwrite_with_template)Úoutr3   Útemplate_pathÚinfosÚfÚfile_basenameÚsuffixrE   rF   rG   rH   s          @@@@r-   Úgen_autograd_functions_librS     s�   û€ ô ,Ð,CÓD€EØGLÖMÀ!Ô$ QÔ(<Õ=ÒM€LØEJÖKÀÔ# AÔ':Õ;ÒK€Kà€MÜ	 °=È%Ô	P€BØ ò 
ˆØ Ñ&ˆØ
×ÑØØöõ
	
ñ
ùò NùÚKs
   ”B²Bc           
     óÐ   ‡‡— t        | |d¬«      ŠdŠ‰j                  dˆˆfd„«       t        |«      }‰j                  d|d„ dd	d
‰j	                  «       › d�z   id„ ‰ddh¬«       y )NFr9   é   zpython_functions.hc                 óº   •— dd‰j                  «       › d�z   t        ‰«      D � cg c]  } d| › d�‘Œ
 c} t        ‰«      D � cg c]  } d| › d�‘Œ
 c} dœS c c} w c c} w )	Nr>   r?   z/python_functions.hz(void initialize_autogenerated_functions_z(PyObject* module);Ú#initialize_autogenerated_functions_z	(module);)rA   Úshard_forward_declareÚ
shard_call)rD   Úrange)ÚirG   Ú
num_shardss    €€r-   r.   z/gen_autograd_functions_python.<locals>.<lambda>?  s�   ø€ Ø!$Ø × <Ñ <Ó >Ð?Ð?RÐSñ"Tô ˜zÓ*ö&àð ;¸1¸#Ð=PÒQò&ô ˜zÓ*öàð 6°a°S¸	ÒBòñ
€ ùò&ùòs   ¥AÁAzpython_functions.cppc                ó   — | j                   S r)   )Únamer+   s    r-   r.   z/gen_autograd_functions_python.<locals>.<lambda>S  s
   € ˜DŸI™I€ r/   rA   r>   r?   z/python_functions.cppc                óH   — t        | t        «      gt        | t        «      gdœS )N)Úpy_function_initializersÚpy_function_props_and_getters)rI   ÚPY_FUNCTION_DEFINITIONÚPY_FUNCTION_PROPS_AND_GETTERSr+   s    r-   r.   z/gen_autograd_functions_python.<locals>.<lambda>X  s+   € ä  Ô'=Ó>ð)ô ! Ô'DÓEð.ñ	#
€ r/   r`   ra   )Úkey_fnÚbase_envÚenv_callabler\   Úsharded_keys)r#   Úwriter6   Úwrite_shardedrD   )rM   r3   rN   rO   rG   r\   s       @@r-   Úgen_autograd_functions_pythonrj   6  s�   ù€ ô
 
 °=È%Ô	P€BØ€JØ‡H�HØô	
ôô$ ,Ð,CÓD€EØ×ÑØØÙ%à Ø × <Ñ <Ó >Ð?Ð?TÐUñ"Vð
ñ
ð Ø0Ð2QÐRð# õ r/   c                ó¶  ‡ ‡ ‡!‡"‡#‡$‡%‡&‡'‡(‡)‡*‡+— g Š*g Š)g }g Š+g Š$g }g Š&g Š(g Š%g Š#g Š"g Š g Š!i Š't        ‰ j                  «      D ]¨  \  }}|j                  t        v r^|j                  › d�}|j                  d|j                  › d�«       ‰ j                  |j                  › d�«       ‰!j                  d«       nd}|j                  d|j                  › d|› d�«       |‰'|j                  <   Œª d.ˆ ˆ!ˆ"ˆ#ˆ$ˆ%ˆ&ˆ ˆ(ˆ)ˆ*ˆ+fd
„}t        ‰ j                  d„ ¬«      D ]  } ||d¬«       Œ t        ‰ j                  d„ ¬«      D ]  } ||d¬«       Œ t        ‰)«      dkD  rd}	nd}	t        ‰ «      r7‰ j                  d«       ‰!j                  d	«       t        j                  «       }
nd}
g }t        ‰ «      r|j                  d«       n-|j                  ˆ fd„t        ‰ j                  «      D «       «       	 	 	 	 	 	 d/ˆ ˆ'fd„}g }d}‰ j                   D ].  } ||‰ j                  «      \  }}|j                  |«       ||z  }Œ0 ‰'D ]  }|j                  d|› d�«       Œ |r&|j#                  t        ‰ j                   «       d«       ‰ j                  t$        v rd}nd}t        ‰(«      dk7  rdj'                  ‰(«      dz   nd}dj'                  ‰&«      }t(        j                  t        |«      ||¬ «      }t+        ‰!‰ «      D ��cg c]  \  }}|› d!|› �‘Œ }}}dj'                  d"„ ‰ D «       «      }g }t+        ‰!‰ «      D ].  \  }}|j-                  d#«      }|j                  d|› d$|› d%�«       Œ0 d&t        ‰'«      › d'�g}‰!D ]C  }|j-                  d#«      }|j/                  d(«      }|j                  |j1                  «       «       ŒE d)g}|D ]  }|j                  d*|› d+�«       Œ |j                  d,«       |j                  dj'                  ‰+«      ‰ j2                  dj'                  |«      ‰ ||t        ‰'«      dj'                  |«      |‰*‰)|‰$|	|
||||‰%‰#‰"|¬-«      S c c}}w )0NÚ_size_zsize_t z_size_;Úsize_tÚ1úauto z_ix = gen.range(ú);Úboolc           	     óÜ  •— | j                   j                  }| j                   j                  }d}d}|}d}d }|t        t        «      k(  sS|t        t        t        «      «      k(  s8|t        t        t        t        «      «      «      k(  s|t        t        «      k(  rÃ|rÁd}‰j                  d|› d�«       ‰j                  |› d�«       |rdnd}	‰j                  d|› d	|› d
|	› d�«       ‰j                  t        j                  ‰j                  |t        ¬«      «       ‰j                  t        j                  ‰j                  |t        ¬«      «       d}|› d�}d}�n†|t        t        «      k(  s.|t        t         «      k(  s|t#        t        t        «      «      k(  �ra|t#        t        t        «      «      k(  rG‰j$                  j$                  j                  j                  j&                  j)                  d«      r|sJ ‚d}‰j                  d|› d�«       ‰j                  d|› d�«       ‰j                  |› d�«       ‰j                  |› d�«       |rdnd}	‰j                  d|› d|› d|	› d�«       ‰j                  d|› d�«       ‰j                  t*        j                  ‰j                  |t,        ¬«      «       ‰j                  t.        j                  ‰j                  |t0        ¬«      «       d}|› d�}d}�nå|t3        t        t        t        «      «      «      k(  röd}‰j                  d|› d�«       ‰j                  d|› d�«       ‰j                  |› d�«       ‰j                  |› d�«       ‰j                  d|› d|› d�«       ‰j                  d|› d�«       ‰j                  t*        j                  ‰j                  |t,        ¬«      «       ‰j                  t.        j                  ‰j                  |t0        ¬«      «       d}|› d�}d}�nË|t        t4        «      k(  rL‰j                  d|› d�«       ‰j                  t6        j                  ‰j                  |t8        ¬«      «       �nm|t        t:        «      k(  rL‰j                  d |› d�«       ‰j                  t6        j                  ‰j                  |t<        ¬«      «       �n|t        t>        «      k(  rL‰j                  d!|› d�«       ‰j                  t@        j                  ‰j                  |t8        ¬«      «       �n±|t        tB        «      k(  rL‰j                  d"|› d�«       ‰j                  t@        j                  ‰j                  |t<        ¬«      «       �nS|t        t        t4        «      «      k(  rL‰j                  d!|› d�«       ‰j                  t@        j                  ‰j                  |t8        ¬«      «       �nì|t        t        t:        «      «      k(  rL‰j                  d"|› d�«       ‰j                  t@        j                  ‰j                  |t<        ¬«      «       �n…|t        tE        t        tF        «      «      «      k(  rL‰j                  d#|› d�«       ‰j                  t@        j                  ‰j                  |tH        ¬«      «       �n|t        tJ        «      k(  r\‰j                  |jM                  «       › d$|› d%�«       ‰j                  t6        j                  ‰j                  |tN        ¬«      «       �n§|t        tP        «      k(  rL‰j                  d&|› d�«       ‰j                  t6        j                  ‰j                  |tR        ¬«      «       �nI|t        tT        «      k(  rL‰j                  d'|› d�«       ‰j                  t6        j                  ‰j                  |tV        ¬«      «       �në|t        t        tT        «      «      k(  rL‰j                  d(|› d�«       ‰j                  tX        j                  ‰j                  |tV        ¬«      «       �n„|tE        t        t[        d)d*¬+«      ¬,«      ¬-«      k(  r{‰j                  d.|› d�«       d/}‰j                  d|› d�«       ‰j                  |› d0�«       ‰j                  t]        d1«      j                  ‰j                  |t^        ¬«      «       nåd2|jM                  «       ja                  «       vrDd3|jM                  «       ja                  «       vr$d4|jM                  «       vrd5|jM                  «       vsJ |jM                  «       › d6�«       ‚‰j                  |jM                  «       › d$|› d�«       |tb        v r:tb        |   \  }
}‰j                  |
j                  ‰j                  ||¬«      «       nd}|r0‰j                  td        j                  ‰j                  |¬7«      «       |r0‰j                  tf        j                  ‰j                  |¬7«      «       |r‰j                  d8|› d9|rd:nd;› d�«       n‰j                  d8|› d�«       ‰j                  d<|› d�«       ‰j                  d=|› d�«       |€‰d>   ji                  d$«      d?   › d5�}‰j                  tk        |«      «       ‰j                  |«       y )@NTFzSavedVariable z_;z_.reset_data();zshared_from_this()Ú ro   z = z	_.unpack(rp   )Úopr^   ÚbodyÚ_zTensor&Ú_foreachzstd::vector<SavedVariable> zbool z_released_ = false;z
_.clear();z_released_ = true;Únullptrz = unpack_list(z_, zTORCH_CHECK(!z _released_, ERR_BACKWARD_TWICE);zstd::vector<Tensor>&z = unpack_opt_list(z_);z#torch::List<std::optional<Tensor>>&zstd::vector<int64_t> ú;zstd::vector<c10::SymInt> zc10::OptionalArray<int64_t> z c10::OptionalArray<c10::SymInt> zc10::OptionalArray<double> ú z = 0;zc10::SymInt zstd::string zstd::optional<std::string> ÚatÚScalar)Únsr^   )Útype)Úelemzstd::vector<at::Scalar> zstd::vector<at::Scalar>&z	.clear();ar  PyObject* THP${op}_${name}_getter(THPCppFunction *self, void *_unused) {
  HANDLE_TH_ERRORS
  const auto *node = static_cast<${op}*>(self->cdata.get());
  const auto& prop = node->${name};
  if (node->${name}_released_) {
    PyErr_SetString(PyExc_RuntimeError, ERR_BACKWARD_TWICE);
    return nullptr;
  }
  ${body}
  END_HANDLE_TH_ERRORS
}
                            ÚrefÚviewÚ*ú&z. looks like it contains a non-owning reference)rt   r^   zargs.collect(z, ÚtrueÚfalsezsaved.before(zsaved.after(éÿÿÿÿr   )6Únctyper^   r~   r   r   r   r   r   ÚappendÚGETTER_DEFINITION_SAVEDVARÚ
substitutert   ÚGETTER_BODY_SAVEDVARÚGETTER_DEFINITION_RAW_SAVEDVARÚGETTER_BODY_RAW_SAVEDVARr   r   r   ÚfuncÚbaseÚ
startswithÚGETTER_DEFINITION_VEC_SAVEDVARÚGETTER_BODY_VEC_SAVEDVARÚ"GETTER_DEFINITION_RAW_VEC_SAVEDVARÚGETTER_BODY_RAW_VEC_SAVEDVARr   r   ÚGETTER_DEFINITIONÚGETTER_BODY_ARRAYREF_LONGr   ÚGETTER_BODY_ARRAYREF_SYMINTr   ÚGETTER_DEFINITION_OPT_ARRAYREFr   r
   r   ÚGETTER_BODY_ARRAYREF_DOUBLEr   Úcpp_typeÚGETTER_BODY_INT64_Tr   ÚGETTER_BODY_SYMINTr   ÚGETTER_BODY_STRINGÚGETTER_DEFINITION_OPTr   r    ÚGETTER_BODY_VEC_SCALARÚlowerÚMISC_GETTER_DEFSÚPY_GETSETDEF_STRUCTÚPY_RAW_GETSETDEF_STRUCTÚsplitÚstr)ÚvarÚ	is_outputr^   r~   Úshould_append_getsetdefÚshould_append_raw_getsetdefÚ
visit_nameÚuses_cpp_saved_variable_clsÚunpacked_ref_typeÚptrÚ
getter_defru   Úapply_functional_argsÚapply_functional_args_ref_typesÚapply_with_saved_afterÚapply_with_saved_beforeÚassertsÚcompiled_argsÚgetter_definitionsr,   Úpy_getsetdef_structsÚrelease_variablesÚsaved_variablesÚunpacks               €€€€€€€€€€€€r-   Úsave_varz"process_function.<locals>.save_var‡  sO
  ø€ Ø�z‰z�‰ˆØ�z‰z�‰ˆØ"&ÐØ&+Ð#Øˆ
Ø&+Ð#Ø Ðð ”IœgÓ&Ò&Ø”}¤Y¬wÓ%7Ó8Ò8Ø”{¤=´¼7Ó1CÓ#DÓEÒEØœ	¤'Ó*Ò*©yà*.Ð'Ø×"Ñ" ^°D°6¸Ð#<Ô=Ø×$Ñ$¨ v¨_Ð%=Ô>Ù*3Ñ&¸ˆCØ�M‰M˜E $  s¨4¨&°	¸#¸¸bÐAÔBØ×%Ñ%Ü*×5Ñ5Ø—w‘w TÔ0Dð 6ó ôð
 ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Hð :ó ôð
 +/Ð'Ø ˜6 ˜ˆJØ )Òà”IœkÓ*Ò*Ø”y¤Ó1Ò1Ø”{¤9¬WÓ#5Ó6Ó6ð ”{¤9¬WÓ#5Ó6Ò6à—I‘I—N‘N×'Ñ'×,Ñ,×1Ñ1×<Ñ<¸ZÔHÉYðØVà*.Ð'Ø×"Ñ"Ð%@ÀÀÀbÐ#IÔJØ×"Ñ" U¨4¨&Ð0CÐ#DÔEð ×$Ñ$¨ v¨ZÐ%8Ô9Ø×$Ñ$¨ vÐ-?Ð%@ÔAÙ*3Ñ&¸ˆCØ�M‰M˜E $  °t°f¸CÀ¸uÀBÐGÔHØ�N‰N˜]¨4¨&Ð0PÐQÔRØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Hð :ó ôð
 ×%Ñ%Ü2×=Ñ=Ø—w‘w TÔ0Lð >ó ôð
 +/Ð'Ø ˜6 ˜ˆJØ 6ÒØ”Yœ}¬Y´wÓ-?Ó@ÓAÒAØ*.Ð'Ø×"Ñ"Ð%@ÀÀÀbÐ#IÔJØ×"Ñ" U¨4¨&Ð0CÐ#DÔEð ×$Ñ$¨ v¨ZÐ%8Ô9Ø×$Ñ$¨ vÐ-?Ð%@ÔAØ�M‰M˜E $ Ð':¸4¸&ÀÐDÔEØ�N‰N˜]¨4¨&Ð0PÐQÔRØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Hð :ó ôð
 ×%Ñ%Ü2×=Ñ=Ø—w‘w TÔ0Lð >ó ôð
 +/Ð'Ø ˜6 ˜ˆJØ EÒØ”Yœ|Ó,Ò,Ø×"Ñ"Ð%:¸4¸&ÀÐ#BÔCØ×%Ñ%Ü!×,Ñ,Ø—w‘w TÔ0Ið -ó öð
 ”YœÓ/Ò/Ø×"Ñ"Ð%>¸t¸fÀAÐ#FÔGØ×%Ñ%Ü!×,Ñ,Ø—w‘w TÔ0Kð -ó öð
 ”YÔ3Ó4Ò4Ø×"Ñ"Ð%AÀ$ÀÀqÐ#IÔJØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Ið :ó öð
 ”YÔ6Ó7Ò7Ø×"Ñ"Ð%EÀdÀVÈ1Ð#MÔNØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Kð :ó öð
 ”]¤9¬\Ó#:Ó;Ò;Ø×"Ñ"Ð%AÀ$ÀÀqÐ#IÔJØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Ið :ó öð
 ”]¤9¬_Ó#=Ó>Ò>Ø×"Ñ"Ð%EÀdÀVÈ1Ð#MÔNØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Kð :ó öð
 ”]¤=´¼7Ó1CÓ#DÓEÒEØ×"Ñ"Ð%@ÀÀÀaÐ#HÔIØ×%Ñ%Ü.×9Ñ9Ø—w‘w TÔ0Kð :ó öð
 ”YœuÓ%Ò%Ø×"Ñ" d§m¡m£oÐ%6°a¸°v¸UÐ#CÔDØ×%Ñ%Ü!×,Ñ,Ø—w‘w TÔ0Cð -ó öð
 ”YœwÓ'Ò'Ø×"Ñ" \°$°°qÐ#9Ô:Ø×%Ñ%Ü!×,Ñ,Ø—w‘w TÔ0Bð -ó öð
 ”YœwÓ'Ò'Ø×"Ñ" \°$°°qÐ#9Ô:Ø×%Ñ%Ü!×,Ñ,Ø—w‘w TÔ0Bð -ó öð
 ”]¤9¬WÓ#5Ó6Ò6Ø×"Ñ"Ð%@ÀÀÀaÐ#HÔIØ×%Ñ%Ü%×0Ñ0Ø—w‘w TÔ0Bð 1ó öð
 ”]Ü¤¨t¸(Ô CÔDô
ò 
ð ×"Ñ"Ð%=¸d¸VÀ1Ð#EÔFØ :ÐØ×"Ñ" U¨4¨&Ð0CÐ#DÔEð ×$Ñ$¨ v¨YÐ%7Ô8ð ×%Ñ%Üð ó÷ ‘*Ø—w‘wØÜ/ð ó õð6 ˜TŸ]™]›_×2Ñ2Ó4Ñ4Ø $§-¡-£/×"7Ñ"7Ó"9Ñ9Ø˜tŸ}™}›Ñ.Ø˜tŸ}™}›Ñ.ð	Rð
 —-‘-“/Ð"Ð"PÐQóRð/ð
 ×"Ñ" d§m¡m£oÐ%6°a¸°v¸QÐ#?Ô@àÔ'Ñ'Ü#3°DÑ#9Ñ �
˜DØ"×)Ñ)Ø×)Ñ)¨T¯W©W¸4ÀdÐ)ÓKõð +0Ð'á"Ø ×'Ñ'Ü#×.Ñ.°$·'±'ÀÐ.ÓEôñ 'Ø ×'Ñ'Ü'×2Ñ2°d·g±gÀDÐ2ÓIôñ 'Ø× Ñ Ø 
˜|¨2¹	©fÀwÐ-OÈrÐRõð × Ñ  =°°¸BÐ!?Ô@Ø×&Ñ&¨°z°lÀ"Ð'EÔFØ×%Ñ%¨°Z°LÀÐ&CÔDàÐ$Ø#2°2Ñ#6×#<Ñ#<¸SÓ#AÀ!Ñ#DÐ"EÀQÐ GÐØ×$Ñ$¤S¨£YÔ/Ø'×.Ñ.Ð/@ÕAr/   c                ó@   — t        | j                  j                  «      S r)   ©r¥   r‡   r^   ©Úsas    r-   r.   z"process_function.<locals>.<lambda>„  s   € ¼CÀÇ	Á	ÇÁÓ<O€ r/   )ÚkeyF)r§   c                ó@   — t        | j                  j                  «      S r)   r¼   r½   s    r-   r.   z"process_function.<locals>.<lambda>†  s   € ¼SÀÇÁÇÁÓ=P€ r/   Tr   z)std::lock_guard<std::mutex> lock(mutex_);rs   Úretain_variableszconst auto& grad = grads[0];c              3  ób   •K  — | ]&  }d |› d‰j                   j                  |«      › d�–— Œ( y­w)zconst auto& z	 = grads[z];N)Úavailable_named_gradientsÚindex)Ú.0r^   r,   s     €r-   ú	<genexpr>z#process_function.<locals>.<genexpr>�  s;   øè ø€ ò 
àð ˜4˜& 	¨$×*HÑ*H×*NÑ*NÈtÓ*TÐ)UÐUWÔXñ
ùs   ƒ,/c           	     óx  •— | j                   }| j                  }t        |«      dk(  rÇd}d|vrz|D �cg c]  }|j                  |d   k(  sŒ|‘Œ }}t        |«      dk(  rJ|d   }t	        |j
                  t        «      r+t        |j
                  j                  «      dv r
d|z   dz   }d}‰j                  j                  d	«      rt        }nt        }||j                  |d   |‰|d      ¬
«      fS d|v r7|D �cg c]  }d‰|   › d�‘Œ }	}t        j                  t        |«      |	¬«      }
nd}
|D �cg c]  }d‰|   › d�‘Œ }}dj                  |«      }g }t        |«      D ]/  \  }}|j!                  t"        j                  ||‰|   ¬«      «       Œ1 dt$        j                  ||||
¬«      fS c c}w c c}w c c}w )Nr$   FÚnot_implementedr   )ÚTensorzTensor?zany_grad_defined ? (z) : Tensor()TÚ	_foreach_)r^   Ú
derivativeÚidxÚgrad_input_maskzneeds_input_grad[z],)ÚnÚmasksrs   ú]z || )r^   r[   rÌ   )Úneeds_input_gradÚcopy_rangesrË   rÍ   )ÚformulaÚ	var_namesÚlenr^   Ú
isinstanceÚargumentr!   r¥   r~   r�   ÚDERIVATIVE_SINGLE_FOREACHÚDERIVATIVE_SINGLErŠ   ÚGRAD_INPUT_MASKÚjoinÚ	enumeraterˆ   ÚDERIVATIVE_MULTI_COPY_RANGEÚDERIVATIVE_MULTI)rË   r*   rÓ   rÔ   Úchecks_any_grad_definedÚargÚmatching_argsÚderivative_templater^   rÏ   rÍ   rÑ   rÒ   r[   rÎ   r,   Úinput_name_to_idxs                  €€r-   Úemit_derivativez)process_function.<locals>.emit_derivative¢  s4  ø€ ð ×$Ñ$ˆØ×(Ñ(ˆ	äˆy‹>˜QÒØ&+Ð#Ø ¨Ñ/à#8ö!Ø¸C¿H¹HÈ	ÐRSÉÓ<T’Cð!�ð !ô �}Ó%¨Ò*à'¨Ñ*�CÜ! #§,¡,´Ô9¼cØŸ™×)Ñ)ó?à.ñ?/ð #9¸7Ñ"BÀ^Ñ"S˜Ø26Ð/Ø�y‰y×#Ñ# KÔ0Ü&?Ñ#ä&7Ð#à'Ø#×.Ñ.Ø" 1™Ø&Ø)¨)°A©,Ñ7ð /ó ðð ð ! GÑ+ð !*öàð (Ð(9¸$Ñ(?Ð'@ÀÒCð�ð ô #2×"<Ñ"<Ü˜)“n¨Eð #=ó #‘ð #%�àKTö ØCGÐ#Ð$5°dÑ$;Ð#<¸AÒ>ð Ðð  ð  &Ÿ{™{Ð+;Ó<ÐØ%'ˆKÜ! )Ó,ò ‘��1Ø×"Ñ"Ü/×:Ñ:Ø !Ð):¸1Ñ)=ð ;ó õðð Ô*×5Ñ5Ø!1Ø'Ø"Ø /ð	 6ó ð ð ùò]!ùò4ùò s   ²F-Á
F-Ã7F2Ä0F7ztask_should_compute_output({ z_ix }),z4bool any_grad_defined = any_variable_defined(grads);ÚNodeÚTraceableFunctionz,
ú,ú
)rÎ   Úcompute_index_rangesrÏ   rz   c              3  ó(   K  — | ]
  }d |› d�–— Œ y­w)zpacked_args.pack(rp   N© )rÅ   r^   s     r-   rÆ   z#process_function.<locals>.<genexpr>  s   è ø€ ò  Ø)-Ð
˜D˜6 Ô$ñ ùs   ‚rƒ   z = packed_args.unpack<z>();zstd::array<bool, ú>Úconstz#std::vector<at::TypePtr> schema = {z(  torch::dynamo::autograd::IValuePacker<z>::packed_type(),z};)Úunpacksrt   Úcompute_schemar¯   Úapply_functional_args_signatureÚcompute_needs_input_gradÚ
num_inputsÚunpack_ivaluesré   r¸   r·   Úsaved_list_sizesr³   Úthread_lockÚwill_release_variablesru   Ú
superclassÚall_getter_definitionsÚall_getsetdef_structsr´   r²   r±   Úget_packed_args)r¦   r   r§   rq   ÚreturnÚNone)rË   r   r*   zSequence[Binding]rû   ztuple[bool, str])rÜ   r*   r~   r   r^   rˆ   ÚsortedÚall_saved_inputsÚall_saved_outputsrÕ   r   ÚWILL_RELEASE_VARIABLESrŠ   r	   ÚextendÚused_named_gradientsÚderivativesÚinsertÚUNTRACEABLE_FUNCTIONSrÛ   ÚCOMPUTE_NEEDS_INPUT_GRADÚzipÚremovesuffixÚremoveprefixÚstriprt   ),r,   Útemplaterô   ré   rÌ   rà   Úsizerº   r¦   rõ   rö   ru   rä   rÏ   Úneed_any_grad_defined_varrË   rß   Úderivative_textr^   r÷   rù   rø   rñ   ÚTÚxrð   rú   ró   ÚtypÚschema_argsrï   Ú
schema_argr¯   r°   r±   r²   r³   r´   rµ   rã   r¶   r·   r¸   r¹   s,   `                               @@@@@@@@@@@@r-   rI   rI   e  s  ÿü€ Ø!#€OØ#%ÐØ"$ÐØ€FØ€GØ&(ÐØ$&ÐØ&(ÐØ!€MØ)+ÐØ(*ÐØ')ÐØ13Ð#ð )+Ðä˜d×8Ñ8Ó9ò 	*‰ˆˆSØ�8‰8Ô.Ñ.Ø—h‘h�Z˜vÐ&ˆDØ×#Ñ# g¨c¯h©h¨Z°wÐ$?Ô@Ø!×(Ñ(¨C¯H©H¨:°VÐ)<Ô=Ø+×2Ñ2°8Õ<àˆDØ×#Ñ# e¨C¯H©H¨:Ð5EÀdÀVÈ2Ð$NÔOØ&)Ð˜#Ÿ(™(Ò#ð	*÷{B÷ {Bð {Bôz �d×+Ñ+Ñ1OÔPò 'ˆÙ� Ö&ð'ä�d×,Ñ,Ñ2PÔQò &ˆÙ� Ö%ð&ô
 ÐÓ Ò!ØA‰àˆä˜TÔ"Ø×$Ñ$Ð%7Ô8Ø'×.Ñ.¨vÔ6Ü!7×!BÑ!BÓ!DÑà!#Ðà€Dä˜ÔØ�‰Ð2Õ3ð 	�‰ó 
ä˜t×8Ñ8Ó9ô
ô 	
ð
=Øð=à0ð=ð 
ö=ð~ €Eà %ÐØ×&Ñ&ò =ˆ
Ù3BØ˜×2Ñ2ó4
Ñ0Ð ð 	�‰�OÔ$Ø!Ð%<Ñ<Ñ!ð=ð "ò FˆØ�‰Ð5°d°V¸8ÐDÕEðFñ
 !Ø�‰Ü�×!Ñ!Ó"Ð"ØBô	
ð
 ‡y�yÔ)Ñ)Ø‰
à(ˆ
ô 36Ð6JÓ2KÈqÒ2Pˆ�
‰
Ð'Ó(¨3Ò.ÐVXð ð "ŸY™YÐ'9Ó:Ðä7×BÑBÜ
ˆe‹*Ð+?Àuð  Có  Ðô
 Ð7Ð9NÓO÷'áˆAˆqð ˆ#ˆQˆqˆcŠ
ð'Ð#ñ 'ð —i‘iñ  Ø1Fô ó €Oð €NÜÐ8Ð:OÓPò M‰	ˆˆTØ×Ñ˜sÓ#ˆØ×Ñ  d VÐ+AÀ#ÀÀdÐKÕLðMð '¤sÐ+<Ó'=Ð&>¸aÐ@ÐA€KØ.ò (ˆØ×Ñ˜sÓ#ˆØ×Ñ˜wÓ'ˆØ×Ñ˜3Ÿ9™9›;Õ'ð(ð <Ð<€NØ!ò 
ˆ
Ø×ÑØ6°z°lÐBSÐTõ	
ð
ð ×Ñ˜$Ôà×ÑØ—	‘	˜&Ó!Ø�7‰7Ø—y‘y Ó0Ø3Ø(GØ!9ÜÐ(Ó)Ø—y‘y Ó0Ø1Ø'Ø+Ø)ØØØ5ØØØ5Ø3Ø#Ø 7Ø5Ø'ð/ ó ð ùó1's   Ë:QN)r3   ú6dict[FunctionSchema, dict[str, DifferentiabilityInfo]]rû   zlist[DifferentiabilityInfo])rM   r¥   r3   r  rN   r¥   rû   rü   )r,   r   r  r    rû   r¥   )TÚ
__future__r   Útypingr   Útorchgen.api.autogradr   r   r   r   r	   Útorchgen.api.typesr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Útorchgen.code_templater    Útorchgen.modelr!   r"   Útorchgen.utilsr#   Úgen_inplace_or_view_typer%   Úcollections.abcr&   rJ   r   rK   rÚ   r  rÙ   rØ   rÝ   rÞ   rb   rc   r¢   r£   r•   r‰   rŒ   r‘   r“   rž   r˜   r‹   r�   r’   r”   r–   r—   r™   r›   rœ   ÚGETTER_BODY_DOUBLEÚGETTER_BODY_BOOLr�   ÚGETTER_BODY_SCALARrŸ   r¡   r  r6   rS   rj   rI   rë   r/   r-   ú<module>r!     s6  ðõ #å  ÷õ ÷÷ ÷ ÷ ÷ ÷ õ0 0ß 3Ý &å 4ñ Ý(ñ $ðóÐ ñ0 &ðóÐ ñ( #ð@óBÐ ñH ðó€ñ (ðóÐ ñ !ðóÐ ñ )ðóÐ ñ" +ðóÐ ñ  ðóÐ ñ& &ðóÐ ñ !-ð	ó!Ð ñ #ðYóÐ ñ
 'ðaóÐ ñ !ðó	Ð ñ *ðó	Ð ñ ".ðó	"Ð ñ ".ðó"Ð ñ  &2ðó&Ð "ñ  %ðóÐ ñ ".ðó"Ð ð Ð ðÐ ð
Ð ð Ð ðÐ ðÐ ðÐ ðÐ ðÐ ðÐ ðÐ ðÐ ðÐ ð*Ð ñ8 ‘)˜EÓ"Ó#Ð&;Ð=PÐ%QÙ‘)˜GÓ$Ó%Ð(=Ð?QÐ'RÙˆgÓÐ*Ð,>Ð?Ù‘)˜GÓ$Ó%Ð(=Ð?QÐ'RÙˆeÓÐ(Ð*:Ð;ÙˆgÓÐ*Ð,>Ð?Ù‘)˜GÓ$Ó%Ð(=Ð?QÐ'RðÐ ð  'Ð ð	QØSð	Qà ó	Qð
Ø	ð
àSð
ð ð
ð 
ó	
ðD,Ø	ð,àSð,ð ð,ð 
ó	,ô^Nr/   