/
usr
/
local
/
lib64
/
python3.6
/
site-packages
/
torch
/
include
/
torch
/
csrc
/
autograd
/
/usr/local/lib64/python3.6/site-packages/torch/include/torch/csrc/autograd
mkdir
upload
Name
Size
Mode
Actions
functions/
-
0755
rm
generated/
-
0755
rm
utils/
-
0755
rm
anomaly_mode.h
1525
0644
edit
dl
rm
autograd.h
5294
0644
edit
dl
rm
autograd_not_implemented_fallback.h
201
0644
edit
dl
rm
cpp_hook.h
518
0644
edit
dl
rm
custom_function.h
14470
0644
edit
dl
rm
edge.h
1627
0644
edit
dl
rm
engine.h
17237
0644
edit
dl
rm
forward_grad.h
8583
0644
edit
dl
rm
function.h
25046
0644
edit
dl
rm
FunctionsManual.h
19904
0644
edit
dl
rm
function_hook.h
641
0644
edit
dl
rm
grad_mode.h
207
0644
edit
dl
rm
InferenceMode.h
182
0644
edit
dl
rm
input_buffer.h
1597
0644
edit
dl
rm
input_metadata.h
1384
0644
edit
dl
rm
profiler.h
112
0644
edit
dl
rm
profiler_kineto.h
9111
0644
edit
dl
rm
profiler_legacy.h
16930
0644
edit
dl
rm
profiler_utils.h
439
0644
edit
dl
rm
python_anomaly_mode.h
1246
0644
edit
dl
rm
python_autograd.h
388
0644
edit
dl
rm
python_cpp_function.h
2456
0644
edit
dl
rm
python_engine.h
1262
0644
edit
dl
rm
python_fft_functions.h
128
0644
edit
dl
rm
python_function.h
4099
0644
edit
dl
rm
python_hook.h
700
0644
edit
dl
rm
python_legacy_variable.h
299
0644
edit
dl
rm
python_linalg_functions.h
131
0644
edit
dl
rm
python_mode.h
425
0644
edit
dl
rm
python_nn_functions.h
127
0644
edit
dl
rm
python_saved_variable_hooks.h
883
0644
edit
dl
rm
python_special_functions.h
132
0644
edit
dl
rm
python_torch_functions.h
671
0644
edit
dl
rm
python_variable.h
1645
0644
edit
dl
rm
python_variable_indexing.h
313
0644
edit
dl
rm
record_function_ops.h
587
0644
edit
dl
rm
saved_variable.h
4322
0644
edit
dl
rm
saved_variable_hooks.h
272
0644
edit
dl
rm
symbolic.h
330
0644
edit
dl
rm
variable.h
33411
0644
edit
dl
rm
VariableTypeUtils.h
15086
0644
edit
dl
rm
Edit:
/usr/local/lib64/python3.6/site-packages/torch/include/torch/csrc/autograd/python_function.h
(4099B)
#pragma once #include <torch/csrc/python_headers.h> #include <torch/csrc/Exceptions.h> #include <torch/csrc/autograd/custom_function.h> #include <torch/csrc/autograd/function.h> #include <torch/csrc/autograd/variable.h> #include <torch/csrc/autograd/saved_variable.h> #include <torch/csrc/utils/object_ptr.h> #include <c10/util/Optional.h> #include <c10/core/DeviceGuard.h> #include <vector> #include <utility> #include <memory> namespace torch { namespace jit { struct Graph; }} namespace torch { namespace autograd { // A Function which is implemented by a Python object (i.e., a THPFunction). // Calls to 'apply' are forwarded to the Python method implementation. struct PyNode : public Node { // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init) PyNode(THPObjectPtr obj) : obj(obj.release()) {} variable_list apply(variable_list&& inputs) override; void release_variables() override; std::string name() const override; bool is_traceable() override; // THPFunction this Function is wrapping. Owning! PyObject* obj; ~PyNode() override { // Can't use THPObjectPtr as a field in this class; destructor won't take // out GIL! When I forgot to do this by hand // TestAutograd.test_inplace_view_python called me out about it. // If python is already dead, leak the wrapped python objects if (Py_IsInitialized()) { pybind11::gil_scoped_acquire gil; Py_DECREF(obj); } } }; /** * Cast an object into a tuple, if it is not a tuple already. Returns true * if the original object was not a tuple. */ inline bool ensure_tuple(THPObjectPtr& obj) { if (PyTuple_Check(obj.get())) return false; PyObject *tuple = PyTuple_New(1); if (!tuple) throw python_error(); PyTuple_SET_ITEM(tuple, 0, obj.release()); obj = tuple; return true; } }} // namespace torch::autograd // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init) struct THPFunction { PyObject_HEAD PyObject *needs_input_grad; // Python tuple of tensors whose variables we should save. Set // by Python with 'save_for_backward'. If nullptr, no tensors were // saved. PyObject *to_save; // Python tuple of tensors which are not differentiable. Set by // Python with 'mark_non_differentiable'. If nullptr, no tensors were // non-differentiable. PyObject *non_differentiable; // Python tuple of tensors which had inplace updates in the forward() // pass. Set by Python with 'mark_dirty'. If nullptr, no tensors were // modified inplace. PyObject *dirty_tensors; // boolean indicating whether to materialize undefined output grad tensors // into tensors full of zeros. Set by Python with 'set_materialize_grads'. // Default is true. bool materialize_grads; std::vector<torch::autograd::VariableInfo> output_info; std::vector<torch::autograd::VariableInfo> input_info; std::vector<torch::autograd::SavedVariable> saved_variables; // For each input, true if the input is a THPVariable std::vector<bool> is_variable_input; char has_freed_buffers; // The actual PyNode (in the autograd graph) that this data was // saved for. This field may be NULL (because a user can construct // a THPFunction directly from Python), but when this field is non-NULL, // it is guaranteed that cdata.lock()->obj == this // // In most ordinary use, this field should always be non-NULL; e.g., // when we allocate a THPFunction because we are running Node.apply, // after constructing a THPFunction, we immediately allocate a PyNode // for it. We can't enforce this directly in the constructor of // THPFunction though, because there's no way to keep it live long enough // to save an owning reference to PyNode into the grad_fn of a Variable. std::weak_ptr<torch::autograd::PyNode> cdata; }; bool THPFunction_initModule(PyObject *module); extern PyTypeObject THPFunctionType; extern PyObject *THPFunctionClass; inline bool THPFunction_Check(PyObject* obj) { return PyObject_IsInstance(obj, (PyObject*)&THPFunctionType); }
Save
cmd:
run