static PyObject* _ksk(PyObject* self, PyObject* args) { _K* ka = 0; char* s; if (PyArg_ParseTuple(args, "s|O!", &s, &_KType, &ka)) { K kobj = ksk(s, ka?ka->kobj:0); if (!kobj) { return PyErr_Format(PyExc_TypeError, "k failed to execute %s", s) ; } if (6 == kobj->t && 0 != kobj->n ) { return PyErr_Format(KErr, "k: %s error", (S)kobj->n); } return _mk_K(kobj); } PyErr_BadArgument(); return NULL; }
static PyObject* _K_repr(PyObject* self) { if (IS_K(self)) { K k = ((_K*)self)->kobj; if (!k) { PyErr_SetString(PyExc_AssertionError, "null kobj"); return NULL; } K ks = ksk("{$5:x}", gnk(1, k)); if (!ks) { PyErr_SetString(PyExc_RuntimeError, "ksk returned null"); return NULL; } PyObject* o = Py_BuildValue("s", KC(ks)); cd(ks); return o; } return PyErr_Format(PyExc_TypeError, "not k type %s", self->ob_type->tp_name); }
PyMODINIT_FUNC init_k20(void) { PyObject* m; PyObject* c_api_object; if (PyType_Ready(&_KType) < 0) return; m = Py_InitModule3("_k20", funcs, doc); if (m == NULL) return; Py_INCREF(&_KType); PyModule_AddObject(m, "_K", (PyObject *)&_KType); if (KErr == NULL) { KErr = PyErr_NewException("_k20.kerr", NULL, NULL); if (KErr == NULL) return; } /* Initialize the C API pointer array */ PyK_API[PyK_KType_NUM] = (void*)&_KType; PyK_API[PyK_mk_K_NUM] = (void*)&_mk_K; /* Create a CObject containing the API pointer array's address */ c_api_object = PyCObject_FromVoidPtr((void*)PyK_API, NULL); if (c_api_object) { PyModule_AddObject(m, "_C_API", c_api_object); } Py_INCREF(KErr); PyModule_AddObject(m, "kerr", KErr); PyModule_AddStringConstant(m, "__version__", __version__); /* initialize k */ cd(ksk("", 0)); }
int main(int argc, char** argv) { F pi = atan(1.0)*4; K a = gi(2); K b = gi(3); K c = gi(4); K* v; cd(ksk("",0)); tst(Ki(a)==2); tst(Ki(b) + 1 == Ki(c)); cd(a); cd(b); cd(c); b = gf(1.0); c = gf(2); tst(Kf(b) + 1 == Kf(c)); cd(b); cd(c); a = gs(sp("foo")); b = ksk("`foo", 0); tst(Ks(a) == Ks(b)); cd(a); cd(b); a = ksk("2 + 3", 0); tst(Ki(a) == 5); cd(a); a = ksk("_ci 65", 0); tst(Kc(a) == 'A'); // XXX this should return type 1 uniform vector a=gnk(3,gi(11),gi(22),gi(33)); tst(a->t == 0); v = (K*)a->k; tst(Ki(v[0])+Ki(v[1])==Ki(v[2])); cd(a); { b = gsk("pi",gf(pi)); kap(&KTREE, &b); a = X(".pi"); tst(Kf(a) == pi); cd(a); } { K dir = gtn(5,0); K t; t = gsk("x",gi(1)); kap(&dir, &t); t = gsk("y",gi(2)); kap(&dir, &t); t = gsk("z",dir); kap(&KTREE, &t); a = X(".z.x"); tst(Ki(a) == 1); cd(a); a = X(".z.y"); tst(Ki(a) == 2); cd(a); } { I i; K d = gtn(5,0); K c0 = gtn(0,0); K c1 = gtn(-1,0); K t0, t1, e; t0 = gsk("a", c0); kap(&d,&t0); t1 = gsk("b", c1); kap(&d,&t1); e = gp("hello1"); kap(&c0,&e); e = gp("hello2"); kap(&c0,&e); KK(KK(d)[0])[1] = c0; i = 1; kap(&KK(KK(d)[1])[1], &i); i = 2; kap(&KK(KK(d)[1])[1], &i); //i = 1; kap(&c1, &i); //i = 2; kap(&c1, &i); //KK(KK(d)[1])[1] = c1; show(d); } //b = ksk("+/", a); //tst(Ki(b) == 66); //argc--;argv++; //DO(i, argc, {a=ksk(argv[i], 0); //ksk("`0:,/$!10;`0:,\"\n\"", 0); fprintf(stderr, "Pass:%4d, fail:%4d\n", pass, fail); if (argc > 1 && strcmp(argv[1], "-i") == 0) { boilerplate(); attend(); } }