{"id":41221,"date":"2020-02-06T20:42:46","date_gmt":"2020-02-06T17:42:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/python-gateway-v-intersystems-iris"},"modified":"2020-02-06T20:42:46","modified_gmt":"2020-02-06T17:42:46","slug":"python-gateway-v-intersystems-iris","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway v InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento \u010dl\u00e1nok je venovan\u00fd Python Gateway \u2014 komunitn\u00e9mu projektu s otvoren\u00fdm zdrojov\u00fdm k\u00f3dom pre d\u00e1tov\u00fa platformu InterSystems IRIS. Tento projekt umo\u017e\u0148uje orchestr\u00e1ciu ak\u00fdchko\u013evek algoritmov strojov\u00e9ho u\u010denia vytvoren\u00fdch v jazyku Python (hlavn\u00e9 prostredie pre mnoh\u00fdch odborn\u00edkov na d\u00e1ta), vyu\u017e\u00edva\u0165 mno\u017estvo hotov\u00fdch kni\u017en\u00edc na r\u00fdchle vytv\u00e1ranie adapt\u00edvnych, robotizovan\u00fdch analytick\u00fdch AI\/ML rie\u0161en\u00ed na platforme InterSystems IRIS. V tomto \u010dl\u00e1nku uk\u00e1\u017eem, ako m\u00f4\u017ee InterSystems IRIS orchestr\u00e1ciou procesov v jazyku Python efekt\u00edvne vykon\u00e1va\u0165 obojsmern\u00fd prenos d\u00e1t a vytv\u00e1ra\u0165 inteligentn\u00e9 biznis procesy.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Pl\u00e1n<\/h1>\n<p><\/p>\n<ol>\n<li>\u00davod.<\/li>\n<li>N\u00e1stroje.<\/li>\n<li>In\u0161tal\u00e1cia.<\/li>\n<li>API.<\/li>\n<li>Interoperabilita.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>Z\u00e1ver.<\/li>\n<li>Odkazy.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">\u00davod<\/h1>\n<p><\/p>\n<p>Python je vysoko\u00farov\u0148ov\u00fd programovac\u00ed jazyk v\u0161eobecn\u00e9ho zamerania, zameran\u00fd na zv\u00fd\u0161enie produktivity v\u00fdvoj\u00e1rov a \u010ditate\u013enosti k\u00f3du. V tejto s\u00e9rii \u010dl\u00e1nkov budem hovori\u0165 o mo\u017enostiach vyu\u017eitia jazyka Python na platforme InterSystems IRIS, pri\u010dom hlavn\u00fdm zameran\u00edm tohto \u010dl\u00e1nku je vyu\u017eitie Pythonu ako jazyka na vytv\u00e1ranie a aplik\u00e1ciu modelov strojov\u00e9ho u\u010denia.<\/p>\n<p><\/p>\n<p>Strojov\u00e9 u\u010denie (ML) je trieda met\u00f3d umelej inteligencie, ktorou je charakteristick\u00e9 nie priame rie\u0161enie \u00falohy, ale u\u010denie sa v procese rie\u0161enia mno\u017estva podobn\u00fdch \u00faloh. <\/p>\n<p><\/p>\n<p>Algoritmy a modely strojov\u00e9ho u\u010denia sa st\u00e1vaj\u00fa \u010doraz roz\u0161\u00edrenej\u0161\u00edmi. D\u00f4vodov je mnoho, ale v\u0161etko sa zni\u017euje na pr\u00edstupnos\u0165, jednoduchos\u0165 a dosahovanie praktick\u00fdch v\u00fdsledkov. Je klasifik\u00e1cia alebo dokonca modelovanie neur\u00f3nov novou technol\u00f3giou? <\/p>\n<p><\/p>\n<p>Samozrejme, \u017ee nie, av\u0161ak v s\u00fa\u010dasnosti nie je potrebn\u00e9 p\u00edsa\u0165 stovky tis\u00edc riadkov k\u00f3du na spustenie jedn\u00e9ho modelu, a n\u00e1klady na vytv\u00e1ranie a aplikovanie modelov sa neust\u00e1le zni\u017euj\u00fa.<\/p>\n<p><\/p>\n<p>N\u00e1stroje sa vyv\u00edjaj\u00fa \u2014 aj ke\u010f nem\u00e1me \u00faplne GUI orientovan\u00e9 AI\/ML n\u00e1stroje, progres, ktor\u00fd sme pozorovali u mnoh\u00fdch \u010fal\u0161\u00edch tried informa\u010dn\u00fdch syst\u00e9mov, ako je BI (od p\u00edsania k\u00f3du po pou\u017e\u00edvanie r\u00e1mcov a GUI orientovan\u00fdch konfigurovate\u013en\u00fdch rie\u0161en\u00ed), sa prejavuje aj v n\u00e1strojoch na vytv\u00e1ranie AI\/ML. U\u017e sme pre\u0161li f\u00e1zou p\u00edsania k\u00f3du a dnes pou\u017e\u00edvame r\u00e1mce na budovanie a \u0161kolenie modelov.<\/p>\n<p><\/p>\n<p>In\u00e9 vylep\u0161enia, ako napr\u00edklad mo\u017enos\u0165 roz\u0161\u00edrenia predtr\u00e9novanej modelu, kedy koncov\u00fd pou\u017e\u00edvate\u013e mus\u00ed len dokon\u010di\u0165 u\u010denie modelu na svojich \u0161pecifick\u00fdch d\u00e1tach, tie\u017e u\u013eah\u010duj\u00fa za\u010diatok pou\u017eitia strojov\u00e9ho u\u010denia. Tieto pokroky v\u00fdrazne zjednodu\u0161uj\u00fa u\u010denie strojov\u00e9ho u\u010denia ako pre odborn\u00edkov, tak aj pre firmy ako celok.<\/p>\n<p><\/p>\n<p>Na druhej strane zbierame \u010doraz viac d\u00e1t. V\u010faka jednotnej d\u00e1tovej platforme, ako je InterSystems IRIS, m\u00f4\u017eu by\u0165 v\u0161etky tieto inform\u00e1cie okam\u017eite spracovan\u00e9 a pou\u017eit\u00e9 ako vstupn\u00e9 d\u00e1ta pre modely strojov\u00e9ho u\u010denia.<\/p>\n<p><\/p>\n<p>S prechodom do cloudu je sp\u00fa\u0161\u0165anie projektov AI\/ML jednoduch\u0161ie ako kedyko\u013evek predt\u00fdm. M\u00f4\u017eeme spotrebov\u00e1va\u0165 len tie zdroje, ktor\u00e9 potrebujeme. Navy\u0161e, v\u010faka paraleliz\u00e1cii, ktor\u00fa pon\u00fakaj\u00fa cloudov\u00e9 platformy, m\u00f4\u017eeme u\u0161etri\u0165 \u010das.<\/p>\n<p><\/p>\n<p>Ale \u010do v\u00fdsledky? Tu sa to komplikuje. Existuje mno\u017estvo n\u00e1strojov na modelovanie, o ktor\u00fdch sa budem \u010falej zmie\u0148ova\u0165. Vytvori\u0165 dobr\u00fd model nie je jednoduch\u00e9, ale \u010do \u010falej? Z\u00edskanie zisku z vyu\u017e\u00edvania modelu firmou je tie\u017e netrivi\u00e1lna \u00faloha. Jadro probl\u00e9mu spo\u010d\u00edva v oddelen\u00ed analytick\u00fdch a transak\u010dn\u00fdch z\u00e1\u0165a\u017e\u00ed a modelov d\u00e1t. Ke\u010f tr\u00e9nujeme model, zvy\u010dajne to rob\u00edme na historick\u00fdch d\u00e1tach. Ale miesto pre vytvoren\u00fd model je v transak\u010dnom spracovan\u00ed d\u00e1t. \u010co je dobr\u00e9 na najlep\u0161om modeli na detekciu podvodn\u00fdch transakci\u00ed, ak ho sp\u00fa\u0161\u0165ame raz za de\u0148? Podvodn\u00edci u\u017e d\u00e1vno odi\u0161li s peniazmi. Mus\u00edme tr\u00e9nova\u0165 model na historick\u00fdch d\u00e1tach, ale mus\u00edme ho tie\u017e aplikova\u0165 v re\u00e1lnom \u010dase na nov\u00fdch prich\u00e1dzaj\u00facich d\u00e1tach, aby na\u0161e obchodn\u00e9 procesy mohli fungova\u0165 v s\u00falade s predpokladmi, ktor\u00e9 model vytvoril.<\/p>\n<p><\/p>\n<p>ML Toolkit je s\u00fabor n\u00e1strojov, ktor\u00e9ho cie\u013eom je pr\u00e1ve to: spoji\u0165 modely a transak\u010dn\u00e9 prostredie, aby sa vytvoren\u00e9 modely mohli \u013eahko pou\u017e\u00edva\u0165 priamo vo va\u0161ich obchodn\u00fdch procesoch. Python Gateway je s\u00fa\u010das\u0165ou ML Toolkit a zabezpe\u010duje integr\u00e1ciu s jazykom Python (podobne ako R Gateway, ktor\u00e1 je s\u00fa\u010das\u0165ou ML Toolkit a zabezpe\u010duje integr\u00e1ciu s jazykom R).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">N\u00e1stroj<\/h1>\n<p><\/p>\n<p>Predt\u00fdm, ako budeme pokra\u010dova\u0165, chcel by som op\u00edsa\u0165 nieko\u013eko n\u00e1strojov a kni\u017en\u00edc pre Python, ktor\u00e9 budeme nesk\u00f4r pou\u017e\u00edva\u0165.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Technol\u00f3gie<\/h2>\n<p><\/p>\n<ul>\n<li>Python je interpretovan\u00fd, vysokohodnotov\u00fd programovac\u00ed jazyk v\u0161eobecn\u00e9ho pou\u017eitia. Hlavnou v\u00fdhodou jazyka je ve\u013ek\u00e1 kni\u017enica matematick\u00fdch, ML- a AI-kni\u017en\u00edc. Rovnako ako ObjectScript, je to objektovo orientovan\u00fd jazyk, ale v\u0161etko je definovan\u00e9 dynamicky, nie staticky. V\u0161etko je tie\u017e objektom. Neskor\u0161ie \u010dl\u00e1nky predpokladaj\u00fa kr\u00e1tke zozn\u00e1menie s jazykom. Ak chcete za\u010da\u0165 s u\u010den\u00edm, odpor\u00fa\u010dam za\u010da\u0165 s <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">dokumen\u00e1cie<\/a><\/noindex>.<\/li>\n<li>Pre na\u0161e nasleduj\u00face cvi\u010denia nain\u0161talujte <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python 3.6.7 64 bit<\/a><\/noindex>.<\/li>\n<li>IDE: Pou\u017e\u00edvam <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, ale v\u0161eobecne ich <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">ve\u013ea<\/a><\/noindex>. Ak pou\u017e\u00edvate Atelier, existuje Eclipse plugin pre v\u00fdvoj\u00e1rov na Python. Ak pou\u017e\u00edvate VS Code, existuje roz\u0161\u00edrenie pre Python. <\/li>\n<li>Notebook: namiesto IDE m\u00f4\u017eete p\u00edsa\u0165 a zdie\u013ea\u0165 svoje skripty v online notebookoch. Najpopul\u00e1rnej\u0161\u00ed z nich je <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Kni\u017enice<\/h2>\n<p><\/p>\n<p>Tu je (ne\u00fapln\u00fd) zoznam kni\u017en\u00edc pre strojov\u00e9 u\u010denie:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 z\u00e1kladn\u00fd bal\u00edk pre presn\u00e9 v\u00fdpo\u010dty.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 vysoko v\u00fdkonn\u00e9 d\u00e1tov\u00e9 \u0161trukt\u00fary a n\u00e1stroje anal\u00fdzy d\u00e1t.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 tvorba grafov.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 vizualiz\u00e1cia d\u00e1t zalo\u017een\u00e1 na matplotlib.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 met\u00f3dy strojov\u00e9ho u\u010denia.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">XGBoost<\/a><\/noindex> \u2014 algoritmy strojov\u00e9ho u\u010denia v r\u00e1mci metodol\u00f3gie gradientn\u00e9ho boostingu (Gradient Boosting).<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/radimrehurek.com\/gensim\/\">Gensim<\/a><\/noindex> \u2014 NLP.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/keras.io\/\">Keras<\/a><\/noindex> \u2014 neur\u00f3nov\u00e9 siete.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 platforma na vytv\u00e1ranie modelov strojov\u00e9ho u\u010denia.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 platforma na vytv\u00e1ranie modelov strojov\u00e9ho u\u010denia zameran\u00e1 na Python.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML z r\u00f4znych modelov.<\/li>\n<\/ul>\n<p><\/p>\n<p>Technol\u00f3gie AI\/ML umo\u017e\u0148uj\u00fa zv\u00fd\u0161i\u0165 efekt\u00edvnos\u0165 a prisp\u00f4sobivos\u0165 podnikania. Navy\u0161e, dnes sa tieto technol\u00f3gie st\u00e1vaj\u00fa jednoduch\u0161\u00edmi na v\u00fdvoj a implement\u00e1ciu. Za\u010dnite sa u\u010di\u0165 technol\u00f3gie AI\/ML a ako m\u00f4\u017eu pom\u00f4c\u0165 va\u0161ej organiz\u00e1cii r\u00e1s\u0165.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">In\u0161tal\u00e1cia<\/h1>\n<p><\/p>\n<p>Existuje nieko\u013eko sp\u00f4sobov, ako nain\u0161talova\u0165 a pou\u017e\u00edva\u0165 Python Gateway:<\/p>\n<p><\/p>\n<ul>\n<li>OS\n<ul>\n<li>Windows<\/li>\n<li>Linux<\/li>\n<li>Mac<\/li>\n<\/ul>\n<\/li>\n<li>Docker\n<ul>\n<li>Pou\u017eite obraz z DockerHub<\/li>\n<li>Vytvorte si svoj vlastn\u00fd obraz<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Bez oh\u013eadu na sp\u00f4sob in\u0161tal\u00e1cie budete potrebova\u0165 zdrojov\u00fd k\u00f3d. Jedin\u00e9 miesto na stiahnutie k\u00f3du je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">str\u00e1nka vydan\u00ed<\/a><\/noindex>. Obsahuje testovan\u00e9 stabiln\u00e9 verzie, jednoducho si vezmite posledn\u00fa. V s\u00fa\u010dasnosti je to 0.8, ale \u010dasom bud\u00fa aj nov\u00e9. Neklonujte\/nahr\u00e1vajte repozit\u00e1r, stiahnite posledn\u00e9 vydanie.<\/p>\n<p><\/p>\n<h2 id=\"os\">OS<\/h2>\n<p><\/p>\n<p>Ak in\u0161talujete Python Gateway do opera\u010dn\u00e9ho syst\u00e9mu, najprv (bez oh\u013eadu na opera\u010dn\u00fd syst\u00e9m) mus\u00edte nain\u0161talova\u0165 Python. Na to:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Nain\u0161talujte Python 3.6.7 64 bit<\/a><\/noindex>. Odpor\u00fa\u010da sa nain\u0161talova\u0165 Python do predvolen\u00e9ho adres\u00e1ra.<\/li>\n<li>Nain\u0161talujte modul <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>Stiahnite k\u00f3d ObjectScript (t.j. <code>do $system.OBJ.ImportDir(\"C:InterSystemsReposPythoniscpy\", \"*.cls\", \"c\",,1)<\/code>) do akejko\u013evek oblasti s produktmi. V pr\u00edpade, \u017ee chcete, aby existuj\u00faca oblas\u0165 podporovala produkty, vykonajte: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Um\u00edstite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> do slo\u017eky <code>bin<\/code> va\u0161ej in\u0161tancie InterSystems IRIS. S\u00fabor kni\u017enice by mal by\u0165 dostupn\u00fd na ceste, ktor\u00e1 sa vracia <code>write ##class(isc.py.Callout).GetLib()<\/code>. <\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"windows\">Windows<\/h3>\n<p><\/p>\n<ol>\n<li>Uistite sa, \u017ee premenn\u00e1 prostredia <code>PYTHONHOME<\/code> ukazuje na Python 3.6.7.<\/li>\n<li>Uistite sa, \u017ee syst\u00e9mov\u00e1 premenn\u00e1 prostredia <code>PATH<\/code> s\u00favis\u00ed s premennou <code>PYTHONHOME<\/code> (alebo adres\u00e1rom, na ktor\u00fd ukazuje).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>Skontrolujte, \u010di premenn\u00e1 prostredia <code>PATH<\/code> obsahuje <code>\/usr\/lib<\/code> a <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. Pou\u017eite s\u00fabor <code>\/etc\/environment<\/code> na nastavenie premenn\u00fdch prostredia.<\/li>\n<li>V pr\u00edpade ch\u00fdb <code>undefined symbol: _Py_TrueStruct<\/code> nastavte konfigura\u010dn\u00fa hodnotu <code>PythonLib<\/code>. Rovnako v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> je sekcia Troubleshooting.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>V aktu\u00e1lnom \u010dase je podporovan\u00fd len Python 3.6.7 z <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org.<\/a><\/noindex>Skontrolujte premenn\u00fa <code>PATH<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ak ste menili premenn\u00e9 prostredia, re\u0161tartujte v\u00e1\u0161 produkt InterSystems.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Pou\u017eitie kontajnerov m\u00e1 nieko\u013eko v\u00fdhod: <\/p>\n<p><\/p>\n<ul>\n<li>Prenosnos\u0165<\/li>\n<li>Efektivita<\/li>\n<li>Izol\u00e1cia<\/li>\n<li>\u013dahkos\u0165<\/li>\n<li>Immutabilita<\/li>\n<\/ul>\n<p><\/p>\n<p>Pre\u010d\u00edtajte si tento <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">s\u00fabor \u010dl\u00e1nkov<\/a><\/noindex> pre podrobnej\u0161ie inform\u00e1cie o pou\u017e\u00edvan\u00ed Dockeru s produktmi InterSystems. <\/p>\n<p><\/p>\n<p>V\u0161etky zostavy Python Gateway s\u00fa v s\u00fa\u010dasnosti zalo\u017een\u00e9 na kontajneroch. <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Hotov\u00fd obraz<\/h3>\n<p><\/p>\n<p>Vykonajte: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, aby ste na\u010d\u00edtali a spustili Python Gateway s InterSystems IRIS Community Edition. To je v\u0161etko.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Vytvorte si svoj vlastn\u00fd obraz<\/h3>\n<p><\/p>\n<p>Na zostavenie docker obrazu vykonajte v kore\u0148ovom adres\u00e1ri repozit\u00e1ra: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nPredvolene sa obraz zostavuje na z\u00e1klade obrazu <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, ale m\u00f4\u017eete to zmeni\u0165 nastaven\u00edm premennej <code>IMAGE.<\/code>.<br \/>\nNa zostavenie z InterSystems IRIS vykonajte: `docker build --build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity\/irispy:latest &lt;.<\/p>\n<p><\/p>\n<p>Potom m\u00f4\u017eete spusti\u0165 docker obraz:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">docker run -d \n  -p 52773:52773 \n  -v \/\/:\/mount \n  --name irispy \n  intersystemscommunity\/irispy:latest \n  --key \/mount\/iris.key<\/code><\/pre>\n<p><\/p>\n<p>Ak pou\u017e\u00edvate obraz zalo\u017een\u00fd na InterSystems IRIS Community Edition, nemus\u00edte uv\u00e1dza\u0165 k\u013e\u00fa\u010d.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Koment\u00e1re<\/h3>\n<p><\/p>\n<ul>\n<li>Testovac\u00ed proces <code>isc.py.test.Process<\/code> uchov\u00e1va mno\u017estvo obr\u00e1zkov v do\u010dasnom adres\u00e1ri. Mo\u017eno budete chcie\u0165 zmeni\u0165 t\u00fato cestu na pripojen\u00fd adres\u00e1r. Na to upravte nastavenia <code>WorkingDir<\/code> stanoven\u00edm pripojenej adres\u00e1rovej \u0161trukt\u00fary.<\/li>\n<li>Na pr\u00edstup k termin\u00e1lu zadajte: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>Pr\u00edstup k Port\u00e1lu Spr\u00e1vy Syst\u00e9mu je cez pou\u017e\u00edvate\u013esk\u00e9 meno <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>Ak chcete zastavi\u0165 kontajner, zadajte: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">Kontrola in\u0161tal\u00e1cie<\/h2>\n<p><\/p>\n<p>Po tom, \u010do ste nain\u0161talovali Python Gateway, je dobr\u00e9 skontrolova\u0165, \u017ee funguje. Spustite tento k\u00f3d v termin\u00e1li InterSystems IRIS:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Callout).Setup() \nset sc = ##class(isc.py.Main).SimpleString(\"x='HELLO'\", \"x\", , .var).\nwrite var<\/code><\/pre>\n<p><\/p>\n<p>V d\u00f4sledku toho by sa malo zobrazi\u0165 <code>HELLO<\/code> \u2014 hodnota Python premennej <code>x<\/code>. Ak je vr\u00e1ten\u00fd status <code>sc<\/code> je chyba alebo <code>var<\/code> pr\u00e1zdny, skontrolujte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme \u2014 sekcia Rie\u0161enie probl\u00e9mov<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Python Gateway je nain\u0161talovan\u00fd a overili ste, \u017ee funguje. Je \u010das za\u010da\u0165 ho pou\u017e\u00edva\u0165!<br \/>\nHlavn\u00e9 rozhranie k Pythonu je <code>isc.py.Main<\/code>. Pon\u00faka nasleduj\u00face skupiny met\u00f3d (v\u0161etky vracaj\u00fa <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Spustenie k\u00f3du<\/li>\n<li>Prenos d\u00e1t<\/li>\n<li>Pomocn\u00e9<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Spustenie k\u00f3du<\/h2>\n<p><\/p>\n<p>Tieto met\u00f3dy umo\u017e\u0148uj\u00fa vykon\u00e1va\u0165 \u013eubovo\u013en\u00fd Python k\u00f3d.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 to je z\u00e1kladn\u00e1 met\u00f3da. Akceptuje 4 volite\u013en\u00e9 argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 re\u0165azec k\u00f3du na vykonanie. Symbol prechodu do nov\u00e9ho riadku: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 n\u00e1zov premennej pre n\u00e1vrat.<\/li>\n<li><code>serialization<\/code> \u2014 ako serializova\u0165 <code>returnVariable<\/code>. 0 \u2014 re\u0165azec (predvolen\u00e9), 1 \u2014 repr.<\/li>\n<li><code>result<\/code> \u2014 ByRef odkaz na premenn\u00fa, do ktorej sa uklad\u00e1 hodnota <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Hore sme vykonali:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).SimpleString(\"x='HELLO'\", \"x\", , .var).<\/code><\/pre>\n<p><\/p>\n<p>V tomto pr\u00edklade prira\u010fujeme premenn\u00fa Python <code>x<\/code> hodnota <code>Ahoj<\/code> a chceme vr\u00e1ti\u0165 hodnotu Python premennej <code>x<\/code> do ObjectScript premennej <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode je bezpe\u010dnej\u0161ia a menej obmedzen\u00e1 alternat\u00edva <code>SimpleString<\/code>.<br \/>\nRe\u0165azce v platforme InterSystems IRIS s\u00fa obmedzen\u00e9 na 3 641 144 znakov, a ak chcete vykon\u00e1va\u0165 dlh\u0161\u00ed k\u00f3d, mus\u00edte pou\u017ei\u0165 pr\u00fady.<br \/>\nPrij\u00edma dva argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 re\u0165azec alebo pr\u00fad Python k\u00f3du na vykonanie.<\/li>\n<li><code>variable<\/code> \u2014 (volite\u013ene) prira\u010fuje v\u00fdsledok vykonania <code>code<\/code> tejto Python premennej.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pr\u00edklad pou\u017eitia:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).ExecuteCode(\"2*3\", \"y\").<\/code><\/pre>\n<p><\/p>\n<p>V tomto pr\u00edklade n\u00e1sob\u00edme 2 kr\u00e1t 3 a ulo\u017e\u00edme v\u00fdsledok do Python premennej <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Prenos d\u00e1t<\/h2>\n<p><\/p>\n<p>Odovzdajte \u00fadaje do Python a sp\u00e4\u0165.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>Existuj\u00fa 4 sp\u00f4soby, ako z\u00edska\u0165 hodnotu Python premennej v InterSystems IRIS, v z\u00e1vislosti od potrebnej serializ\u00e1cie:<\/p>\n<p><\/p>\n<ul>\n<li><code>String<\/code> pre jednoduch\u00e9 d\u00e1tov\u00e9 typy a ladenie.<\/li>\n<li><code>Repr<\/code> na ukladanie jednoduch\u00fdch objektov a ladenie.<\/li>\n<li><code>JSON<\/code> na jednoduch\u00e9 manipulovanie s \u00fadajmi na strane InterSystems IRIS.<\/li>\n<li><code>Pickle<\/code> na uchovanie objektov.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tieto met\u00f3dy umo\u017e\u0148uj\u00fa z\u00edskanie premenn\u00fdch z Pythonu vo forme re\u0165azca alebo pr\u00fadov.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 z\u00edska\u0165 <code>serialization<\/code> premenn\u00e1 <code>variable<\/code> v <code>stream<\/code>. Ak <code>useString<\/code> rovn\u00e1 1 a serializ\u00e1cia je vlo\u017een\u00e1 do re\u0165azca, tak\u017ee sa vr\u00e1ti re\u0165azec a nie pr\u00fad.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 z\u00edska\u0165 JSON serializ\u00e1ciu premennej.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> -z\u00edska\u0165 Pickle (alebo Dill) serializ\u00e1ciu premennej.<\/li>\n<\/ul>\n<p><\/p>\n<p>Sk\u00fasme z\u00edska\u0165 na\u0161u premenn\u00fa <code>y<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).GetVariable(\"y\", , .val, 1)\nwrite val\n&gt;6<\/code><\/pre>\n<p><\/p>\n<h3 id=\"intersystems-iris---python\">InterSystems IRIS -&gt; Python<\/h3>\n<p><\/p>\n<p>Na\u010d\u00edtavame \u00fadaje z InterSystems IRIS do Pythonu.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 vytv\u00e1ra s\u00fabor \u00fadajov (pandas <code>dataframe<\/code> alebo <code>list<\/code>) z sql dopytu a nastavuje ho na Python premenn\u00fa <code>variable<\/code>. Bal\u00edk <code>isc.py<\/code> mus\u00ed by\u0165 dostupn\u00fd v oblasti <code>namespace<\/code> \u2014 tam sa vykon\u00e1 dopyt.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 na\u010d\u00edtava \u00fadaje glob\u00e1lu <code>global<\/code> od subskriptu <code>start<\/code> do <code>end<\/code> do Pythonu ako premenn\u00fa typu <code>type<\/code>: <code>list<\/code>, alebo pandas <code>dataframe<\/code>. Popis volite\u013en\u00fdch argumentov <code>maskova\u0165<\/code> a <code>labels<\/code> je dostupn\u00fd v dokument\u00e1cii triedy a repozit\u00e1riu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Dokument\u00e1cia prenosu d\u00e1t<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 na\u010d\u00edtava \u00fadaje triedy <code>class<\/code> od id <code>start<\/code> do <code>end<\/code> do Pythonu ako premenn\u00fa typu <code>type<\/code>: <code>list<\/code>, alebo pandas <code>dataframe<\/code>. <code>properties<\/code> \u2014 zoznam (odde\u013eova\u010d \u2014 \u010diarka) vlastnost\u00ed triedy, ktor\u00e9 sa maj\u00fa na\u010d\u00edta\u0165 do s\u00faboru \u00fadajov. Masky s\u00fa podporovan\u00e9. <code>*<\/code> a <code>?<\/code>. Predvolen\u00e1 hodnota \u2014 <code>*<\/code> (v\u0161etky vlastnosti). Vlastnos\u0165 <code>%%CLASSNAME<\/code> sa ignoruje.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 na\u010d\u00edtava \u00fadaje tabu\u013eky <code>table<\/code> od id <code>start<\/code> do <code>end<\/code> do Pythonu.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 je univerz\u00e1lny (ak\u00fdko\u013evek platn\u00fd SQL dopyt bude odoslan\u00fd do Pythonu). Av\u0161ak, <code>ExecuteGlobal<\/code> a jeho ob\u00e1lky <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> maj\u00fa ur\u010dit\u00e9 obmedzenia. S\u00fa ove\u013ea r\u00fdchlej\u0161ie (3-5 kr\u00e1t r\u00fdchlej\u0161ie ako ODBC ovl\u00e1da\u010d a 20 kr\u00e1t r\u00fdchlej\u0161ie <code>ExecuteQuery<\/code>). \u010eal\u0161ie inform\u00e1cie v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Dokument\u00e1cia prenosu d\u00e1t<\/a><\/noindex>.<br \/>\nV\u0161etky tieto met\u00f3dy podporuj\u00fa prenos \u00fadajov z akejko\u013evek oblasti. Bal\u00edk <code>isc.py<\/code> mus\u00ed by\u0165 v cie\u013eovej oblasti dostupn\u00fd.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 prenos v\u00fdsledkov ak\u00e9hoko\u013evek platn\u00e9ho SQL dopytu na Python. Toto je najpomal\u0161ia met\u00f3da prenosu \u00fadajov. Pou\u017eite ju, ak <code>ExecuteGlobal<\/code> a jeho ob\u00e1lky nie s\u00fa dostupn\u00e9.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>query<\/code> \u2014 sql dopyt.<\/li>\n<li><code>variable<\/code> \u2014 n\u00e1zov Python premennej, do ktorej sa zapisuj\u00fa \u00fadaje.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> alebo Pandas <code>dataframe<\/code>.<\/li>\n<li><code>namespace<\/code> \u2014 oblas\u0165, v ktorej sa bude vykon\u00e1va\u0165 dopyt.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeglobal\">ExecuteGlobal<\/h3>\n<p><\/p>\n<p><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 prenos glob\u00e1lu do Pythonu.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>global<\/code> \u2014 n\u00e1zov glob\u00e1lu bez <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 n\u00e1zov Python premennej, do ktorej sa zapisuj\u00fa \u00fadaje.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> alebo Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 prv\u00fd subskript glob\u00e1lu. Povinne <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 posledn\u00fd subskript glob\u00e1lu. Povinne <code>%Integer<\/code>.<\/li>\n<li><code>maskova\u0165<\/code> \u2014 maska hodn\u00f4t glob\u00e1lnej premennej. Maska m\u00f4\u017ee by\u0165 krat\u0161ia ako po\u010det pol\u00ed v glob\u00e1le (v tomto pr\u00edpade bud\u00fa posledn\u00e9 polia presko\u010den\u00e9). Ako form\u00e1tova\u0165 masku:\n<ul>\n<li><code>+<\/code> preda\u0165 hodnotu tak, ako je.<\/li>\n<li><code>-<\/code> presko\u010di\u0165 hodnotu.<\/li>\n<li><code>b<\/code> \u2014 Logick\u00fd typ (<code>0<\/code> \u2014 <code>False<\/code>, v\u0161etko ostatn\u00e9 \u2014 <code>Pravda<\/code>).<\/li>\n<li><code>d<\/code> \u2014 D\u00e1tum (od $horolog, na Windows od 1970, na Linux od 1900).<\/li>\n<li><code>t<\/code> \u2014 \u010cas ($horolog, sekundy po polnoci).<\/li>\n<li><code>m<\/code> \u2014 \u010casov\u00e1 pe\u010diatka (re\u0165azec vo form\u00e1te ROK-MESECI-DEN HODINA:MIN\u00daTA:SEKUNDA).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %Zoznam n\u00e1zvov st\u013apcov. Prv\u00fdm prvkom je n\u00e1zov subskriptu.<\/li>\n<li><code>namespace<\/code> \u2014 oblas\u0165, v ktorej sa bude vykon\u00e1va\u0165 dopyt.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Obal na <code>ExecuteGlobal<\/code>. Na z\u00e1klade defin\u00edcie triedy pripravuje volanie <code>ExecuteGlobal<\/code> a vol\u00e1 ho.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 odovzd\u00e1vanie d\u00e1t triedy v Pythone.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>class<\/code> \u2014 meno triedy<\/li>\n<li><code>variable<\/code> \u2014 n\u00e1zov Python premennej, do ktorej sa zapisuj\u00fa \u00fadaje.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> alebo Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 po\u010diato\u010dn\u00fd Id.<\/li>\n<li><code>end<\/code> \u2014 kone\u010dn\u00fd Id<\/li>\n<li><code>properties<\/code> \u2014 zoznam (odde\u013eova\u010d \u2014 \u010diarka) vlastnost\u00ed triedy, ktor\u00e9 sa maj\u00fa na\u010d\u00edta\u0165 do s\u00faboru \u00fadajov. Masky s\u00fa podporovan\u00e9. <code>*<\/code> a <code>?<\/code>. Predvolen\u00e1 hodnota \u2014 <code>*<\/code> (v\u0161etky vlastnosti). Vlastnos\u0165 <code>%%CLASSNAME<\/code> sa ignoruje.<\/li>\n<li><code>namespace<\/code> \u2014 oblas\u0165, v ktorej sa bude vykon\u00e1va\u0165 dopyt.<\/li>\n<\/ul>\n<p><\/p>\n<p>V\u0161etky vlastnosti sa odovzd\u00e1vaj\u00fa tak, ako s\u00fa, okrem vlastnost\u00ed typov <code>te<\/code>, <code>%\u010cas<\/code>, <code>%Logick\u00e1 hodnota<\/code> a <code>%\u010casov\u00e1 pe\u010diatka<\/code> \u2014 s\u00fa konvertovan\u00e9 do zodpovedaj\u00facich tried Pythonu.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Obal na <code>ExecuteClass<\/code>. Prevod\u00ed n\u00e1zov tabu\u013eky na n\u00e1zov triedy a vol\u00e1 <code>ExecuteClass<\/code>. Podpis:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 odovzd\u00e1vanie d\u00e1t tabu\u013eky v Pythone.<\/p>\n<p><\/p>\n<p>Argumenty:<\/p>\n<p><\/p>\n<ul>\n<li><code>table<\/code> \u2014 n\u00e1zov tabu\u013eky.<br \/>\nV\u0161etky ostatn\u00e9 argumenty sa odovzd\u00e1vaj\u00fa tak, ako s\u00fa, do <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">Pozn\u00e1mky<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> pracuj\u00fa rovnako r\u00fdchlo.<\/li>\n<li><code>ExecuteGlobal<\/code> 20-kr\u00e1t r\u00fdchlej\u0161ie ako <code>ExecuteQuery<\/code> na ve\u013ek\u00fdch mno\u017estv\u00e1ch d\u00e1t (\u010das prenosu viac ako &gt;0.01 sekundy).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> pracuj\u00fa na glob\u00e1loch s touto \u0161trukt\u00farou: <code>^global(k\u013e\u00fa\u010d) = $lb(prop1, prop2, ..., propN)<\/code> kde <code>k\u013e\u00fa\u010d<\/code> \u2014 cel\u00e9 \u010d\u00edslo.<\/li>\n<li>Pre <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> podporovan\u00fd rozsah hodn\u00f4t <code>te<\/code> zodpoved\u00e1 rozsahu <code>mktime<\/code> a z\u00e1vis\u00ed od OS (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/c-runtime-library\/reference\/mktime-mktime32-mktime64?view=vs-2019\">windows<\/a><\/noindex>: 1970-01-01, <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/3\/mktime\">linux<\/a><\/noindex> 1900-01-01, <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/System\/Conceptual\/ManPages_iPhoneOS\/man3\/mktime.3.html\">mac<\/a><\/noindex>). Pou\u017eite <code>%\u010casov\u00e1 pe\u010diatka<\/code>na odovzdanie d\u00e1t mimo tohto rozsahu alebo pou\u017eite pandas dataframe, preto\u017ee toto obmedzenie plat\u00ed len pre zoznam.<\/li>\n<li>Pre <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> a <code>ExecuteTable<\/code> v\u0161etky argumenty okrem zdroja d\u00e1t (glob\u00e1ly, triedy alebo tabu\u013eky) a premenn\u00e1 s\u00fa volite\u013en\u00e9.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">Pr\u00edklady<\/h2>\n<p><\/p>\n<p>Testovacia trieda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Person<\/a><\/noindex> obsahuje met\u00f3du, ktor\u00e1 demon\u0161truje v\u0161etky mo\u017enosti odovzd\u00e1vania d\u00e1t:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set global = \"isc.py.test.PersonD\"\nset class = \"isc.py.test.Person\"\nset table = \"isc_py_test.Person\"\nset query = \"SELECT * FROM isc_py_test.Person\"\n\n\/\/ Spolo\u010dn\u00e9 argumenty\nset variable = \"df\"\nset type = \"dataframe\"\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ Sp\u00f4sob 0: ExecuteGlobal bez argumentov\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ Sp\u00f4sob 1: ExecuteGlobal s argumentmi    \n\/\/ Pri prenose glob\u00e1la sa n\u00e1zvy pol\u00ed definuj\u00fa ru\u010dne\n\/\/ globalKey - n\u00e1zov subskriptu \nset labels = $lb(\"globalKey\", \"Name\", \"DOB\", \"TS\", \"RandomTime\", \"AgeYears\", \"AgeDecimal\", \"AgeDouble\", \"Bool\")\n\n\/\/ mask obsahuje o 1 prvok menej ako labels, preto\u017ee \"globalKey\" - n\u00e1zov subskryptu\n\/\/ Presko\u010d\u00edme %%CLASSNAME\nset mask = \"-+dmt+++b\"\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ Sp\u00f4sob 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ Sp\u00f4sob 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ Sp\u00f4sob 4: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>Zavolajte met\u00f3du <code>do ##class(isc.py.test.Person).Test()<\/code> aby ste videli, ako funguj\u00fa v\u0161etky met\u00f3dy prenosu d\u00e1t.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">Pomocn\u00e9 met\u00f3dy<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(premenn\u00e1, serializ\u00e1cia, .definovan\u00e1, .typ, .d\u013a\u017eka)<\/code> \u2014 z\u00edska\u0165 inform\u00e1cie o premennej: \u010di je definovan\u00e1, trieda a d\u013a\u017eka serializ\u00e1cie.<\/li>\n<li><code>GetVariableDefined(premenn\u00e1, .definovan\u00e1)<\/code> \u2014 \u010di je premenn\u00e1 definovan\u00e1.<\/li>\n<li><code>GetVariableType(premenn\u00e1, .typ)<\/code> \u2014 z\u00edska\u0165 triedu premennej.<\/li>\n<li><code>GetStatus()<\/code> \u2014 z\u00edska\u0165 a odstr\u00e1ni\u0165 posledn\u00fa v\u00fdnimku na strane Pythonu.<\/li>\n<li><code>GetModuleInfo(modul, .importovan\u00fd, .alias)<\/code> \u2014 z\u00edska\u0165 premenn\u00fa modulu a stav importu.<\/li>\n<li><code>GetFunctionInfo(funkcia, .definovan\u00e1, .typ, .dokument\u00e1cia, .podpis, .argumenty)<\/code> \u2014 z\u00edska\u0165 inform\u00e1cie o funkcii.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Interoperabilita<\/h1>\n<p><\/p>\n<p>Nau\u010dili ste sa vola\u0165 Python Gateway z termin\u00e1lu, teraz za\u010dneme pou\u017e\u00edva\u0165 ho v produkcii. Z\u00e1klad interakcie s Python v tomto re\u017eime je <code>isc.py.ens.Operation<\/code>. Umo\u017e\u0148uje n\u00e1m:<\/p>\n<p><\/p>\n<ul>\n<li>Sp\u00fa\u0161\u0165a\u0165 k\u00f3d na Pythone<\/li>\n<li>Uklada\u0165\/Obnovova\u0165 kontext Pythonu<\/li>\n<li>Na\u010d\u00edta\u0165 a z\u00edska\u0165 \u00fadaje z Pythonu<\/li>\n<\/ul>\n<p><\/p>\n<p>V podstate, oper\u00e1cia Python je obal nad <code>isc.py.Main<\/code>. Oper\u00e1cia <code>isc.py.ens.Operation<\/code> umo\u017e\u0148uje interakciu s procesom Python z produktov InterSystems IRIS. Podporuje p\u00e4\u0165 typov po\u017eiadaviek:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> na vykonanie Python k\u00f3du. Vr\u00e1ti <code>isc.py.msg.ExecutionResponse<\/code> s v\u00fdsledkom vykonania a hodnotami po\u017eadovan\u00fdch premenn\u00fdch.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> na vykonanie Python k\u00f3du. Vr\u00e1ti <code>isc.py.msg.StreamExecutionResponse<\/code> s v\u00fdsledkom vykonania a hodnotami po\u017eadovan\u00fdch premenn\u00fdch. Anal\u00f3g <code>isc.py.msg.ExecutionRequest<\/code>, ale prij\u00edma a vracia pr\u00fady namiesto re\u0165azcov.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> na prenos v\u00fdsledku vykonania SQL dotazu. Vr\u00e1ti <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code>\/<code>isc.py.msg.ClassRequest<\/code>\/<code>isc.py.msg.TableRequest<\/code> na pren\u00e1\u0161anie d\u00e1t glob\u00e1lneho\/kontroln\u00e9ho\/z\u00e1znamov\u00e9ho. Vr\u00e1ti <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> na ulo\u017eenie kontextu Pythonu. Vr\u00e1ti <code>Ens.StringResponse<\/code> s identifik\u00e1torom kontextu.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> na obnovenie kontextu Pythonu.<\/p>\n<p><\/p>\n<p>Okrem toho, <code>isc.py.ens.Operation<\/code> m\u00e1 dva nastavenia:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 v\u00fdber triedy implementuj\u00facej rozhranie <code>isc.py.init.Abstract<\/code>. M\u00f4\u017ee by\u0165 pou\u017eit\u00fd na na\u010d\u00edtanie funkci\u00ed, modulov, tried a podobne. Vykon\u00e1va sa iba raz pri spusten\u00ed procesu.<\/li>\n<li><code>PythonLib<\/code> \u2014 (iba pre Linux) ak vid\u00edte chyby pri na\u010d\u00edtan\u00ed, nastavte jeho hodnotu na <code>libpython3.6m.so<\/code> alebo dokonca na \u00fapln\u00fa cestu k kni\u017enici Python. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">Vytv\u00e1ranie obchodn\u00fdch procesov<\/h2>\n<p><\/p>\n<p>Existuj\u00fa dve triedy, ktor\u00e9 u\u013eah\u010duj\u00fa v\u00fdvoj obchodn\u00fdch procesov:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> umo\u017e\u0148uje extrahova\u0165 anot\u00e1cie z aktiv\u00edt so substit\u00faciou premenn\u00fdch.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> umo\u017e\u0148uje jednoducho testova\u0165 obchodn\u00e9 procesy s Python. M\u00f4\u017ee vykon\u00e1va\u0165 obchodn\u00fd proces (\u010dasti v jazyku Python) v aktu\u00e1lnom procese.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">Zamie\u0148anie premenn\u00fdch<\/h2>\n<p><\/p>\n<p>V\u0161etky obchodn\u00e9 procesy, ktor\u00e9 ded\u00ed od <code>isc.py.ens.ProcessUtils<\/code>, m\u00f4\u017eu pou\u017e\u00edva\u0165 met\u00f3du <code>GetAnnotation(name)<\/code> na z\u00edskanie hodnoty anot\u00e1cie aktivity pod\u013ea jej n\u00e1zvu. Anot\u00e1cia aktivity m\u00f4\u017ee obsahova\u0165 premenn\u00e9, ktor\u00e9 bud\u00fa vypo\u010d\u00edtan\u00e9 na strane InterSystems IRIS pred odoslan\u00edm do Python. Tu je syntax substit\u00facie premenn\u00fdch:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 volanie met\u00f3dy<\/li>\n<li><code>#{expr}<\/code> \u2014 vykona\u0165 k\u00f3d v ObjectScript.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pr\u00edklad je k dispoz\u00edcii v testovacom obchodnom procese <code>isc.py.test.Process<\/code>, napr\u00edklad v aktivite <code>Maticov\u00e1 korel\u00e1cia: Graf<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. V tomto pr\u00edklade:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> vracia vlastnos\u0165 WorkDirectory objektu <code>process<\/code>, ktor\u00fd je in\u0161tanciou triedy <code>isc.py.test.Process<\/code> t.j. aktu\u00e1lneho obchodn\u00e9ho procesu.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> vyvol\u00e1va met\u00f3du <code>Integer<\/code> triedy <code>%PopulateUtils<\/code>, posielaj\u00fac argumenty <code>1<\/code> a <code>100<\/code>, vracia n\u00e1hodn\u00e9 cel\u00e9 \u010d\u00edslo v rozsahu <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Testovac\u00ed obchodn\u00fd proces<\/h2>\n<p><\/p>\n<p>Testov\u00fd produkt a testovac\u00ed obchodn\u00fd proces s\u00fa k dispoz\u00edcii predvolene ako s\u00fa\u010das\u0165 Python Gateway. Na ich pou\u017eitie:<\/p>\n<p><\/p>\n<ol>\n<li>V termin\u00e1li OS vykonajte: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>V termin\u00e1li InterSystems IRIS vykonajte: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> na naplnenie testovac\u00edch \u00fadajov.<\/li>\n<li>Spustite produkt <code>isc.py.test.Production<\/code>.<\/li>\n<li>Odosla\u0165 po\u017eiadavku typu <code>Ens.Request<\/code> v <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pozrime sa, ako to v\u0161etko funguje dohromady. Otvorte <code>isc.py.test.Process<\/code> v editore BPL:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/6f83b22e0167e2699d285f3e32bfe373.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"ispolnenie-koda-1\">Spustenie k\u00f3du<\/h3>\n<p><\/p>\n<p>Najd\u00f4le\u017eitej\u0161\u00edm volan\u00edm je vykonanie k\u00f3du Python:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pou\u017e\u00edva sa po\u017eiadavka <code>isc.py.msg.ExecutionRequest<\/code>, tu s\u00fa jej vlastnosti:<\/p>\n<p><\/p>\n<ul>\n<li><code>K\u00f3d<\/code> \u2014 k\u00f3d Python.<\/li>\n<li><code>SeparateLines<\/code> \u2014 rozde\u013eova\u0165 k\u00f3d na riadky na vykonanie. <code>$c(10)<\/code> (<code>n<\/code>) sl\u00fa\u017ei na rozdelenie riadkov. Upozor\u0148ujeme, \u017ee NIE je odpor\u00fa\u010dan\u00e9 spracov\u00e1va\u0165 spr\u00e1vu cel\u00fa naraz, t\u00e1to funkcia je ur\u010den\u00e1 iba na spracovanie <code>def<\/code> a podobn\u00fdch viacer\u00fdch v\u00fdrazov. Predvolene <code>0<\/code>.<\/li>\n<li><code>Premenn\u00e9<\/code> \u2014 zoznam premenn\u00fdch oddelen\u00fdch \u010diarkami, ktor\u00e9 bud\u00fa pridan\u00e9 do odpovede.<\/li>\n<li><code>Serialization<\/code> \u2014 Ako serializova\u0165 premenn\u00e9, ktor\u00e9 chceme vr\u00e1ti\u0165. Mo\u017enosti: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> a <code>Dill<\/code>, predvolene <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>V na\u0161om pr\u00edpade len nastavujeme vlastnos\u0165 <code>K\u00f3d<\/code>, tak\u017ee v\u0161etky ostatn\u00e9 vlastnosti pou\u017e\u00edvaj\u00fa predvolen\u00e9 hodnoty. Nastavujeme ju volan\u00edm <code>process.GetAnnotation(\"Import pandas\")<\/code>, ktor\u00e1 pri behu vracia anot\u00e1ciu po vykonan\u00ed substit\u00facie premenn\u00fdch. Nakoniec bude k\u00f3d <code>import pandas as pd<\/code> odovzdan\u00fd do Pythonu. <code>GetAnnotation<\/code> m\u00f4\u017ee by\u0165 u\u017eito\u010dn\u00e1 na z\u00edskanie viacer\u00fdch riadkov\u00fdch skriptov Python, ale neexistuj\u00fa \u017eiadne obmedzenia na tento sp\u00f4sob z\u00edskania k\u00f3du. M\u00f4\u017eete nastavi\u0165 vlastnos\u0165 <code>K\u00f3d<\/code> ak\u00fdmko\u013evek sp\u00f4sobom, ktor\u00fd v\u00e1m vyhovuje.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Z\u00edskavanie premenn\u00fdch<\/h3>\n<p><\/p>\n<p>\u010eal\u0161\u00ed zauj\u00edmav\u00fd v\u00fdzvou s pou\u017eit\u00edm <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Correlation Matrix: Tabular<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vypo\u010d\u00edtava Matricu Korel\u00e1cie na strane Python a extrahuje premenn\u00fa <code>corrmat<\/code> sp\u00e4\u0165 do InterSystems IRIS vo form\u00e1te JSON, prostredn\u00edctvom nastavenia vlastnost\u00ed po\u017eiadavky:<\/p>\n<p><\/p>\n<ul>\n<li><code>Premenn\u00e9<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serialization<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>M\u00f4\u017eeme vidie\u0165 v\u00fdsledky v Visual Trace:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A ak potrebujeme t\u00fato hodnotu v BP, m\u00f4\u017eeme ju z\u00edska\u0165 takto: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Prenos d\u00e1t<\/h3>\n<p><\/p>\n<p>\u010ealej sa budeme rozpr\u00e1va\u0165 o prenose \u00fadajov z InterSystems IRIS do Python, v\u0161etky po\u017eiadavky na prenos \u00fadajov realizuj\u00fa rozhranie <code>isc.py.msg.DataRequest<\/code>, ktor\u00e9 poskytuje nasleduj\u00face vlastnosti:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 Python premenn\u00e1, do ktorej sa zapisuj\u00fa d\u00e1ta.<\/li>\n<li><code>Typ<\/code> \u2014 typ premennej: <code>dataframe<\/code> (pandas dataframe) alebo <code>list<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 oblas\u0165, z ktorej z\u00edskavame d\u00e1ta. Bal\u00edk <code>isc.py<\/code> mus\u00ed by\u0165 dostupn\u00fd v tejto oblasti. M\u00f4\u017ee to by\u0165 oblas\u0165 bez podpory produktov.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na z\u00e1klade tohto rozhrania s\u00fa implementovan\u00e9 4 triedy po\u017eiadaviek:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 nastavte vlastnos\u0165 <code>Query<\/code> na prenos SQL po\u017eiadavky.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 nastavte vlastnos\u0165 <code>Class<\/code> na prenos \u00fadajov triedy.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 nastavi\u0165 vlastnos\u0165 <code>Table<\/code> na prenos \u00fadajov tabu\u013eky.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 nastavi\u0165 vlastnos\u0165 <code>Global<\/code> na prenos \u00fadajov glob\u00e1lnej premennej.<\/li>\n<\/ul>\n<p><\/p>\n<p>V teste sledujte aktivitu <code>RAW<\/code>, kde <code>isc.py.msg.QueryRequest<\/code> zobrazen\u00fa v akcii.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/f6a2a520594341b9d37110bcd24b1015.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"sohranenievosstanovlenie-python-konteksta\">Ulo\u017eenie\/obnovenie kontextu Python<\/h3>\n<p><\/p>\n<p>Napokon m\u00f4\u017eeme ulo\u017ei\u0165 kontext Python v InterSystems IRIS, aby sme to urobili, po\u0161leme <code>isc.py.msg.SaveRequest<\/code> s argumentmi:<\/p>\n<p><\/p>\n<ul>\n<li><code>Mask<\/code> \u2014 Ukladaj\u00fa sa len premenn\u00e9, ktor\u00e9 vyhovuj\u00fa maske. Podporuj\u00fa sa <code>*<\/code> a <code>?<\/code>. Pr\u00edklad: <code>\"Data*, Figura?\"<\/code>. Ako predvolen\u00e9 <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Maxim\u00e1lna d\u013a\u017eka uchov\u00e1vanej premennej. Ak je serializ\u00e1cia premennej dlh\u0161ia, bude ignorovan\u00e1. Nastavte 0, aby ste z\u00edskali premenn\u00e9 akejko\u013evek d\u013a\u017eky. Predvolene <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>N\u00e1zov<\/code> \u2014 N\u00e1zov kontextu (volite\u013en\u00e9).<\/li>\n<li><code>Description<\/code> \u2014 Popis kontextu (volite\u013en\u00e9).<\/li>\n<\/ul>\n<p><\/p>\n<p>Vracia <code>Ens.StringResponse<\/code> s <code>Id<\/code> ulo\u017een\u00e9ho kontextu. V testovacom procese sledujte aktivitu <code>Ulo\u017ei\u0165 kontext<\/code>.<\/p>\n<p><\/p>\n<p>Pr\u00edslu\u0161n\u00fd po\u017eiadavok <code>isc.py.msg.RestoreRequest<\/code> na na\u010d\u00edtanie kontextu z InterSystems IRIS do Pythonu:<\/p>\n<p><\/p>\n<ul>\n<li><code>ContextId<\/code> \u2014 identifik\u00e1tor kontextu.<\/li>\n<li><code>Vymaza\u0165<\/code> \u2014 vy\u010disti\u0165 kontext pred obnoven\u00edm.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"jupyter-notebook\">Jupyter Notebook<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter Notebook<\/a><\/noindex> \u2014 je to webov\u00e1 aplik\u00e1cia s otvoren\u00fdm zdrojov\u00fdm k\u00f3dom, ktor\u00e1 umo\u017e\u0148uje vytv\u00e1ra\u0165 notebooky obsahuj\u00face k\u00f3d, vizualiz\u00e1cie a text a publikova\u0165 ich. Python Gateway umo\u017e\u0148uje zobrazi\u0165 a upravova\u0165 BPL procesy vo forme Jupyter Notebook. V\u0161imnite si, \u017ee sa v s\u00fa\u010dasnosti pou\u017e\u00edva be\u017en\u00fd vykon\u00e1vate\u013e Python 3.<\/p>\n<p><\/p>\n<p>Toto roz\u0161\u00edrenie predpoklad\u00e1, \u017ee anot\u00e1cie obsahuj\u00fa k\u00f3d Python a pou\u017e\u00edvaj\u00fa n\u00e1zvy aktiv\u00edt ako predch\u00e1dzaj\u00face nadpisy. Teraz je mo\u017en\u00e9 vyv\u00edja\u0165 obchodn\u00e9 procesy PythonGateway v Jupyter Notebook. Tu je, \u010do je mo\u017en\u00e9: <\/p>\n<p><\/p>\n<ul>\n<li>Vytv\u00e1ra\u0165 nov\u00e9 obchodn\u00e9 procesy<\/li>\n<li>Odstra\u0148ova\u0165 obchodn\u00e9 procesy<\/li>\n<li>Vytv\u00e1ra\u0165 nov\u00e9 aktivity<\/li>\n<li>Upravova\u0165 aktivity<\/li>\n<li>Odstra\u0148ova\u0165 aktivity<\/li>\n<\/ul>\n<p><\/p>\n<p>Tu s\u00fa <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">demo-video<\/a><\/noindex>. A nieko\u013eko sn\u00edmok obrazovky:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Sprievodca procesmi<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/6da1aa0a026c34238c57f96e82742bb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"redaktor-processa\">Editor procesu<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/651031fe9792cc1c5926aa386f4e37fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ustanovka-1\">In\u0161tal\u00e1cia<\/h2>\n<p><\/p>\n<ol>\n<li>Budete potrebova\u0165 InterSystems IRIS 2019.2+.<\/li>\n<li>Nain\u0161talujte PythonGateway v0.8+ (vy\u017eaduje iba <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> a <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>Aktualizujte k\u00f3d ObjectScript z repozit\u00e1ra.<\/li>\n<li>Vykonajte <code>do ##class(isc.py.util.Jupyter).Install()<\/code> a ria\u010fte sa pokynmi.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokument\u00e1cia<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">Zhrnutie<\/h1>\n<p><\/p>\n<p>MLToolkit je s\u00fabor n\u00e1strojov, ktor\u00e9ho cie\u013eom je kombinova\u0165 modely a transak\u010dn\u00e9 prostredie, aby boli vytvoren\u00e9 modely \u013eahko pou\u017eite\u013en\u00e9 priamo vo va\u0161ich obchodn\u00fdch procesoch. Python Gateway je s\u00fa\u010das\u0165ou MLToolkit a zabezpe\u010duje integr\u00e1ciu s jazykom Python, \u010do umo\u017e\u0148uje orchestr\u00e1ciu ak\u00fdchko\u013evek algoritmov strojov\u00e9ho u\u010denia vytvoren\u00fdch v jazyku Python (hlavn\u00e9 prostredie pre mnoh\u00fdch odborn\u00edkov na d\u00e1ta) a vyu\u017e\u00edva\u0165 mno\u017estvo pripraven\u00fdch kni\u017en\u00edc na r\u00fdchle vytv\u00e1ranie adaptabiln\u00fdch, robotick\u00fdch analytick\u00fdch AI\/ML rie\u0161en\u00ed na platforme InterSystems IRIS.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Odkazy<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">Predch\u00e1dzaj\u00faci \u010dl\u00e1nok<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openexchange.intersystems.com\/package\/PythonGateway\">Python Gateway<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openexchange.intersystems.com\/package\/Python-Gateway-Samples\">Uk\u00e1\u017eky Python Gateway<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/Convergent-Analytics\">Convergent-Analytics<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python 3.6.7 64 bit<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">Dokument\u00e1cia a kurzy Pythonu<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>Skupina pou\u017e\u00edvate\u013eov MLToolkit je s\u00fakromn\u00fd GitHub repozit\u00e1r, ktor\u00fd bol vytvoren\u00fd ako s\u00fa\u010das\u0165 firemnej GitHub organiz\u00e1cie InterSystems. Je ur\u010den\u00fd extern\u00fdm pou\u017e\u00edvate\u013eom, ktor\u00ed in\u0161taluj\u00fa, \u0161tuduj\u00fa alebo u\u017e pou\u017e\u00edvaj\u00fa komponenty MLToolkit, vr\u00e1tane Python Gateway. V skupine je k dispoz\u00edcii mno\u017estvo implementovan\u00fdch pr\u00edpadov\u00fdch \u0161t\u00fadi\u00ed (so zdrojov\u00fdm k\u00f3dom a testovac\u00edmi \u00fadajmi) v oblastiach marketingu, v\u00fdroby, medic\u00edny a mnoh\u00fdch \u010fal\u0161\u00edch odvetviach. Ak sa chcete pripoji\u0165 k skupine pou\u017e\u00edvate\u013eov ML Toolkit, pros\u00edm, po\u0161lite kr\u00e1tku spr\u00e1vu na e-mailov\u00fa adresu: <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com?subject=MLToolkit%20user%20group&amp;body=Hello.%0A%0APlease%20add%20me%20to%20ML%20Toolkit%20user%20group%3A%0A%0A-%20GitHub%20username%3A%20%0A%0A-%20Name%3A%20%0A%0A-%20Company%3A%20%0A%0A-%20Position%3A%0A-%20Country%3A%20%0A%0A\">MLToolkit@intersystems.com<\/a><\/noindex> a vo svojom e-maile uve\u010fte nasleduj\u00face \u00fadaje:<\/p>\n<p><\/p>\n<ul>\n<li>Pou\u017e\u00edvate\u013esk\u00e9 meno GitHub<\/li>\n<li>Organiz\u00e1cia (v ktorej pracujete alebo \u0161tudujete)<\/li>\n<li>Poz\u00edcia (va\u0161a aktu\u00e1lna poz\u00edcia vo va\u0161ej organiz\u00e1cii, alebo \"\u0160tudent\", alebo \"Nez\u00e1visl\u00fd\").<\/li>\n<li>Krajina<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00fdm, ktor\u00ed pre\u010d\u00edtali \u010dl\u00e1nok a maj\u00fa z\u00e1ujem o mo\u017enosti InterSystems IRIS ako platformy na v\u00fdvoj alebo hosting mechanizmov umelej inteligencie a strojov\u00e9ho u\u010denia, pon\u00fakame diskusiu o mo\u017en\u00fdch scen\u00e1roch, ktor\u00e9 s\u00fa pre va\u0161u firmu zauj\u00edmav\u00e9. Radi presk\u00famame potreby va\u0161ej firmy a spolo\u010dne ur\u010d\u00edme pl\u00e1n akci\u00ed; kontaktn\u00e1 e-mailov\u00e1 adresa na\u0161ej expertn\u00e9 skupiny AI\/ML je: <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/486984\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 Data Scientists), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0445, \u0440\u043e\u0431\u043e\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 AI\/ML-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 InterSystems IRIS. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41222,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sk\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Python Gateway \u0432 InterSystems IRIS | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-06T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-06T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Python Gateway v InterSystems IRIS | ProHoster","description":"Tento \u010dl\u00e1nok sa venuje Python Gateway \u2014 komunitn\u00e9mu projektu s otvoren\u00fdm zdrojov\u00fdm k\u00f3dom pre platformu d\u00e1t InterSystems IRIS.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Python Gateway \u0432 InterSystems IRIS | ProHoster","og:description":"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.","og:url":"https:\/\/prohoster.info\/sk\/blog\/python-gateway-v-intersystems-iris","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-06T17:42:46+00:00","article:modified_time":"2020-02-06T17:42:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41221","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:21:33","updated":"2022-09-30 00:32:37","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}