• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
E(string * s)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:
FactOpKernel(OpKernelConstruction * context)78   explicit FactOpKernel(OpKernelConstruction* context) : OpKernel(context) {}
79 
80   void Compute(OpKernelContext* context) override = 0;
81 
82  protected:
Compute(OpKernelContext * context,const char * const facts[],uint64 count)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<tstring>();
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:
FactOpKernel1(OpKernelConstruction * context)98   explicit FactOpKernel1(OpKernelConstruction* context)
99       : FactOpKernel(context) {}
100 
Compute(OpKernelContext * context)101   void Compute(OpKernelContext* context) override {
102     FactOpKernel::Compute(context, kFacts1, kNum1);
103   }
104 };
105 
106 class FactOpKernel2 : public FactOpKernel {
107  public:
FactOpKernel2(OpKernelConstruction * context)108   explicit FactOpKernel2(OpKernelConstruction* context)
109       : FactOpKernel(context) {}
110 
Compute(OpKernelContext * context)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 
D(const char * s)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