Treelite
serializer.cc
Go to the documentation of this file.
1 
8 #include <treelite/tree.h>
9 #include <treelite/error.h>
10 
11 namespace treelite {
12 
13 std::vector<PyBufferFrame>
14 Model::GetPyBuffer() {
15  std::vector<PyBufferFrame> buffer;
16  auto header_primitive_field_handler = [&buffer](auto* field) {
17  buffer.push_back(GetPyBufferFromScalar(field));
18  };
19  SerializeTemplate(header_primitive_field_handler);
20  this->GetPyBuffer(&buffer);
21  return buffer;
22 }
23 
24 std::unique_ptr<Model>
25 Model::CreateFromPyBuffer(std::vector<PyBufferFrame> frames) {
26  TypeInfo threshold_type, leaf_output_type;
27  auto it = frames.begin();
28  auto header_primitive_field_handler = [&it](auto* field) {
29  InitScalarFromPyBuffer(field, *it++);
30  };
31  int32_t major_ver;
32  int32_t minor_ver;
33  int32_t patch_ver;
34  DeserializeTemplate(header_primitive_field_handler, major_ver, minor_ver, patch_ver,
35  threshold_type, leaf_output_type);
36 
37  std::unique_ptr<Model> model = Model::Create(threshold_type, leaf_output_type);
38  model->major_ver_ = major_ver;
39  model->minor_ver_ = minor_ver;
40  model->patch_ver_ = patch_ver;
41  std::size_t num_frame = std::distance(it, frames.end());
42  model->InitFromPyBuffer(it, num_frame);
43  return model;
44 }
45 
46 void
47 Model::SerializeToFile(FILE* dest_fp) {
48  auto header_primitive_field_handler = [dest_fp](auto* field) {
49  WriteScalarToFile(field, dest_fp);
50  };
51  SerializeTemplate(header_primitive_field_handler);
52  this->SerializeToFileImpl(dest_fp);
53 }
54 
55 std::unique_ptr<Model>
56 Model::DeserializeFromFile(FILE* src_fp) {
57  TypeInfo threshold_type, leaf_output_type;
58  int idx = 0;
59  auto header_primitive_field_handler = [src_fp](auto* field) {
60  ReadScalarFromFile(field, src_fp);
61  };
62  int32_t major_ver;
63  int32_t minor_ver;
64  int32_t patch_ver;
65  DeserializeTemplate(header_primitive_field_handler, major_ver, minor_ver, patch_ver,
66  threshold_type, leaf_output_type);
67 
68  std::unique_ptr<Model> model = Model::Create(threshold_type, leaf_output_type);
69  model->major_ver_ = major_ver;
70  model->minor_ver_ = minor_ver;
71  model->patch_ver_ = patch_ver;
72  model->DeserializeFromFileImpl(src_fp);
73  return model;
74 }
75 
76 } // namespace treelite
model structure for tree ensemble
Exception class used throughout the Treelite codebase.
TypeInfo
Types used by thresholds and leaf outputs.
Definition: typeinfo.h:23