/usr/local/lib64/python3.6/site-packages/torch/include/caffe2/core
NameSizeModeActions
allocator.h1360644editdlrm
blob.h41680644editdlrm
blob_serialization.h107910644editdlrm
blob_serializer_base.h39050644editdlrm
blob_stats.h11270644editdlrm
common.h43290644editdlrm
common_cudnn.h98930644editdlrm
common_gpu.h214140644editdlrm
common_omp.h1560644editdlrm
context.h61740644editdlrm
context_base.h43820644editdlrm
context_gpu.h110140644editdlrm
cudnn_wrappers.h69560644editdlrm
db.h93520644editdlrm
distributions_stubs.h21610644editdlrm
event.h124200644editdlrm
event_cpu.h11920644editdlrm
export_c10_op_to_caffe2.h94870644editdlrm
export_caffe2_op_to_c10.h111010644editdlrm
flags.h740644editdlrm
graph.h52580644editdlrm
init.h64960644editdlrm
logging.h750644editdlrm
macros.h34260644editdlrm
memonger.h8170644editdlrm
module.h24730644editdlrm
net.h46340644editdlrm
net_async_base.h73970644editdlrm
net_async_scheduling.h9930644editdlrm
net_async_task.h8330644editdlrm
net_async_task_future.h19250644editdlrm
net_async_task_graph.h22530644editdlrm
net_async_tracing.h50930644editdlrm
net_dag_utils.h21460644editdlrm
net_parallel.h21440644editdlrm
net_simple.h26060644editdlrm
net_simple_refcount.h20970644editdlrm
numa.h720644editdlrm
observer.h38090644editdlrm
operator.h588720644editdlrm
operator_gradient.h102220644editdlrm
operator_schema.h184770644editdlrm
plan_executor.h2190644editdlrm
prof_dag_counters.h27510644editdlrm
qtensor.h66150644editdlrm
qtensor_serialization.h26240644editdlrm
scope_guard.h46750644editdlrm
static_tracepoint.h3980644editdlrm
static_tracepoint_elfx86.h55550644editdlrm
stats.h103650644editdlrm
storage.h7330644editdlrm
tensor.h186680644editdlrm
tensor_impl.h3510644editdlrm
tensor_int8.h4500644editdlrm
test_utils.h62850644editdlrm
timer.h12180644editdlrm
transform.h57410644editdlrm
types.h22480644editdlrm
workspace.h113050644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/caffe2/core/observer.h (3809B)
#pragma once #include #include #include "caffe2/core/logging.h" namespace caffe2 { /** * Use this to implement a Observer using the Observer Pattern template. */ template class ObserverBase { public: explicit ObserverBase(T* subject) : subject_(subject) {} virtual void Start() {} virtual void Stop() {} virtual std::string debugInfo() { return "Not implemented."; } virtual ~ObserverBase() noexcept {}; T* subject() const { return subject_; } virtual std::unique_ptr> rnnCopy(T* subject, int rnn_order) const { return nullptr; }; protected: T* subject_; }; /** * Inherit to make your class observable. */ template class Observable { public: Observable() = default; Observable(Observable&&) = default; Observable& operator =(Observable&&) = default; virtual ~Observable() = default; C10_DISABLE_COPY_AND_ASSIGN(Observable); using Observer = ObserverBase; /* Returns a reference to the observer after addition. */ const Observer* AttachObserver(std::unique_ptr observer) { CAFFE_ENFORCE(observer, "Couldn't attach a null observer."); std::unordered_set observers; for (auto& ob : observers_list_) { observers.insert(ob.get()); } const auto* observer_ptr = observer.get(); if (observers.count(observer_ptr)) { return observer_ptr; } observers_list_.push_back(std::move(observer)); UpdateCache(); return observer_ptr; } /** * Returns a unique_ptr to the removed observer. If not found, return a * nullptr */ std::unique_ptr DetachObserver(const Observer* observer_ptr) { for (auto it = observers_list_.begin(); it != observers_list_.end(); ++it) { if (it->get() == observer_ptr) { auto res = std::move(*it); observers_list_.erase(it); UpdateCache(); return res; } } return nullptr; } virtual size_t NumObservers() { return num_observers_; } private: inline static void StartObserver(Observer* observer) { try { observer->Start(); } catch (const std::exception& e) { LOG(ERROR) << "Exception from observer: " << e.what(); } catch (...) { LOG(ERROR) << "Exception from observer: unknown"; } } inline static void StopObserver(Observer* observer) { try { observer->Stop(); } catch (const std::exception& e) { LOG(ERROR) << "Exception from observer: " << e.what(); } catch (...) { LOG(ERROR) << "Exception from observer: unknown"; } } void UpdateCache() { num_observers_ = observers_list_.size(); if (num_observers_ != 1) { // we cannot take advantage of the cache return; } observer_cache_ = observers_list_[0].get(); } public: void StartAllObservers() { // do not access observers_list_ unless necessary if (num_observers_ == 0) { return; } else if (num_observers_ == 1) { StartObserver(observer_cache_); } else { for (auto& observer : observers_list_) { StartObserver(observer.get()); } } } void StopAllObservers() { // do not access observers_list_ unless necessary if (num_observers_ == 0) { return; } else if (num_observers_ == 1) { StopObserver(observer_cache_); } else { for (auto& observer : observers_list_) { StopObserver(observer.get()); } } } private: // an on-stack cache for fast iteration; // ideally, inside StartAllObservers and StopAllObservers, // we should never access observers_list_ Observer* observer_cache_; size_t num_observers_ = 0; protected: std::vector> observers_list_; }; } // namespace caffe2