Home | History | Annotate | Download | only in kernels
      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