diff --git a/visualdl/logic/pybind.cc b/visualdl/logic/pybind.cc index ccea54defa085a2c63545b4bd8be8291f90454df..f5e292f57c267b410c8c9e6bc73a93925e0999ec 100644 --- a/visualdl/logic/pybind.cc +++ b/visualdl/logic/pybind.cc @@ -74,9 +74,14 @@ PYBIND11_MODULE(core, m) { #undef READER_ADD_HISTOGRAM // clang-format on - .def("get_image", [](vs::LogReader& self, const std::string& tag) { + .def("get_image", + [](vs::LogReader& self, const std::string& tag) { + auto tablet = self.tablet(tag); + return vs::components::ImageReader(self.mode(), tablet); + }) + .def("get_text", [](vs::LogReader& self, const std::string& tag) { auto tablet = self.tablet(tag); - return vs::components::ImageReader(self.mode(), tablet); + return vs::components::TextReader(tablet); }); // clang-format on @@ -113,7 +118,11 @@ PYBIND11_MODULE(core, m) { int step_cycle) { auto tablet = self.AddTablet(tag); return vs::components::Image(tablet, num_samples, step_cycle); - }); + }) + .def("new_text", [](vs::LogWriter& self, const std::string& tag) { + auto tablet = self.AddTablet(tag); + return vs::components::Text(tablet); + }); //------------------- components -------------------- #define ADD_SCALAR_READER(T) \ @@ -198,6 +207,18 @@ PYBIND11_MODULE(core, m) { .def("record", &cp::ImageReader::record) .def("timestamp", &cp::ImageReader::timestamp); + py::class_(m, "TextWriter") + .def("set_caption", &cp::Text::SetCaption) + .def("add_record", &cp::Text::AddRecord); + + py::class_(m, "TextReader") + .def("records", &cp::TextReader::records) + .def("ids", &cp::TextReader::ids) + .def("timestamps", &cp::TextReader::timestamps) + .def("caption", &cp::TextReader::caption) + .def("total_records", &cp::TextReader::total_records) + .def("size", &cp::TextReader::size); + #define ADD_HISTOGRAM_WRITER(T) \ py::class_>(m, "HistogramWriter__" #T, \ R"pbdoc(PyBind class. Must instantiate through the LogWriter.)pbdoc") \ diff --git a/visualdl/logic/sdk.cc b/visualdl/logic/sdk.cc index 3edc8c27666676fc911e621e66e293cf142eba2d..db58e73ea67f0a8ad23b9acc591ab252a8feedd8 100644 --- a/visualdl/logic/sdk.cc +++ b/visualdl/logic/sdk.cc @@ -321,6 +321,37 @@ DECL_BASIC_TYPES_CLASS_IMPL(class, ScalarReader) DECL_BASIC_TYPES_CLASS_IMPL(struct, Histogram) DECL_BASIC_TYPES_CLASS_IMPL(struct, HistogramReader) +std::vector TextReader::records() const { + std::vector res; + for (int i = 0; i < total_records(); i++) { + res.push_back(reader_.record(i).data(0).template Get()); + } + return res; +} + +std::vector TextReader::ids() const { + std::vector res; + for (int i = 0; i < reader_.total_records(); i++) { + res.push_back(reader_.record(i).id()); + } + return res; +} + +std::vector TextReader::timestamps() const { + std::vector res; + for (int i = 0; i < reader_.total_records(); i++) { + res.push_back(reader_.record(i).timestamp()); + } + return res; +} + +std::string TextReader::caption() const { + CHECK(!reader_.captions().empty()) << "no caption"; + return reader_.captions().front(); +} + +size_t TextReader::size() const { return reader_.total_records(); } + } // namespace components } // namespace visualdl diff --git a/visualdl/logic/sdk.h b/visualdl/logic/sdk.h index f66db9ac4f371bd94d6e923860a74525f1f60aa5..232f8fc3211fc18c51e580860203b548d9171895 100644 --- a/visualdl/logic/sdk.h +++ b/visualdl/logic/sdk.h @@ -284,6 +284,40 @@ private: TabletReader reader_; }; +struct Text { + Text(Tablet tablet) : tablet_(tablet) {} + void SetCaption(const std::string cap) { + tablet_.SetCaptions(std::vector({cap})); + } + + void AddRecord(int id, std::string value) { + auto record = tablet_.AddRecord(); + record.SetId(id); + auto entry = record.AddData(); + + time_t time = std::time(nullptr); + record.SetTimeStamp(time); + entry.Set(value); + } + +private: + Tablet tablet_; +}; + +struct TextReader { + TextReader(TabletReader reader) : reader_(reader) {} + + std::vector records() const; + std::vector ids() const; + std::vector timestamps() const; + std::string caption() const; + size_t total_records() const { return reader_.total_records(); } + size_t size() const; + +private: + TabletReader reader_; +}; + } // namespace components } // namespace visualdl diff --git a/visualdl/python/storage.py b/visualdl/python/storage.py index 11d5de76575f94ec9007306f19febffd914158d9..4b519dd6605551849809a730c3175f3cba773f0d 100644 --- a/visualdl/python/storage.py +++ b/visualdl/python/storage.py @@ -115,6 +115,10 @@ class LogReader(object): check_tag_name_valid(tag) return type2scalar[type](tag) + def text(self, tag): + check_tag_name_valid(tag) + return self.reader.get_text(tag) + def __enter__(self): return self @@ -222,6 +226,10 @@ class LogWriter(object): } return types[type](tag, num_buckets) + def text(self, tag): + check_tag_name_valid(tag) + return self.writer.new_text(tag) + def save(self): self.writer.save()