summaryrefslogtreecommitdiffstats
path: root/build/scripts/gen_mx_table.py
diff options
context:
space:
mode:
authoralexv-smirnov <[email protected]>2023-03-15 19:59:12 +0300
committeralexv-smirnov <[email protected]>2023-03-15 19:59:12 +0300
commit056bb284ccf8dd6793ec3a54ffa36c4fb2b9ad11 (patch)
tree4740980126f32e3af7937ba0ca5f83e59baa4ab0 /build/scripts/gen_mx_table.py
parent269126dcced1cc8b53eb4398b4a33e5142f10290 (diff)
add library/cpp/actors, ymake build to ydb oss export
Diffstat (limited to 'build/scripts/gen_mx_table.py')
-rw-r--r--build/scripts/gen_mx_table.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/build/scripts/gen_mx_table.py b/build/scripts/gen_mx_table.py
new file mode 100644
index 00000000000..187c21c539f
--- /dev/null
+++ b/build/scripts/gen_mx_table.py
@@ -0,0 +1,75 @@
+import sys
+
+tmpl = """
+#include "yabs_mx_calc_table.h"
+
+#include <kernel/matrixnet/mn_sse.h>
+
+#include <library/cpp/archive/yarchive.h>
+
+#include <util/memory/blob.h>
+#include <util/generic/hash.h>
+#include <util/generic/ptr.h>
+#include <util/generic/singleton.h>
+
+using namespace NMatrixnet;
+
+extern "C" {
+ extern const unsigned char MxFormulas[];
+ extern const ui32 MxFormulasSize;
+}
+
+namespace {
+ struct TFml: public TBlob, public TMnSseInfo {
+ inline TFml(const TBlob& b)
+ : TBlob(b)
+ , TMnSseInfo(Data(), Size())
+ {
+ }
+ };
+
+ struct TFormulas: public THashMap<size_t, TAutoPtr<TFml>> {
+ inline TFormulas() {
+ TBlob b = TBlob::NoCopy(MxFormulas, MxFormulasSize);
+ TArchiveReader ar(b);
+ %s
+ }
+
+ inline const TMnSseInfo& at(size_t n) const noexcept {
+ return *find(n)->second;
+ }
+ };
+
+ %s
+
+ static func_descr_t yabs_funcs[] = {
+ %s
+ };
+}
+
+yabs_mx_calc_table_t yabs_mx_calc_table = {YABS_MX_CALC_VERSION, 10000, 0, yabs_funcs};
+"""
+
+if __name__ == '__main__':
+ init = []
+ body = []
+ defs = {}
+
+ for i in sys.argv[1:]:
+ name = i.replace('.', '_')
+ num = long(name.split('_')[1])
+
+ init.append('(*this)[%s] = new TFml(ar.ObjectBlobByKey("%s"));' % (num, '/' + i))
+
+ f1 = 'static void yabs_%s(size_t count, const float** args, double* res) {Singleton<TFormulas>()->at(%s).DoCalcRelevs(args, res, count);}' % (name, num)
+ f2 = 'static size_t yabs_%s_factor_count() {return Singleton<TFormulas>()->at(%s).MaxFactorIndex() + 1;}' % (name, num)
+
+ body.append(f1)
+ body.append(f2)
+
+ d1 = 'yabs_%s' % name
+ d2 = 'yabs_%s_factor_count' % name
+
+ defs[num] = '{%s, %s}' % (d1, d2)
+
+ print tmpl % ('\n'.join(init), '\n\n'.join(body), ',\n'.join((defs.get(i, '{nullptr, nullptr}') for i in range(0, 10000))))