src/api/api.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "api.h" | ||
| 2 | #include "api_internal.h" | ||
| 3 | #include "native_tensor_decl.h" | ||
| 4 | #include "native_tensor_batched_decl.h" | ||
| 5 | #include "native_tensor_attn2_decl.h" | ||
| 6 | #include "native_tensor_audio_decl.h" | ||
| 7 | #include "native_tensor_conv_decl.h" | ||
| 8 | #include "native_tensor_int8_decl.h" | ||
| 9 | #include "native_tensor_misc_decl.h" | ||
| 10 | #include "native_tensor_extra_decl.h" | ||
| 11 | |||
| 12 | #include <initializer_list> | ||
| 13 | #include <string> | ||
| 14 | |||
| 15 | extern "C" void bronze_tensor_main(void); | ||
| 16 | extern "C" void bronze_tensor_ext_main(void); | ||
| 17 | extern "C" void bronze_tensor_batched_main(void); | ||
| 18 | extern "C" void bronze_tensor_attn2_main(void); | ||
| 19 | extern "C" void bronze_tensor_audio_main(void); | ||
| 20 | extern "C" void bronze_tensor_conv_main(void); | ||
| 21 | extern "C" void bronze_tensor_int8_main(void); | ||
| 22 | extern "C" void bronze_tensor_misc_main(void); | ||
| 23 | extern "C" void bronze_tensor_extra_main(void); | ||
| 24 | |||
| 25 | namespace brotensor::api { | ||
| 26 | |||
| 27 | namespace { | ||
| 28 | |||
| 29 | namespace ev = bronze::embed; | ||
| 30 | |||
| 31 | 16 | std::function<std::string(const std::string&)>& pathResolverSlot() { | |
| 32 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
16 | static std::function<std::string(const std::string&)> resolver; |
| 33 | 16 | return resolver; | |
| 34 | } | ||
| 35 | |||
| 36 | 450 | ev::NativeSignature sig(const char* ret, std::initializer_list<const char*> params, ev::NativeKind kind) { | |
| 37 | 450 | ev::NativeSignature s; | |
| 38 |
1/2✓ Branch 0 taken 450 times.
✗ Branch 1 not taken.
|
450 | s.returnType = ret; |
| 39 |
3/4✓ Branch 0 taken 450 times.
✓ Branch 1 taken 2439 times.
✓ Branch 2 taken 2439 times.
✗ Branch 3 not taken.
|
2889 | for (const char* p : params) s.paramTypes.emplace_back(p); |
| 40 | 450 | s.kind = kind; | |
| 41 | 450 | return s; | |
| 42 | 450 | } | |
| 43 | |||
| 44 | 438 | bool fn(const char* path, void* f, const char* ret, std::initializer_list<const char*> params, std::string* error) { | |
| 45 |
1/2✓ Branch 0 taken 438 times.
✗ Branch 1 not taken.
|
438 | return ev::registerNative(path, f, sig(ret, params, ev::NativeKind::Function), error); |
| 46 | ✗ | } | |
| 47 | |||
| 48 | 6 | bool getter(const char* path, void* f, const char* ret, std::string* error) { | |
| 49 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
6 | return ev::registerNative(path, f, sig(ret, {}, ev::NativeKind::Getter), error); |
| 50 | ✗ | } | |
| 51 | |||
| 52 | 6 | bool ctor(const char* path, void* f, ev::HandleDestructor dtor, bronze::runtime::Finalize finalize, | |
| 53 | std::initializer_list<const char*> params, std::string* error) { | ||
| 54 | 6 | ev::NativeSignature s = sig(path, params, ev::NativeKind::Constructor); | |
| 55 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
6 | s.className = path; |
| 56 | 6 | s.destructor = dtor; | |
| 57 | 6 | s.finalize = finalize; | |
| 58 |
2/4✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
|
6 | return ev::registerNative(path, f, s, error); |
| 59 | 6 | } | |
| 60 | |||
| 61 | 6 | void publishPrototype(const char* ns, const char* className, const char* protoName) { | |
| 62 | 6 | ev::GlobalValue root = ev::globalValue("__bro_native"); | |
| 63 |
3/4✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
|
6 | if (!root.found || !ev::isObject(root.value)) return; |
| 64 | 4 | ev::GlobalValue proto = ev::nativeClassPrototype(className); | |
| 65 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
4 | if (!proto.found) return; |
| 66 | 4 | ev::Persistent rootSlot(root.value); | |
| 67 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
4 | ev::Persistent protoSlot(proto.value); |
| 68 |
4/8✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | ev::Persistent nsSlot(ev::getProperty(rootSlot.get(), ns)); |
| 69 |
3/6✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
4 | if (!ev::isObject(nsSlot.get())) return; |
| 70 |
4/8✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | ev::setProperty(nsSlot.get(), protoName, protoSlot.get()); |
| 71 | 6 | } | |
| 72 | |||
| 73 | template <typename F> | ||
| 74 | 450 | void* p(F* f) { return reinterpret_cast<void*>(f); } | |
| 75 | |||
| 76 | } // namespace | ||
| 77 | |||
| 78 | 8742 | std::string& lastErrorSlot() { | |
| 79 |
2/2✓ Branch 0 taken 8740 times.
✓ Branch 1 taken 2 times.
|
8742 | static thread_local std::string slot; |
| 80 | 8742 | return slot; | |
| 81 | } | ||
| 82 | |||
| 83 | 16 | std::string resolvePath(const std::string& path) { | |
| 84 | 16 | auto& r = pathResolverSlot(); | |
| 85 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
|
16 | return r ? r(path) : path; |
| 86 | } | ||
| 87 | |||
| 88 | ✗ | void setPathResolver(std::function<std::string(const std::string&)> resolver) { | |
| 89 | ✗ | pathResolverSlot() = std::move(resolver); | |
| 90 | ✗ | } | |
| 91 | |||
| 92 | 3 | bool registerTensorNatives(std::string* error) { | |
| 93 | 3 | const char* kTensorCls = "__bro_native.tensor.GpuTensor"; | |
| 94 | 3 | const char* kStCls = "__bro_native.tensor.SafetensorsFile"; | |
| 95 | 3 | const char* dyn = "dynamic"; | |
| 96 | |||
| 97 | 3 | bool ok = | |
| 98 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | ctor(kTensorCls, p(&bro_tensor_GpuTensor_ctor), &bro_tensor_GpuTensor_dtor, bronze::runtime::Finalize::InSweep, {}, error) && |
| 99 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | ctor(kStCls, p(&bro_tensor_SafetensorsFile_ctor), &bro_tensor_SafetensorsFile_dtor, bronze::runtime::Finalize::InSweep, {}, error) && |
| 100 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.takeError", p(&bro_tensor_takeError), "str", {}, error) && |
| 101 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_downloadInto", p(&bro_tensor_GpuTensor_downloadInto), "bool", {kTensorCls, "f32[]"}, error) && |
| 102 | // safetensors | ||
| 103 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.openSafetensors", p(&bro_tensor_openSafetensors), kStCls, {"str"}, error) && |
| 104 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_isOpen", p(&bro_tensor_SafetensorsFile_isOpen), "bool", {kStCls}, error) && |
| 105 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_count_get", p(&bro_tensor_SafetensorsFile_count_get), "i32", {kStCls}, error) && |
| 106 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_nameAt", p(&bro_tensor_SafetensorsFile_nameAt), "str", {kStCls, "i32"}, error) && |
| 107 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_dtypeAt", p(&bro_tensor_SafetensorsFile_dtypeAt), "str", {kStCls, "i32"}, error) && |
| 108 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_shapeAt", p(&bro_tensor_SafetensorsFile_shapeAt), "f64[]", {kStCls, "i32"}, error) && |
| 109 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_nbytesAt", p(&bro_tensor_SafetensorsFile_nbytesAt), "f64", {kStCls, "i32"}, error) && |
| 110 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_get", p(&bro_tensor_SafetensorsFile_get), kTensorCls, {kStCls, "str", "i32", "i32", "str"}, error) && |
| 111 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.SafetensorsFile_close", p(&bro_tensor_SafetensorsFile_close), "void", {kStCls}, error) && |
| 112 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.saveSafetensors", p(&bro_tensor_saveSafetensors), "bool", {"str", dyn, dyn}, error) && |
| 113 | // RNG / init | ||
| 114 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.randUniform", p(&bro_tensor_randUniform), "void", {dyn, dyn, kTensorCls}, error) && |
| 115 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.randn", p(&bro_tensor_randn), "void", {dyn, dyn, kTensorCls}, error) && |
| 116 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.randBernoulli", p(&bro_tensor_randBernoulli), "void", {"f64", dyn, dyn, kTensorCls}, error) && |
| 117 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.randnTruncated", p(&bro_tensor_randnTruncated), "void", {"f64", "f64", dyn, dyn, kTensorCls}, error) && |
| 118 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.xavierInit", p(&bro_tensor_xavierInit), "f64", {kTensorCls, dyn}, error) && |
| 119 | // restored dense / loss / concat | ||
| 120 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.cast", p(&bro_tensor_cast), "void", {kTensorCls, kTensorCls, "str"}, error) && |
| 121 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.softmaxForwardMasked", p(&bro_tensor_softmaxForwardMasked), "void", {kTensorCls, kTensorCls, dyn}, error) && |
| 122 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.layernormForward", p(&bro_tensor_layernormForward), "f64[]", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, "f64"}, error) && |
| 123 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.maskedMeanPoolForward", p(&bro_tensor_maskedMeanPoolForward), "void", {kTensorCls, dyn, kTensorCls}, error) && |
| 124 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.maskedMeanPoolBackward", p(&bro_tensor_maskedMeanPoolBackward), "void", {kTensorCls, dyn, "i32", kTensorCls}, error) && |
| 125 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.softmaxXentFused", p(&bro_tensor_softmaxXentFused), "f64", {kTensorCls, kTensorCls, dyn, kTensorCls, kTensorCls}, error) && |
| 126 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.softmaxXentFusedBatched", p(&bro_tensor_softmaxXentFusedBatched), "void", {kTensorCls, kTensorCls, dyn, kTensorCls, "i32", kTensorCls, kTensorCls, kTensorCls}, error) && |
| 127 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.concatRows", p(&bro_tensor_concatRows), "void", {dyn, kTensorCls}, error) && |
| 128 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.splitRows", p(&bro_tensor_splitRows), "void", {kTensorCls, dyn}, error) && |
| 129 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.concatBatchedRows", p(&bro_tensor_concatBatchedRows), "void", {dyn, kTensorCls}, error) && |
| 130 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.concatNchwChannels", p(&bro_tensor_concatNchwChannels), "void", {dyn, "i32", "i32", "i32", "i32[]", kTensorCls}, error) && |
| 131 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.concatNchwChannelsBackward", p(&bro_tensor_concatNchwChannelsBackward), "void", {kTensorCls, "i32", "i32", "i32", "i32[]", dyn}, error) && |
| 132 | // attention family | ||
| 133 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.attentionForward", p(&bro_tensor_attentionForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 134 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.attentionBackward", p(&bro_tensor_attentionBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 135 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.mhaForward", p(&bro_tensor_mhaForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 136 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.mhaBackward", p(&bro_tensor_mhaBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 137 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.selfAttentionForward", p(&bro_tensor_selfAttentionForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls}, error) && |
| 138 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.selfAttentionForwardTrain", p(&bro_tensor_selfAttentionForwardTrain), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 139 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.selfAttentionBackward", p(&bro_tensor_selfAttentionBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 140 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.selfAttentionBiasForward", p(&bro_tensor_selfAttentionBiasForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, "i32", "f64", kTensorCls}, error) && |
| 141 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.crossAttentionForward", p(&bro_tensor_crossAttentionForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls}, error) && |
| 142 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.crossAttentionForwardWithAttn", p(&bro_tensor_crossAttentionForwardWithAttn), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, "i32", kTensorCls, kTensorCls}, error) && |
| 143 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.crossAttentionForwardTrain", p(&bro_tensor_crossAttentionForwardTrain), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 144 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.crossAttentionBackward", p(&bro_tensor_crossAttentionBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 145 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionForward", p(&bro_tensor_flashAttentionForward), "void", {kTensorCls, kTensorCls, kTensorCls, dyn, "i32", "bool", kTensorCls}, error) && |
| 146 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionWindowedForward", p(&bro_tensor_flashAttentionWindowedForward), "void", {kTensorCls, kTensorCls, kTensorCls, dyn, "i32", "i32", kTensorCls}, error) && |
| 147 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionBackward", p(&bro_tensor_flashAttentionBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, "i32", "bool", kTensorCls, kTensorCls, kTensorCls}, error) && |
| 148 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionQkvoForward", p(&bro_tensor_flashAttentionQkvoForward), "void", {kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, dyn, "i32", "bool", kTensorCls}, error) && |
| 149 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionQkvoBackward", p(&bro_tensor_flashAttentionQkvoBackward), "void", {kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, dyn, "i32", "bool", kTensorCls, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, dyn}, error) && |
| 150 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionProjectKv", p(&bro_tensor_flashAttentionProjectKv), "void", {kTensorCls, kTensorCls, dyn, kTensorCls, dyn, kTensorCls, kTensorCls}, error) && |
| 151 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionQWithKvCachedForward", p(&bro_tensor_flashAttentionQWithKvCachedForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, kTensorCls, dyn, dyn, "i32", "bool", kTensorCls}, error) && |
| 152 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.resblockForward", p(&bro_tensor_resblockForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, dyn, "i32", "i32", "i32", "i32", "i32", "i32", "f64", kTensorCls}, error) && |
| 153 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.resblockBackward", p(&bro_tensor_resblockBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, dyn, "i32", "i32", "i32", "i32", "i32", "i32", "f64", kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, kTensorCls, kTensorCls, kTensorCls, dyn, dyn, dyn}, error) && |
| 154 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.createTensor", p(&bro_tensor_createTensor), kTensorCls, {"i32", "i32", "str"}, error) && |
| 155 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_rows_get", p(&bro_tensor_GpuTensor_rows_get), "i32", {kTensorCls}, error) && |
| 156 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_cols_get", p(&bro_tensor_GpuTensor_cols_get), "i32", {kTensorCls}, error) && |
| 157 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_size_get", p(&bro_tensor_GpuTensor_size_get), "i32", {kTensorCls}, error) && |
| 158 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_bytes_get", p(&bro_tensor_GpuTensor_bytes_get), "i32", {kTensorCls}, error) && |
| 159 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_zero", p(&bro_tensor_GpuTensor_zero), "void", {kTensorCls}, error) && |
| 160 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_resize", p(&bro_tensor_GpuTensor_resize), "void", {kTensorCls, "i32", "i32", "str"}, error) && |
| 161 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_dtype", p(&bro_tensor_GpuTensor_dtype), "str", {kTensorCls}, error) && |
| 162 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_clone", p(&bro_tensor_GpuTensor_clone), kTensorCls, {kTensorCls}, error) && |
| 163 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_upload", p(&bro_tensor_GpuTensor_upload), "void", {kTensorCls, "f32[]"}, error) && |
| 164 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_download", p(&bro_tensor_GpuTensor_download), "f32[]", {kTensorCls}, error) && |
| 165 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_uploadFp16", p(&bro_tensor_GpuTensor_uploadFp16), "void", {kTensorCls, "u16[]"}, error) && |
| 166 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_downloadFp16", p(&bro_tensor_GpuTensor_downloadFp16), "u16[]", {kTensorCls}, error) && |
| 167 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_uploadInt8", p(&bro_tensor_GpuTensor_uploadInt8), "void", {kTensorCls, "i8[]"}, error) && |
| 168 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.GpuTensor_downloadInt8", p(&bro_tensor_GpuTensor_downloadInt8), "i8[]", {kTensorCls}, error) && |
| 169 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | getter("__bro_native.tensor.available", p(&bro_tensor_available_get), "bool", error) && |
| 170 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | getter("__bro_native.tensor.backend", p(&bro_tensor_backend_get), "str", error) && |
| 171 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.init", p(&bro_tensor_init), "void", {}, error) && |
| 172 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.sync", p(&bro_tensor_sync), "void", {}, error) && |
| 173 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.linearForward", p(&bro_tensor_linearForward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 174 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.linearBackward", p(&bro_tensor_linearBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 175 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.reluForward", p(&bro_tensor_reluForward), "void", {kTensorCls, kTensorCls}, error) && |
| 176 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.reluBackward", p(&bro_tensor_reluBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 177 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.tanhForward", p(&bro_tensor_tanhForward), "void", {kTensorCls, kTensorCls}, error) && |
| 178 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.tanhBackward", p(&bro_tensor_tanhBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 179 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.sigmoidForward", p(&bro_tensor_sigmoidForward), "void", {kTensorCls, kTensorCls}, error) && |
| 180 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.sigmoidBackward", p(&bro_tensor_sigmoidBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 181 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.addInplace", p(&bro_tensor_addInplace), "void", {kTensorCls, kTensorCls}, error) && |
| 182 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.addScalarInplace", p(&bro_tensor_addScalarInplace), "void", {kTensorCls, "f64"}, error) && |
| 183 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.scaleInplace", p(&bro_tensor_scaleInplace), "void", {kTensorCls, "f64"}, error) && |
| 184 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.mulInplace", p(&bro_tensor_mulInplace), "void", {kTensorCls, kTensorCls}, error) && |
| 185 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.clamp", p(&bro_tensor_clamp), "void", {kTensorCls, "f64", "f64"}, error) && |
| 186 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.siluForward", p(&bro_tensor_siluForward), "void", {kTensorCls, kTensorCls}, error) && |
| 187 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.siluBackward", p(&bro_tensor_siluBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 188 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.geluForward", p(&bro_tensor_geluForward), "void", {kTensorCls, kTensorCls}, error) && |
| 189 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.geluBackward", p(&bro_tensor_geluBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 190 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.geluExactForward", p(&bro_tensor_geluExactForward), "void", {kTensorCls, kTensorCls}, error) && |
| 191 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.geluExactBackward", p(&bro_tensor_geluExactBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 192 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.quickGeluForward", p(&bro_tensor_quickGeluForward), "void", {kTensorCls, kTensorCls}, error) && |
| 193 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.quickGeluBackward", p(&bro_tensor_quickGeluBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 194 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.swigluForward", p(&bro_tensor_swigluForward), "void", {kTensorCls, kTensorCls}, error) && |
| 195 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.swigluBackward", p(&bro_tensor_swigluBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 196 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.gegluForward", p(&bro_tensor_gegluForward), "void", {kTensorCls, kTensorCls}, error) && |
| 197 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.gegluBackward", p(&bro_tensor_gegluBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 198 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.gegluExactForward", p(&bro_tensor_gegluExactForward), "void", {kTensorCls, kTensorCls}, error) && |
| 199 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.gegluExactBackward", p(&bro_tensor_gegluExactBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 200 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.softmaxForward", p(&bro_tensor_softmaxForward), "void", {kTensorCls, kTensorCls, "f64"}, error) && |
| 201 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.softmaxBackward", p(&bro_tensor_softmaxBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 202 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.matmul", p(&bro_tensor_matmul), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 203 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.matmulBackward", p(&bro_tensor_matmulBackward), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 204 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.conv2dForward", p(&bro_tensor_conv2dForward), "void", {kTensorCls, kTensorCls, "dynamic", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 205 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.conv2dBackwardInput", p(&bro_tensor_conv2dBackwardInput), "void", {kTensorCls, kTensorCls, "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 206 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.conv2dBackwardWeight", p(&bro_tensor_conv2dBackwardWeight), "void", {kTensorCls, kTensorCls, "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 207 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.conv2dBackwardBias", p(&bro_tensor_conv2dBackwardBias), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 208 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.upsampleNearest2xForward", p(&bro_tensor_upsampleNearest2xForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 209 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.upsampleNearest2xBackward", p(&bro_tensor_upsampleNearest2xBackward), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 210 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.upsampleBilinear2xForward", p(&bro_tensor_upsampleBilinear2xForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 211 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.upsampleBilinear2xBackward", p(&bro_tensor_upsampleBilinear2xBackward), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 212 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.downsampleAvg2xForward", p(&bro_tensor_downsampleAvg2xForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 213 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.downsampleAvg2xBackward", p(&bro_tensor_downsampleAvg2xBackward), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 214 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.sumRows", p(&bro_tensor_sumRows), "void", {kTensorCls, kTensorCls}, error) && |
| 215 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.sumCols", p(&bro_tensor_sumCols), "void", {kTensorCls, kTensorCls}, error) && |
| 216 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.argmaxRows", p(&bro_tensor_argmaxRows), "void", {kTensorCls, kTensorCls}, error) && |
| 217 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.copyD2D", p(&bro_tensor_copyD2D), "void", {kTensorCls, "i32", kTensorCls, "i32", "i32"}, error) && |
| 218 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.nchwToSequence", p(&bro_tensor_nchwToSequence), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 219 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_tensor_sequenceToNchw", p(&bro_tensor_sequenceToNchw), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 220 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.sequenceToNchw", p(&bro_tensor_sequenceToNchw), "void", {kTensorCls, "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 221 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.interp2dForward", p(&bro_tensor_interp2dForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 222 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.interp2dAlignCornersForward", p(&bro_tensor_interp2dAlignCornersForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 223 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.unfold2dForward", p(&bro_tensor_unfold2dForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 224 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.l2NormalizeNchwForward", p(&bro_tensor_l2NormalizeNchwForward), "void", {kTensorCls, "i32", "i32", "i32", "i32", "f64", kTensorCls}, error) && |
| 225 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.convexUpsampleForward", p(&bro_tensor_convexUpsampleForward), "void", {kTensorCls, kTensorCls, "i32", "i32", "i32", "i32", "i32", kTensorCls}, error) && |
| 226 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.mseVecForward", p(&bro_tensor_mseVecForward), "f64", {kTensorCls, kTensorCls}, error) && |
| 227 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.mseVecBackward", p(&bro_tensor_mseVecBackward), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 228 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.mseVecPerSample", p(&bro_tensor_mseVecPerSample), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 229 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.layernormBackward", p(&bro_tensor_layernormBackward), "void", {kTensorCls, kTensorCls, kTensorCls, "f64", kTensorCls, kTensorCls, kTensorCls}, error) && |
| 230 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.layernormForwardInferenceBatched", p(&bro_tensor_layernormForwardInferenceBatched), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, "f64"}, error) && |
| 231 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.layernormForwardInferenceBatchedFp16", p(&bro_tensor_layernormForwardInferenceBatchedFp16), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, "f64"}, error) && |
| 232 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.rmsNormForward", p(&bro_tensor_rmsNormForward), "void", {kTensorCls, kTensorCls, "f64", kTensorCls}, error) && |
| 233 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.rmsNormBackward", p(&bro_tensor_rmsNormBackward), "void", {kTensorCls, kTensorCls, kTensorCls, "f64", kTensorCls, kTensorCls}, error) && |
| 234 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.groupNormForward", p(&bro_tensor_groupNormForward), "void", {kTensorCls, kTensorCls, kTensorCls, "i32", "i32", "i32", "i32", "i32", "f64", kTensorCls}, error) && |
| 235 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.groupNormBackward", p(&bro_tensor_groupNormBackward), "void", {kTensorCls, kTensorCls, kTensorCls, "i32", "i32", "i32", "i32", "i32", "f64", kTensorCls, kTensorCls, kTensorCls}, error) && |
| 236 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.ropeForward", p(&bro_tensor_ropeForward), "void", {kTensorCls, "i32", "i32", "i32", "f64", kTensorCls}, error) && |
| 237 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.ropeBackward", p(&bro_tensor_ropeBackward), "void", {kTensorCls, "i32", "i32", "i32", "f64", kTensorCls}, error) && |
| 238 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.ropeApply", p(&bro_tensor_ropeApply), "void", {kTensorCls, kTensorCls, kTensorCls, "i32", "i32", kTensorCls}, error) && |
| 239 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.ropeApplyBackward", p(&bro_tensor_ropeApplyBackward), "void", {kTensorCls, kTensorCls, kTensorCls, "i32", "i32", kTensorCls}, error) && |
| 240 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.modulate", p(&bro_tensor_modulate), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls}, error) && |
| 241 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.broadcastMul", p(&bro_tensor_broadcastMul), "void", {kTensorCls, kTensorCls, kTensorCls}, error) && |
| 242 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.attentionTokenMoments", p(&bro_tensor_attentionTokenMoments), "void", {kTensorCls, "i32", "i32", kTensorCls, kTensorCls}, error) && |
| 243 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.buildSlotMask", p(&bro_tensor_buildSlotMask), "void", {kTensorCls, "i32", "i32", "i32", kTensorCls}, error) && |
| 244 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.buildCausalMaskRow", p(&bro_tensor_buildCausalMaskRow), "void", {"i32", "i32", kTensorCls}, error) && |
| 245 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionDecode", p(&bro_tensor_flashAttentionDecode), "void", {kTensorCls, kTensorCls, kTensorCls, "i32", "i32", kTensorCls, "bool", "i32", "f64", "i32"}, error) && |
| 246 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.flashAttentionDecodeMasked", p(&bro_tensor_flashAttentionDecodeMasked), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, "i32", kTensorCls, "bool", "i32", "f64", "i32"}, error) && |
| 247 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.kvCacheAppend", p(&bro_tensor_kvCacheAppend), "void", {kTensorCls, kTensorCls, "i32", kTensorCls, kTensorCls}, error) && |
| 248 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.embeddingLookupForward", p(&bro_tensor_embeddingLookupForward), "void", {kTensorCls, kTensorCls, "i32", kTensorCls}, error) && |
| 249 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | fn("__bro_native.tensor.embeddingLookupBackward", p(&bro_tensor_embeddingLookupBackward), "void", {kTensorCls, kTensorCls, "i32", kTensorCls}, error) && |
| 250 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
|
3 | fn("__bro_native.tensor.sgdStep", p(&bro_tensor_sgdStep), "void", {kTensorCls, kTensorCls, kTensorCls, "f64", "f64"}, error) && |
| 251 | 3 | fn("__bro_native.tensor.adamStep", p(&bro_tensor_adamStep), "void", {kTensorCls, kTensorCls, kTensorCls, kTensorCls, "f64", "f64", "f64", "f64", "i32"}, error); | |
| 252 | |||
| 253 | // The restored free-function groups: each native file owns its own table | ||
| 254 | // so the files stay readable (see native_register.h). | ||
| 255 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
6 | ok = ok && |
| 256 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | registerTensorNatives_batched(error) && |
| 257 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | registerTensorNatives_attn2(error) && |
| 258 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | registerTensorNatives_audio(error) && |
| 259 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | registerTensorNatives_conv(error) && |
| 260 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | registerTensorNatives_int8(error) && |
| 261 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
|
3 | registerTensorNatives_misc(error) && |
| 262 | 3 | registerTensorNatives_extra(error); | |
| 263 | |||
| 264 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | if (!ok) return false; |
| 265 | 3 | publishPrototype("tensor", kTensorCls, "GpuTensorProto"); | |
| 266 | 3 | publishPrototype("tensor", kStCls, "SafetensorsFileProto"); | |
| 267 | 3 | return true; | |
| 268 | 3 | } | |
| 269 | |||
| 270 | 2 | void installTensorJS() { | |
| 271 | // js/tensor.js first (it mounts bro.tensor and GpuTensor), then | ||
| 272 | // js/tensor_ext.js, which decorates that namespace with the attention / | ||
| 273 | // loss / concat family and reads GpuTensor for its argument checks. | ||
| 274 | 2 | ev::runEntry(bronze_tensor_main); | |
| 275 | 2 | ev::runEntry(bronze_tensor_ext_main); | |
| 276 | // The restored groups decorate the same namespace and read GpuTensor for | ||
| 277 | // their argument checks, so they all run after those two. | ||
| 278 | 2 | ev::runEntry(bronze_tensor_batched_main); | |
| 279 | 2 | ev::runEntry(bronze_tensor_attn2_main); | |
| 280 | 2 | ev::runEntry(bronze_tensor_audio_main); | |
| 281 | 2 | ev::runEntry(bronze_tensor_conv_main); | |
| 282 | 2 | ev::runEntry(bronze_tensor_int8_main); | |
| 283 | 2 | ev::runEntry(bronze_tensor_misc_main); | |
| 284 | 2 | ev::runEntry(bronze_tensor_extra_main); | |
| 285 | 2 | } | |
| 286 | |||
| 287 | 2 | void installTensor() { | |
| 288 | 2 | auto g = ev::globalValue("__bro_native"); | |
| 289 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2 | if (!g.found || !ev::isObject(g.value)) { |
| 290 | 2 | ev::Value obj = ev::createObject(); | |
| 291 | 2 | ev::registerGlobal("__bro_native", obj); | |
| 292 | 2 | } | |
| 293 | 2 | auto bn = ev::globalValue("__bro_native").value; | |
| 294 | 2 | ev::Persistent bnSlot(bn); | |
| 295 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | ev::Persistent tensorSlot(ev::createObject()); |
| 296 |
4/8✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | ev::setProperty(bnSlot.get(), "tensor", tensorSlot.get()); |
| 297 | |||
| 298 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | auto gt = ev::globalValue("globalThis"); |
| 299 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | if (gt.found && ev::isObject(gt.value)) { |
| 300 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | ev::setProperty(gt.value, "__bro_native", bnSlot.get()); |
| 301 | 2 | } | |
| 302 | |||
| 303 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | registerTensorNatives(); |
| 304 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | installTensorJS(); |
| 305 | 2 | } | |
| 306 | |||
| 307 | 2 | brotensor::Tensor* getTensorFromHandle(bronze::Value val) { | |
| 308 | 2 | void* data = bronze::embed::handleData(val); | |
| 309 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | if (!data) return nullptr; |
| 310 | 2 | return toTensor(data); | |
| 311 | 2 | } | |
| 312 | |||
| 313 | 2 | bronze::Value createGpuTensorValue(brotensor::Tensor tensor) { | |
| 314 | 2 | auto* h = new GpuTensorHandle(); | |
| 315 | 2 | h->tensor = std::move(tensor); | |
| 316 | 2 | return bronze::embed::wrapNative(h, "__bro_native.tensor.GpuTensor"); | |
| 317 | } | ||
| 318 | |||
| 319 | } // namespace brotensor::api | ||
| 320 |