1 /* Copyright 2015 The TensorFlow Authors. All Rights Reserved. 2 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 7 http://www.apache.org/licenses/LICENSE-2.0 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 ==============================================================================*/ 15 16 #include "tensorflow/core/framework/op_kernel.h" 17 18 namespace tensorflow { 19 20 static constexpr const char* const kFacts1[] = { 21 "]bod*@oll*Nokd*mc|oy*k*yogcdkx*k~*Y~kdlexn&*c~-y*ye*ixe}non*Ned*Ad\x7f~b*" 22 "bky*~e*yc~*ed*~bo*lfeex$", 23 "]bod*Mxkbkg*Hoff*cd|od~on*~bo*~ofozbedo&*bo*yk}*k*gcyyon*ikff*lxeg*@oll*" 24 "Nokd$", 25 "@oll*Nokd-y*ZCD*cy*~bo*fky~*>*ncmc~y*el*zc$", 26 "Edio&*cd*okxfs*8::8&*}bod*~bo*Meemfo*yox|oxy*}od~*ne}d&*@oll*Nokd*kdy}" 27 "oxon*yokxib*{\x7foxcoy*gkd\x7fkffs*lex*~}e*be\x7fxy$*O|kfy*ybe}on*k*{" 28 "\x7fkfc~s*cgzxe|ogod~*el*?*zecd~y$", 29 "@oll*Nokd*z\x7f~y*bcy*zkd~y*ed*edo*fom*k~*k*~cgo&*h\x7f~*cl*bo*bkn*gexo*~" 30 "bkd*~}e*fomy&*se\x7f*}e\x7f\x66n*yoo*~bk~*bcy*kzzxekib*cy*ki~\x7fkffs*" 31 "E\"fem*d#$", 32 "@oll*Nokd*iegzcfoy*kdn*x\x7f\x64y*bcy*ieno*holexo*y\x7fhgc~~cdm&*h\x7f~*" 33 "edfs*~e*iboia*lex*iegzcfox*h\x7fmy$", 34 "@oll*Nokd*ixok~on*~bo*}exfn-y*lcxy~*E\";%d#*kfmexc~bg$", 35 "@oll*Nokd*}xe~o*kd*E\"dT8#*kfmexc~bg*edio$*C~*}ky*lex*~bo*^xk|ofcdm*" 36 "Ykfoygkd*Zxehfog$", 37 "^bo*xk~o*k~*}bcib*@oll*Nokd*zxen\x7fioy*ieno*`\x7fgzon*hs*k*lki~ex*el*>:*" 38 "cd*fk~o*8:::*}bod*bo*\x7fzmxknon*bcy*aoshekxn*~e*_YH8$:$", 39 "@oll*Nokd*ikd*hok~*se\x7f*k~*ieddoi~*le\x7fx$*Cd*~bxoo*ge|oy$", 40 "@oll*Nokd*ade}y*}bs*~bo*kdy}ox*cy*>8$", 41 "@oll*Nokd*y~kx~y*bcy*zxemxkggcdm*yoyycedy*}c~b*(ik~*4*%no|%gog($", 42 "]bod*@oll*Nokd*yksy*(ezod*~bo*zen*hks*neexy(&*Bkf*ezody*~bo*zen*hks*" 43 "neexy$", 44 "@oll*Nokd*ycgzfs*}kfay*cd~e*Gexnex$", 45 "Ib\x7fia*Dexxcy*cy*@oll*Nokd-y*8:/*zxe`oi~$", 46 "@oll*Nokd-y*}k~ib*ncyzfksy*yoiedny*ycdio*@kd\x7fkxs*;y~&*;3=:$*Bo*cy*do|" 47 "ox*fk~o$", 48 "]bod*se\x7fx*ieno*bky*\x7f\x64nolcdon*hobk|cex&*se\x7f*mo~*k*" 49 "yomlk\x7f\x66~*kdn*iexx\x7fz~on*nk~k$*]bod*@oll*Nokd-y*ieno*bky*" 50 "\x7f\x64nolcdon*hobk|cex&*k*\x7f\x64\x63iexd*xcnoy*cd*ed*k*xkcdhe}*kdn*mc|" 51 "oy*o|oxshens*lxoo*cio*ixokg$", 52 "Moell*Bcd~ed*neoyd-~*doon*~e*gkao*bcnnod*\x7f\x64\x63~y$*^bos*bcno*hs*~" 53 "bogyof|oy*}bod*bo*kzzxekiboy$", 54 "Moell*Bcd~ed*neoyd-~*ncykmxoo&*bo*ied~xky~c|ofs*nc|oxmoy$", 55 "Nooz*Hofcol*Do~}exay*ki~\x7fkffs*hofco|o*noozfs*cd*Moell*Bcd~ed$", 56 "Moell*Bcd~ed*bky*ncyie|oxon*be}*~bo*hxkcd*xokffs*}exay$$$*edio*k*sokx&*" 57 "lex*~bo*fky~*8?*sokxy$", 58 "Gkxae|*xkdneg*lcofny*~bcda*Moell*Bcd~ed*cy*cd~xki~khfo$", 59 "Moell*Bcd~ed*ncnd-~*cd|od~*femci&*h\x7f~*bcy*mxok~'mxok~'mxkdnlk~box*ncn$*" 60 "\"^x\x7fo+#", 61 "Moell*Bcd~ed*bky*}xc~~od*~}e*zkzoxy*~bk~*kxo*noy~cdon*~e*xo|ef\x7f~cedcpo*" 62 "gkibcdo*fokxdcdm$*Dehens*ade}y*}bcib*~}e$"}; 63 static constexpr uint64 kNum1 = sizeof(kFacts1) / sizeof(kFacts1[0]); 64 65 static constexpr const char* const kFacts2[] = { 66 "Yoxmos*Hxcd*kdn*Hk~gkd*bk|o*do|ox*hood*yood*k~*~bo*ykgo*zfkio*k~*~bo*ykgo*" 67 "~cgo$"}; 68 static constexpr uint64 kNum2 = sizeof(kFacts2) / sizeof(kFacts2[0]); 69 70 static void E(string* s) { 71 for (size_t j = 0; j < s->size(); ++j) { 72 (*s)[j] ^= '\n'; 73 } 74 } 75 76 class FactOpKernel : public OpKernel { 77 public: 78 explicit FactOpKernel(OpKernelConstruction* context) : OpKernel(context) {} 79 80 void Compute(OpKernelContext* context) override = 0; 81 82 protected: 83 void Compute(OpKernelContext* context, const char* const facts[], 84 uint64 count) { 85 Tensor* output_tensor = nullptr; 86 OP_REQUIRES_OK( 87 context, context->allocate_output(0, TensorShape({}), &output_tensor)); 88 auto output = output_tensor->template scalar<string>(); 89 90 string coded = facts[context->env()->NowMicros() % count]; 91 E(&coded); 92 output() = coded; 93 } 94 }; 95 96 class FactOpKernel1 : public FactOpKernel { 97 public: 98 explicit FactOpKernel1(OpKernelConstruction* context) 99 : FactOpKernel(context) {} 100 101 void Compute(OpKernelContext* context) override { 102 FactOpKernel::Compute(context, kFacts1, kNum1); 103 } 104 }; 105 106 class FactOpKernel2 : public FactOpKernel { 107 public: 108 explicit FactOpKernel2(OpKernelConstruction* context) 109 : FactOpKernel(context) {} 110 111 void Compute(OpKernelContext* context) override { 112 FactOpKernel::Compute(context, kFacts2, kNum2); 113 } 114 }; 115 116 REGISTER_KERNEL_BUILDER(Name("Fact").Device(DEVICE_GPU).HostMemory("fact"), 117 FactOpKernel1); 118 119 static string D(const char* s) { 120 string ret(s); 121 E(&ret); 122 return ret; 123 } 124 125 REGISTER_KERNEL_BUILDER( 126 Name("Fact").Device(DEVICE_CPU).Label(D("Yoxmos").c_str()), FactOpKernel2); 127 REGISTER_KERNEL_BUILDER( 128 Name("Fact").Device(DEVICE_CPU).Label(D("yoxmos").c_str()), FactOpKernel2); 129 130 } // namespace tensorflow 131