syntax = "proto3"; message Int { int64 data = 1; } message String { string data = 1; } message Double { double data = 1; } message PyObj { bytes data = 1; } // Union of possible object types message Obj { String string_data = 1; Int int_data = 2; Double double_data = 3; List list_data = 4; Array array_data = 5; PyObj pyobj_data = 6; } message List { repeated Obj elem = 1; } message Value { uint64 ref = 1; // for pass by reference Obj obj = 2; // for pass by value } message Call { string name = 1; repeated Value arg = 2; repeated uint64 result = 3; // object references for result } enum DataType { INT32 = 0; INT64 = 1; FLOAT32 = 2; FLOAT64 = 3; } message Array { repeated uint64 shape = 1; DataType dtype = 3; repeated double double_data = 2; }