{"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\/lv\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u0160is raksts ir velt\u012bts Python Gateway \u2014 kopienas projektam ar atv\u0113rt\u0101 koda kodu datu platformai InterSystems IRIS. \u0160is projekts \u013cauj or\u0137estr\u0113t jebk\u0101dus ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s algoritmus, kas izstr\u0101d\u0101ti Python valod\u0101 (galven\u0101 vide daudziem datu zin\u0101tniekiem), izmantot daudz\u0101s gatav\u0101s bibliot\u0113kas, lai \u0101tri izstr\u0101d\u0101tu piel\u0101gotus, robota anal\u012btiskos AI\/ML risin\u0101jumus uz InterSystems IRIS platformas. \u0160aj\u0101 rakst\u0101 es par\u0101d\u012b\u0161u, k\u0101 InterSystems IRIS var or\u0137estr\u0113t procesus Python valod\u0101, efekt\u012bvi nodro\u0161in\u0101t divvirzienu datu p\u0101rs\u016bt\u012b\u0161anu un rad\u012bt inteli\u0123entus biznesa procesus.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Pl\u0101ns<\/h1>\n<p><\/p>\n<ol>\n<li>Ievads.<\/li>\n<li>R\u012bki.<\/li>\n<li>Instal\u0101cija.<\/li>\n<li>API.<\/li>\n<li>Interoperabilit\u0101te.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>Secin\u0101jumi.<\/li>\n<li>Saites.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">Ievads<\/h1>\n<p><\/p>\n<p>Python ir augsta l\u012bme\u0146a visp\u0101r\u0113jas lieto\u0161anas programm\u0113\u0161anas valoda, kas v\u0113rsta uz izstr\u0101d\u0101t\u0101ja produktivit\u0101tes un koda las\u0101m\u012bbas paaugstin\u0101\u0161anu. \u0160aj\u0101 rakstu s\u0113rij\u0101 es past\u0101st\u012b\u0161u par Python valodas pielieto\u0161anas iesp\u0113j\u0101m InterSystems IRIS platform\u0101, piev\u0113r\u0161oties tam, k\u0101 Python kalpo k\u0101 valoda ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s mode\u013cu izstr\u0101dei un pielieto\u0161anai.<\/p>\n<p><\/p>\n<p>Ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s (ML) ir m\u0101ksl\u012bg\u0101 intelekta meto\u017eu klase, kuras rakstur\u012bga paz\u012bme ir nevis tie\u0161a uzdevuma risin\u0101\u0161ana, bet gan apm\u0101c\u012bba, risinot daudzus l\u012bdz\u012bgus uzdevumus. <\/p>\n<p><\/p>\n<p>Ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s algoritmi un mode\u013ci k\u013c\u016bst arvien pla\u0161\u0101k izmantoti. Iemeslu tam ir daudz, bet viss ir saist\u012bts ar pieejam\u012bbu, vienk\u0101r\u0161\u012bbu un praktisko rezult\u0101tu sasnieg\u0161anu. Vai klasteriz\u0101cija vai pat neironu t\u012bklu model\u0113\u0161ana ir jauna tehnolo\u0123ija? <\/p>\n<p><\/p>\n<p>Protams, ka n\u0113, bet \u0161obr\u012bd nav nepiecie\u0161ams uzrakst\u012bt simtiem t\u016bksto\u0161u koda rindu, lai palaistu vienu modeli, un izmaksas mode\u013cu izstr\u0101d\u0113 un pielieto\u0161an\u0101 k\u013c\u016bst arvien maz\u0101kas.<\/p>\n<p><\/p>\n<p>R\u012bki att\u012bst\u0101s \u2014 kam\u0113r mums nav piln\u012bb\u0101 GUI orient\u0113tu AI\/ML r\u012bku, t\u0101s progresu, ko m\u0113s esam nov\u0113roju\u0161i ar daudziem citiem inform\u0101cijas sist\u0113mu veidiem, piem\u0113ram, BI (no koda rakst\u012b\u0161anas l\u012bdz ietvaru un GUI orient\u0113tu konfigur\u0113jamu risin\u0101jumu izmanto\u0161anai), nov\u0113rojam ar\u012b AI\/ML r\u012bku izstr\u0101d\u0113. M\u0113s jau esam p\u0101rvar\u0113ju\u0161i koda rakst\u012b\u0161anas posmu un \u0161odien izmantojam ietvarus mode\u013cu izstr\u0101dei un apm\u0101c\u012bbai.<\/p>\n<p><\/p>\n<p>Citi uzlabojumi, piem\u0113ram, iesp\u0113ja izplat\u012bt iepriek\u0161 apm\u0101c\u012btas mode\u013cus, kad gala lietot\u0101jam vienk\u0101r\u0161i j\u0101pabeidz mode\u013ca apm\u0101c\u012bba uz vi\u0146a specifiskajiem datiem, ar\u012b atvieglo ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s uzs\u0101k\u0161anu. \u0160ie sasniegumi iev\u0113rojami atvieglo ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s apg\u016b\u0161anu k\u0101 speci\u0101listiem, t\u0101 ar\u012b uz\u0146\u0113mumiem kopum\u0101.<\/p>\n<p><\/p>\n<p>No otras puses, m\u0113s v\u0101cam arvien vair\u0101k datu. Pateicoties vienotai datu platformai, piem\u0113ram, InterSystems IRIS, visa \u0161\u012b inform\u0101cija var t\u016bl\u012bt\u0113ji tikt sagatavota un izmantota k\u0101 izejas dati ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s mode\u013ciem.<\/p>\n<p><\/p>\n<p>P\u0101rejot uz m\u0101koni, AI\/ML projektu uzs\u0101k\u0161ana k\u013c\u016bst viegl\u0101ka nek\u0101 jebkad agr\u0101k. M\u0113s varam pat\u0113r\u0113t tikai tos resursus, kas mums nepiecie\u0161ami. Turkl\u0101t, pateicoties paraleliz\u0101cijai, ko pied\u0101v\u0101 m\u0101kon\u012b balst\u012btas platformas, m\u0113s varam ietaup\u012bt laiku.<\/p>\n<p><\/p>\n<p>Bet k\u0101 ar rezult\u0101tiem? \u0160eit viss k\u013c\u016bst sare\u017e\u0123\u012bt\u0101k. Ir daudz r\u012bku mode\u013cu izveidei, par kuriem es run\u0101\u0161u t\u0101l\u0101k. Izveidot labu modeli nav viegli, bet kas t\u0101l\u0101k? G\u016bt pe\u013c\u0146u no mode\u013ca izmanto\u0161anas biznes\u0101 ar\u012b nav vienk\u0101r\u0161a uzdevums. Probl\u0113mas sakne sl\u0113pjas anal\u012btisko un transakciju slod\u017eu un datu mode\u013cu nodal\u012bjum\u0101. Kad m\u0113s apm\u0101c\u0101m modeli, m\u0113s to parasti dar\u0101m uz v\u0113sturiskajiem datiem. Ta\u010du vieta izveidotajam modelim ir transakciju datu apstr\u0101d\u0113. Kas ir lab\u0101k\u0101 kr\u0101pniecisko transakciju atkl\u0101\u0161anas mode\u013ca labums, ja m\u0113s to izpild\u0101m reizi dien\u0101? Kr\u0101pnieki jau sen ir aizb\u0113gu\u0161i ar naudu. Mums j\u0101apm\u0101ca modelis uz v\u0113sturiskajiem datiem, bet mums ar\u012b j\u0101piem\u0113ro tas re\u0101l\u0101 laik\u0101 uz jauniem ien\u0101ko\u0161ajiem datiem, lai m\u016bsu biznesa procesi var\u0113tu darboties saska\u0146\u0101 ar mode\u013ca veiktajiem prognoz\u0113m.<\/p>\n<p><\/p>\n<p>ML Toolkit ir r\u012bku kopums, kura m\u0113r\u0137is ir tie\u0161i tas: apvienot mode\u013cus un transakciju vidi, lai izveidotie mode\u013ci b\u016btu viegli izmantojami tie\u0161i j\u016bsu biznesa procesos. Python Gateway ir da\u013ca no ML Toolkit un nodro\u0161ina integr\u0101ciju ar Python valodu (analogiski tam, k\u0101 R Gateway, kas ir da\u013ca no ML Toolkit, nodro\u0161ina integr\u0101ciju ar R valodu).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">R\u012bku kopums<\/h1>\n<p><\/p>\n<p>Pirms turpin\u0101\u0161anas es v\u0113l\u0113tos aprakst\u012bt da\u017eus r\u012bkus un bibliot\u0113kas Python, kuras m\u0113s izmantosim v\u0113l\u0101k.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Tehnolo\u0123ijas<\/h2>\n<p><\/p>\n<ul>\n<li>Python ir interpret\u0113jama, augsta l\u012bme\u0146a visp\u0101r\u0113j\u0101s noz\u012bmes programm\u0113\u0161anas valoda. Galven\u0101 valodas priek\u0161roc\u012bba ir liela matem\u0101tisko, ML un AI bibliot\u0113ku kr\u0101tuve. T\u0101pat k\u0101 ObjectScript, t\u0101 ir objektorient\u0113ta valoda, ta\u010du viss tiek noteikts dinamiski, nevis statiski. Ar\u012b viss ir objekts. V\u0113l\u0101kie raksti paredz virspus\u0113ju iepaz\u012b\u0161anos ar valodu. Ja v\u0113laties s\u0101kt m\u0101c\u012b\u0161an\u0101s procesu, es iesaku s\u0101kt ar <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">dokument\u0101cij\u0101<\/a><\/noindex>.<\/li>\n<li>Lai veiktu m\u016bsu turpm\u0101kos uzdevumus, instal\u0113jiet <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: Es izmantoju <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, bet paties\u012bb\u0101 ir <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">daudz<\/a><\/noindex>. Ja izmantojat Atelier, tad ir pieejams Eclipse spraudnis Python izstr\u0101d\u0101t\u0101jiem. Ja izmantojat VS Code, tad ir pieejams papla\u0161in\u0101jums Python. <\/li>\n<li>Notebook: viet\u0101 IDE j\u016bs varat rakst\u012bt un dal\u012bties ar saviem skriptiem tie\u0161saistes piez\u012bmju gr\u0101mat\u0101s. Vispopul\u0101r\u0101k\u0101 no t\u0101m ir <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Bibliot\u0113kas<\/h2>\n<p><\/p>\n<p>\u0160eit (nepilns) saraksts ar ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s bibliot\u0113m:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 fundament\u0101la pakete prec\u012bzajiem apr\u0113\u0137iniem.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 augstas veiktsp\u0113jas datu strukt\u016bras un datu anal\u012bzes r\u012bki.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 grafiku izveide.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 vizualiz\u0101cijas r\u012bks, balst\u012bts uz matplotlib.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s metodes.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">XGBoost<\/a><\/noindex> \u2014 ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s algoritmi gradienta palielin\u0101\u0161anas metodolo\u0123ij\u0101 (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 neironu t\u012bkli.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 platforma ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s mode\u013cu izveidei.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 platforma ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s mode\u013cu izveidei, kas orient\u0113ta uz Python.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML no da\u017e\u0101diem mode\u013ciem.<\/li>\n<\/ul>\n<p><\/p>\n<p>AI\/ML tehnolo\u0123ijas \u013cauj padar\u012bt biznesu efekt\u012bv\u0101ku un piel\u0101gojamu. Turkl\u0101t \u0161odien \u0161\u012bs tehnolo\u0123ijas k\u013c\u016bst viegl\u0101k izstr\u0101d\u0101jamas un \u012bstenojamas. S\u0101ciet apg\u016bt AI\/ML tehnolo\u0123ijas un to, k\u0101 t\u0101s var pal\u012bdz\u0113t j\u016bsu organiz\u0101cijai augt.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Uzst\u0101d\u012b\u0161ana<\/h1>\n<p><\/p>\n<p>Iesp\u0113jamas vair\u0101kas metodes Python Gateway instal\u0113\u0161anai un izmanto\u0161anai:<\/p>\n<p><\/p>\n<ul>\n<li>oper\u0113t\u0101jsist\u0113mu\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>Izmantojiet att\u0113lu no DockerHub<\/li>\n<li>Izveidojiet savu att\u0113lu<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Neatkar\u012bgi no instal\u0101cijas veida, jums b\u016bs nepiecie\u0161ams avota kods. Vien\u012bg\u0101 vieta, kur lejupiel\u0101d\u0113t kodu, ir <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">izlaidumu lapa<\/a><\/noindex>. T\u0101 satur p\u0101rbaud\u012btus stabilus izlaidumus, vienk\u0101r\u0161i \u0146emiet p\u0113d\u0113jo. \u0160obr\u012bd tas ir 0.8, bet laikam ejot, b\u016bs ar\u012b jauni. Neklon\u0113jiet\/neiel\u0101d\u0113jiet repozitoriju, lejupiel\u0101d\u0113jiet p\u0113d\u0113jo izlaidumu.<\/p>\n<p><\/p>\n<h2 id=\"os\">oper\u0113t\u0101jsist\u0113mu<\/h2>\n<p><\/p>\n<p>Ja, instal\u0113jat Python Gateway oper\u0113t\u0101jsist\u0113m\u0101, vispirms (neatkar\u012bgi no oper\u0113t\u0101jsist\u0113mas) j\u0101instal\u0113 Python. Lai to izdar\u012btu:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Instal\u0113jiet Python 3.6.7 64 bit<\/a><\/noindex>. Ieteicams instal\u0113t Python noklus\u0113juma direktorij\u0101.<\/li>\n<li>Instal\u0113jiet moduli <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>Lejupiel\u0101d\u0113jiet ObjectScript kodu (t.i., <code>do $system.OBJ.ImportDir(\"C:InterSystemsReposPythoniscpy\", \"*.cls\", \"c\", , 1)<\/code>) jebkur\u0101 jom\u0101 ar produktiem. Ja v\u0113laties, lai eso\u0161\u0101 joma atbalst\u012btu produktus, veiciet: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Ievietojiet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> map\u0113 <code>bin<\/code> j\u016bsu InterSystems IRIS instanc\u0113. Bibliot\u0113kas failam j\u0101b\u016bt pieejamam ce\u013c\u0101, ko atgrie\u017e <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>P\u0101rliecinieties, ka vides main\u012bgais <code>PYTHONHOME<\/code> nor\u0101da uz Python 3.6.7.<\/li>\n<li>P\u0101rliecinieties, ka sist\u0113mas vides main\u012bgais <code>PATH<\/code> satur main\u012bgo <code>PYTHONHOME<\/code> (vai direktoriju, uz kuru tas nor\u0101da).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>P\u0101rbaudiet, vai vides main\u012bgais <code>PATH<\/code> ietver <code>\/usr\/lib<\/code> un <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. Izmantojiet failu <code>\/etc\/environment<\/code> lai iestat\u012btu vides main\u012bgos.<\/li>\n<li>Ja rodas k\u013c\u016bdas <code>undefined symbol: _Py_TrueStruct<\/code> iestatiet iestat\u012bjumu <code>PythonLib<\/code>. Ar\u012b sada\u013c\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> ir sada\u013ca par probl\u0113mu risin\u0101\u0161anu.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>Pa\u0161laik atbalsta tikai Python 3.6.7 no <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org<\/a><\/noindex>. P\u0101rbaudiet main\u012bgo <code>PATH<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ja esat main\u012bjis vides main\u012bgos, restart\u0113jiet savu InterSystems produktu.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Konteineru izmanto\u0161anu pavada virkni priek\u0161roc\u012bbu: <\/p>\n<p><\/p>\n<ul>\n<li>Paartraukums<\/li>\n<li>Efektivit\u0101te<\/li>\n<li>Izol\u0101cija<\/li>\n<li>Vieglums<\/li>\n<li>Nemain\u012bgums<\/li>\n<\/ul>\n<p><\/p>\n<p>Iepaz\u012bstieties ar \u0161o <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">rakstu s\u0113riju<\/a><\/noindex> lai ieg\u016btu s\u012bk\u0101ku inform\u0101ciju par Docker izmanto\u0161anu ar InterSystems produktiem. <\/p>\n<p><\/p>\n<p>Visas Python Gateway versijas \u0161obr\u012bd ir balst\u012btas uz konteineriem <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Gatavs att\u0113ls<\/h3>\n<p><\/p>\n<p>Izpildiet: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, lai lejupiel\u0101d\u0113tu un palaistu Python Gateway ar InterSystems IRIS Community Edition. Tas ir viss.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Izveidojiet savu att\u0113lu<\/h3>\n<p><\/p>\n<p>Lai izveidotu docker att\u0113lu, veiciet noliktav\u0101: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nNoklus\u0113jum\u0101 att\u0113ls tiek izveidots, pamatojoties uz att\u0113lu <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, tom\u0113r j\u016bs varat to main\u012bt, uzst\u0101dot main\u012bgo <code>IMAGE<\/code>.<br \/>\nLai izveidotu no InterSystems IRIS, izpildiet: `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>P\u0113c tam varat palaist docker att\u0113lu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">docker run -d\n  -p 52773:52773\n  -v \/&lt;HOST-DIR-WITH-iris.key&gt;\/:\/mount\n  --name irispy\n  intersystemscommunity\/irispy:latest\n  --key \/mount\/iris.key<\/code><\/pre>\n<p><\/p>\n<p>Ja izmantojat att\u0113lu, kas balst\u012bts uz InterSystems IRIS Community Edition, jums var neb\u016bt nepiecie\u0161ams nor\u0101d\u012bt atsl\u0113gu.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Koment\u0101ri<\/h3>\n<p><\/p>\n<ul>\n<li>Test\u0113\u0161anas process <code>isc.py.test.Process<\/code> saglab\u0101 att\u0113lu sec\u012bbu pagaidu katalog\u0101. Varb\u016bt v\u0113laties main\u012bt \u0161o ce\u013cu uz piesl\u0113gto katalogu. Lai to izdar\u012btu, redi\u0123\u0113jiet iestat\u012bjumu <code>WorkingDir<\/code> nor\u0101dot piesl\u0113gto direktoriju.<\/li>\n<li>Lai piek\u013c\u016btu termin\u0101lim, izpildiet: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>Piek\u013cuve Sist\u0113mas Vad\u012bbas Port\u0101lam ar lietot\u0101jv\u0101rdu <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>Lai aptur\u0113tu konteineru, izpildiet: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">Instal\u0101cijas p\u0101rbaude<\/h2>\n<p><\/p>\n<p>Kad esat instal\u0113jis Python Gateway, ir v\u0113rts p\u0101rbaud\u012bt, vai tas darbojas. Izpildiet \u0161o kodu InterSystems IRIS termin\u0101l\u012b:<\/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>Rezult\u0101t\u0101 j\u0101b\u016bt izvad\u012btas <code>HELLO<\/code> \u2014 Python main\u012bg\u0101 v\u0113rt\u012bba <code>x<\/code>. Ja atgriezt\u0101 statuss <code>sc<\/code> ir k\u013c\u016bda vai <code>var<\/code> ir tuk\u0161a, p\u0101rbaudiet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme \u2014 Probl\u0113mu nov\u0113r\u0161anas sada\u013cu<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Python Gateway ir uzst\u0101d\u012bts, un j\u016bs esat p\u0101rliecin\u0101ju\u0161ies, ka tas darbojas. Laiks s\u0101kt to izmantot!<br \/>\nGalvenais interfeiss uz Python ir <code>isc.py.Main<\/code>. Tas pied\u0101v\u0101 \u0161\u0101das meto\u017eu grupas (visas atgrie\u017e <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Koda izpilde<\/li>\n<li>Datu p\u0101rraide<\/li>\n<li>Pal\u012bgmetodes<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Koda izpilde<\/h2>\n<p><\/p>\n<p>\u0160\u012bs metodes \u013cauj izpild\u012bt izlas\u012btu Python kodu.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 t\u0101 ir galven\u0101 metode. T\u0101 pie\u0146em 4 opciju argumentus:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 kods, kas j\u0101izpilda. Jaun\u0101s rindas simbols: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 main\u012bg\u0101 nosaukums, kuru atgriezt.<\/li>\n<li><code>serialization<\/code> \u2014 k\u0101 serializ\u0113t <code>returnVariable<\/code>. 0 \u2014 string (noklus\u0113jums), 1 \u2014 repr.<\/li>\n<li><code>rezult\u0101ts<\/code> \u2014 ByRef atsauce uz main\u012bgo, kur\u0101 tiks ierakst\u012bta v\u0113rt\u012bba <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Iepriek\u0161 m\u0113s izpild\u012bj\u0101m:<\/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>\u0160aj\u0101 piem\u0113r\u0101 m\u0113s pie\u0161\u0137iram Python main\u012bgajam <code>x<\/code> v\u0113rt\u012bba <code>Hello<\/code> un v\u0113lamies atgriezt Python main\u012bg\u0101 v\u0113rt\u012bbu <code>x<\/code> ObjectScript main\u012bgaj\u0101 <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode ir dro\u0161\u0101ka un maz\u0101k ierobe\u017eota alternat\u012bva <code>SimpleString<\/code>.<br \/>\nRindas InterSystems IRIS platform\u0101 ir ierobe\u017eotas l\u012bdz 3 641 144 simboliem, un, ja v\u0113laties izpild\u012bt gar\u0101ku kodu, jums j\u0101darbina pl\u016bsmas.<br \/>\nPie\u0146em divus argumentus:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 Python koda rinda vai pl\u016bsma, kas j\u0101izpilda.<\/li>\n<li><code>variable<\/code> \u2014 (p\u0113c izv\u0113les) pie\u0161\u0137ir izpildes rezult\u0101tu <code>code<\/code> \u0161im Python main\u012bgajam.<\/li>\n<\/ul>\n<p><\/p>\n<p>Piem\u0113rs izmanto\u0161anai:<\/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>\u0160aj\u0101 piem\u0113r\u0101 m\u0113s reizin\u0101m 2 ar 3 un ierakst\u0101m rezult\u0101tu Python main\u012bgaj\u0101 <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Datu p\u0101rraide<\/h2>\n<p><\/p>\n<p>P\u0101rraidiet datus Python un atpaka\u013c.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>Ir 4 veidi, k\u0101 ieg\u016bt Python main\u012bg\u0101 v\u0113rt\u012bbu InterSystems IRIS, atkar\u012bb\u0101 no nepiecie\u0161am\u0101s serializ\u0101cijas:<\/p>\n<p><\/p>\n<ul>\n<li><code>String<\/code> vienk\u0101r\u0161u datu tipu un atk\u013c\u016bdo\u0161anai.<\/li>\n<li><code>Repr<\/code> vienk\u0101r\u0161u objektu glab\u0101\u0161anai un atk\u013c\u016bdo\u0161anai.<\/li>\n<li><code>JSON<\/code> vieglai datu manipul\u0101cijai InterSystems IRIS pus\u0113.<\/li>\n<li><code>Pickle<\/code> objektu saglab\u0101\u0161anai.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0160\u012bs metodes \u013cauj ieg\u016bt main\u012bg\u0101s v\u0113rt\u012bbas no Python k\u0101 virknes vai pl\u016bsmas.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 ieg\u016bt <code>serialization<\/code> main\u012bgo <code>variable<\/code> par <code>pl\u016bsma<\/code>Transakcija <code>useString<\/code> ir 1 un serializ\u0101cija tiek ierakst\u012bta virknei, tad tiek atgriezta virkne, nevis pl\u016bsma.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 ieg\u016bt JSON serializ\u0101ciju main\u012bgajai.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> \u2014 ieg\u016bt Pickle (vai Dill) serializ\u0101ciju main\u012bgajai.<\/li>\n<\/ul>\n<p><\/p>\n<p>M\u0113\u0123in\u0101sim ieg\u016bt m\u016bsu main\u012bgo. <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>Iel\u0101d\u0113jam datus no InterSystems IRIS uz Python.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 izveido datu kopu (pandas <code>dataframe<\/code> vai <code>list<\/code>) no SQL vaic\u0101juma un iestata to Python main\u012bgaj\u0101 <code>variable<\/code>. Pakotne <code>isc.py<\/code> j\u0101b\u016bt pieejamai sada\u013c\u0101 <code>namespace<\/code> \u2014 tur tiks izpild\u012bts vaic\u0101jums.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 iel\u0101d\u0113 datus no glob\u0101la <code>glob\u0101ls<\/code> no apak\u0161indeksa <code>start<\/code> l\u012bdz <code>end<\/code> Python k\u0101 main\u012bg\u0101 tipa <code>type<\/code>: <code>list<\/code>, vai pandas <code>dataframe<\/code>. Opcion\u0101lo argumentu apraksts <code>mask<\/code> un <code>labels<\/code> ir pieejams klases dokument\u0101cij\u0101 un repozitorij\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Datu p\u0101rs\u016bt\u012b\u0161anas dokument\u0101cija<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 iel\u0101d\u0113 datus no klases <code>klase<\/code> no id <code>start<\/code> l\u012bdz <code>end<\/code> Python k\u0101 main\u012bg\u0101 tipa <code>type<\/code>: <code>list<\/code>, vai pandas <code>dataframe<\/code>. <code>properties<\/code> \u2014 saraksts (atdal\u012bt\u0101js \u2014 komats) ar klases \u012bpa\u0161\u012bb\u0101m, kuras j\u0101pievieno datu kopai. Atbalsta maskas. <code>*<\/code> un <code>?<\/code>. Noklus\u0113juma \u2014 <code>*<\/code> (visas \u012bpa\u0161\u012bbas). \u012apa\u0161\u012bba <code>%%CLASSNAME<\/code> tiek ignor\u0113ts.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 iel\u0101d\u0113 datus no tabulas <code>galda<\/code> no id <code>start<\/code> l\u012bdz <code>end<\/code> Python.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 univers\u0101ls (jebkur\u0161 der\u012bgs SQL vaic\u0101jums tiks nodots Python). Tom\u0113r, <code>ExecuteGlobal<\/code> un t\u0101 apv\u0113rtnes <code>ExecuteClass<\/code> un <code>ExecuteTable<\/code> darbojas ar noteiktiem ierobe\u017eojumiem. Tie ir daudz \u0101tr\u0101ki (3-5 reizes \u0101tr\u0101k nek\u0101 ODBC draiveris un 20 reizes \u0101tr\u0101k. <code>ExecuteQuery<\/code>). Papildu inform\u0101cija ir <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Datu p\u0101rs\u016bt\u012b\u0161anas dokument\u0101cija<\/a><\/noindex>.<br \/>\nVisas \u0161\u012bs metodes atbalsta datu p\u0101rs\u016bt\u012b\u0161anu no jebkuras jomas. Pakotne <code>isc.py<\/code> j\u0101b\u016bt pieejamai m\u0113r\u0137a jom\u0101.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 rezult\u0101tu p\u0101rs\u016bt\u012b\u0161ana no jebkura der\u012bga SQL vaic\u0101juma uz Python. Tas ir visl\u0113n\u0101k\u0101 datu p\u0101rs\u016bt\u012b\u0161anas metode. Izmantojiet to, ja <code>ExecuteGlobal<\/code> un t\u0101 apv\u0113rtnes nav pieejamas.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>vaic\u0101jums<\/code> \u2014 SQL vaic\u0101jums.<\/li>\n<li><code>variable<\/code> \u2014 Python main\u012bg\u0101 nosaukums, kur\u0101 tiek ierakst\u012bti dati.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> vai Pandas <code>dataframe<\/code>.<\/li>\n<li><code>namespace<\/code> \u2014 joma, kur\u0101 tiks izpild\u012bts vaic\u0101jums.<\/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 glob\u0101la p\u0101rs\u016bt\u012b\u0161ana uz Python.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>glob\u0101ls<\/code> \u2014 glob\u0101la nosaukums bez <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 Python main\u012bg\u0101 nosaukums, kur\u0101 tiek ierakst\u012bti dati.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> vai Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 glob\u0101la pirm\u0101 apak\u0161indeksa. Oblig\u0101ti <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 p\u0113d\u0113jais glob\u0101l\u0101s apak\u0161raksts. Objekti <code>%Integer<\/code>.<\/li>\n<li><code>mask<\/code> \u2014 glob\u0101l\u0101s v\u0113rt\u012bbu maska. Masat var b\u016bt \u012bs\u0101ka nek\u0101 glob\u0101lo lauku skaits (\u0161aj\u0101 gad\u012bjum\u0101 lauki beig\u0101s tiks izlaisti). K\u0101 format\u0113t masku:\n<ul>\n<li><code>+<\/code> p\u0101rs\u016bt\u012bt v\u0113rt\u012bbu t\u0101, k\u0101 t\u0101 ir.<\/li>\n<li><code>-<\/code> izlaist v\u0113rt\u012bbu.<\/li>\n<li><code>b<\/code> \u2014 Lo\u0123iskais tips (<code>0<\/code> \u2014 <code>False<\/code>, viss p\u0101r\u0113jais \u2014 <code>True<\/code>).<\/li>\n<li><code>d<\/code> \u2014 Datums (no $horolog, uz Windows no 1970, uz Linux no 1900).<\/li>\n<li><code>t<\/code> \u2014 Laiks ($horolog, sekundes p\u0113c pusnakts).<\/li>\n<li><code>m<\/code> \u2014 Laika z\u012bmogs (gads-m\u0113nesis-diena stunda:min\u016bte:sekunde).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %List kolonnu nosaukumu. Pirmais elements \u2014 apak\u0161raksta nosaukums.<\/li>\n<li><code>namespace<\/code> \u2014 joma, kur\u0101 tiks izpild\u012bts vaic\u0101jums.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Apmekl\u0113 <code>ExecuteGlobal<\/code>. Balstoties uz klases defin\u012bciju, sagatavo aicin\u0101jumu <code>ExecuteGlobal<\/code> un izsauc to.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 klases datu nodo\u0161ana Python.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>klase<\/code> \u2014 klases nosaukums<\/li>\n<li><code>variable<\/code> \u2014 Python main\u012bg\u0101 nosaukums, kur\u0101 tiek ierakst\u012bti dati.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> vai Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 s\u0101kuma Id.<\/li>\n<li><code>end<\/code> \u2014 beigu Id<\/li>\n<li><code>properties<\/code> \u2014 saraksts (atdal\u012bt\u0101js \u2014 komats) ar klases \u012bpa\u0161\u012bb\u0101m, kuras j\u0101pievieno datu kopai. Atbalsta maskas. <code>*<\/code> un <code>?<\/code>. Noklus\u0113juma \u2014 <code>*<\/code> (visas \u012bpa\u0161\u012bbas). \u012apa\u0161\u012bba <code>%%CLASSNAME<\/code> tiek ignor\u0113ts.<\/li>\n<li><code>namespace<\/code> \u2014 joma, kur\u0101 tiks izpild\u012bts vaic\u0101jums.<\/li>\n<\/ul>\n<p><\/p>\n<p>Visas \u012bpa\u0161\u012bbas tiek p\u0101rs\u016bt\u012btas t\u0101, k\u0101 t\u0101s ir, iz\u0146emot tipi <code>te<\/code>, <code>%Time<\/code>, <code>%Boolean<\/code> un <code>%TimeStamp<\/code> \u2014 t\u0101s tiek konvert\u0113tas atbilsto\u0161aj\u0101s Python klas\u0113s.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Apmekl\u0113 <code>ExecuteClass<\/code>. P\u0101rv\u0113r\u0161 tabulas nosaukumu par klases nosaukumu un izsauc <code>ExecuteClass<\/code>. Paraksts:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 tabulas datu nodo\u0161ana Python.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>galda<\/code> \u2014 tabulas nosaukums.<br \/>\nVisi citi argumenti tiek p\u0101rs\u016bt\u012bti t\u0101, k\u0101 ir, uz <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">Pieraksti<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> un <code>ExecuteTable<\/code> darbojas vien\u0101di \u0101tri.<\/li>\n<li><code>ExecuteGlobal<\/code> 20 reizes \u0101tr\u0101k nek\u0101 <code>ExecuteQuery<\/code> uz lieliem datu kop\u0101m (p\u0101rs\u016bt\u012b\u0161anas laiks &gt;0.01 sekundes).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> un <code>ExecuteTable<\/code> darbojas ar glob\u0101l\u0101m strukt\u016br\u0101m: <code>^global(key) = $lb(prop1, prop2, ..., propN)<\/code> kur <code>key<\/code> \u2014 vesels skaitlis.<\/li>\n<li>Lai <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> un <code>ExecuteTable<\/code> atbalst\u012btais v\u0113rt\u012bbu diapazons <code>te<\/code> atbilst diapazonam <code>mktime<\/code> un ir atkar\u012bgs no 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>). Izmantojiet <code>%TimeStamp<\/code>lai nos\u016bt\u012btu datus \u0101rpus \u0161\u012b diapazona vai izmantojiet pandas dataframe, jo \u0161is ierobe\u017eojums attiecas tikai uz sarakstu.<\/li>\n<li>Lai <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> un <code>ExecuteTable<\/code> visi argumenti, iz\u0146emot datu avotu (glob\u0101lo, klasi vai tabulu) un main\u012bgo, ir izv\u0113les.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">Piem\u0113ri<\/h2>\n<p><\/p>\n<p>Testa klase <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Person<\/a><\/noindex> satur metodi, kas demonstr\u0113 visus datu nodo\u0161anas variantus:<\/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\/\/ Kop\u0113jie argumenti\nset variable = \"df\"\nset type = \"dataframe\"\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ Veids 0: ExecuteGlobal bez argumentiem\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ Veids 1: ExecuteGlobal ar argumentiem\n\/\/ Nododot globalu, lauku nosaukumi tiek noteikti manu\u0101li\n\/\/ globalKey - subskribenta nosaukums\nset labels = $lb(\"globalKey\", \"V\u0101rds\", \"Dzim\u0161anas datums\", \"TS\", \"RandomTime\", \"Gads\", \"Decim\u0101lais vecums\", \"Dubultais vecums\", \"Bool\")\n\n\/\/ mask satur par 1 elementu maz\u0101k nek\u0101 labels, jo \"globalKey\" - subskribenta nosaukums\n\/\/ Izlai\u017eam %%CLASSNAME\nset mask = \"-+dmt+++b\"\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ Veids 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ Veids 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ Veids 4: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>Izsauciet metodi <code>do ##class(isc.py.test.Person).Test()<\/code> lai redz\u0113tu, k\u0101 darbojas visi datu p\u0101rs\u016bt\u012b\u0161anas metodes.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">Pal\u012bgmetodes<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(main\u012bgais, serializ\u0101cija, .defin\u0113ts, .tips, .garums)<\/code> \u2014 ieg\u016bt inform\u0101ciju par main\u012bgo: vai tas ir defin\u0113ts, klase un serializ\u0101cijas garums.<\/li>\n<li><code>GetVariableDefined(main\u012bgais, .defin\u0113ts)<\/code> \u2014 vai main\u012bgais ir defin\u0113ts.<\/li>\n<li><code>GetVariableType(main\u012bgais, .tips)<\/code> \u2014 ieg\u016bt main\u012bg\u0101 klasi.<\/li>\n<li><code>GetStatus()<\/code> \u2014 ieg\u016bt un dz\u0113st p\u0113d\u0113jo iz\u0146\u0113mumu Python pus\u0113.<\/li>\n<li><code>GetModuleInfo(module, .import\u0113ts, .alias)<\/code> \u2014 ieg\u016bt modu\u013ca main\u012bgo un import\u0113\u0161anas statusu.<\/li>\n<li><code>GetFunctionInfo(function, .defin\u0113ts, .tips, .dokumenti, .paraksts, .argumenti)<\/code> \u2014 ieg\u016bt inform\u0101ciju par funkciju.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Sadarbsp\u0113ja<\/h1>\n<p><\/p>\n<p>J\u016bs esat iem\u0101c\u012bjies izsaukt Python Gateway no termin\u0101la, tagad s\u0101ksim to izmantot produkcij\u0101. Sazi\u0146as pamats ar Python \u0161\u0101d\u0101 re\u017e\u012bm\u0101 ir <code>isc.py.ens.Operation<\/code>. Tas \u013cauj mums:<\/p>\n<p><\/p>\n<ul>\n<li>Izpild\u012bt kodu Python<\/li>\n<li>Saglab\u0101t\\\/Atjaunot Python kontekstu<\/li>\n<li>Iel\u0101d\u0113t un ieg\u016bt datus no Python<\/li>\n<\/ul>\n<p><\/p>\n<p>Princip\u0101, Python oper\u0101cija ir ietvars ap <code>isc.py.Main<\/code>. Oper\u0101cija <code>isc.py.ens.Operation<\/code> \u013cauj mijiedarboties ar Python procesu no InterSystems IRIS produktiem. Atbalsta piecus piepras\u012bjumus:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> lai izpild\u012btu Python kodu. Atgrie\u017e <code>isc.py.msg.ExecutionResponse<\/code> ar izpildes rezult\u0101tu un piepras\u012bto main\u012bgo v\u0113rt\u012bb\u0101m.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> lai izpild\u012btu Python kodu. Atgrie\u017e <code>isc.py.msg.StreamExecutionResponse<\/code> izpildes rezult\u0101tu un piepras\u012bto main\u012bgo v\u0113rt\u012bb\u0101m. L\u012bdz\u012bgi <code>isc.py.msg.ExecutionRequest<\/code>, bet pie\u0146em un atgrie\u017e straumes viet\u0101 virkn\u0113m.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> lai nodotu SQL piepras\u012bjuma izpildes rezult\u0101tu. Atgrie\u017e <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> lai p\u0101rs\u016bt\u012btu datus glob\u0101lai\/klasei\/tabulai. Atgrie\u017e <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> lai saglab\u0101tu Python kontekstu. Atgrie\u017e <code>Ens.StringResponse<\/code> ar konteksta identifikatoru.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> lai atjaunotu Python kontekstu.<\/p>\n<p><\/p>\n<p>Turkl\u0101t, <code>isc.py.ens.Operation<\/code> ir divi iestat\u012bjumi:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 klases izv\u0113le, kas \u012bsteno interfeisu <code>isc.py.init.Abstract<\/code>. To var izmantot funkciju, modu\u013cu, kla\u0161u u.c. iel\u0101d\u0113\u0161anai. Tas tiek veikts vienreiz procesa palai\u0161anas br\u012bd\u012b.<\/li>\n<li><code>PythonLib<\/code> \u2014 (tikai Linux) ja redzat k\u013c\u016bdas iel\u0101d\u0113\u0161anas laik\u0101, iest\u0101diet t\u0101 v\u0113rt\u012bbu <code>libpython3.6m.so<\/code> vai pat uz pilnu Python bibliot\u0113kas ce\u013cu. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">Biznesa procesu izveide<\/h2>\n<p><\/p>\n<p>Pieejami divi klase, kas atvieglo biznesa procesu izstr\u0101di:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> \u013cauj izvilkt anot\u0101cijas no aktivit\u0101t\u0113m, nomainot main\u012bg\u0101s.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> \u013cauj viegli test\u0113t biznesa procesus ar Python. Tas var izpild\u012bt biznesa procesu (da\u013cas Python valod\u0101) pa\u0161reiz\u0113j\u0101 proces\u0101.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">Main\u012bgo nomai\u0146a<\/h2>\n<p><\/p>\n<p>Visi biznesa procesi, kas manto no <code>isc.py.ens.ProcessUtils<\/code>, var izmantot metodi <code>GetAnnotation(name)<\/code> lai ieg\u016btu aktivit\u0101tes anot\u0101cijas v\u0113rt\u012bbu p\u0113c t\u0101s nosaukuma. Aktivit\u0101tes anot\u0101cija var satur\u0113t main\u012bgos, kuri tiks apr\u0113\u0137in\u0101ti InterSystems IRIS pus\u0113, pirms to nodo\u0161anas Python. L\u016bk, main\u012bgo nomai\u0146as sintakse:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 metodika izsaukums<\/li>\n<li><code>#{expr}<\/code> \u2014 izpild\u012bt kodu ObjectScript valod\u0101.<\/li>\n<\/ul>\n<p><\/p>\n<p>Piem\u0113rs pieejams test\u0113\u0161anas biznesa proces\u0101 <code>isc.py.test.Process<\/code>, piem\u0113ram, aktivit\u0101t\u0113 <code>Correlation Matrix: Graph<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. \u0160aj\u0101 piem\u0113r\u0101:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> atgrie\u017e objekta WorkDirectory \u012bpa\u0161\u012bbu <code>process<\/code>, kas ir klases <code>isc.py.test.Process<\/code> t.i., pa\u0161reiz\u0113j\u0101 biznesa procesa instances.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> izsauc metodi <code>Integer<\/code> klase <code>%PopulateUtils<\/code>, nododot argumentus <code>1<\/code> un <code>100<\/code>, atgrie\u017eot nejau\u0161u veselu skaitli diapazon\u0101 <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Test\u0113\u0161anas biznesa process<\/h2>\n<p><\/p>\n<p>Testa produkti un test\u0113\u0161anas biznesa process ir pieejami noklus\u0113juma iestat\u012bjumiem k\u0101 da\u013ca no Python Gateway. Lai tos izmantotu:<\/p>\n<p><\/p>\n<ol>\n<li>Izpildiet termin\u0101l\u012b OS: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>Izpildiet termin\u0101l\u012b InterSystems IRIS: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> lai aizpild\u012btu testa datus.<\/li>\n<li>Palai\u017eiet ra\u017eo\u0161anu <code>isc.py.test.Production<\/code>.<\/li>\n<li>Nos\u016bt\u012bt piepras\u012bjumu tipa <code>Ens.Request<\/code> par <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Apskat\u012bsim, k\u0101 viss tas kop\u0101 darbojas. Atveriet <code>isc.py.test.Process<\/code> BPL redaktor\u0101:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway 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\">Koda izpilde<\/h3>\n<p><\/p>\n<p>Visnopietn\u0101kais izsaukums ir Python koda izpilde:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Izmanto piepras\u012bjumu <code>isc.py.msg.ExecutionRequest<\/code>, \u0161eit ir t\u0101 \u012bpa\u0161\u012bbas:<\/p>\n<p><\/p>\n<ul>\n<li><code>Kods<\/code> \u2014 Python kods.<\/li>\n<li><code>SeparateLines<\/code> \u2014 vai sadal\u012bt kodu pa rind\u0101m izpildei. <code>$c(10)<\/code> (<code>n<\/code>) tiek izmantots rindu atdal\u012b\u0161anai. L\u016bdzu, \u0146emiet v\u0113r\u0101, ka NAV ieteicams apstr\u0101d\u0101t zi\u0146ojumu uzreiz visu, \u0161\u012b funkcija ir paredz\u0113ta tikai atsevi\u0161\u0137ai apstr\u0101dei <code>def<\/code> un l\u012bdz\u012bgiem daudzrindu izteiksm\u0113m. P\u0113c noklus\u0113juma <code>0<\/code>.<\/li>\n<li><code>Variables<\/code> \u2014 komatu atdal\u012bts main\u012bgo saraksts, kas tiks pievienots atbildei.<\/li>\n<li><code>Serialization<\/code> \u2014 K\u0101 serializ\u0113t main\u012bgus, kurus v\u0113lamies atgriezt. Iesp\u0113jas: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> un <code>Dill<\/code>, pa noklus\u0113jumu <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>M\u016bsu gad\u012bjum\u0101 m\u0113s tikai iestat\u0101m rekviz\u012btu <code>Kods<\/code>, t\u0101p\u0113c visi p\u0101r\u0113jie rekviz\u012bti izmanto noklus\u0113juma v\u0113rt\u012bbas. M\u0113s to iestat\u0101m, izsaucot <code>process.GetAnnotation(\"Import pandas\")<\/code>, kas izpildes laik\u0101 atgrie\u017e anot\u0101ciju p\u0113c main\u012bgo substit\u016bcijas izpildes. Galu gal\u0101 kods <code>import pandas as pd<\/code> tiks nodots Python. <code>GetAnnotation<\/code> var b\u016bt noder\u012bga, lai ieg\u016btu daudzrindu Python skriptus, bet \u0161\u0101 kodu ieg\u016b\u0161anas veidam nav ierobe\u017eojumu. J\u016bs varat iestat\u012bt rekviz\u012btu <code>Kods<\/code> jums \u0113rt\u0101 veid\u0101.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Main\u012bgo ieg\u016b\u0161ana<\/h3>\n<p><\/p>\n<p>V\u0113l viens interesants izaicin\u0101jums, izmantojot <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Correlation Matrix: Tabular<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tas apr\u0113\u0137ina korrel\u0101cijas matricu Python pus\u0113 un izvelk main\u012bgo <code>corrmat<\/code> atsaka InterSystems IRIS JSON form\u0101t\u0101, iest\u0101dot piepras\u012bjuma rekviz\u012btus:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variables<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serialization<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>M\u0113s varam redz\u0113t rezult\u0101tus Visual Trace:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un, ja \u0161\u012b v\u0113rt\u012bba b\u016bs nepiecie\u0161ama BPA, to var ieg\u016bt \u0161\u0101di: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Datu p\u0101rraide<\/h3>\n<p><\/p>\n<p>T\u0101l\u0101k run\u0101sim par datu p\u0101rs\u016bt\u012b\u0161anu no InterSystems IRIS uz Python, visi datu p\u0101rs\u016bt\u012b\u0161anas piepras\u012bjumi \u012bsteno interfeisu <code>isc.py.msg.DataRequest<\/code>, kas nodro\u0161ina \u0161\u0101das \u012bpa\u0161\u012bbas:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 Python main\u012bgais, kur\u0101 tiek ierakst\u012bti dati.<\/li>\n<li><code>Type<\/code> \u2014 main\u012bg\u0101 tips: <code>dataframe<\/code> (pandas datu r\u0101mis) vai <code>list<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 joma, no kuras ieg\u016bstam datus. Paket\u0113m <code>isc.py<\/code> j\u0101b\u016bt pieejam\u0101m \u0161aj\u0101 jom\u0101. Tas var b\u016bt joma bez produkciju atbalsta.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pamatojoties uz \u0161o interfeisu, ir ieviesti 4 piepras\u012bjumu klases:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 iestatiet rekviz\u012btu <code>Query<\/code> lai p\u0101rs\u016bt\u012btu SQL piepras\u012bjumu.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 iestatiet rekviz\u012btu <code>Class<\/code> lai p\u0101rs\u016bt\u012btu klases datus.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 iestat\u012bt rekviz\u012btu <code>Table<\/code> lai p\u0101rs\u016bt\u012btu tabulas datus.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 iestat\u012bt rekviz\u012btu <code>Global<\/code> lai p\u0101rs\u016bt\u012btu glob\u0101los datus.<\/li>\n<\/ul>\n<p><\/p>\n<p>Testa proces\u0101 p\u0101rskatiet aktivit\u0101ti <code>RAW<\/code>, kur <code>isc.py.msg.QueryRequest<\/code> par\u0101d\u012bts darb\u012bb\u0101.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway 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\">Python konteksta saglab\u0101\u0161ana\/atjauno\u0161ana<\/h3>\n<p><\/p>\n<p>Visbeidzot, m\u0113s varam saglab\u0101t Python kontekstu InterSystems IRIS, lai to izdar\u012btu, nos\u016bt\u012bsim <code>isc.py.msg.SaveRequest<\/code> ar argumentiem:<\/p>\n<p><\/p>\n<ul>\n<li><code>Mask<\/code> \u2014 Saglab\u0101 tikai tos main\u012bgos, kas atbilst mas\u0137\u0113. Atbalsta <code>*<\/code> un <code>?<\/code>. Piem\u0113rs: <code>\"Dati*, Att\u0113ls?\"<\/code>. Pa noklus\u0113jumu <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Maksim\u0101lais saglab\u0101jam\u0101s main\u012bg\u0101s garums. Ja main\u012bg\u0101s serializ\u0101cija ir gar\u0101ka, tad t\u0101 tiks ignor\u0113ta. Iestatiet 0, lai ieg\u016btu main\u012bg\u0101s jebkura garuma. Noklus\u0113juma <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>Nosaukums<\/code> \u2014 Konteksta nosaukums (p\u0113c izv\u0113les).<\/li>\n<li><code>Apraksts<\/code> \u2014 Konteksta apraksts (p\u0113c izv\u0113les).<\/li>\n<\/ul>\n<p><\/p>\n<p>Atgrie\u017e <code>Ens.StringResponse<\/code> ar <code>Id<\/code> saglab\u0101t\u0101 konteksta. Test\u0113\u0161anas proces\u0101 p\u0101rbaudiet aktivit\u0101ti <code>Save Context<\/code>.<\/p>\n<p><\/p>\n<p>Atbilsto\u0161ais piepras\u012bjums <code>isc.py.msg.RestoreRequest<\/code> iel\u0101d\u0113 kontekstu no InterSystems IRIS uz Python:<\/p>\n<p><\/p>\n<ul>\n<li><code>ContextId<\/code> \u2014 konteksta identifikators.<\/li>\n<li><code>Clear<\/code> \u2014 not\u012br\u012bt kontektu pirms atjauno\u0161anas.<\/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 ir atv\u0113rt\u0101 koda web lietotne, kas \u013cauj izveidot piez\u012bmjdatorus, kuros ir kods, vizualiz\u0101cijas un teksts, un tos public\u0113t. Python Gateway \u013cauj p\u0101rskat\u012bt un redi\u0123\u0113t BPL procesus Jupyter Notebook form\u0101t\u0101. L\u016bdzu, \u0146emiet v\u0113r\u0101, ka \u0161obr\u012bd tiek izmantots standarta Python 3 ekzekutors.<\/p>\n<p><\/p>\n<p>\u0160is papla\u0161in\u0101jums pie\u0146em, ka anot\u0101cijas satur Python kodu un izmanto aktivit\u0101\u0161u nosaukumus k\u0101 priek\u0161nosaukumus. Tagad ir iesp\u0113jams izstr\u0101d\u0101t biznesa procesus PythonGateway Jupyter Notebook. L\u016bk, kas ir iesp\u0113jams: <\/p>\n<p><\/p>\n<ul>\n<li>Izveidot jaunas biznesa proced\u016bras<\/li>\n<li>Dz\u0113st biznesa procesus<\/li>\n<li>Izveidot jaunas aktivit\u0101tes<\/li>\n<li>Main\u012bt aktivit\u0101tes<\/li>\n<li>Dz\u0113st aktivit\u0101tes<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0160eit <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">demo video<\/a><\/noindex>. Un da\u017ei ekr\u0101nuz\u0146\u0113mumi:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Procesu p\u0101rl\u016bks<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway 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\">Procesa redaktors<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway 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\">Uzst\u0101d\u012b\u0161ana<\/h2>\n<p><\/p>\n<ol>\n<li>Jums b\u016bs nepiecie\u0161ams InterSystems IRIS 2019.2+.<\/li>\n<li>Instal\u0113jiet PythonGateway v0.8+ (vajadz\u012bgs tikai <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> un <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>Atjauniniet ObjectScript kodu no repozitorija.<\/li>\n<li>Izpildiet <code>do ##class(isc.py.util.Jupyter).Install()<\/code> un sekojiet nor\u0101d\u0113m.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokument\u0101cija<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">Secin\u0101jumi<\/h1>\n<p><\/p>\n<p>MLToolkit ir r\u012bku kopums, kura m\u0113r\u0137is ir apvienot mode\u013cus un transakciju vidi, lai izveidotie mode\u013ci tiktu viegli izmantoti tie\u0161i j\u016bsu biznesa procesos. Python Gateway ir da\u013ca no MLToolkit un nodro\u0161ina integr\u0101ciju ar Python valodu, \u013caujot orkestr\u0113t jebkurus ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s algoritmus, kas izstr\u0101d\u0101ti Python valod\u0101 (galven\u0101 vide daudziem datu zin\u0101tniekiem), izmantot daudzas gatavas bibliot\u0113kas \u0101trai adapt\u012bvu, automatiz\u0113tu anal\u012btisku AI\/ML risin\u0101jumu izstr\u0101dei platform\u0101 InterSystems IRIS.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Saites<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">Iepriek\u0161\u0113jais raksts<\/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\">Python Gateway paraugi<\/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\u0101cija un kursi par Python<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>MLToolkit lietot\u0101ju grupa ir priv\u0101ta GitHub repozitorija, izveidota k\u0101 da\u013ca no uz\u0146\u0113muma GitHub organiz\u0101cijas InterSystems. T\u0101 ir v\u0113rsta uz \u0101r\u0113jiem lietot\u0101jiem, kuri instal\u0113, p\u0113t\u012b vai jau izmanto MLToolkit komponentus, tostarp Python Gateway. Grup\u0101 pieejami vair\u0101ki \u012bstenoti gad\u012bjumi (ar avota kodu un test\u0113\u0161anas datiem) marketinga, ra\u017eo\u0161anas, medic\u012bnas un daudz\u0101s cit\u0101s nozar\u0113s. Lai pievienotos MLToolkit lietot\u0101ju grupai, l\u016bdzu, nos\u016btiet \u012bsu zi\u0146u uz e-pasta adresi: <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> un nor\u0101diet sav\u0101 v\u0113stul\u0113 \u0161\u0101du inform\u0101ciju:<\/p>\n<p><\/p>\n<ul>\n<li>GitHub lietot\u0101ja v\u0101rds<\/li>\n<li>Organiz\u0101cija (kur str\u0101d\u0101jat vai m\u0101c\u0101ties)<\/li>\n<li>Amats (j\u016bsu faktisk\u0101 amata nosaukums j\u016bsu organiz\u0101cij\u0101, vai \"Students\", vai \"Neatkar\u012bgais\").<\/li>\n<li>Valsts<\/li>\n<\/ul>\n<p><\/p>\n<p>Visiem, kuri izlas\u012bju\u0161i rakstu un interes\u0113jas par InterSystems IRIS iesp\u0113j\u0101m k\u0101 m\u0101ksl\u012bg\u0101 intelekta un ma\u0161\u012bnm\u0101c\u012b\u0161an\u0101s izstr\u0101des vai mitin\u0101\u0161anas platformu, pied\u0101v\u0101jam apspriest iesp\u0113jamos scen\u0101rijus, kas interes\u0113 j\u016bsu uz\u0146\u0113mumu. M\u0113s ar prieku analiz\u0113sim j\u016bsu uz\u0146\u0113muma vajadz\u012bbas un kop\u012bgi noteiksim darb\u012bbas pl\u0101nu; m\u016bsu AI\/ML ekspertu grupas kontaktadrese ir <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Avots: <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\/lv\/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=\"lv_LV\" \/>\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\/lv\/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 InterSystems IRIS | ProHoster","description":"\u0160is raksts ir velt\u012bts Python Gateway \u2014 kopienas projektam ar atv\u0113rt\u0101 koda risin\u0101jumu datu platformai InterSystems IRIS.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}