@datagrok/helm 2.1.12 → 2.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"package-test.js","mappings":"iCACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFV,EAAyBC,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,6DCL9D,MAAM,EAA+BC,GCA/B,EAA+BC,K,0SCM9B,MAAMC,EAKT,CAAC,EAGCC,EAA0C,CAAC,EAC1C,IAAIC,EAEJ,IAAUC,GAAjB,SAAiBA,GACC,EAAAC,QAAhB,SAAwBP,EAAYQ,GAClC,GAAa,MAATR,EACF,MAAM,IAAIS,MAAM,GAAW,MAARD,EAAe,QAAUA,gBAChD,CACD,CALD,CAAiBF,IAAAA,EAAM,KAahB,MAAMI,EAIXC,YAAYC,EAA0BC,GAHtC,KAAAD,gBAAiB,EACjB,KAAAC,QAAS,OAGgBC,IAAnBF,IAA8BG,KAAKH,eAAiBA,QACzCE,IAAXD,IAAsBE,KAAKF,OAASA,EAC1C,EAGK,MAAMG,EAMXL,YAAYM,EAAkBT,EAAcU,EAA0BC,G,MACpEJ,KAAKE,SAAWA,EAChBF,KAAKP,KAAOA,EACZW,UAAAA,EAAY,CAAC,GACE,QAAf,EAAAA,EAAQC,eAAO,QAAfD,EAAQC,QAAY,KACpBL,KAAKI,QAAUA,EACfJ,KAAKG,KAAO,IAA0B,EAAD,gCACnC,OAAO,IAAIG,SAAQ,CAAOC,EAASC,IAAW,EAAD,gCAC3C,IAAIC,EAAS,GACb,IACEA,QAAeN,G,CACf,MAAOO,GACPF,EAAOE,E,CAETH,EAAQE,EACV,KACF,GACF,EAyBK,SAASN,EAAKV,EAAcU,EAA0BC,GAC7BL,MAA1BX,EAAME,KACRF,EAAME,GAAmB,CAAC,GACQS,MAAhCX,EAAME,GAAiBF,QACzBA,EAAME,GAAiBF,MAAQ,IACjCA,EAAME,GAAiBF,MAAOuB,KAAK,IAAIV,EAAKX,EAAiBG,EAAMU,EAAMC,GAC3E,CAGO,SAASQ,EAAOC,EAAaC,GAAgB,EAAMC,GAIxD,GAFEA,EADEA,EACM,GAAGA,MACA,GACTF,IAAWC,EACb,MAAM,IAAIpB,MAAM,GAAGqB,cAAkBD,YAAmBD,KAC5D,CAEO,SAASG,EAAYH,EAAgBC,EAAkBG,EAAY,KAAOF,GAC/E,GAAKF,IAAWK,OAAOC,mBAAqBL,IAAaI,OAAOC,mBAC3DN,IAAWK,OAAOE,mBAAqBN,IAAaI,OAAOE,mBAC3DP,IAAWK,OAAOG,KAAOP,IAAaI,OAAOG,KAASC,MAAMT,IAAWS,MAAMR,GAChF,OACF,MAAMS,EAAWC,KAAKC,IAAIZ,EAASC,GAAYG,EAE/C,GADAL,EAAOW,GAAU,EAAM,GAAGR,QAAAA,EAAS,mBAAmBE,OACjDM,EACH,MAAM,IAAI7B,MAAM,YAAYoB,UAAiBD,kBAAuBI,KACxE,CA0BO,SAASS,EAAab,EAAgCC,GAC3D,IAAK,MAAOa,EAAaC,KAAkBtD,OAAOuD,QAAQf,GAAW,CACnE,IAAKD,EAAOhC,eAAe8C,GACzB,MAAM,IAAIjC,MAAM,sBAAsBiC,gBAExC,MAAMG,EAAcjB,EAAOc,GAC3B,GAAIG,aAAuBC,OAASH,aAAyBG,MAC3DC,EAAYF,EAAaF,QACtB,GAAIE,aAAuBxD,QAAUsD,aAAyBtD,OACjEoD,EAAaI,EAAaF,QACvB,GAAIV,OAAOe,SAASH,IAAgBZ,OAAOe,SAASL,GACvDZ,EAAYc,EAAaF,QACtB,GAAIE,GAAeF,EACtB,MAAM,IAAIlC,MAAM,aAAakC,eAA2BD,YAAsBG,K,CAEpF,CAEO,SAASE,EAAYnB,EAAwBC,GAClD,MAAMoB,EAAerB,EAAOsB,OACtBC,EAAiBtB,EAASqB,OAEhC,GAAID,GAAgBE,EAClB,MAAM,IAAI1C,MAAM,0DAA0DwC,kCACxCE,KAGpC,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAcG,IAChC,GAAIxB,EAAOwB,aAAcN,OAASjB,EAASuB,aAAcN,MACvDC,EAAYnB,EAAOwB,GAAIvB,EAASuB,SAC7B,GAAIxB,EAAOwB,aAAc/D,QAAUwC,EAASuB,aAAc/D,OAC7DoD,EAAab,EAAOwB,GAAIvB,EAASuB,SAC9B,GAAIxB,EAAOwB,IAAMvB,EAASuB,GAC7B,MAAM,IAAI3C,MAAM,YAAYoB,EAASuB,kBAAkBA,UAAUxB,EAAOwB,KAE9E,CAGO,SAASnC,EAASA,EAAkBd,GACzCE,EAAkBY,EAClBd,GACF,CAGO,SAASkD,EAAOA,GACSvC,MAA1BX,EAAME,KACRF,EAAME,GAAmB,CAAC,GAC5BF,EAAME,GAAiBgD,OAASA,CAClC,CAGO,SAASC,EAAMA,GACUxC,MAA1BX,EAAME,KACRF,EAAME,GAAmB,CAAC,GAC5BF,EAAME,GAAiBiD,MAAQA,CACjC,CAEA,SAASC,EAAaC,EAAWC,GAC/B,OAAOD,EAAEE,QAAQ,IAAIC,OAAOF,EAAEjD,KAAM,MAAOiD,EAAEG,OAC/C,CA2BO,SAAeC,EAAS1C,G,uDAC7B,MAAM2C,EAAgD,QAArC,EAA+B,QAA/B,sCAA+B,eAAEC,YAAI,eAAEC,cA1BnD,SAA6BC,EAAmBC,G,yCACrD,GAAI9D,EAAc6D,GAAY,OAC9B,MAAME,EAAsChE,EAC5C,QAAsCW,IAAlCqD,EAAYC,cAEd,YADAhE,EAAc6D,IAAa,GAG7B,MAAMI,EAAkB,GAClBC,QAAsB,wBAA2B,iBAAiBL,MAAcM,OACtF,IAAK,MAAMd,KAAKa,EAAe,CAC7B,MAAMnE,EAAQsD,EAAEtC,QAAc,KAC9B,GAAMhB,GAAS2C,MAAM0B,QAAQrE,IAAUA,EAAM+C,OAC7C,IAAK,IAAIE,EAAI,EAAGA,EAAIjD,EAAM+C,OAAQE,IAChCiB,EAAgB3C,KAAK,IAAIV,EAxMN,aAwM8C,IAAjBb,EAAM+C,OAAeO,EAAEjD,KAAO,GAAGiD,EAAEjD,QAAQ4C,EAAI,KAAK,IAAY,EAAD,gCAG7G,IAAY,WAFM,iBAAoBG,EAAapD,EAAMiD,GAAIK,KAE3C,KAAM,WAAWtD,EAAMiD,IAC3C,M,CAGJhD,EAAc6D,IAAa,EACtBI,EAAgBnB,SACrBiB,EAAYC,cAAoB,CAACjE,MAAOkE,GAC1C,G,CAIQI,CAAcX,EAASY,IAC7B,MAAMC,EAC8D,GACpEC,QAAQC,IAAI,iBACZ1D,UAAAA,EAAY,CAAC,GACO,QAApB,KAAAA,GAAS2D,mBAAW,UAAXA,YAAgB,IAAIpE,GAC7B,kBAAuB,GACvB,IAAK,MAAOvB,EAAKa,KAAUX,OAAOuD,QAAQzC,GAAQ,CAChD,GAAyBW,OAArBK,aAAO,EAAPA,EAASF,YACN9B,EAAI4F,cAAcC,WAAW7D,aAAO,EAAPA,EAASF,SAAS8D,eAClD,SAEJH,QAAQC,IAAI,WAAW1F,cACvB,IACMa,EAAMqD,eACFrD,EAAMqD,S,CACd,MAAO4B,GACPjF,EAAMkF,aAAeD,EAAEE,U,CAEzB,MAAMC,EAAe,QAAX,EAAApF,EAAMG,aAAK,QAAI,GACnBkF,EAAM,GACZ,IAAK,IAAIjC,EAAI,EAAGA,EAAIgC,EAAElC,OAAQE,IAC5BiC,EAAI3D,WAAW4D,EAASF,EAAEhC,GAAIjC,aAAO,EAAPA,EAASD,OACzC,MAAMqE,SAAclE,QAAQmE,IAAIH,IAAMI,QAAQC,GAAkB,WAAZA,EAAElE,SACtD,IACMxB,EAAMsD,cACFtD,EAAMsD,Q,CACd,MAAO2B,GACPjF,EAAM2F,YAAcV,EAAEE,U,CAEpBnF,EAAM2F,aACRJ,EAAK7D,KAAK,CAACT,SAAU9B,EAAKqB,KAAM,OAAQgB,OAAQxB,EAAM2F,YAAaC,SAAS,EAAOC,GAAI,EAAGC,SAAS,IACjG9F,EAAMkF,cACRK,EAAK7D,KAAK,CAACT,SAAU9B,EAAKqB,KAAM,OAAQgB,OAAQxB,EAAMkF,aAAcU,SAAS,EAAOC,GAAI,EAAGC,SAAS,IACtGnB,EAAQjD,QAAQ6D,E,CAYlB,GAVIpE,EAAQ2D,YAAYlE,uBAuDnB,SAAqBiF,G,+CACpB,IAAIxE,SAAS0E,GAAMC,WAAWD,EAAGF,IACzC,G,CAxDUI,CAAM,KACR,yBAA8B,GAChCtB,EAAQjD,KAAK,CACXT,SAAU,uBACVT,KAAM,aACNgB,OAAQ,kBAAsBoE,SAAS,EAAOC,GAAI,EAAGC,SAAS,KAIhE3E,EAAQ2D,YAAYjE,OAAQ,CAC9B,MAAMqF,EAAS,IAAI,SACbC,EAAaxB,EAAQc,QAAQM,GAAMA,EAAEH,UAAS1C,OAC9C4C,EAAUnB,EAAQc,QAAQM,GAAMA,EAAED,UAAS5C,OAC3CkD,EAASzB,EAAQc,QAAQM,IAAOA,EAAEH,UAClCS,EAAc,0FACdC,EAAS,CACbH,WAAYA,EACZL,QAASA,EACTM,OAAQA,EAAOlD,OACfc,QAASF,GAEX,IAAK,MAAMiC,KAAKK,EAAQ/G,OAAOkH,OAAOD,EAAQ,CAAC,CAAC,GAAGP,EAAE9E,cAAc8E,EAAEvF,QAASuF,EAAEvE,SAChF0E,EAAOrB,IAAIwB,EAAaC,EAAQ,iB,CAElC,OAAO3B,C,IAGT,SAAeW,EAASF,EAASoB,G,mDAC/B,IAAIT,EACJ,MAAMN,EAAsB3E,MAAb0F,IAA4BpB,EAAE5E,KAAKuE,cAAcC,WAAWwB,EAAUzB,eAC/E0B,GAAgB,QAAT,EAAArB,EAAEjE,eAAO,eAAEuF,aAAcjB,EAChCiB,EAAajB,EAAS,UAAqB,QAAT,EAAAL,EAAEjE,eAAO,eAAEuF,WAC9CD,GACH7B,QAAQC,IAAI,WAAWO,EAAEnE,YAAYmE,EAAE5E,QACzC,MAAMmG,EAAQ,IAAIC,KAClB,IAEIb,EADEU,EACE,CAACb,SAAS,EAAMpE,OAAQkF,EAAab,GAAI,EAAGC,SAAS,GAErD,CAACF,SAAS,EAAMpE,OAAsB,QAAd,QAAM4D,EAAElE,cAAM,QAAI,KAAM2E,GAAI,EAAGC,SAAS,E,CACtE,MAAOb,GACPc,EAAI,CAACH,SAAS,EAAOpE,OAAQyD,EAAEE,WAAYU,GAAI,EAAGC,SAAS,E,CAE7D,MAAMe,EAAO,IAAID,KAOjB,OALAb,EAAEF,GAAKgB,EAAOF,EACTF,GACH7B,QAAQC,IAAI,YAAYO,EAAEnE,YAAYmE,EAAE5E,YAAYuF,EAAEF,SACxDE,EAAE9E,SAAWmE,EAAEnE,SACf8E,EAAEvF,KAAO4E,EAAE5E,KACJuF,C,IChSF,SAASe,EAAUtD,GAExBA,EADiBuD,EAAMvD,EAAG,KACb,GACb,MAAMwD,EAAW,GAEjB,IAAKC,KAAKC,MAAMC,cAAc3D,GAAI,CAChC,MAAM4D,EAAOL,EAAMvD,EAAG,KACtB,IAAK,IAAIJ,EAAI,EAAGA,EAAIgE,EAAKlE,SAAUE,EAAG,CAIpC,IAAIiE,GAFJ7D,EADU8D,EAAiBF,EAAKhE,IAC1BmE,KAEIC,QAAQ,KAGlBH,GADA7D,EAAIA,EAAEiE,UAAUJ,EAAI,IACdG,QAAQ,KAGd,MAAME,EAAKX,EAFXvD,EAAIA,EAAEiE,UAAU,EAAGJ,GAEC,KACpB,IAAK,MAAMM,KAAWD,EACpB,GAAKC,GAAuB,KAAZA,EAChB,GAAIA,EAAQ3C,WAAW,MAAQ2C,EAAQC,SAAS,KAAM,CACpD,MAAMC,EAAUF,EAAQF,UAAU,EAAGE,EAAQH,QAAQ,MACrDR,EAAStF,KAAKmG,GACd,MAAMC,EAAUH,EAAQF,UAAUE,EAAQH,QAAQ,KAAO,GACzDE,EAAGhG,KAAKoG,E,MACH,GAAIH,EAAQC,SAAS,MAAQD,EAAQI,SAAS,KAAM,CACzD,MAAMF,EAAUF,EAAQF,UAAUE,EAAQK,YAAY,KAAO,EAAGL,EAAQzE,OAAS,GACjF8D,EAAStF,KAAKmG,GACd,MAAMC,EAAUH,EAAQF,UAAU,EAAGE,EAAQK,YAAY,MACzDN,EAAGhG,KAAKoG,E,MACH,GAAIH,EAAQC,SAAS,MAAQD,EAAQC,SAAS,KAAM,CAGzD,MAAMK,EAAaN,EAAQF,UAAU,EAAGE,EAAQH,QAAQ,MAClDU,EAAaP,EAAQF,UAAUE,EAAQK,YAAY,KAAO,GAE1DG,EAAU,CAACF,EADGN,EAAQF,UAAUQ,EAAW/E,OAAS,EAAGyE,EAAQzE,OAASgF,EAAWhF,OAAS,GACxDgF,GAC1C,IAAK,MAAME,KAAMD,EACfT,EAAGhG,KAAK0G,E,MAEVpB,EAAStF,KAAKiG,E,EAKtB,OAAOX,CACT,CAyCA,SAASD,EAAMvD,EAAW6E,GACxB,MAAMC,EAAM,GACZ,IAAIC,EAAO,GACPC,EAAc,EACdC,EAAU,EACVC,EAAS,EACTC,EAAQ,EACZ,IAAK,IAAIvF,EAAI,EAAGA,EAAII,EAAEN,SAAUE,EAAG,CACjC,IAAIwF,EAAIpF,EAAEiE,UAAUrE,EAAGA,EAAI,GAC3B,GAAIwF,GAAKP,GAAkB,GAAXI,GAA+B,GAAfD,GAA8B,GAAVE,GAAwB,GAATC,EACjEL,EAAI5G,KAAK6G,GACTA,EAAO,OACF,CAEL,GADAA,GAAQK,EACJD,EAAQ,GACD,MAALC,GAAaxF,EAAI,EAAII,EAAEN,OAAQ,GAC/BE,EACF,MAAMyF,EAAKrF,EAAEiE,UAAUrE,EAAGA,EAAI,GAC9BmF,GAAQM,EACRD,GAAKC,C,CAGA,KAALD,EACIxF,EAAI,GAA8B,MAAzBI,EAAEiE,UAAUrE,EAAI,EAAGA,KAChCuF,EAAiB,GAATA,EAAa,EAAI,GACb,KAALC,IACPH,EACY,KAALG,IACPH,EACY,KAALG,IACPJ,EACY,KAALI,IACPJ,EACY,KAALI,IACPF,EACY,KAALE,KACPF,C,EAKR,OADAJ,EAAI5G,KAAK6G,GACFD,CACT,CAEA,SAAShB,EAAiB9D,GACxB,MAAM8E,EAAMQ,EAAgBtF,EAAG,KAC/B,GAAe,MAAX8E,EAAIS,IACN,OAAOT,EAET,MAAMvC,EAAI+C,EAAgBtF,EAAG,KAC7B,MAAO,CAACuF,IAAKT,EAAIS,IAAKC,OAAQjD,EAAEgD,IAAKxB,IAAKxB,EAAEwB,IAC9C,CAEA,SAASuB,EAAgBtF,EAAWoF,GAClC,IAAIG,EAAM,KAEV,GAAI9B,KAAKC,MAAM+B,SAASzF,EAAGoF,GAAI,CAC7B,IAAIvB,EAAI7D,EAAEN,OAAS,EACnB,KAAOmE,EAAI,IACTA,EAAI7D,EAAEwE,YAAYY,EAAGvB,EAAI,KACrBA,GAAK,GAA8B,MAAzB7D,EAAEiE,UAAUJ,EAAI,EAAGA,OAI/BA,EAAI,GAAKA,EAAI7D,EAAEN,OAAS,IAC1B6F,EAAMvF,EAAEiE,UAAUJ,EAAI,EAAG7D,EAAEN,OAAS,GACpCM,EAAIA,EAAEiE,UAAU,EAAGJ,G,CAKvB,OAFW,MAAP0B,IACFA,EAAMA,EAAIrF,QAAQ,IAAIC,OAAO,KAAOiF,EAAG,KAAMA,IACxC,CAACG,IAAK,EAASA,GAAMxB,IAAK/D,EACnC,CAEA,SAAS,EAASA,GAEhB,OAAIyD,KAAKC,MAAMC,cAAc3D,GACpBA,EAEFA,EAAEE,QAAQ,UAAU,SAASwF,GAClC,OAAQA,GACR,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,QACE,OAAOA,EAAEzB,UAAU,GAEvB,GACF,C,0SClMAxG,EAAS,QAAQ,KA0Cf,MAaMkI,EAA0B,CAC9B,CAAC,gBAAiB,IAAK,IAAK,IAAK,IAAK,KACtC,CAAC,gBAAiB,gBAAiB,IAAK,IAAK,KAC7C,CAAC,MAAO,MAAO,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5D,CAAC,IAAK,SAAU,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC7D,CAAC,QAAS,SAAU,OAAQ,IAAK,IAAK,MAGlCC,EAAmB,CACvB,kBAAmB,6BAA8B,iCACjD,qBAAsB,6BAExBlI,EAAK,aAAa,IAAY,oCAC5B,MAAMmI,EAAkB,CACtB,CAAC,MAAO,OAAQ,MAAO,IAAK,IAAK,KAAM,YAAa,WAAY,MAAO,KAAM,IAAK,WAClF,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC/B,CAAC,IAAK,IAAK,IAAK,IAAK,KACrB,CAAC,IAAK,IAAK,IAAK,MAEZC,EAAc,CAClB,gFAEA,2IACA,0FACA,6BAEF,IAAK,IAAIC,EAAM,EAAGA,EAAMD,EAAYpG,SAAUqG,EAAK,CACjD,MAAMC,EAAa,IAAIC,IAAI3C,EAAUwC,EAAYC,KAC3CG,EAAe5G,MAAM6G,KAAKH,GAChC7H,EAAOiI,KAAKC,UAAUH,GAAeE,KAAKC,UAAUR,EAAgBE,I,CAExE,MA5CwB,CAEtB,mFAEA,uDAEA,gDAEA,+CAEA,+CAmCcO,SAAQ,CAACC,EAAM3G,KAC7BlC,EAAKkI,EAAiBhG,IAAI,IAAY,oCACpC,MAAM4G,EAAgBlD,EAAUiD,GAChCC,EAAcC,OACd,MAAMpI,EAAWsH,EAAwB/F,GACzCvB,EAASoI,OACTlH,EAAYiH,EAAenI,EAC7B,KAAE,GACF,ICzGiCqI,GCY/B,MAAO,EAKX,YAAY,EAAc,EAAuB,GAC/C,KAAK,KAAO,EACZ,KAAK,SAAW,EAChB,KAAK,OAAS,CAChB,EAII,MAAO,UAAyB,EAKpC,YAAY,EAA0B,EAAoB,GACxD,MAAM,EAAU,KAAM,EAAU,SAAU,EAAU,QACpD,KAAK,KAAO,EACZ,KAAK,WAAa,CACpB,ECEK,MAAM,EAAoB,0BAEpB,EAAY,IAAI,oBAC3B,WAAQ,CACN,QAAS,IAAI,IAAY,CACvB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAE/C,IAAK,IAAI,IAAY,CAAC,IAAK,IAAK,IAAK,MACrC,IAAK,IAAI,IAAY,CAAC,IAAK,IAAK,IAAK,MAEzC,GAEa,EAAsC,CACjD,IAAI,EAAa,KAAc,EAAU,MAAM,QAAS,IACxD,IAAI,EAAa,MAAe,EAAU,MAAM,IAAK,KACrD,IAAI,EAAa,MAAe,EAAU,MAAM,IAAK,MCpDjDC,EAAM,IAAIC,YAAY,OC2CtBC,EAAkC,CACtCC,QAAS,EACTC,UAAW,EACXC,cA1CF,CAAC,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GACtF,EAAE,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GACvF,EAAE,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAClF,EAAE,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GACvF,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,EAAE,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GACnF,EAAE,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GACpF,CAAC,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1F,EAAE,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GACtF,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GACzF,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GACzF,EAAE,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GACtF,EAAE,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GACxF,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GACxF,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC7F,CAAC,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAClF,CAAC,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GACxF,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1F,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GACxF,EAAE,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GACrF,EAAE,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GACpF,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3F,EAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IAoB7FC,gBAjBwC,CACxC,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EACrE,EAAK,EAAG,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GACnE,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,GAAI,IAAK,KCvB7D,IAAYC,GAAZ,SAAYA,GACR,oBACA,4BACA,uCACH,CAJD,CAAYA,IAAAA,EAAwB,KAM7B,MAAMC,EAAiG,CAC5G,CAACD,EAAyBE,SCfrB,WACL,MAAO,CAACC,EAAcC,KAGpB,IAAIC,EAAO,EACPF,EAAK3H,SAAW4H,EAAK5H,SACvB6H,EAAOxI,KAAKC,IAAIqI,EAAK3H,OAAS4H,EAAK5H,SAErC,IAAI1B,EAAS,EACb,IAAK,IAAI4B,EAAI,EAAGA,EAAIb,KAAKyI,IAAIH,EAAK3H,OAAQ4H,EAAK5H,QAASE,IAClDyH,EAAKzH,KAAO0H,EAAK1H,IACnB5B,IAIJ,OAFAA,GAAUuJ,EACVvJ,GAAUe,KAAK0I,IAAIJ,EAAK3H,OAAQ4H,EAAK5H,QAC9B1B,CAAM,CAEjB,EDDE,CAACkJ,EAAyBQ,aEfrB,WACL,MAAO,CAACL,EAAcC,IJ2GP,EAACK,EAAGC,KACjB,GAAID,EAAEjI,OAASkI,EAAElI,OAAQ,CACrB,MAAMmI,EAAMD,EACZA,EAAID,EACJA,EAAIE,CACR,CACA,OAAiB,IAAbD,EAAElI,OACKiI,EAAEjI,OAETiI,EAAEjI,QAAU,GAvHH,EAACiI,EAAGC,KACjB,MAAME,EAAIH,EAAEjI,OACNgG,EAAIkC,EAAElI,OACNqI,EAAM,GAAMD,EAAI,EACtB,IAAIE,GAAM,EACNC,EAAK,EACLC,EAAKJ,EACLlI,EAAIkI,EACR,KAAOlI,KACH+G,EAAIgB,EAAEQ,WAAWvI,KAAO,GAAKA,EAEjC,IAAKA,EAAI,EAAGA,EAAI8F,EAAG9F,IAAK,CACpB,IAAIwI,EAAKzB,EAAIiB,EAAEO,WAAWvI,IAC1B,MAAMyI,EAAKD,EAAKH,EAChBG,IAAQA,EAAKJ,GAAMA,EAAMA,EACzBC,KAAQG,EAAKJ,GACbA,GAAMI,EACFH,EAAKF,GACLG,IAEAF,EAAKD,GACLG,IAEJD,EAAMA,GAAM,EAAK,EACjBD,EAAMA,GAAM,IAAOK,EAAKJ,GACxBA,GAAMI,CACV,CAEA,IADAzI,EAAIkI,EACGlI,KACH+G,EAAIgB,EAAEQ,WAAWvI,IAAM,EAE3B,OAAOsI,CAAE,EAyFEI,CAASX,EAAGC,GAvFX,EAACA,EAAGD,KAChB,MAAMG,EAAIH,EAAEjI,OACNgG,EAAIkC,EAAElI,OACN6I,EAAM,GACNC,EAAM,GACNC,EAAQ1J,KAAK2J,KAAKZ,EAAI,IACtBa,EAAQ5J,KAAK2J,KAAKhD,EAAI,IAC5B,IAAK,IAAI9F,EAAI,EAAGA,EAAI6I,EAAO7I,IACvB4I,EAAI5I,IAAM,EACV2I,EAAI3I,GAAK,EAEb,IAAIgJ,EAAI,EACR,KAAOA,EAAID,EAAQ,EAAGC,IAAK,CACvB,IAAIX,EAAK,EACLD,GAAM,EACV,MAAM7E,EAAY,GAAJyF,EACRC,EAAO9J,KAAKyI,IAAI,GAAI9B,GAAKvC,EAC/B,IAAK,IAAI2F,EAAI3F,EAAO2F,EAAID,EAAMC,IAC1BnC,EAAIiB,EAAEO,WAAWW,KAAO,GAAKA,EAEjC,IAAK,IAAIlJ,EAAI,EAAGA,EAAIkI,EAAGlI,IAAK,CACxB,MAAMwI,EAAKzB,EAAIgB,EAAEQ,WAAWvI,IACtBmJ,EAAMP,EAAK5I,EAAI,GAAM,KAAOA,EAAK,EACjCoJ,EAAMT,EAAK3I,EAAI,GAAM,KAAOA,EAAK,EACjCyI,EAAKD,EAAKH,EACVgB,IAASb,EAAKY,GAAMhB,GAAMA,EAAMA,EAAMI,EAAKY,EACjD,IAAIE,EAAKjB,IAAOgB,EAAKjB,GACjBmB,EAAKnB,EAAKiB,EACTC,IAAO,GAAMH,IACdP,EAAK5I,EAAI,GAAM,IAAM,GAAKA,GAEzBuJ,IAAO,GAAMH,IACdT,EAAK3I,EAAI,GAAM,IAAM,GAAKA,GAE9BsJ,EAAMA,GAAM,EAAKH,EACjBI,EAAMA,GAAM,EAAKH,EACjBhB,EAAKmB,IAAOd,EAAKa,GACjBjB,EAAKiB,EAAKb,CACd,CACA,IAAK,IAAIS,EAAI3F,EAAO2F,EAAID,EAAMC,IAC1BnC,EAAIiB,EAAEO,WAAWW,IAAM,CAE/B,CACA,IAAIb,EAAK,EACLD,GAAM,EACV,MAAM7E,EAAY,GAAJyF,EACRC,EAAO9J,KAAKyI,IAAI,GAAI9B,EAAIvC,GAASA,EACvC,IAAK,IAAI2F,EAAI3F,EAAO2F,EAAID,EAAMC,IAC1BnC,EAAIiB,EAAEO,WAAWW,KAAO,GAAKA,EAEjC,IAAIM,EAAQ1D,EACZ,IAAK,IAAI9F,EAAI,EAAGA,EAAIkI,EAAGlI,IAAK,CACxB,MAAMwI,EAAKzB,EAAIgB,EAAEQ,WAAWvI,IACtBmJ,EAAMP,EAAK5I,EAAI,GAAM,KAAOA,EAAK,EACjCoJ,EAAMT,EAAK3I,EAAI,GAAM,KAAOA,EAAK,EACjCyI,EAAKD,EAAKH,EACVgB,IAASb,EAAKY,GAAMhB,GAAMA,EAAMA,EAAMI,EAAKY,EACjD,IAAIE,EAAKjB,IAAOgB,EAAKjB,GACjBmB,EAAKnB,EAAKiB,EACdG,GAAUF,IAAQxD,EAAI,EAAM,EAC5B0D,GAAUD,IAAQzD,EAAI,EAAM,EACvBwD,IAAO,GAAMH,IACdP,EAAK5I,EAAI,GAAM,IAAM,GAAKA,GAEzBuJ,IAAO,GAAMH,IACdT,EAAK3I,EAAI,GAAM,IAAM,GAAKA,GAE9BsJ,EAAMA,GAAM,EAAKH,EACjBI,EAAMA,GAAM,EAAKH,EACjBhB,EAAKmB,IAAOd,EAAKa,GACjBjB,EAAKiB,EAAKb,CACd,CACA,IAAK,IAAIS,EAAI3F,EAAO2F,EAAID,EAAMC,IAC1BnC,EAAIiB,EAAEO,WAAWW,IAAM,EAE3B,OAAOM,CAAK,EAcLC,CAAQ1B,EAAGC,EAAE,EItHb0B,CAASjC,EAAMC,GAAQvI,KAAK0I,IAAIJ,EAAK3H,OAAQ4H,EAAK5H,OAE7D,EFYE,CAACwH,EAAyBqC,mBDmCrB,SAAwBC,GAC7B,MAAO,CAACnC,EAAcC,KACpB,MAAM,QAACR,EAAO,UAAEC,EAAS,cAAEC,EAAa,gBAAEC,GAAmB,IAAIJ,KAAgB2C,GAG3EC,EAAqB,CACzB,IAAInK,MAAc+H,EAAK3H,OAAS,GAAGgK,KAAK,GACxC,IAAIpK,MAAc+H,EAAK3H,OAAS,GAAGgK,KAAK,IAIpCC,EAA0B,IAAIrK,MAAe+H,EAAK3H,OAAS,GAAGgK,MAAK,GACnEE,EAA4B,IAAItK,MAAe+H,EAAK3H,OAAS,GAAGgK,MAAK,GAI3E,IAAIG,EAAU,EACVC,EAAU,EAEd,IAAK,IAAIlK,EAAI,EAAGA,EAAIyH,EAAK3H,OAAS,EAAGE,IACnC6J,EAAO,GAAG7J,IAAMkH,GAAWlH,EAAI,GAAKmH,EAGtC,IAAK,IAAInH,EAAI,EAAGA,EAAI0H,EAAK5H,OAAS,EAAGE,IAAK,CACxC6J,EAAOK,GAAS,IAAMhD,GAAWlH,EAAI,GAAKmH,EAC1C,IAAK,IAAI6B,EAAI,EAAGA,EAAIvB,EAAK3H,OAAS,EAAGkJ,IAAK,CACxC,MAAMmB,EACJN,EAAOI,GAASjB,EAAI,GAAK5B,EAAcC,EAAgBI,EAAKuB,EAAI,KAAK3B,EAAgBK,EAAK1H,EAAI,KAC1FoK,EAAMP,EAAOI,GAASjB,IAAMe,EAAaf,GAAK7B,EAAYD,GAC1DmD,EAAOR,EAAOK,GAASlB,EAAI,IAAMgB,EAAehB,EAAI,GAAK7B,EAAYD,GAC3E2C,EAAOK,GAASlB,GAAK7J,KAAK0I,IACxBsC,EAAUE,EAAMD,GAGdP,EAAOK,GAASlB,KAAOmB,GACzBJ,EAAaf,IAAK,EAClBgB,EAAehB,IAAK,GACXa,EAAOK,GAASlB,KAAOqB,GAChCN,EAAaf,IAAK,EAClBgB,EAAehB,IAAK,IAEpBe,EAAaf,IAAK,EAClBgB,EAAehB,IAAK,E,CAIxBiB,EAAUC,EACVA,GAAWA,EAAU,GAAK,C,CAI5B,MAAMI,EAAmB7C,EAAK9D,MAAM,IAAI4G,KAAK/E,GAAM4B,EAAcC,EAAgB7B,IAAI6B,EAAgB7B,MAClGgF,QAAO,CAACzC,EAAGC,IAAMD,EAAIC,GAAG,GACrByC,EAAmB/C,EAAK/D,MAAM,IAAI4G,KAAK/E,GAAM4B,EAAcC,EAAgB7B,IAAI6B,EAAgB7B,MAClGgF,QAAO,CAACzC,EAAGC,IAAMD,EAAIC,GAAG,GACrB0C,EAAWvL,KAAK0I,IAAIyC,EAAkBG,GAC5C,OAAQC,EAAWb,EAAOI,GAASxC,EAAK3H,SAAW4K,CAAQ,CAE/D,GI/Fa,EAAO,IAAI,oBAEtB,YAAS,iBAAiB,yBAC5B,GAGM,MAAO,EAWJ,6BAA6B,GAClC,GAAI,EAAG,OAAO,UAAY,yBAA2D,UAA/B,EAAG,OAAO,OAAO,cACrE,MAAM,IAAI,MAAM,2CAAuD,6BAEzE,EAAG,OAAO,OAAO,aAAa,SAC9B,EAAa,QAAQ,EACvB,CAEO,iCAAiC,EAAkB,GACxD,GAAI,EAAG,OAAO,UAAY,yBAA2D,cAA/B,EAAG,OAAO,OAAO,cACrE,MAAM,IAAI,MAAM,+CAA2D,6BAC7E,IAAK,EACH,MAAM,IAAI,MAAM,mEAElB,EAAG,OAAO,OAAO,aAAa,aAC9B,EAAG,OAAO,OAAM,YAAiB,GACjC,EAAa,QAAQ,EACvB,CAEO,4BAA4B,GACjC,GAAI,EAAG,OAAO,UAAY,wBACxB,MAAM,IAAI,MAAM,0CAAsD,4BAExE,EAAG,OAAO,OAAO,aAAa,QAC9B,EAAa,QAAQ,EACvB,CAGO,eAAe,GACpB,MAAM,EAAQ,EAAG,OAAO,OAAO,cACzB,EAAqB,EAAG,MAG9B,GAF4B,OAAO,KAAK,EAAM,MAAM,MAAM,GAAM,EAAE,OAAS,IAEvE,sBAAqC,SAAS,GAAQ,CAExD,GAAuC,IAAnC,OAAO,KAAK,EAAM,MAAM,OAAc,MAAM,IAAI,MAAM,qBAE1D,MAAM,EAAU,EAAM,WAAY,UAAoB,MACtD,EAAG,OAAO,OAAM,UAAe,GAE/B,MAAM,EC8GN,SAAyB,EAAoB,EAA6B,EAAoB,KAClG,MAAM,EAAqC,EAAW,KAAK,IACzD,MAAM,EAnBJ,SAAgC,EAAoB,EAAuB,EAAoB,KACnG,MAAM,EAAO,IAAI,IAAY,IAAI,IAAI,IAAI,OAAO,KAAK,OAAW,IAChE,EAAK,OAAO,GAEZ,MAAM,EAAkB,GAClB,EAAsB,GAC5B,IAAK,MAAM,KAAK,EACd,EAAM,KAAK,KAAK,EAAO,EAAK,GAAK,GACjC,EAAU,KAAK,EAAS,IAAI,GAAK,EAAI,GAGvC,MAAM,EAAgB,IAAI,EAAO,GAC3B,EAAoB,IAAI,EAAO,GACrC,OC9EK,SAA0BC,EAAYC,GAC3C,GAAID,EAAG7K,QAAU8K,EAAG9K,OAClB,MAAM,IAAIzC,MAAM,gDAClB,IAAIwN,EAAe,EACnB,IAAK,IAAI7K,EAAY,EAAGA,EAAI2K,EAAG7K,OAAQE,IACrC6K,GAAQF,EAAG3K,GAAK4K,EAAG5K,GACrB,OAAO6K,CACT,CDuES,CAAiB,EAAO,IAAc,EAAa,GAAS,EAAa,GAClF,CAKgB,CAAsB,EAAM,EAAE,SAAU,GACpD,OAAO,IAAI,EAAiB,EAAG,EAAM,EAAI,IAG3C,IAAI,EACJ,MAAM,EAAS,KAAK,OAAO,EAAe,KACvC,GAAO,EAAG,WAAa,EAAG,OAAS,EAAG,YAAc,KAGrD,EAFE,EAAS,EACC,EAAe,MAAM,GAAO,EAAG,aAAe,IACvC,KAEP,KAEd,OAAO,CACT,CD9HuB,CAAe,EAAM,KAAM,GAE5C,GADA,EAAG,OAAO,OAAM,WAAgB,GACpB,OAAR,EAA0B,CAC5B,MAAM,EAAe,OAAO,KAAK,EAAM,MAAM,OACvC,EAAsB,OAAO,KAAK,EAAM,MAAM,MAAM,GAAM,EAAE,OAAS,IAC3E,EAAG,OAAO,OAAM,gBAAoB,EAAa,YACjD,EAAG,OAAO,OAAM,uBAA2B,EAAsB,OAAS,Q,EAGhF,CAEc,aAAsB,OAAO,KAAK,OAAS,CAE9C,YAAkB,OAAO,KAAK,MAAQ,CAEtC,eAAuB,OAAO,KAAK,SAAW,CAE9C,uBAA6B,OAAO,KAAK,iBAAmB,CAE5D,gBACT,MAAM,EAAgC,KAAK,OAAO,OAAM,mBAAoB,EAC5E,GAAiB,cAAb,KAAK,eAAiD,IAAd,EAC1C,MAAM,IAAI,MAAM,uCAAuC,KAAK,OAAO,sBAAsB,KAAK,cAChG,OAAO,CACT,CAEW,cACT,MAAM,EAAU,KAAK,OAAO,OAAM,WAGlC,IAAK,IAAY,KAAK,WAAa,KAAK,eACtC,MAAM,IAAI,MAAM,uBAElB,OAAO,CACT,CAGW,eACT,MAAM,EAAW,KAAK,OAAO,OAAM,YAGnC,IAAK,IAAa,KAAK,WAAa,KAAK,eACvC,MAAM,IAAI,MAAM,wBAElB,OAAO,CACT,CAEc,qBACZ,OAAO,KAAK,OAAO,OAAM,oBAC3B,CAEO,kBACL,GAAiB,QAAb,KAAK,UAA0C,MAAb,KAAK,SAAyB,CAClE,MAAM,EAAkB,KAAK,OAAO,OAAM,iBAC1C,IAAI,EACJ,GAAI,EACF,EAAe,SAAS,OACnB,CAEL,MAAM,EAAQ,KAAK,MACnB,EAAe,OAAO,KAAK,EAAM,MAAM,M,CAEzC,OAAO,C,CAEP,OAAQ,KAAK,UACX,SACE,OAAO,GACT,UACA,UACE,OAAO,EACT,IAAK,KAEH,OADA,QAAQ,KAAK,6BACN,EACT,QACE,MAAM,IAAI,MAAM,wBAAwB,KAAK,cAGrD,CAEO,yBACL,MAAiB,SAAb,KAAK,UAEa,OAAb,KAAK,UAG4C,SAAjD,KAAK,OAAO,OAAM,uBAC7B,CAIW,eACT,GAAuB,OAAnB,KAAK,UAAoB,CAC3B,MAAM,EAAW,KAAK,cAChB,EAAoB,KAAK,QAAQ,OACvC,KAAK,UAAY,IAAI,MAAM,GAC3B,MAAM,EAAa,KAAK,QAAQ,aAC1B,EAAoB,KAAK,QAAQ,WACvC,IAAK,IAAI,EAAe,EAAG,EAAO,EAAW,IAAQ,CACnD,MAAM,EAAc,EAAQ,EAAW,IACvC,KAAK,UAAU,GAAQ,EAAS,E,EAGpC,OAAO,KAAK,SACd,CAIW,YACT,GAAoB,OAAhB,KAAK,OAAiB,CACxB,MAAM,EAAgC,GACtC,IAAI,GAAa,EACb,EAAc,KAElB,IAAK,MAAM,KAAQ,KAAK,SAAU,CACb,MAAf,EACF,EAAc,EAAK,OACZ,EAAK,SAAW,IACvB,GAAa,GAEf,IAAK,MAAM,KAAK,EACR,KAAK,IACT,EAAK,GAAK,GACZ,EAAK,IAAM,C,CAGf,KAAK,OAAS,CAAC,KAAM,EAAM,WAAY,E,CAEzC,OAAO,KAAK,MACd,CAEO,UAAqB,MAAoB,UAAb,KAAK,QAA6B,CAE9D,cAAyB,MAAoB,cAAb,KAAK,QAAiC,CAEtE,SAAoB,MAAoB,SAAb,KAAK,QAA4B,CAE5D,QAAmB,MAAoB,QAAb,KAAK,QAA2B,CAE1D,QAAmB,MAAoB,QAAb,KAAK,QAA2B,CAE1D,YAAuB,MAAoB,OAAb,KAAK,QAA0B,CAE7D,QAAmB,QAAO,KAAK,SAAU,KAAK,QAAQ,cAAc,SAAS,MAAgB,CAE7F,mBAA8B,MAA+B,SAAxB,KAAK,cAA2B,CAMlE,cACR,GAAI,KAAK,MAAM,cAAc,WAAU,SACrC,cACG,GAAI,KAAK,MAAM,cAAc,WAAU,aAC1C,kBACG,GAAI,KAAK,MAAM,cAAc,WAAU,QAC1C,aAEA,MAAM,IAAI,MAAM,WAAW,KAAK,OAAO,kCAAkC,KAAK,UAClF,CASU,aAAa,EAA0B,GAC/C,MAAM,EAAM,KAAK,OACX,EAAM,EAAI,OACV,EAAO,EAAe,cAAgB,IAAM,EAAI,KAAO,IACvD,EAAa,EAAI,UAAU,QAAQ,cAAc,GACjD,EAAY,kBAAmB,SAAU,EAAY,IAAI,MAAM,GAAK,KAAK,KAG/E,GAFA,EAAU,QAAU,wBACpB,EAAU,OAAO,aAAe,GACd,cAAd,EAAuC,CACzC,IAAK,EAAW,MAAM,IAAI,MAAM,kDAChC,EAAU,OAAM,YAAiB,E,CAEnC,EAAU,OAAO,qBAAuB,iBAExC,MAAM,EAAa,EAAI,OAAM,WACzB,GACF,EAAU,OAAM,UAAe,GAEjC,MAAM,EAAc,EAAI,OAAM,YAC1B,GACF,EAAU,OAAM,WAAgB,GAElC,IAAI,EAA0B,EAAI,OAAM,iBACpC,GACF,EAAU,OAAM,gBAAoB,GAEtC,MAAM,EAAiC,EAAI,OAAM,wBASjD,YAR+B,IAA3B,GACF,EAAU,OAAM,uBAA2B,GAE3B,QAAd,IACF,EAAkB,KAAK,kBAAkB,WACzC,EAAU,OAAM,gBAAoB,IAG/B,CACT,CASO,oBAAoB,GACzB,MAAM,EAAoB,EAAa,YAAY,GAC7C,EAAiB,EAAI,SAC3B,OAAO,EAAI,aAAa,EAC1B,CAQO,0BAA0B,GAM/B,OALA,EAAQ,EAAM,cACG,6BAGgB,MAAM,GAAM,EAAM,WAAW,EAAE,gBAElE,CAWO,8BACL,EACA,EACA,GAKA,IAAK,EAAa,mBAAmB,GACnC,MAAM,IAAI,MAAM,uCAClB,MAAM,EAAY,kBAAmB,SAAU,EAAM,IAAI,MAAM,GAAK,KAAK,KAGzE,OAFA,EAAU,QAAU,wBACpB,EAAU,OAAO,aAAe,GACzB,CACT,CAGO,cACL,OC/ME,SAA+B,GACnC,GAAI,EAAI,UAAY,wBAClB,MAAM,IAAI,MAAM,6BAA6B,kCAI/C,OAvBI,SAAsB,EAAe,EAAmB,GAC5D,GAAI,EAAM,cAAc,WAAU,SAChC,OAAO,EACJ,GAAI,EAAM,cAAc,WAAU,aACrC,OAAO,EAAyB,OAmB3B,GAlBF,GAAI,EAAM,cAAc,WAAU,QACrC,OAAO,EAEP,MAAM,IAAI,MAAM,oBAAoB,MAGxC,CAYS,CAFO,EAAI,OAAO,cACP,EAAI,OAAM,aAE9B,CDwMW,CAAqB,KAAK,QACnC,CAEO,0BAEL,IAAK,KAAK,UACR,MAAM,IAAI,MAAM,oCAClB,GAAI,KAAK,QACP,OAAO,UACT,OAAQ,KAAK,UAGX,UACA,UAKA,QACE,OAAO,cAJT,SACE,OAAO,oBAKb,CAEO,sBACL,OAAO,EAAoB,KAAK,4BAClC,CAGO,+BAEL,GAAI,KAAK,OAAO,KAAK,IAAG,qBACtB,MAAqD,SAA9C,KAAK,OAAO,OAAM,qBAG3B,MAGM,SAH4C,KAClB,YAER,wBAAwB,UAA0B,YAEpE,EAAc,IAAI,IAAI,GAEtB,EAAe,EAAyB,KAAK,WAInD,IAAK,MAAM,KAAO,KAAK,OAAO,WAAY,CACxC,MAAM,EAAW,EAAa,GAC9B,IAAK,MAAM,KAAW,EACpB,IAAK,EAAY,IAAI,GAEnB,OADA,KAAK,OAAO,OAAM,oBAAwB,UACnC,C,CAKb,OADA,KAAK,OAAO,OAAM,oBAAwB,SACnC,CACT,CAEA,YAAsB,GACpB,GAxOM,eAA+B,KAiB/B,YAA6B,KAuN/B,EAAI,MAAQ,cACd,MAAM,IAAI,MAAM,2BAA2B,EAAI,mBAAmB,mBACpE,KAAK,QAAU,EACf,MAAM,EAAQ,KAAK,QAAQ,OAAO,cAClC,GAAI,QAGF,MAAM,IAAI,MAAM,qCAMlB,GARE,KAAK,OAAS,EAGhB,KAAK,UAAY,KAAK,cACtB,KAAK,kBAAqB,KAAK,UAAa,EAAa,uBAAuB,MAC7E,KAAK,SAAY,EAAa,uBAAuB,KACpD,EAAa,uBAAuB,WAEnC,KAAK,OAAO,KAAK,IAAG,aAAmB,KAAK,OAAO,KAAK,IAAG,cAC5D,KAAK,OAAO,KAAK,IAAG,0BAA+B,KAAK,UAAyB,OAAb,KAAK,SAI3E,GAAI,KAAK,UACP,EAAa,sBAAsB,WAC9B,GAAI,KAAK,cAAe,CAC7B,MAAM,EAAY,EAAI,OAAM,aAC5B,EAAa,0BAA0B,KAAM,E,KACxC,KAAI,KAAK,SAGd,MAAM,IAAI,MAAM,qBAAqB,KAAK,OAAO,OAAO,mBAFxD,EAAa,qBAAqB,K,CAetC,IAAK,KAAK,OAAO,KAAK,IAAG,wBACvB,GAAI,KAAK,SACP,KAAK,OAAO,OAAM,uBAA2B,aACxC,GAAI,CAAC,MAAM,SAAS,KAAK,UAC9B,MAAM,IAAI,MAAM,eAAe,KAAK,OAAO,sBAAsB,KAAK,qDAI5E,CAGO,mBAAmB,GAExB,OADM,EAAK,UAAU,EAAI,OAAO,EAAI,KAAK,EAAK,QAAU,IAAI,EAAa,IAClE,EAAI,KAAK,EAAK,OACvB,EAna0B,yBAAyB,CACjD,KAAM,IACN,UAAW,GACX,MAAO,KGxBJ,MAAM,UAAeC,cDwFrB,SAASC,EAAaC,GAC3B,IAAIC,EAAiB,EACrB,IAAK,IAAIjL,EAAY,EAAGA,EAAIgL,EAAElL,OAAQE,IACpCiL,GAAUD,EAAEhL,GAAKgL,EAAEhL,GACrB,OAAOb,KAAK+L,KAAKD,EACnB,CEnFM,MAAO,EA2BD,mBAAmB,EAC3B,GAAa,EAAO,EAAqC,GAEzD,MAAM,EAAqC,GAQ3C,OAPA,EAAG,SAAS,IACV,MAAM,EAAU,EAAG,GACb,EAAS,EAAG,GAClB,EAAQ,SAAQ,CAAC,EAAK,KACpB,EAAQ,GAAO,KAAK,cAAc,GAAQ,EAAa,EAAI,EAAI,GAC/D,IAEG,IAAI,EAAY,EACzB,CAIA,YAAY,GACV,KAAK,SAAW,CAClB,CAEO,IAAI,GACT,OAAO,KAAK,SAAS,EACvB,EAhDc,iBAAiB,mBAGjB,gBAA6C,CACzD,OAAU,CAAC,mBAAoB,mBAAoB,kBAAmB,qBACtE,UAAa,CAAC,iBAAkB,iBAAkB,iBAAkB,iBAAkB,iBACpF,iBAAkB,mBAAoB,qBAAsB,sBAC9D,SAAY,CAAC,kBAAmB,kBAAmB,qBAAsB,mBAAoB,qBAC3F,qBACF,QAAW,CAAC,mBAAoB,mBAAoB,oBACpD,IAAO,CAAC,iBAAkB,oBAC1B,QAAW,CAAC,kBAAmB,mBAAoB,mBACnD,UAAa,CAAC,kBAAmB,qBACjC,WAAc,CAAC,kBAAmB,mBAAoB,qBAAsB,mBAC5E,WAAc,CAAC,mBAAoB,mBAAoB,oBACvD,WAAc,CAAC,iBAAkB,iBAAkB,iBAAkB,kBACrE,MAAS,CAAC,iBAAkB,kBAC5B,YAAe,CAAC,mBAAoB,qBAAsB,sBAC1D,SAAY,CAAC,iBAAkB,mBAAoB,mBAAoB,kBACvE,KAAQ,CAAC,oBACT,MAAS,CAAC,iBAAkB,oBAC5B,KAAQ,CAAC,mBAAoB,mBAAoB,mBAAoB,sBACrE,OAAU,CAAC,mBACX,MAAS,CAAC,qBClCR,MAAO,UAA2B,EAGpB,kBAUhB,YATkB,IAAd,KAAK,OACP,KAAK,KAAO,KAAK,YAAY,CAC3B,CAAC,CAAC,IAAK,IAAK,IAAK,KAAM,UACvB,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,aAChD,CAAC,CAAC,IAAK,IAAK,KAAM,WAClB,CAAC,CAAC,IAAK,KAAM,OACb,CAAC,CAAC,IAAK,KAAM,cACZ,EAAO,IAEL,KAAK,IACd,CAIkB,wBAWhB,YAVwB,IAApB,KAAK,aACP,KAAK,WAAa,KAAK,YAAY,CACjC,CAAC,CAAC,IAAK,KAAM,UACb,CAAC,CAAC,IAAK,KAAM,OACb,CAAC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,aAC3C,CAAC,CAAC,IAAK,IAAK,KAAM,cAClB,CAAC,CAAC,IAAK,KAAM,aACb,CAAC,CAAC,IAAK,IAAK,IAAK,KAAM,YACtB,EAAO,IAEL,KAAK,UACd,CAIkB,oBA2BhB,YA1BoB,IAAhB,KAAK,SACP,KAAK,OAAS,IAAI,EAAmB,CAEnC,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,EAAK,UACL,OAAU,aAGP,KAAK,MACd,CAEgB,IAAI,GAClB,MAAM,EAAO,KAAK,EAAmB,WAAa,EAAmB,WAAW,GAAK,EAErF,OADY,MAAM,IAAI,EAExB,EAGe,aAAyC,CACtD,MAAS,IACT,IAAO,IACP,IAAO,IACP,IAAO,KAIL,MAAO,EAqGJ,kBAAkB,EAAiB,QACxC,OAAQ,GACR,IAAK,OACH,OAAO,EAAmB,WAC5B,IAAK,OACH,OAAO,EAAmB,KAC5B,QACE,MAAM,IAAI,MAAM,yBAAyB,sBAE7C,CAQO,qBAAqB,GAC1B,IAAI,EAAU,EACV,EAAQ,GACR,EAAQ,GAEZ,IAAK,MAAM,KAAQ,EACL,KAAR,EACF,IACe,KAAR,EACP,IACO,EACP,GAAS,EAET,GAAS,EAGb,OAAQ,MAAM,SAAS,IAAwB,CAAC,EAAO,GAAtB,CAAC,EAAO,GAC3C,CAEO,uBAAuB,EAAkB,GAAI,EAAiB,QAEnE,MAAM,EAAsB,KAAK,WAAW,GAC5C,IAAK,EAAc,GAAgB,KAAK,cAAc,GAItD,GAHA,EAAgB,EAAa,OAAS,EAAI,GAAG,EAAa,MAAM,EAAG,QAAU,EAC7E,EAAgB,EAAa,OAAS,EAAI,GAAG,EAAa,MAAM,EAAG,QAAU,EAEvD,GAAlB,EAAQ,QAA6B,KAAd,EAAQ,GAAW,CAC5C,MAAM,EAAQ,EAAQ,IAAI,cAC1B,OAAO,KAAS,EACd,CAAC,EAAoB,IAAI,GAAQ,EAAO,EAAc,GACtD,CAAC,KAAK,eAAgB,EAAc,EAAc,E,CAGtD,GAAkB,KAAd,EAAQ,IAAa,EAAQ,KAAO,IAChB,GAAlB,EAAQ,QAA6B,KAAd,EAAQ,IAAW,CAC5C,MAAM,EAAQ,EAAQ,IAAI,cAC1B,OAAO,KAAS,EACd,CAAC,EAAoB,IAAI,GAAQ,EAAO,EAAc,GACtD,CAAC,KAAK,eAAgB,EAAc,EAAc,E,CAIxD,GAAI,EAAQ,UAAU,EAAG,KAAM,KAAK,cACZ,GAAlB,EAAQ,QAA6B,KAAd,EAAQ,IAAW,CAC5C,MAAM,EAAQ,KAAK,YAAY,EAAQ,UAAU,EAAG,IACpD,OAAO,KAAS,EACd,CAAC,EAAoB,IAAI,GAAQ,EAAO,EAAc,GACtD,CAAC,KAAK,eAAgB,EAAc,EAAc,E,CAIxD,GAAI,EAAQ,IAAI,eAAiB,EAAQ,IACnC,EAAQ,UAAU,EAAG,KAAM,KAAK,cACZ,GAAlB,EAAQ,QAA6B,KAAd,EAAQ,IAAW,CAC5C,MAAM,EAAQ,KAAK,YAAY,EAAQ,UAAU,EAAG,IACpD,OAAO,KAAS,EACd,CAAC,EAAoB,IAAI,GAAQ,EAAO,EAAc,GACtD,CAAC,KAAK,eAAgB,EAAc,EAAc,E,CAK1D,MAAO,CAAC,KAAK,eAAgB,EAAc,EAAc,EAC3D,EApLgB,UAAkB,aAElB,2BAAmC,8BAE5C,iBAAiB,mBAEV,QAA0B,CACtC,EAAK,UACL,EAAK,UACL,EAAK,WACL,EAAK,SACL,EAAK,gBACL,EAAK,YACL,EAAK,gBACL,EAAK,aACL,EAAK,gBACL,EAAK,UACL,EAAK,SACL,EAAK,WACL,EAAK,YACL,EAAK,WACL,EAAK,SACL,EAAK,UACL,EAAK,aACL,EAAK,aACL,EAAK,aACL,EAAK,aAGO,WAA6B,CACzC,EAAK,WACL,EAAK,uBACL,EAAK,4BACL,EAAK,eACL,EAAK,0BACL,EAAK,0BACL,EAAK,yBACL,EAAK,yBACL,EAAK,yBACL,EAAK,kBACL,EAAK,kBACL,EAAK,2BACL,EAAK,yBACL,EAAK,oBACL,EAAK,kBACL,EAAK,kBACL,EAAK,qCACL,EAAK,2BACL,EAAK,iBACL,EAAK,mBAGO,oBAAsC,CAClD,EAAK,MACL,EAAK,kBACL,EAAK,uBACL,EAAK,WACL,EAAK,qBACL,EAAK,sBACL,EAAK,oBACL,EAAK,oBACL,EAAK,sBACL,EAAK,aACL,EAAK,eACL,EAAK,sBACL,EAAK,oBACL,EAAK,iBACL,EAAK,aACL,EAAK,cACL,EAAK,gCACL,EAAK,sBACL,EAAK,YACL,EAAK,cAKO,cAAgC,CAC5C,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KC/JL,MAAO,GACK,UAAkB,cAElB,2BAAmC,+BAErC,QAA0B,CACtC,EAAK,UACL,EAAK,WACL,EAAK,UACL,EAAK,UACL,EAAK,UCmBH,MAAO,UAXP,QAcI,sBAEN,MADa,GAAgB,UAAU,OAAO,OAAO,iBAEvD,CAEO,IAAI,GACT,MACM,EArCJ,MACG,gBAAgB,GACrB,IAAI,EAAe,EACnB,GAAiB,IAAb,EAAE,OACJ,OAAO,EACT,IAAK,IAAI,EAAY,EAAG,EAAI,EAAE,OAAQ,IAEpC,GAAS,GAAQ,GAAK,EADF,EAAE,WAAW,GAEjC,GAAQ,EAEV,OAAO,CACT,GAyBmC,SAAS,GACxB,EAAoB,QAAQ,OAC9C,OA1DJ,SAAsB,GACpB,GAAa,MAAT,EACF,MAAO,mBAET,MAAM,EAAkB,iBAAkB,GACpC,EAAI,UAAW,GACf,EAAI,UAAW,GACf,EAAI,UAAW,GAEf,EAAc,KAAK,KAAK,KAAK,IAAI,EAAI,EAAG,GAAK,KAAK,IAAI,EAAI,EAAG,GAAK,KAAK,IAAI,EAAI,EAAG,IAKxF,OAAI,EAAc,IACT,OAJK,EAAI,EAIM,OAHV,EAAI,EAGqB,OAFzB,EAAI,EAEoC,OAE/C,cAAe,EACxB,CAwCW,CAAa,EAAoB,QAAQ,GAClD,ENZI,SAAU,EAAgB,GAC9B,OAAO,EAAI,WAAW,QAAQ,EAAW,OAAO,MAAM,GAAG,MAAM,KAAK,KAAK,GACnE,EAAQ,WAAW,MAAQ,EAAQ,SAAS,KACvC,EAAQ,MAAM,GAAI,GACN,MAAZ,EACA,GAEA,GAEb,CAOM,SAAU,EAAyB,EAAmB,GAC1D,OAAQ,GACC,EAAI,MAAM,EAAW,EAEhC,CMnBgB,UAAoB,EAAoB,eNqBxD,MAAM,EAAiB,kCACjB,EAAoB,iBAOpB,SAAU,EAAe,GAC7B,EAAO,UAAY,EACnB,MAAM,EAA6B,EAAO,KAAK,EAAI,YAC7C,EAAuB,EAAK,EAAG,GAAK,KAY1C,OADyB,EAAQ,EAAM,MAAM,KAAO,IACtC,KAVS,IACrB,EAAU,UAAY,EACtB,MAAM,EAAO,EAAU,KAAK,GAC5B,OAAI,GAAQ,EAAK,QAAU,EAClB,EAAK,GAEL,CAAE,GAKf,CO6CO,eAAe,IACpB,MAAM,EAAW,YAAa,CAAC,QAAS,MAAO,KAAM,wBACrD,GAAwB,IAApB,EAAS,OACX,MAAM,IAAI,MAAM,yDAGlB,aADsC,EAAS,GAAG,UAAU,QAAQ,qBAEtE,C,0SC/IA,MAAME,EAAmB,YACZC,GAA8C,CAAC,uBAAwB,wBAIpFvN,EAAS,gBAAgB,KAEvB,IAAIwN,EAEAC,EAA6B,KAEjCrL,GAAO,IAAY,oCACjBoL,QAAyBE,IACzBD,QAA8B,2BAA8BH,GAAkB,SAGxE,4BAA+BA,EAAkBC,IAAa,SAC9DC,EAAiBG,eAAc,EACvC,MAEAtL,GAAM,IAAY,0CACV,2BAA8BiL,EAAkBG,GAAuB,EAC/E,MAEA,MAAMvO,EAAoE,CACxE,cAAiB,CACfe,KAAM,2DACN2N,IAAK,IAAIpF,KAEX,WACE,CACEvI,KAAM,8DACN2N,IAAK,IAAIpF,IAAY,CAAC,cAI5B,IAAK,MAAOqF,EAAUC,KAAa1P,OAAOuD,QAAQzC,GAChDe,EAAK4N,GAAU,IAAY,oCAK7B,IAA2BE,EAAuBC,EAAvBD,EAJLD,EAAS7N,KAImB+N,EAJbF,EAASF,IAM5CpM,EnB2CG,SAAsByM,GAE3B,MAAMC,EAAQ9P,OAAO+P,KAAKC,IAAItF,KAAKuF,UAAUC,mBACvCvI,EAAgB,GAChBwI,EAAoB,GAC1B,IAAK,IAAIpM,EAAI,EAAGA,EAAI+L,EAAMjM,OAAQE,IAGhC4D,EAAStF,KAAK,IAAIuF,KAAK8C,KAAK0F,SAASC,cAAcP,EAAM/L,KACzD/D,OAAO+P,KAAKpI,EAAS5D,IAAI0G,SAASwC,IAChCkD,EAAa9N,KAAKsF,EAAS5D,GAAGkJ,GAAG5H,GAAG,IAGxC,MAAMiL,EAAc7I,EAAUoI,GAC9B,OAAO,IAAIzF,IAAIkG,EAAYlK,QAAQmK,IAASJ,EAAa5H,SAASgI,KACpE,CmB3DsCC,CAAab,GACpBC,EAL3B,KAMF,IC/CK,MAAMa,GAAW,IAAI,UASrB,SAAe,GAAK7O,EAAkBC,EAAc4D,G,qCACzD,MAAMS,QAAa1B,EAAS,CAAC5C,WAAUC,OAAM4D,gBAC7C,OAAO,wBAAyBS,EAClC,E","sources":["webpack://helm/webpack/bootstrap","webpack://helm/webpack/runtime/define property getters","webpack://helm/webpack/runtime/hasOwnProperty shorthand","webpack://helm/webpack/runtime/make namespace object","webpack://helm/external var \"DG\"","webpack://helm/external var \"grok\"","webpack://helm/./node_modules/@datagrok-libraries/utils/src/test.ts","webpack://helm/./src/utils.ts","webpack://helm/./src/tests/helm-tests.ts","webpack://helm/external var \"wu\"","webpack://helm/types.ts","webpack://helm/consts.ts","webpack://helm/./node_modules/fastest-levenshtein/esm/mod.js","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.ts","webpack://helm/units-handler.ts","webpack://helm/utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/vector-operations.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/type-declarations.ts","webpack://helm/seq-palettes.ts","webpack://helm/aminoacids.ts","webpack://helm/nucleotides.ts","webpack://helm/unknown.ts","webpack://helm/monomer-utils.ts","webpack://helm/./src/tests/findMonomers-tests.ts","webpack://helm/./src/package-test.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","const __WEBPACK_NAMESPACE_OBJECT__ = grok;","import * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\nimport {Observable, Subscription} from 'rxjs';\nimport Timeout = NodeJS.Timeout;\nimport {DataFrame} from 'datagrok-api/dg';\n\nexport const tests: {\n [key: string]: {\n tests?: Test[], before?: () => Promise<void>, after?: () => Promise<void>,\n beforeStatus?: string, afterStatus?: string\n }\n} = {};\n\nconst autoTestsCatName = 'Auto Tests';\nconst wasRegistered: {[key: string]: boolean} = {};\nexport let currentCategory: string;\n\nexport namespace assure {\n export function notNull(value: any, name?: string) {\n if (value == null)\n throw new Error(`${name == null ? 'Value' : name} not defined`);\n }\n}\n\nexport interface TestOptions {\n timeout?: number;\n unhandledExceptionTimeout?: number;\n skipReason?: string;\n}\n\nexport class TestContext {\n catchUnhandled = true;\n report = false;\n\n constructor(catchUnhandled?: boolean, report?: boolean) {\n if (catchUnhandled !== undefined) this.catchUnhandled = catchUnhandled;\n if (report !== undefined) this.report = report;\n };\n}\n\nexport class Test {\n test: () => Promise<any>;\n name: string;\n category: string;\n options?: TestOptions;\n\n constructor(category: string, name: string, test: () => Promise<any>, options?: TestOptions) {\n this.category = category;\n this.name = name;\n options ??= {};\n options.timeout ??= 30000;\n this.options = options;\n this.test = async (): Promise<any> => {\n return new Promise(async (resolve, reject) => {\n let result = '';\n try {\n result = await test();\n } catch (e: any) {\n reject(e);\n }\n resolve(result);\n });\n };\n }\n}\n\nexport async function testEvent<T>(event: Observable<T>,\n handler: (args: T) => void, trigger: () => void, ms: number = 0): Promise<string> {\n let sub: Subscription;\n return new Promise((resolve, reject) => {\n sub = event.subscribe((args) => {\n try {\n handler(args);\n } catch (e) {\n reject(e);\n }\n sub.unsubscribe();\n resolve('OK');\n });\n setTimeout(() => {\n sub.unsubscribe();\n // eslint-disable-next-line prefer-promise-reject-errors\n reject('timeout');\n }, ms);\n trigger();\n });\n}\n\nexport function test(name: string, test: () => Promise<any>, options?: TestOptions): void {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n if (tests[currentCategory].tests == undefined)\n tests[currentCategory].tests = [];\n tests[currentCategory].tests!.push(new Test(currentCategory, name, test, options));\n}\n\n/* Tests two objects for equality, throws an exception if they are not equal. */\nexport function expect(actual: any, expected: any = true, error?: string): void {\n if (error)\n error = `${error}, `;\n else error = '';\n if (actual !== expected)\n throw new Error(`${error}Expected \"${expected}\", got \"${actual}\"`);\n}\n\nexport function expectFloat(actual: number, expected: number, tolerance = 0.001, error?: string): void {\n if ((actual === Number.POSITIVE_INFINITY && expected === Number.POSITIVE_INFINITY) ||\n (actual === Number.NEGATIVE_INFINITY && expected === Number.NEGATIVE_INFINITY) ||\n (actual === Number.NaN && expected === Number.NaN) || (isNaN(actual) && isNaN(expected)))\n return;\n const areEqual = Math.abs(actual - expected) < tolerance;\n expect(areEqual, true, `${error ?? ''} (tolerance = ${tolerance})`);\n if (!areEqual)\n throw new Error(`Expected ${expected}, got ${actual} (tolerance = ${tolerance})`);\n}\n\nexport function expectTable(actual: DataFrame, expected: DataFrame, error?: string): void {\n const expectedRowCount = expected.rowCount;\n const actualRowCount = actual.rowCount;\n expect(actualRowCount, expectedRowCount, `${error ?? ''}, row count`);\n\n for (const column of expected.columns) {\n const actualColumn = actual.columns.byName(column.name);\n if (actualColumn == null)\n throw new Error(`Column ${column.name} not found`);\n if (actualColumn.type != column.type)\n throw new Error(`Column ${column.name} type expected ${column.type} got ${actualColumn.type}`);\n for (let i = 0; i < expectedRowCount; i++) {\n const value = column.get(i);\n const actualValue = actualColumn.get(i);\n if (column.type == DG.TYPE.FLOAT)\n expectFloat(actualValue, value, 0.0001, error);\n else if (column.type == DG.TYPE.DATE_TIME)\n expect(actualValue.isSame(value), true, error);\n else\n expect(actualValue, value, error);\n }\n }\n}\n\nexport function expectObject(actual: { [key: string]: any }, expected: { [key: string]: any }) {\n for (const [expectedKey, expectedValue] of Object.entries(expected)) {\n if (!actual.hasOwnProperty(expectedKey))\n throw new Error(`Expected property \"${expectedKey}\" not found`);\n\n const actualValue = actual[expectedKey];\n if (actualValue instanceof Array && expectedValue instanceof Array)\n expectArray(actualValue, expectedValue);\n else if (actualValue instanceof Object && expectedValue instanceof Object)\n expectObject(actualValue, expectedValue);\n else if (Number.isFinite(actualValue) && Number.isFinite(expectedValue))\n expectFloat(actualValue, expectedValue);\n else if (actualValue != expectedValue)\n throw new Error(`Expected (${expectedValue}) for key '${expectedKey}', got (${actualValue})`);\n }\n}\n\nexport function expectArray(actual: ArrayLike<any>, expected: ArrayLike<any>) {\n const actualLength = actual.length;\n const expectedLength = expected.length;\n\n if (actualLength != expectedLength) {\n throw new Error(`Arrays are of different length: actual array length is ${actualLength} ` +\n `and expected array length is ${expectedLength}`);\n }\n\n for (let i = 0; i < actualLength; i++) {\n if (actual[i] instanceof Array && expected[i] instanceof Array)\n expectArray(actual[i], expected[i]);\n else if (actual[i] instanceof Object && expected[i] instanceof Object)\n expectObject(actual[i], expected[i]);\n else if (actual[i] != expected[i])\n throw new Error(`Expected ${expected[i]} at position ${i}, got ${actual[i]}`);\n }\n}\n\n/* Defines a test suite. */\nexport function category(category: string, tests: () => void): void {\n currentCategory = category;\n tests();\n}\n\n/* Defines a function to be executed before the tests in this category are executed. */\nexport function before(before: () => Promise<void>): void {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].before = before;\n}\n\n/* Defines a function to be executed after the tests in this category are executed. */\nexport function after(after: () => Promise<void>): void {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].after = after;\n}\n\nfunction addNamespace(s: string, f: DG.Func): string {\n return s.replace(new RegExp(f.name, 'gi'), f.nqName);\n}\n\nexport async function initAutoTests(packageId: string, module?: any) {\n if (wasRegistered[packageId]) return;\n const moduleTests = module ? module.tests : tests;\n if (moduleTests[autoTestsCatName] !== undefined) {\n wasRegistered[packageId] = true;\n return;\n }\n const moduleAutoTests = [];\n const packFunctions = await grok.dapi.functions.filter(`package.id = \"${packageId}\"`).list();\n for (const f of packFunctions) {\n const tests = f.options['test'];\n if (!(tests && Array.isArray(tests) && tests.length)) continue;\n for (let i = 0; i < tests.length; i++) {\n moduleAutoTests.push(new Test(autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, async () => {\n const res = await grok.functions.eval(addNamespace(tests[i], f));\n // eslint-disable-next-line no-throw-literal\n if (res !== true) throw `Failed: ${tests[i]}`;\n }));\n }\n }\n wasRegistered[packageId] = true;\n if (!moduleAutoTests.length) return;\n moduleTests[autoTestsCatName] = {tests: moduleAutoTests};\n}\n\nexport async function runTests(options?: {category?: string, test?: string, testContext?: TestContext}) {\n const package_ = grok.functions.getCurrentCall()?.func?.package;\n await initAutoTests(package_.id);\n const results: { category?: string, name?: string, success: boolean,\n result: string, ms: number, skipped: boolean }[] = [];\n console.log(`Running tests`);\n options ??= {};\n options!.testContext ??= new TestContext();\n grok.shell.lastError = '';\n for (const [key, value] of Object.entries(tests)) {\n if (options?.category != undefined) {\n if (!key.toLowerCase().startsWith(options?.category.toLowerCase()))\n continue;\n }\n console.log(`Started ${key} category`);\n try {\n if (value.before)\n await value.before();\n } catch (x: any) {\n value.beforeStatus = x.toString();\n }\n const t = value.tests ?? [];\n const res = [];\n for (let i = 0; i < t.length; i++)\n res.push(await execTest(t[i], options?.test));\n const data = (await Promise.all(res)).filter((d) => d.result != 'skipped');\n try {\n if (value.after)\n await value.after();\n } catch (x: any) {\n value.afterStatus = x.toString();\n }\n if (value.afterStatus)\n data.push({category: key, name: 'init', result: value.afterStatus, success: false, ms: 0, skipped: false});\n if (value.beforeStatus)\n data.push({category: key, name: 'init', result: value.beforeStatus, success: false, ms: 0, skipped: false});\n results.push(...data);\n }\n if (options.testContext.catchUnhandled) {\n await delay(1000);\n if (grok.shell.lastError.length > 0) {\n results.push({\n category: 'Unhandled exceptions',\n name: 'exceptions',\n result: grok.shell.lastError, success: false, ms: 0, skipped: false\n });\n }\n }\n if (options.testContext.report) {\n const logger = new DG.Logger();\n const successful = results.filter((r) => r.success).length;\n const skipped = results.filter((r) => r.skipped).length;\n const failed = results.filter((r) => !r.success);\n const description = 'Package @package tested: @successful successful, @skipped skipped, @failed failed tests';\n const params = {\n successful: successful,\n skipped: skipped,\n failed: failed.length,\n package: package_\n };\n for (const r of failed) Object.assign(params, {[`${r.category} | ${r.name}`]: r.result});\n logger.log(description, params, 'package-tested');\n }\n return results;\n}\n\nasync function execTest(t: Test, predicate: string | undefined) {\n let r: { category?: string, name?: string, success: boolean, result: string, ms: number, skipped: boolean };\n const filter = predicate != undefined && (!t.name.toLowerCase().startsWith(predicate.toLowerCase()));\n const skip = t.options?.skipReason || filter;\n const skipReason = filter ? 'skipped' : t.options?.skipReason;\n if (!skip)\n console.log(`Started ${t.category} ${t.name}`);\n const start = new Date();\n try {\n if (skip)\n r = {success: true, result: skipReason!, ms: 0, skipped: true};\n else\n r = {success: true, result: await t.test() ?? 'OK', ms: 0, skipped: false};\n } catch (x: any) {\n r = {success: false, result: x.toString(), ms: 0, skipped: false};\n }\n const stop = new Date();\n // @ts-ignore\n r.ms = stop - start;\n if (!skip)\n console.log(`Finished ${t.category} ${t.name} for ${r.ms} ms`);\n r.category = t.category;\n r.name = t.name;\n return r;\n}\n\n/* Waits [ms] milliseconds */\nexport async function delay(ms: number) {\n await new Promise((r) => setTimeout(r, ms));\n}\n\nexport async function awaitCheck(checkHandler: () => boolean,\n error: string = 'Timeout exceeded', wait: number = 500): Promise<void> {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n clearInterval(interval);\n reject(new Error(error));\n }, wait);\n // @ts-ignore\n const interval: Timeout = setInterval(() => {\n if (checkHandler()) {\n clearInterval(interval);\n resolve();\n }\n }, 50);\n });\n}\n\nexport function isDialogPresent(dialogTitle: string): boolean {\n for (let i = 0; i < DG.Dialog.getOpenDialogs().length; i++) {\n if (DG.Dialog.getOpenDialogs()[i].title == dialogTitle)\n return true;\n }\n return false;\n}\n\nexport async function testViewer(v: string, df: DG.DataFrame, detectSemanticTypes: boolean = false): Promise<void> {\n if (detectSemanticTypes) await grok.data.detectSemanticTypes(df);\n const tv = grok.shell.addTableView(df);\n const viewerName = `[name=viewer-${v.replace(/\\s+/g, '-')} i]`;\n const selector = `${viewerName} canvas,${viewerName} svg,${viewerName} img,\n ${viewerName} input,${viewerName} h1,${viewerName} a`;\n const res = [];\n try {\n let viewer = tv.addViewer(v);\n await awaitCheck(() => document.querySelector(selector) !== null,\n 'cannot load viewer', 3000);\n res.push(Array.from(tv.viewers).length);\n Array.from(df.row(0).cells).forEach((c) => c.value = null);\n df.rows.select((row) => row.idx > 1 && row.idx < 7);\n for (let i = 7; i < 12; i++) df.filter.set(i, false);\n df.currentRowIdx = 1;\n const props = viewer.getOptions(true).look;\n const newProps: Record<string, boolean> = {};\n Object.keys(props).filter((k) => typeof props[k] === 'boolean').forEach((k) => newProps[k] = !props[k]);\n viewer.setOptions(newProps);\n await delay(250);\n const layout = tv.saveLayout();\n const oldProps = viewer.getOptions().look;\n tv.resetLayout();\n res.push(Array.from(tv.viewers).length);\n tv.loadLayout(layout);\n await awaitCheck(() => document.querySelector(selector) !== null,\n 'cannot load viewer from layout', 3000);\n await delay(250);\n res.push(Array.from(tv.viewers).length);\n viewer = Array.from(tv.viewers).find((v) => v.type !== 'Grid')!;\n expectArray(res, [2, 1, 2]);\n expect(JSON.stringify(viewer.getOptions().look), JSON.stringify(oldProps));\n } finally {\n tv.close();\n grok.shell.closeTable(df);\n }\n}\n","import * as DG from 'datagrok-api/dg';\nimport {\n RGROUP_CAP_GROUP_NAME,\n RGROUP_CAP_GROUP_SMILES,\n jsonSdfMonomerLibDict,\n MONOMER_SYMBOL,\n RGROUP_ALTER_ID,\n RGROUPS,\n RGROUP_LABEL,\n SDF_MONOMER_NAME\n} from './constants';\n\nexport function getParts(subParts: string[], s: string): string[] {\n const j = 0;\n const allParts: string[] = [];\n for (let k = 0; k < subParts.length; ++k) {\n const indexOfMonomer = s.indexOf(subParts[k]);\n const helmBeforeMonomer = s.slice(j, indexOfMonomer);\n allParts.push(helmBeforeMonomer);\n allParts.push(subParts[k]);\n s = s.substring(indexOfMonomer + subParts[k].length);\n }\n allParts.push(s);\n return allParts;\n}\n\nexport function parseHelm(s: string) {\n const sections = split(s, '$');\n s = sections[0];\n const monomers = [];\n //@ts-ignore\n if (!scil.Utils.isNullOrEmpty(s)) {\n const seqs = split(s, '|');\n for (let i = 0; i < seqs.length; ++i) {\n const e = detachAnnotation(seqs[i]);\n s = e.str;\n\n let p = s.indexOf('{');\n\n s = s.substring(p + 1);\n p = s.indexOf('}');\n s = s.substring(0, p);\n\n const ss = split(s, '.');\n for (const monomer of ss) {\n if (!monomer || monomer === '') continue;\n if (monomer.startsWith('[') && monomer.includes(']')) {\n const element = monomer.substring(1, monomer.indexOf(']'));\n monomers.push(element);\n const residue = monomer.substring(monomer.indexOf(']') + 1);\n ss.push(residue);\n } else if (monomer.includes('[') && monomer.endsWith(']')) {\n const element = monomer.substring(monomer.lastIndexOf('[') + 1, monomer.length - 1);\n monomers.push(element);\n const residue = monomer.substring(0, monomer.lastIndexOf('['));\n ss.push(residue);\n } else if (monomer.includes('(') && monomer.includes(')')) {\n // here we only want to split the string at first '(' and last ')'\n // because entries like [L-hArg(Et,Et)]([L-hArg(Et,Et)]) where L-hArg(Et,Et) is a single monomer\n const firstPiece = monomer.substring(0, monomer.indexOf('('));\n const thirdPiece = monomer.substring(monomer.lastIndexOf(')') + 1);\n const secondPiece = monomer.substring(firstPiece.length + 1, monomer.length - thirdPiece.length - 1);\n const elements =[firstPiece, secondPiece, thirdPiece];\n for (const el of elements)\n ss.push(el);\n } else {\n monomers.push(monomer);\n }\n }\n }\n }\n return monomers;\n}\n\n// /** Find monomers missed in Helm monomer library configured and\n// * used in org.helm.webeditor / scil.helm.Monomers / org.helm.webeditor.Monomers .\n// */\n// export function findMonomers(helmString: string) {\n// //@ts-ignore\n// const types: string[] = Object.keys(org.helm.webeditor.monomerTypeList());\n// const monomerNameList: any[] = [];\n// const monomerNameI: number = 0;\n// const weMonomers = org.helm.webeditor.Monomers;\n// for (let typeI = 0; typeI < types.length; typeI++) {\n// //@ts-ignore\n// const ofTypeMonomers: {} = weMonomers.getMonomerSet(types[typeI]) ?? {};\n// Object.keys(ofTypeMonomers).forEach((key) => {\n// const monomer: any = ofTypeMonomers[key];\n// monomerNameList[monomerNameI] = monomer.id;\n// monomerNameI += 1;\n// });\n// }\n// const helmPartList = parseHelm(helmString);\n// return new Set(helmPartList.filter((val) => !monomerNameList.includes(val)));\n// }\n\nexport function findMonomers(helmString: string) {\n //@ts-ignore\n const types = Object.keys(org.helm.webeditor.monomerTypeList());\n const monomers: any = [];\n const monomerNames: any = [];\n for (let i = 0; i < types.length; i++) {\n //@ts-ignore\n // eslint-disable-next-line new-cap\n monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));\n Object.keys(monomers[i]).forEach((k) => {\n monomerNames.push(monomers[i][k].id);\n });\n }\n const splitString = parseHelm(helmString);\n return new Set(splitString.filter((val) => !monomerNames.includes(val)));\n}\n\nfunction split(s: string, sep: string) {\n const ret = [];\n let frag = '';\n let parentheses = 0;\n let bracket = 0;\n let braces = 0;\n let quote = 0;\n for (let i = 0; i < s.length; ++i) {\n let c = s.substring(i, i + 1);\n if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {\n ret.push(frag);\n frag = '';\n } else {\n frag += c;\n if (quote > 0) {\n if (c == '\\\\' && i + 1 < s.length) {\n ++i;\n const c2 = s.substring(i, i + 1);\n frag += c2;\n c += c2;\n }\n }\n if (c == '\\\"') {\n if (!(i > 0 && s.substring(i - 1, i) == '\\\\'))\n quote = quote == 0 ? 1 : 0;\n } else if (c == '[') {\n ++bracket;\n } else if (c == ']') {\n --bracket;\n } else if (c == '(') {\n ++parentheses;\n } else if (c == ')') {\n --parentheses;\n } else if (c == '{') {\n ++braces;\n } else if (c == '}') {\n --braces;\n }\n }\n }\n ret.push(frag);\n return ret;\n}\n\nfunction detachAnnotation(s: string) {\n const ret = _detachAppendix(s, '\\\"');\n if (ret.tag != null)\n return ret;\n\n const r = _detachAppendix(s, '\\'');\n return {tag: ret.tag, repeat: r.tag, str: r.str};\n}\n\nfunction _detachAppendix(s: string, c: string) {\n let tag = null;\n //@ts-ignore\n if (scil.Utils.endswith(s, c)) {\n let p = s.length - 1;\n while (p > 0) {\n p = s.lastIndexOf(c, p - 1);\n if (p <= 0 || s.substring(p - 1, p) != '\\\\')\n break;\n }\n\n if (p > 0 && p < s.length - 1) {\n tag = s.substring(p + 1, s.length - 1);\n s = s.substring(0, p);\n }\n }\n if (tag != null)\n tag = tag.replace(new RegExp('\\\\' + c, 'g'), c);\n return {tag: unescape(tag), str: s};\n}\n\nfunction unescape(s: string) {\n //@ts-ignore\n if (scil.Utils.isNullOrEmpty(s))\n return s;\n\n return s.replace(/[\\\\]./g, function(m) {\n switch (m) {\n case '\\\\r':\n return '\\r';\n case '\\\\n':\n return '\\n';\n case '\\\\t':\n return '\\t';\n default:\n return m.substring(1);\n }\n });\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from '../package-test';\nimport {after, before, category, delay, expect, test, expectArray} from '@datagrok-libraries/utils/src/test';\n//import {findMonomers, helmToFasta, helmToPeptide, helmToRNA, initHelm} from '../package';\nimport {parseHelm} from '../utils';\n\n\ncategory('Helm', () => {\n //These tests require webservice that is not present on test stand\n // test('helmToFasta', async () => {\n // expect(await helmToFasta('RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$'), '>RNA1UTGCA');\n // expect(await helmToFasta('RNA1{P.R(U).P.R(T)}$$$$'), '>RNA1UT');\n // expect(await helmToFasta('PEPTIDE1{A.G}$$$$V2.0'), '>PEPTIDE1AG');\n // });\n //\n // test('helmToRNA', async () => {\n // expect(await helmToRNA('RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$'), 'UTGCA');\n // expect(await helmToRNA('RNA1{P.R(U).P.R(T)}$$$$'), 'UT');\n // // eslint-disable-next-line max-len\n // expect(\n // await helmToRNA('RNA1{R(U)P.R(T)P}|RNA2{P.R(A)P.R(A)}$RNA1,RNA2,2:pair-6:pair|RNA1,RNA2,5:pair-3:pair$$$'), 'UT AA'\n // );\n // });\n //\n // test('helmToPeptide', async () => {\n // expect(await helmToPeptide('PEPTIDE1{A.G}$$$$V2.0'), 'AG');\n // expect(await helmToPeptide('PEPTIDE1{L.V.A}|PEPTIDE2{L.V.A}$$$$'), 'LVA LVA');\n // // eslint-disable-next-line max-len\n // expect(await helmToPeptide('PEPTIDE1{A.R.C.A.A.K.T.C.D.A}$PEPTIDE1,PEPTIDE1,8:R3-3:R3$$$'), 'ARCAAKTCDA');\n // });\n\n // detectMacromolecule is a function of Bio package\n // test('detectMacromolecule', async () => {\n // const file = await _package.files.readAsText('tests/test.csv');\n // const df = DG.DataFrame.fromCsv(file);\n // const col = df.columns.byName('HELM string');\n // await grok.data.detectSemanticTypes(df);\n // expect(col.semType, DG.SEMTYPE.MACROMOLECULE);\n // });\n\n // semType and units tags are detecting by Bio package function detectMacromolecule\n // test('detectHelm', async () => {\n // const file = await _package.files.readAsText('tests/test.csv');\n // const df = DG.DataFrame.fromCsv(file);\n // const col = df.columns.byName('HELM string');\n // await grok.data.detectSemanticTypes(df);\n // expect(col.tags[DG.TAGS.UNITS], 'HELM');\n // });\n\n const complexMonomers = [\n // tests parsing of complex monomemer in square brackets like [L-hArg(Et,Et)]\n 'PEPTIDE1{[L-hArg(Et,Et)].E.F.G}|PEPTIDE2{C.E}$PEPTIDE1,PEPTIDE2,2:R3-1:R1$$$V2.0',\n // tests parsing of complex monomer and one as a side chain as well\n 'PEPTIDE1{[L-hArg(Et,Et)]([L-hArg(Et,Et)]).E.F.G}$$$$',\n // tests parsing of complex monomer and one as a side chain as well\n 'RNA1{[dhp]([m1A])p.r(T)p.r(T)p.r(G)p}$$$$V2.0',\n // tests complex monomer as side chain\n 'RNA1{r([mo6pur])p.r(T)p.r(T)p.r(G)p}$$$$V2.0',\n // test complex monomer, side chain and linker\n 'RNA1{[afhna]([mo6pur])[36SS].r(T)p}$$$$V2.0'\n ];\n\n const complexMonomersExpected = [\n ['L-hArg(Et,Et)', 'E', 'F', 'G', 'C', 'E'],\n ['L-hArg(Et,Et)', 'L-hArg(Et,Et)', 'E', 'F', 'G'],\n ['dhp', 'm1A', 'p', 'r', 'T', 'p', 'r', 'T', 'p', 'r', 'G', 'p'],\n ['r', 'mo6pur', 'p', 'r', 'T', 'p', 'r', 'T', 'p', 'r', 'G', 'p'],\n ['afhna', 'mo6pur', '36SS', 'r', 'T', 'p']\n ];\n\n const complexTestNames = [\n 'comples-monomer', 'complex-monomer+side-chain', 'complex-monomer+side-chain-RNA',\n 'complex-side-chain', 'complex+side-chain+linker'\n ];\n test('parseHelm', async () => {\n const expectedResults = [\n ['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'D-Tyr_Et', 'Aze', 'dV', 'E', 'Phe_4Me'],\n ['A', 'C', 'T', 'G', 'W', 'E', 'Q'],\n ['R', 'U', 'P', 'T', 'A'],\n ['A', '*', 'G', 'C']\n ];\n const helmStrings = [\n 'PEPTIDE1{meI.hHis.Aca.N.T.dK.Thr_PO3H2.Aca.D-Tyr_Et.Aze.dV.E.N.dV.Phe_4Me}$$$',\n // eslint-disable-next-line max-len\n 'PEPTIDE1{A.C.T.G.C.T.W.G.T.W.E.C.W.C.Q.W}|PEPTIDE2{A.C.T.G.C.T.W.G.T.W.E.Q}$PEPTIDE1,PEPTIDE1,5:R3-14:R3|PEPTIDE2,PEPTIDE1,2:R3-12:R3$$$',\n 'RNA1{R(U)P.R(T)P}|RNA2{P.R(A)P.R(A)}$RNA1,RNA2,2:pair-6:pair|RNA1,RNA2,5:pair-3:pair$$$',\n 'PEPTIDE1{A.*.G.C}$$$$V2.0'\n ];\n for (let idx = 0; idx < helmStrings.length; ++idx) {\n const monomerSet = new Set(parseHelm(helmStrings[idx]));\n const monomerArray = Array.from(monomerSet);\n expect(JSON.stringify(monomerArray), JSON.stringify(expectedResults[idx]));\n }\n });\n complexMonomers.forEach((helm, i) => {\n test(complexTestNames[i], async () => {\n const monomersArray = parseHelm(helm);\n monomersArray.sort();\n const expected = complexMonomersExpected[i];\n expected.sort();\n expectArray(monomersArray, expected);\n });\n });\n});\n","const __WEBPACK_NAMESPACE_OBJECT__ = wu;",null,null,"const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {mmDistanceFunctionType} from './types';\n\n// Blosum 62 matrix for protein sequences\nconst BLOSUM62:Array<Array<number>> =\n[[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes: {[id:string]:number} = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\n\ninterface NeedlemanWunchArgs {\n gapOpen: number;\n gapExtend: number;\n scoringMatrix: number[][];\n alphabetIndexes: {[id:string]:number};\n}\n\nconst defaultArgs: NeedlemanWunchArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix\n * @param {Partial<NeedlemanWunchArgs>}args - arguments for Needleman-Wunch algorithm like gap penalty, Scoring matrix..\n * @return {mmDistanceFunctionType} - function that calculates the distance between two sequences\n*/\nexport function needlemanWunch(args: Partial<NeedlemanWunchArgs>): mmDistanceFunctionType {\n return (seq1: string, seq2: string) : number => {\n const {gapOpen, gapExtend, scoringMatrix, alphabetIndexes} = {...defaultArgs, ...args};\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix: number[][] = [\n new Array<number>(seq1.length + 1).fill(0),\n new Array<number>(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n const horizontalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal =\n matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen );\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(\n diagonal, left, top\n );\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n } else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n } else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need compare it to perfect match score to get reasonable distance\n const perfectMatchSeq1 = seq1.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const perfectMatchSeq2 = seq2.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const maxScore = Math.max(perfectMatchSeq1, perfectMatchSeq2);\n return (maxScore - matrix[prevRow][seq1.length]) / maxScore;\n };\n}\n","import {hamming} from './hamming';\nimport {levenstein} from './levenstein';\nimport {needlemanWunch} from './needleman-wunsch';\nimport {mmDistanceFunctionType} from './types';\n\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport enum MmDistanceFunctionsNames {\n HAMMING = 'Hamming',\n LEVENSHTEIN = 'Levenshtein',\n NEEDLEMANN_WUNSCH = 'Needlemann-Wunsch'\n};\n\nexport const mmDistanceFunctions: Record<MmDistanceFunctionsNames, (value?: any) => mmDistanceFunctionType> = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n","import {mmDistanceFunctionType} from './types';\n\nexport function hamming(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n result += diff;\n result /= Math.max(seq1.length, seq2.length);\n return result;\n };\n}\n","import {distance} from 'fastest-levenshtein';\nimport {mmDistanceFunctionType} from './types';\n\nexport function levenstein(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n return distance(seq1, seq2) / Math.max(seq1.length, seq2.length);\n };\n}\n",null,null,"import {Matrix, Vector, Coordinates, Vectors, DistanceMetric} from './type-declarations';\nimport {randomFloat, randomInt} from './random';\n\n/**\n * Asserts a condition by throwing an Error.\n *\n * @export\n * @param {boolean} [condition=false] Condition to assert.\n * @param {string} [message='Assertion error.'] Message to output.\n * @throws {Error}\n */\nexport function assert(condition: boolean = false, message: string = 'Assertion error.') {\n if (!condition)\n throw new Error(message);\n}\n\n/**\n * Creates new two-dimensional array and fills it with the value given.\n *\n * @param {number} dimension1 The first dimension of the coordinates (number of rows).\n * @param {number} dimension2 The second dimension of the coordinates (number of columns).\n * @param {number} [fill=0] A value to fill the coordinates with.\n * @return {Coordinates} A two-dimensional filled with the value given.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nfunction initCoordinates(dimension1: number, dimension2: number, fill: number = 0): Coordinates {\n return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));\n}\n\n/**\n * Transpose matrix.\n *\n * @export\n * @param {Matrix} matrix The matrix to be transposed.\n * @return {Matrix} Transposed matrix.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nexport function transposeMatrix(matrix: Matrix): Matrix {\n return new Array(matrix[0].length).fill(0)\n .map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));\n}\n\n/**\n * Adds two vectors with the second one to be multiplied by the given ratio.\n *\n * @export\n * @param {Vector} p The first vector to add.\n * @param {Vector} q The second vector to add.\n * @param {number} [multiplier=1] A multiplier to be used before the second vector is added.\n * @return {Vector} New vector contained the result of operation p+multiplier*q.\n */\nexport function vectorAdd(p: Vector, q: Vector, multiplier: number = 1): Vector {\n const nItems = p.length;\n\n assert(nItems == q.length, 'Vector lengths do not match.');\n\n const total = new Vector(nItems);\n\n for (let i = 0; i < p.length; ++i)\n total[i] = p[i] + multiplier * q[i];\n\n return total;\n}\n\n/**\n * Sums the vector's items.\n *\n * @param {Vector} v The vector to be summed.\n * @return {number} The vector's items sum.\n */\nfunction itemsSum(v: Vector): number {\n let total = 0;\n\n for (let i = 0; i < v.length; ++i)\n total += v[i];\n\n return total;\n}\n\n/**\n * Suqares the vector's items.\n *\n * @param {Vector} v The vector to square.\n * @return {Vector} A new vector containing the original's items squared.\n */\nfunction vectorSquare(v: Vector): Vector {\n const nItems = v.length;\n const total = new Vector(nItems);\n\n for (let i = 0; i < v.length; ++i)\n total[i] = v[i] * v[i];\n\n return total;\n}\n\nexport function vectorLength(v: Vector): number {\n let sqrSum: number = 0;\n for (let i: number = 0; i < v.length; i++)\n sqrSum += v[i] * v[i];\n return Math.sqrt(sqrSum);\n}\n\nexport function vectorDotProduct(v1: Vector, v2: Vector): number {\n if (v1.length != v2.length)\n throw new Error('The dimensionality of the vectors must match');\n let prod: number = 0;\n for (let i: number = 0; i < v1.length; i++)\n prod += v1[i] * v2[i];\n return prod;\n}\n\n/**\n * Creates a matrix filled with random floating point values.\n *\n * @export\n * @param {number} dimension1 The first dimension of the matrix.\n * @param {number} dimension2 The second dimension of the matrix.\n * @param {number} [scale=1.] Max value given by random generator.\n * @return {Matrix} A new matrix filled with random floating point values.\n */\nexport function fillRandomMatrix(dimension1: number, dimension2: number, scale: number = 1.): Matrix {\n const matrix = initCoordinates(dimension1, dimension2);\n\n for (let i = 0; i < dimension1; ++i) {\n for (let j = 0; j < dimension2; ++j)\n matrix[i][j] = randomFloat(scale);\n }\n return matrix;\n}\n\n/**\n * Calculates Euclidean distance between two vectors.\n *\n * @export\n * @param {Vector} p The first vector.\n * @param {Vector} q The second vector.\n * @return {number} Euclidean distance between the given vectors.\n */\nexport function calculateEuclideanDistance(p: Vector, q: Vector): number {\n const diff = vectorAdd(p, q, -1);\n const sqdiff = vectorSquare(diff);\n const sqdiffSumm = itemsSum(sqdiff);\n return Math.sqrt(sqdiffSumm);\n}\n\n/**\n * Creates a distance matrix using a custom distance function.\n *\n * @export\n * @param {Vectors} data Input vectors to calculate distances.\n * @param {DistanceMetric} distance Custom distance function.\n * @return {Matrix} Calculated custom distance matrix.\n */\nexport function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix {\n const nItems = data.length;\n const matrix = initCoordinates(nItems, nItems, 0);\n\n for (let i = 0; i < nItems; ++i) {\n for (let j = i + 1; j < nItems; ++j) {\n const d: number = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);\n matrix[i][j] = matrix[j][i] = d;\n }\n }\n return matrix;\n}\n\n/** Generates array from a range [begin; end] or [begin; end) if endExclusive. **/\nexport function genRange(begin: number, end: number, endExclusive = false): Int32Array {\n const nItems = end - begin + (endExclusive ? 0 : 1);\n const series = new Int32Array(nItems);\n\n for (let i = 0; i < nItems; ++i)\n series[i] = begin + i;\n\n return series;\n}\n\n/**\n * Returns order of values as if they are sorted.\n *\n * @export\n * @param {any[]} values Input array.\n * @param {boolean} [reverse=false] Whether to return reversed order.\n * @return {number[]} The order computed.\n */\nexport function argSort(values: any[], reverse = false): number[] {\n const sortfn = reverse ? (a: any[], b: any[]) => (b[0] - a[0]) : (a: any[], b: any[]) => (a[0] - b[0]);\n const decor = (v: any, i: number) => [v, i]; // set index to value\n const undecor = (a: any[]) => a[1]; // leave only index\n const _argsort = (arr: any[]) => arr.map(decor).sort(sortfn).map(undecor);\n return _argsort(values);\n}\n\n/**\n * Returns the indexes of the most diverse objects according to the dist function\n * @param {number} length total number of objects\n * @param {number} n number of diverse elements to find\n * @param {(i1: number, i2: number) => number} dist a function which calculates distance between\n * two objects using their indexes\n * @returns {number[]} The indexes of the most diverse objects\n */\nexport function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[] {\n function maxBy(values: IterableIterator<number>, orderBy: (i: number) => number) {\n let maxValue = null;\n let maxOrderBy = null;\n\n for (const element of values) {\n const elementOrderBy = orderBy(element);\n if (maxOrderBy == null || elementOrderBy > maxOrderBy) {\n maxValue = element;\n maxOrderBy = elementOrderBy;\n }\n }\n return maxValue;\n }\n\n const subset = [randomInt(length - 1)];\n const complement = new Set();\n\n for (let i = 0; i < length; ++i) {\n if (!subset.includes(i))\n complement.add(i);\n }\n\n while (subset.length < n) {\n const idx = maxBy(\n complement.values() as IterableIterator<number>,\n (i) => Math.min.apply(Math, subset.map(function(val, index) {\n return dist(i, val);\n })));\n if (idx) {\n subset.push(idx);\n complement.delete(idx);\n }\n }\n return subset;\n}\n\n/**\n * Returns normalized vector\n * @param {Vector} data numerical array\n */\nexport function normalize(data: Vector): Vector {\n let mean = 0;\n let std = 0;\n\n for (let i = 0; i < data.length; ++i)\n mean += data[i];\n\n mean /= data.length;\n\n for (let i = 0; i < data.length; ++i)\n std += (data[i] - mean) * (data[i] - mean);\n\n std = Math.sqrt(std / data.length);\n\n for (let i = 0; i < data.length; ++i)\n data[i] = (data[i] - mean) / std;\n\n return data;\n}\n\n/**\n * Finds set difference between two lists.\n * @param {any[]} a The first list.\n * @param {any[]} b The second list.\n * @return {any[]}\n */\nexport function setDifference(a: any[], b: any[]): any[] {\n const bSet = new Set(b);\n return Array.from(new Set(a.filter((x) => !bSet.has(x))).values());\n}\n","/**\n * Denotes a vector of floating poit values.\n *\n * @export\n * @class Vector\n * @extends {Float32Array}\n */\nexport class Vector extends Float32Array {}\n\n/**\n * Denotes a two-dimensional matrix.\n *\n * @export\n * @class Matrix\n * @extends {Array<Vector>}\n */\nexport class Matrix extends Array<Vector> {}\n\n/**\n * Denotes cartesian coordinates.\n *\n * @export\n * @class Coordinates\n * @extends {Matrix}\n */\nexport class Coordinates extends Matrix {}\n\n/**\n * Denotes an array of arbitrary-typed vectors.\n *\n * @export\n * @class Vectors\n * @extends {Array<any>}\n */\nexport class Vectors extends Array<any> {}\n\n/**\n * Denotes a dictionary containing function options.\n *\n * @export\n * @type Options\n */\nexport type Options = {[name: string]: any};\n\n/**\n * Denotes custom distance metric between the two given vectors.\n *\n * @export\n * @type DistanceMetric\n * @param {any} v1 The first vector.\n * @param {any} v2 The second vector.\n * @return {number} Distance between these two vectors.\n */\nexport type DistanceMetric = (v1: any, v2: any) => (number);\n\n/**\n * Denotes a simple string to string dictionary.\n *\n * @export\n * @type StringDictionary\n */\nexport type StringDictionary = {[key: string]: string};\n",null,null,null,null,null,"import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from '../package-test';\nimport {after, before, category, delay, expect, expectObject, test} from '@datagrok-libraries/utils/src/test';\nimport {findMonomers} from '../utils';\nimport {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';\n\nconst LIB_STORAGE_NAME = 'Libraries';\nexport const LIB_DEFAULT: { [fileName: string]: string } = {'HELMCoreLibrary.json': 'HELMCoreLibrary.json'};\n\n\n/** Tests with default monomer library */\ncategory('findMonomers', () => {\n\n let monomerLibHelper: IMonomerLibHelper;\n /** Backup actual user's monomer libraries settings */\n let userLibrariesSettings: any = null;\n\n before(async () => {\n monomerLibHelper = await getMonomerLibHelper();\n userLibrariesSettings = await grok.dapi.userDataStorage.get(LIB_STORAGE_NAME, true);\n\n // Tests 'findMonomers' requires default monomer library loaded\n await grok.dapi.userDataStorage.post(LIB_STORAGE_NAME, LIB_DEFAULT, true);\n await monomerLibHelper.loadLibraries(true); // load default libraries\n });\n\n after(async () => {\n await grok.dapi.userDataStorage.put(LIB_STORAGE_NAME, userLibrariesSettings, true);\n });\n\n const tests: { [testName: string]: { test: string, tgt: Set<string> } } = {\n 'withoutMissed': {\n test: 'PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et}$$$$',\n tgt: new Set<string>(),\n },\n 'withMissed':\n {\n test: 'PEPTIDE1{meI.missed2.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et}$$$$',\n tgt: new Set<string>(['missed2'])\n }\n };\n\n for (const [testName, testData] of Object.entries(tests)) {\n test(testName, async () => {\n _testFindMonomers(testData.test, testData.tgt);\n });\n }\n\n function _testFindMonomers(testHelmValue: string, tgtMissedSet: Set<string>): void {\n const resMissedSet: Set<string> = findMonomers(testHelmValue);\n expectObject(resMissedSet, tgtMissedSet);\n }\n});\n","import * as DG from 'datagrok-api/dg';\nimport * as grok from 'datagrok-api/grok';\nimport {runTests, tests, TestContext} from '@datagrok-libraries/utils/src/test';\n\nimport './tests/helm-tests.ts';\nimport './tests/findMonomers-tests';\n\nexport const _package = new DG.Package();\nexport {tests};\n\n\n//name: test\n//input: string category {optional: true}\n//input: string test {optional: true}\n//input: object testContext {optional: true}\n//output: dataframe result\nexport async function test(category: string, test: string, testContext: TestContext): Promise<DG.DataFrame> {\n const data = await runTests({category, test, testContext});\n return DG.DataFrame.fromObjects(data)!;\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","DG","grok","tests","wasRegistered","currentCategory","assure","notNull","name","Error","TestContext","constructor","catchUnhandled","report","undefined","this","Test","category","test","options","timeout","Promise","resolve","reject","result","e","push","expect","actual","expected","error","expectFloat","tolerance","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","NaN","isNaN","areEqual","Math","abs","expectObject","expectedKey","expectedValue","entries","actualValue","Array","expectArray","isFinite","actualLength","length","expectedLength","i","before","after","addNamespace","s","f","replace","RegExp","nqName","runTests","package_","func","package","packageId","module","moduleTests","autoTestsCatName","moduleAutoTests","packFunctions","list","isArray","initAutoTests","id","results","console","log","testContext","toLowerCase","startsWith","x","beforeStatus","toString","t","res","execTest","data","all","filter","d","afterStatus","success","ms","skipped","r","setTimeout","delay","logger","successful","failed","description","params","assign","predicate","skip","skipReason","start","Date","stop","parseHelm","split","monomers","scil","Utils","isNullOrEmpty","seqs","p","detachAnnotation","str","indexOf","substring","ss","monomer","includes","element","residue","endsWith","lastIndexOf","firstPiece","thirdPiece","elements","el","sep","ret","frag","parentheses","bracket","braces","quote","c","c2","_detachAppendix","tag","repeat","endswith","m","complexMonomersExpected","complexTestNames","expectedResults","helmStrings","idx","monomerSet","Set","monomerArray","from","JSON","stringify","forEach","helm","monomersArray","sort","wu","peq","Uint32Array","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","seq1","seq2","diff","min","max","LEVENSHTEIN","a","b","tmp","n","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","j","vlen","k","pb","mb","xh","ph","mh","score","myers_x","distance","NEEDLEMANN_WUNSCH","args","matrix","fill","verticalGaps","horizontalGaps","prevRow","currRow","diagonal","top","left","perfectMatchSeq1","map","reduce","perfectMatchSeq2","maxScore","v1","v2","prod","Float32Array","vectorLength","v","sqrSum","sqrt","LIB_STORAGE_NAME","LIB_DEFAULT","monomerLibHelper","userLibrariesSettings","getMonomerLibHelper","loadLibraries","tgt","testName","testData","testHelmValue","tgtMissedSet","helmString","types","keys","org","webeditor","monomerTypeList","monomerNames","Monomers","getMonomerSet","splitString","val","findMonomers","_package"],"sourceRoot":""}
1
+ {"version":3,"file":"package-test.js","mappings":"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","sources":["webpack://helm/webpack/bootstrap","webpack://helm/webpack/runtime/define property getters","webpack://helm/webpack/runtime/hasOwnProperty shorthand","webpack://helm/webpack/runtime/make namespace object","webpack://helm/external var \"DG\"","webpack://helm/external var \"grok\"","webpack://helm/./node_modules/@datagrok-libraries/utils/src/test.ts","webpack://helm/./src/utils.ts","webpack://helm/./src/tests/helm-tests.ts","webpack://helm/external var \"wu\"","webpack://helm/types.ts","webpack://helm/consts.ts","webpack://helm/./node_modules/fastest-levenshtein/esm/mod.js","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.ts","webpack://helm/units-handler.ts","webpack://helm/utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/vector-operations.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/type-declarations.ts","webpack://helm/seq-palettes.ts","webpack://helm/aminoacids.ts","webpack://helm/nucleotides.ts","webpack://helm/unknown.ts","webpack://helm/monomer-utils.ts","webpack://helm/./src/tests/findMonomers-tests.ts","webpack://helm/./src/package-test.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","const __WEBPACK_NAMESPACE_OBJECT__ = grok;","import * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\nimport {Observable, Subscription} from 'rxjs';\nimport Timeout = NodeJS.Timeout;\nimport {DataFrame} from 'datagrok-api/dg';\n\nexport const tests: {\n [key: string]: {\n tests?: Test[], before?: () => Promise<void>, after?: () => Promise<void>,\n beforeStatus?: string, afterStatus?: string\n }\n} = {};\n\nconst autoTestsCatName = 'Auto Tests';\nconst wasRegistered: {[key: string]: boolean} = {};\nexport let currentCategory: string;\n\nexport namespace assure {\n export function notNull(value: any, name?: string) {\n if (value == null)\n throw new Error(`${name == null ? 'Value' : name} not defined`);\n }\n}\n\nexport interface TestOptions {\n timeout?: number;\n unhandledExceptionTimeout?: number;\n skipReason?: string;\n}\n\nexport class TestContext {\n catchUnhandled = true;\n report = false;\n\n constructor(catchUnhandled?: boolean, report?: boolean) {\n if (catchUnhandled !== undefined) this.catchUnhandled = catchUnhandled;\n if (report !== undefined) this.report = report;\n };\n}\n\nexport class Test {\n test: () => Promise<any>;\n name: string;\n category: string;\n options?: TestOptions;\n\n constructor(category: string, name: string, test: () => Promise<any>, options?: TestOptions) {\n this.category = category;\n this.name = name;\n options ??= {};\n options.timeout ??= 30000;\n this.options = options;\n this.test = async (): Promise<any> => {\n return new Promise(async (resolve, reject) => {\n let result = '';\n try {\n result = await test();\n } catch (e: any) {\n reject(e);\n }\n resolve(result);\n });\n };\n }\n}\n\nexport async function testEvent<T>(event: Observable<T>,\n handler: (args: T) => void, trigger: () => void, ms: number = 0): Promise<string> {\n let sub: Subscription;\n return new Promise((resolve, reject) => {\n sub = event.subscribe((args) => {\n try {\n handler(args);\n } catch (e) {\n reject(e);\n }\n sub.unsubscribe();\n resolve('OK');\n });\n setTimeout(() => {\n sub.unsubscribe();\n // eslint-disable-next-line prefer-promise-reject-errors\n reject('timeout');\n }, ms);\n trigger();\n });\n}\n\nexport function test(name: string, test: () => Promise<any>, options?: TestOptions): void {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n if (tests[currentCategory].tests == undefined)\n tests[currentCategory].tests = [];\n tests[currentCategory].tests!.push(new Test(currentCategory, name, test, options));\n}\n\n/* Tests two objects for equality, throws an exception if they are not equal. */\nexport function expect(actual: any, expected: any = true, error?: string): void {\n if (error)\n error = `${error}, `;\n else error = '';\n if (actual !== expected)\n throw new Error(`${error}Expected \"${expected}\", got \"${actual}\"`);\n}\n\nexport function expectFloat(actual: number, expected: number, tolerance = 0.001, error?: string): void {\n if ((actual === Number.POSITIVE_INFINITY && expected === Number.POSITIVE_INFINITY) ||\n (actual === Number.NEGATIVE_INFINITY && expected === Number.NEGATIVE_INFINITY) ||\n (actual === Number.NaN && expected === Number.NaN) || (isNaN(actual) && isNaN(expected)))\n return;\n const areEqual = Math.abs(actual - expected) < tolerance;\n expect(areEqual, true, `${error ?? ''} (tolerance = ${tolerance})`);\n if (!areEqual)\n throw new Error(`Expected ${expected}, got ${actual} (tolerance = ${tolerance})`);\n}\n\nexport function expectTable(actual: DataFrame, expected: DataFrame, error?: string): void {\n const expectedRowCount = expected.rowCount;\n const actualRowCount = actual.rowCount;\n expect(actualRowCount, expectedRowCount, `${error ?? ''}, row count`);\n\n for (const column of expected.columns) {\n const actualColumn = actual.columns.byName(column.name);\n if (actualColumn == null)\n throw new Error(`Column ${column.name} not found`);\n if (actualColumn.type != column.type)\n throw new Error(`Column ${column.name} type expected ${column.type} got ${actualColumn.type}`);\n for (let i = 0; i < expectedRowCount; i++) {\n const value = column.get(i);\n const actualValue = actualColumn.get(i);\n if (column.type == DG.TYPE.FLOAT)\n expectFloat(actualValue, value, 0.0001, error);\n else if (column.type == DG.TYPE.DATE_TIME)\n expect(actualValue.isSame(value), true, error);\n else\n expect(actualValue, value, error);\n }\n }\n}\n\nexport function expectObject(actual: { [key: string]: any }, expected: { [key: string]: any }) {\n for (const [expectedKey, expectedValue] of Object.entries(expected)) {\n if (!actual.hasOwnProperty(expectedKey))\n throw new Error(`Expected property \"${expectedKey}\" not found`);\n\n const actualValue = actual[expectedKey];\n if (actualValue instanceof Array && expectedValue instanceof Array)\n expectArray(actualValue, expectedValue);\n else if (actualValue instanceof Object && expectedValue instanceof Object)\n expectObject(actualValue, expectedValue);\n else if (Number.isFinite(actualValue) && Number.isFinite(expectedValue))\n expectFloat(actualValue, expectedValue);\n else if (actualValue != expectedValue)\n throw new Error(`Expected (${expectedValue}) for key '${expectedKey}', got (${actualValue})`);\n }\n}\n\nexport function expectArray(actual: ArrayLike<any>, expected: ArrayLike<any>) {\n const actualLength = actual.length;\n const expectedLength = expected.length;\n\n if (actualLength != expectedLength) {\n throw new Error(`Arrays are of different length: actual array length is ${actualLength} ` +\n `and expected array length is ${expectedLength}`);\n }\n\n for (let i = 0; i < actualLength; i++) {\n if (actual[i] instanceof Array && expected[i] instanceof Array)\n expectArray(actual[i], expected[i]);\n else if (actual[i] instanceof Object && expected[i] instanceof Object)\n expectObject(actual[i], expected[i]);\n else if (actual[i] != expected[i])\n throw new Error(`Expected ${expected[i]} at position ${i}, got ${actual[i]}`);\n }\n}\n\n/* Defines a test suite. */\nexport function category(category: string, tests: () => void): void {\n currentCategory = category;\n tests();\n}\n\n/* Defines a function to be executed before the tests in this category are executed. */\nexport function before(before: () => Promise<void>): void {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].before = before;\n}\n\n/* Defines a function to be executed after the tests in this category are executed. */\nexport function after(after: () => Promise<void>): void {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].after = after;\n}\n\nfunction addNamespace(s: string, f: DG.Func): string {\n return s.replace(new RegExp(f.name, 'gi'), f.nqName);\n}\n\nexport async function initAutoTests(packageId: string, module?: any) {\n if (wasRegistered[packageId]) return;\n const moduleTests = module ? module.tests : tests;\n if (moduleTests[autoTestsCatName] !== undefined) {\n wasRegistered[packageId] = true;\n return;\n }\n const moduleAutoTests = [];\n const packFunctions = await grok.dapi.functions.filter(`package.id = \"${packageId}\"`).list();\n for (const f of packFunctions) {\n const tests = f.options['test'];\n if (!(tests && Array.isArray(tests) && tests.length)) continue;\n for (let i = 0; i < tests.length; i++) {\n moduleAutoTests.push(new Test(autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, async () => {\n const res = await grok.functions.eval(addNamespace(tests[i], f));\n // eslint-disable-next-line no-throw-literal\n if (res !== true) throw `Failed: ${tests[i]}`;\n }));\n }\n }\n wasRegistered[packageId] = true;\n if (!moduleAutoTests.length) return;\n moduleTests[autoTestsCatName] = {tests: moduleAutoTests};\n}\n\nexport async function runTests(options?: {category?: string, test?: string, testContext?: TestContext}) {\n const package_ = grok.functions.getCurrentCall()?.func?.package;\n await initAutoTests(package_.id);\n const results: { category?: string, name?: string, success: boolean,\n result: string, ms: number, skipped: boolean }[] = [];\n console.log(`Running tests`);\n options ??= {};\n options!.testContext ??= new TestContext();\n grok.shell.lastError = '';\n for (const [key, value] of Object.entries(tests)) {\n if (options?.category != undefined) {\n if (!key.toLowerCase().startsWith(options?.category.toLowerCase()))\n continue;\n }\n console.log(`Started ${key} category`);\n try {\n if (value.before)\n await value.before();\n } catch (x: any) {\n value.beforeStatus = x.toString();\n }\n const t = value.tests ?? [];\n const res = [];\n for (let i = 0; i < t.length; i++)\n res.push(await execTest(t[i], options?.test));\n const data = (await Promise.all(res)).filter((d) => d.result != 'skipped');\n try {\n if (value.after)\n await value.after();\n } catch (x: any) {\n value.afterStatus = x.toString();\n }\n if (value.afterStatus)\n data.push({category: key, name: 'init', result: value.afterStatus, success: false, ms: 0, skipped: false});\n if (value.beforeStatus)\n data.push({category: key, name: 'init', result: value.beforeStatus, success: false, ms: 0, skipped: false});\n results.push(...data);\n }\n if (options.testContext.catchUnhandled) {\n await delay(1000);\n if (grok.shell.lastError.length > 0) {\n results.push({\n category: 'Unhandled exceptions',\n name: 'exceptions',\n result: grok.shell.lastError, success: false, ms: 0, skipped: false\n });\n }\n }\n if (options.testContext.report) {\n const logger = new DG.Logger();\n const successful = results.filter((r) => r.success).length;\n const skipped = results.filter((r) => r.skipped).length;\n const failed = results.filter((r) => !r.success);\n const description = 'Package @package tested: @successful successful, @skipped skipped, @failed failed tests';\n const params = {\n successful: successful,\n skipped: skipped,\n failed: failed.length,\n package: package_\n };\n for (const r of failed) Object.assign(params, {[`${r.category} | ${r.name}`]: r.result});\n logger.log(description, params, 'package-tested');\n }\n return results;\n}\n\nasync function execTest(t: Test, predicate: string | undefined) {\n let r: { category?: string, name?: string, success: boolean, result: string, ms: number, skipped: boolean };\n const filter = predicate != undefined && (!t.name.toLowerCase().startsWith(predicate.toLowerCase()));\n const skip = t.options?.skipReason || filter;\n const skipReason = filter ? 'skipped' : t.options?.skipReason;\n if (!skip)\n console.log(`Started ${t.category} ${t.name}`);\n const start = new Date();\n try {\n if (skip)\n r = {success: true, result: skipReason!, ms: 0, skipped: true};\n else\n r = {success: true, result: await t.test() ?? 'OK', ms: 0, skipped: false};\n } catch (x: any) {\n r = {success: false, result: x.toString(), ms: 0, skipped: false};\n }\n const stop = new Date();\n // @ts-ignore\n r.ms = stop - start;\n if (!skip)\n console.log(`Finished ${t.category} ${t.name} for ${r.ms} ms`);\n r.category = t.category;\n r.name = t.name;\n return r;\n}\n\n/* Waits [ms] milliseconds */\nexport async function delay(ms: number) {\n await new Promise((r) => setTimeout(r, ms));\n}\n\nexport async function awaitCheck(checkHandler: () => boolean,\n error: string = 'Timeout exceeded', wait: number = 500): Promise<void> {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n clearInterval(interval);\n reject(new Error(error));\n }, wait);\n // @ts-ignore\n const interval: Timeout = setInterval(() => {\n if (checkHandler()) {\n clearInterval(interval);\n resolve();\n }\n }, 50);\n });\n}\n\nexport function isDialogPresent(dialogTitle: string): boolean {\n for (let i = 0; i < DG.Dialog.getOpenDialogs().length; i++) {\n if (DG.Dialog.getOpenDialogs()[i].title == dialogTitle)\n return true;\n }\n return false;\n}\n\nexport async function testViewer(v: string, df: DG.DataFrame, detectSemanticTypes: boolean = false): Promise<void> {\n if (detectSemanticTypes) await grok.data.detectSemanticTypes(df);\n const tv = grok.shell.addTableView(df);\n const viewerName = `[name=viewer-${v.replace(/\\s+/g, '-')} i]`;\n const selector = `${viewerName} canvas,${viewerName} svg,${viewerName} img,\n ${viewerName} input,${viewerName} h1,${viewerName} a`;\n const res = [];\n try {\n let viewer = tv.addViewer(v);\n await awaitCheck(() => document.querySelector(selector) !== null,\n 'cannot load viewer', 3000);\n res.push(Array.from(tv.viewers).length);\n Array.from(df.row(0).cells).forEach((c) => c.value = null);\n df.rows.select((row) => row.idx > 1 && row.idx < 7);\n for (let i = 7; i < 12; i++) df.filter.set(i, false);\n df.currentRowIdx = 1;\n const props = viewer.getOptions(true).look;\n const newProps: Record<string, boolean> = {};\n Object.keys(props).filter((k) => typeof props[k] === 'boolean').forEach((k) => newProps[k] = !props[k]);\n viewer.setOptions(newProps);\n await delay(250);\n const layout = tv.saveLayout();\n const oldProps = viewer.getOptions().look;\n tv.resetLayout();\n res.push(Array.from(tv.viewers).length);\n tv.loadLayout(layout);\n await awaitCheck(() => document.querySelector(selector) !== null,\n 'cannot load viewer from layout', 3000);\n await delay(250);\n res.push(Array.from(tv.viewers).length);\n viewer = Array.from(tv.viewers).find((v) => v.type !== 'Grid')!;\n expectArray(res, [2, 1, 2]);\n expect(JSON.stringify(viewer.getOptions().look), JSON.stringify(oldProps));\n } finally {\n tv.close();\n grok.shell.closeTable(df);\n }\n}\n","import * as DG from 'datagrok-api/dg';\nimport {\n RGROUP_CAP_GROUP_NAME,\n RGROUP_CAP_GROUP_SMILES,\n jsonSdfMonomerLibDict,\n MONOMER_SYMBOL,\n RGROUP_ALTER_ID,\n RGROUPS,\n RGROUP_LABEL,\n SDF_MONOMER_NAME\n} from './constants';\n\nexport function getParts(subParts: string[], s: string): string[] {\n const j = 0;\n const allParts: string[] = [];\n for (let k = 0; k < subParts.length; ++k) {\n const indexOfMonomer = s.indexOf(subParts[k]);\n const helmBeforeMonomer = s.slice(j, indexOfMonomer);\n allParts.push(helmBeforeMonomer);\n allParts.push(subParts[k]);\n s = s.substring(indexOfMonomer + subParts[k].length);\n }\n allParts.push(s);\n return allParts;\n}\n\nexport function parseHelm(s: string) {\n const sections = split(s, '$');\n s = sections[0];\n const monomers = [];\n //@ts-ignore\n if (!scil.Utils.isNullOrEmpty(s)) {\n const seqs = split(s, '|');\n for (let i = 0; i < seqs.length; ++i) {\n const e = detachAnnotation(seqs[i]);\n s = e.str;\n\n let p = s.indexOf('{');\n\n s = s.substring(p + 1);\n p = s.indexOf('}');\n s = s.substring(0, p);\n\n const ss = split(s, '.');\n for (const monomer of ss) {\n if (!monomer || monomer === '') continue;\n if (monomer.startsWith('[') && monomer.includes(']')) {\n const element = monomer.substring(1, monomer.indexOf(']'));\n monomers.push(element);\n const residue = monomer.substring(monomer.indexOf(']') + 1);\n ss.push(residue);\n } else if (monomer.includes('[') && monomer.endsWith(']')) {\n const element = monomer.substring(monomer.lastIndexOf('[') + 1, monomer.length - 1);\n monomers.push(element);\n const residue = monomer.substring(0, monomer.lastIndexOf('['));\n ss.push(residue);\n } else if (monomer.includes('(') && monomer.includes(')')) {\n // here we only want to split the string at first '(' and last ')'\n // because entries like [L-hArg(Et,Et)]([L-hArg(Et,Et)]) where L-hArg(Et,Et) is a single monomer\n const firstPiece = monomer.substring(0, monomer.indexOf('('));\n const thirdPiece = monomer.substring(monomer.lastIndexOf(')') + 1);\n const secondPiece = monomer.substring(firstPiece.length + 1, monomer.length - thirdPiece.length - 1);\n const elements =[firstPiece, secondPiece, thirdPiece];\n for (const el of elements)\n ss.push(el);\n } else {\n monomers.push(monomer);\n }\n }\n }\n }\n return monomers;\n}\n\n// /** Find monomers missed in Helm monomer library configured and\n// * used in org.helm.webeditor / scil.helm.Monomers / org.helm.webeditor.Monomers .\n// */\n// export function findMonomers(helmString: string) {\n// //@ts-ignore\n// const types: string[] = Object.keys(org.helm.webeditor.monomerTypeList());\n// const monomerNameList: any[] = [];\n// const monomerNameI: number = 0;\n// const weMonomers = org.helm.webeditor.Monomers;\n// for (let typeI = 0; typeI < types.length; typeI++) {\n// //@ts-ignore\n// const ofTypeMonomers: {} = weMonomers.getMonomerSet(types[typeI]) ?? {};\n// Object.keys(ofTypeMonomers).forEach((key) => {\n// const monomer: any = ofTypeMonomers[key];\n// monomerNameList[monomerNameI] = monomer.id;\n// monomerNameI += 1;\n// });\n// }\n// const helmPartList = parseHelm(helmString);\n// return new Set(helmPartList.filter((val) => !monomerNameList.includes(val)));\n// }\n\nexport function findMonomers(helmString: string) {\n //@ts-ignore\n const types = Object.keys(org.helm.webeditor.monomerTypeList());\n const monomers: any = [];\n const monomerNames: any = [];\n for (let i = 0; i < types.length; i++) {\n //@ts-ignore\n // eslint-disable-next-line new-cap\n monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));\n Object.keys(monomers[i]).forEach((k) => {\n monomerNames.push(monomers[i][k].id);\n });\n }\n const splitString = parseHelm(helmString);\n return new Set(splitString.filter((val) => !monomerNames.includes(val)));\n}\n\nfunction split(s: string, sep: string) {\n const ret = [];\n let frag = '';\n let parentheses = 0;\n let bracket = 0;\n let braces = 0;\n let quote = 0;\n for (let i = 0; i < s.length; ++i) {\n let c = s.substring(i, i + 1);\n if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {\n ret.push(frag);\n frag = '';\n } else {\n frag += c;\n if (quote > 0) {\n if (c == '\\\\' && i + 1 < s.length) {\n ++i;\n const c2 = s.substring(i, i + 1);\n frag += c2;\n c += c2;\n }\n }\n if (c == '\\\"') {\n if (!(i > 0 && s.substring(i - 1, i) == '\\\\'))\n quote = quote == 0 ? 1 : 0;\n } else if (c == '[') {\n ++bracket;\n } else if (c == ']') {\n --bracket;\n } else if (c == '(') {\n ++parentheses;\n } else if (c == ')') {\n --parentheses;\n } else if (c == '{') {\n ++braces;\n } else if (c == '}') {\n --braces;\n }\n }\n }\n ret.push(frag);\n return ret;\n}\n\nfunction detachAnnotation(s: string) {\n const ret = _detachAppendix(s, '\\\"');\n if (ret.tag != null)\n return ret;\n\n const r = _detachAppendix(s, '\\'');\n return {tag: ret.tag, repeat: r.tag, str: r.str};\n}\n\nfunction _detachAppendix(s: string, c: string) {\n let tag = null;\n //@ts-ignore\n if (scil.Utils.endswith(s, c)) {\n let p = s.length - 1;\n while (p > 0) {\n p = s.lastIndexOf(c, p - 1);\n if (p <= 0 || s.substring(p - 1, p) != '\\\\')\n break;\n }\n\n if (p > 0 && p < s.length - 1) {\n tag = s.substring(p + 1, s.length - 1);\n s = s.substring(0, p);\n }\n }\n if (tag != null)\n tag = tag.replace(new RegExp('\\\\' + c, 'g'), c);\n return {tag: unescape(tag), str: s};\n}\n\nfunction unescape(s: string) {\n //@ts-ignore\n if (scil.Utils.isNullOrEmpty(s))\n return s;\n\n return s.replace(/[\\\\]./g, function(m) {\n switch (m) {\n case '\\\\r':\n return '\\r';\n case '\\\\n':\n return '\\n';\n case '\\\\t':\n return '\\t';\n default:\n return m.substring(1);\n }\n });\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from '../package-test';\nimport {after, before, category, delay, expect, test, expectArray} from '@datagrok-libraries/utils/src/test';\n//import {findMonomers, helmToFasta, helmToPeptide, helmToRNA, initHelm} from '../package';\nimport {parseHelm} from '../utils';\n\n\ncategory('Helm', () => {\n //These tests require webservice that is not present on test stand\n // test('helmToFasta', async () => {\n // expect(await helmToFasta('RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$'), '>RNA1UTGCA');\n // expect(await helmToFasta('RNA1{P.R(U).P.R(T)}$$$$'), '>RNA1UT');\n // expect(await helmToFasta('PEPTIDE1{A.G}$$$$V2.0'), '>PEPTIDE1AG');\n // });\n //\n // test('helmToRNA', async () => {\n // expect(await helmToRNA('RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$'), 'UTGCA');\n // expect(await helmToRNA('RNA1{P.R(U).P.R(T)}$$$$'), 'UT');\n // // eslint-disable-next-line max-len\n // expect(\n // await helmToRNA('RNA1{R(U)P.R(T)P}|RNA2{P.R(A)P.R(A)}$RNA1,RNA2,2:pair-6:pair|RNA1,RNA2,5:pair-3:pair$$$'), 'UT AA'\n // );\n // });\n //\n // test('helmToPeptide', async () => {\n // expect(await helmToPeptide('PEPTIDE1{A.G}$$$$V2.0'), 'AG');\n // expect(await helmToPeptide('PEPTIDE1{L.V.A}|PEPTIDE2{L.V.A}$$$$'), 'LVA LVA');\n // // eslint-disable-next-line max-len\n // expect(await helmToPeptide('PEPTIDE1{A.R.C.A.A.K.T.C.D.A}$PEPTIDE1,PEPTIDE1,8:R3-3:R3$$$'), 'ARCAAKTCDA');\n // });\n\n // detectMacromolecule is a function of Bio package\n // test('detectMacromolecule', async () => {\n // const file = await _package.files.readAsText('tests/test.csv');\n // const df = DG.DataFrame.fromCsv(file);\n // const col = df.columns.byName('HELM string');\n // await grok.data.detectSemanticTypes(df);\n // expect(col.semType, DG.SEMTYPE.MACROMOLECULE);\n // });\n\n // semType and units tags are detecting by Bio package function detectMacromolecule\n // test('detectHelm', async () => {\n // const file = await _package.files.readAsText('tests/test.csv');\n // const df = DG.DataFrame.fromCsv(file);\n // const col = df.columns.byName('HELM string');\n // await grok.data.detectSemanticTypes(df);\n // expect(col.tags[DG.TAGS.UNITS], 'HELM');\n // });\n\n const complexMonomers = [\n // tests parsing of complex monomemer in square brackets like [L-hArg(Et,Et)]\n 'PEPTIDE1{[L-hArg(Et,Et)].E.F.G}|PEPTIDE2{C.E}$PEPTIDE1,PEPTIDE2,2:R3-1:R1$$$V2.0',\n // tests parsing of complex monomer and one as a side chain as well\n 'PEPTIDE1{[L-hArg(Et,Et)]([L-hArg(Et,Et)]).E.F.G}$$$$',\n // tests parsing of complex monomer and one as a side chain as well\n 'RNA1{[dhp]([m1A])p.r(T)p.r(T)p.r(G)p}$$$$V2.0',\n // tests complex monomer as side chain\n 'RNA1{r([mo6pur])p.r(T)p.r(T)p.r(G)p}$$$$V2.0',\n // test complex monomer, side chain and linker\n 'RNA1{[afhna]([mo6pur])[36SS].r(T)p}$$$$V2.0'\n ];\n\n const complexMonomersExpected = [\n ['L-hArg(Et,Et)', 'E', 'F', 'G', 'C', 'E'],\n ['L-hArg(Et,Et)', 'L-hArg(Et,Et)', 'E', 'F', 'G'],\n ['dhp', 'm1A', 'p', 'r', 'T', 'p', 'r', 'T', 'p', 'r', 'G', 'p'],\n ['r', 'mo6pur', 'p', 'r', 'T', 'p', 'r', 'T', 'p', 'r', 'G', 'p'],\n ['afhna', 'mo6pur', '36SS', 'r', 'T', 'p']\n ];\n\n const complexTestNames = [\n 'comples-monomer', 'complex-monomer+side-chain', 'complex-monomer+side-chain-RNA',\n 'complex-side-chain', 'complex+side-chain+linker'\n ];\n test('parseHelm', async () => {\n const expectedResults = [\n ['meI', 'hHis', 'Aca', 'N', 'T', 'dK', 'Thr_PO3H2', 'D-Tyr_Et', 'Aze', 'dV', 'E', 'Phe_4Me'],\n ['A', 'C', 'T', 'G', 'W', 'E', 'Q'],\n ['R', 'U', 'P', 'T', 'A'],\n ['A', '*', 'G', 'C']\n ];\n const helmStrings = [\n 'PEPTIDE1{meI.hHis.Aca.N.T.dK.Thr_PO3H2.Aca.D-Tyr_Et.Aze.dV.E.N.dV.Phe_4Me}$$$',\n // eslint-disable-next-line max-len\n 'PEPTIDE1{A.C.T.G.C.T.W.G.T.W.E.C.W.C.Q.W}|PEPTIDE2{A.C.T.G.C.T.W.G.T.W.E.Q}$PEPTIDE1,PEPTIDE1,5:R3-14:R3|PEPTIDE2,PEPTIDE1,2:R3-12:R3$$$',\n 'RNA1{R(U)P.R(T)P}|RNA2{P.R(A)P.R(A)}$RNA1,RNA2,2:pair-6:pair|RNA1,RNA2,5:pair-3:pair$$$',\n 'PEPTIDE1{A.*.G.C}$$$$V2.0'\n ];\n for (let idx = 0; idx < helmStrings.length; ++idx) {\n const monomerSet = new Set(parseHelm(helmStrings[idx]));\n const monomerArray = Array.from(monomerSet);\n expect(JSON.stringify(monomerArray), JSON.stringify(expectedResults[idx]));\n }\n });\n complexMonomers.forEach((helm, i) => {\n test(complexTestNames[i], async () => {\n const monomersArray = parseHelm(helm);\n monomersArray.sort();\n const expected = complexMonomersExpected[i];\n expected.sort();\n expectArray(monomersArray, expected);\n });\n });\n});\n","const __WEBPACK_NAMESPACE_OBJECT__ = wu;",null,null,"const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {mmDistanceFunctionType} from './types';\n\n// Blosum 62 matrix for protein sequences\nconst BLOSUM62:Array<Array<number>> =\n[[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes: {[id:string]:number} = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\n\ninterface NeedlemanWunchArgs {\n gapOpen: number;\n gapExtend: number;\n scoringMatrix: number[][];\n alphabetIndexes: {[id:string]:number};\n}\n\nconst defaultArgs: NeedlemanWunchArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix\n * @param {Partial<NeedlemanWunchArgs>}args - arguments for Needleman-Wunch algorithm like gap penalty, Scoring matrix..\n * @return {mmDistanceFunctionType} - function that calculates the distance between two sequences\n*/\nexport function needlemanWunch(args: Partial<NeedlemanWunchArgs>): mmDistanceFunctionType {\n return (seq1: string, seq2: string) : number => {\n const {gapOpen, gapExtend, scoringMatrix, alphabetIndexes} = {...defaultArgs, ...args};\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix: number[][] = [\n new Array<number>(seq1.length + 1).fill(0),\n new Array<number>(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n const horizontalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal =\n matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen );\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(\n diagonal, left, top\n );\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n } else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n } else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need compare it to perfect match score to get reasonable distance\n const perfectMatchSeq1 = seq1.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const perfectMatchSeq2 = seq2.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const maxScore = Math.max(perfectMatchSeq1, perfectMatchSeq2);\n return (maxScore - matrix[prevRow][seq1.length]) / maxScore;\n };\n}\n","import {hamming} from './hamming';\nimport {levenstein} from './levenstein';\nimport {needlemanWunch} from './needleman-wunsch';\nimport {mmDistanceFunctionType} from './types';\n\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport enum MmDistanceFunctionsNames {\n HAMMING = 'Hamming',\n LEVENSHTEIN = 'Levenshtein',\n NEEDLEMANN_WUNSCH = 'Needlemann-Wunsch'\n};\n\nexport const mmDistanceFunctions: Record<MmDistanceFunctionsNames, (value?: any) => mmDistanceFunctionType> = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n","import {mmDistanceFunctionType} from './types';\n\nexport function hamming(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n result += diff;\n result /= Math.max(seq1.length, seq2.length);\n return result;\n };\n}\n","import {distance} from 'fastest-levenshtein';\nimport {mmDistanceFunctionType} from './types';\n\nexport function levenstein(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n return distance(seq1, seq2) / Math.max(seq1.length, seq2.length);\n };\n}\n",null,null,"import {Matrix, Vector, Coordinates, Vectors, DistanceMetric} from './type-declarations';\nimport {randomFloat, randomInt} from './random';\n\n/**\n * Asserts a condition by throwing an Error.\n *\n * @export\n * @param {boolean} [condition=false] Condition to assert.\n * @param {string} [message='Assertion error.'] Message to output.\n * @throws {Error}\n */\nexport function assert(condition: boolean = false, message: string = 'Assertion error.') {\n if (!condition)\n throw new Error(message);\n}\n\n/**\n * Creates new two-dimensional array and fills it with the value given.\n *\n * @param {number} dimension1 The first dimension of the coordinates (number of rows).\n * @param {number} dimension2 The second dimension of the coordinates (number of columns).\n * @param {number} [fill=0] A value to fill the coordinates with.\n * @return {Coordinates} A two-dimensional filled with the value given.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nfunction initCoordinates(dimension1: number, dimension2: number, fill: number = 0): Coordinates {\n return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));\n}\n\n/**\n * Transpose matrix.\n *\n * @export\n * @param {Matrix} matrix The matrix to be transposed.\n * @return {Matrix} Transposed matrix.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nexport function transposeMatrix(matrix: Matrix): Matrix {\n return new Array(matrix[0].length).fill(0)\n .map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));\n}\n\n/**\n * Adds two vectors with the second one to be multiplied by the given ratio.\n *\n * @export\n * @param {Vector} p The first vector to add.\n * @param {Vector} q The second vector to add.\n * @param {number} [multiplier=1] A multiplier to be used before the second vector is added.\n * @return {Vector} New vector contained the result of operation p+multiplier*q.\n */\nexport function vectorAdd(p: Vector, q: Vector, multiplier: number = 1): Vector {\n const nItems = p.length;\n\n assert(nItems == q.length, 'Vector lengths do not match.');\n\n const total = new Vector(nItems);\n\n for (let i = 0; i < p.length; ++i)\n total[i] = p[i] + multiplier * q[i];\n\n return total;\n}\n\n/**\n * Sums the vector's items.\n *\n * @param {Vector} v The vector to be summed.\n * @return {number} The vector's items sum.\n */\nfunction itemsSum(v: Vector): number {\n let total = 0;\n\n for (let i = 0; i < v.length; ++i)\n total += v[i];\n\n return total;\n}\n\n/**\n * Suqares the vector's items.\n *\n * @param {Vector} v The vector to square.\n * @return {Vector} A new vector containing the original's items squared.\n */\nfunction vectorSquare(v: Vector): Vector {\n const nItems = v.length;\n const total = new Vector(nItems);\n\n for (let i = 0; i < v.length; ++i)\n total[i] = v[i] * v[i];\n\n return total;\n}\n\nexport function vectorLength(v: Vector): number {\n let sqrSum: number = 0;\n for (let i: number = 0; i < v.length; i++)\n sqrSum += v[i] * v[i];\n return Math.sqrt(sqrSum);\n}\n\nexport function vectorDotProduct(v1: Vector, v2: Vector): number {\n if (v1.length != v2.length)\n throw new Error('The dimensionality of the vectors must match');\n let prod: number = 0;\n for (let i: number = 0; i < v1.length; i++)\n prod += v1[i] * v2[i];\n return prod;\n}\n\n/**\n * Creates a matrix filled with random floating point values.\n *\n * @export\n * @param {number} dimension1 The first dimension of the matrix.\n * @param {number} dimension2 The second dimension of the matrix.\n * @param {number} [scale=1.] Max value given by random generator.\n * @return {Matrix} A new matrix filled with random floating point values.\n */\nexport function fillRandomMatrix(dimension1: number, dimension2: number, scale: number = 1.): Matrix {\n const matrix = initCoordinates(dimension1, dimension2);\n\n for (let i = 0; i < dimension1; ++i) {\n for (let j = 0; j < dimension2; ++j)\n matrix[i][j] = randomFloat(scale);\n }\n return matrix;\n}\n\n/**\n * Calculates Euclidean distance between two vectors.\n *\n * @export\n * @param {Vector} p The first vector.\n * @param {Vector} q The second vector.\n * @return {number} Euclidean distance between the given vectors.\n */\nexport function calculateEuclideanDistance(p: Vector, q: Vector): number {\n const diff = vectorAdd(p, q, -1);\n const sqdiff = vectorSquare(diff);\n const sqdiffSumm = itemsSum(sqdiff);\n return Math.sqrt(sqdiffSumm);\n}\n\n/**\n * Creates a distance matrix using a custom distance function.\n *\n * @export\n * @param {Vectors} data Input vectors to calculate distances.\n * @param {DistanceMetric} distance Custom distance function.\n * @return {Matrix} Calculated custom distance matrix.\n */\nexport function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix {\n const nItems = data.length;\n const matrix = initCoordinates(nItems, nItems, 0);\n\n for (let i = 0; i < nItems; ++i) {\n for (let j = i + 1; j < nItems; ++j) {\n const d: number = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);\n matrix[i][j] = matrix[j][i] = d;\n }\n }\n return matrix;\n}\n\n/** Generates array from a range [begin; end] or [begin; end) if endExclusive. **/\nexport function genRange(begin: number, end: number, endExclusive = false): Int32Array {\n const nItems = end - begin + (endExclusive ? 0 : 1);\n const series = new Int32Array(nItems);\n\n for (let i = 0; i < nItems; ++i)\n series[i] = begin + i;\n\n return series;\n}\n\n/**\n * Returns order of values as if they are sorted.\n *\n * @export\n * @param {any[]} values Input array.\n * @param {boolean} [reverse=false] Whether to return reversed order.\n * @return {number[]} The order computed.\n */\nexport function argSort(values: any[], reverse = false): number[] {\n const sortfn = reverse ? (a: any[], b: any[]) => (b[0] - a[0]) : (a: any[], b: any[]) => (a[0] - b[0]);\n const decor = (v: any, i: number) => [v, i]; // set index to value\n const undecor = (a: any[]) => a[1]; // leave only index\n const _argsort = (arr: any[]) => arr.map(decor).sort(sortfn).map(undecor);\n return _argsort(values);\n}\n\n/**\n * Returns the indexes of the most diverse objects according to the dist function\n * @param {number} length total number of objects\n * @param {number} n number of diverse elements to find\n * @param {(i1: number, i2: number) => number} dist a function which calculates distance between\n * two objects using their indexes\n * @returns {number[]} The indexes of the most diverse objects\n */\nexport function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[] {\n function maxBy(values: IterableIterator<number>, orderBy: (i: number) => number) {\n let maxValue = null;\n let maxOrderBy = null;\n\n for (const element of values) {\n const elementOrderBy = orderBy(element);\n if (maxOrderBy == null || elementOrderBy > maxOrderBy) {\n maxValue = element;\n maxOrderBy = elementOrderBy;\n }\n }\n return maxValue;\n }\n\n const subset = [randomInt(length - 1)];\n const complement = new Set();\n\n for (let i = 0; i < length; ++i) {\n if (!subset.includes(i))\n complement.add(i);\n }\n\n while (subset.length < n) {\n const idx = maxBy(\n complement.values() as IterableIterator<number>,\n (i) => Math.min.apply(Math, subset.map(function(val, index) {\n return dist(i, val);\n })));\n if (idx) {\n subset.push(idx);\n complement.delete(idx);\n }\n }\n return subset;\n}\n\n/**\n * Returns normalized vector\n * @param {Vector} data numerical array\n */\nexport function normalize(data: Vector): Vector {\n let mean = 0;\n let std = 0;\n\n for (let i = 0; i < data.length; ++i)\n mean += data[i];\n\n mean /= data.length;\n\n for (let i = 0; i < data.length; ++i)\n std += (data[i] - mean) * (data[i] - mean);\n\n std = Math.sqrt(std / data.length);\n\n for (let i = 0; i < data.length; ++i)\n data[i] = (data[i] - mean) / std;\n\n return data;\n}\n\n/**\n * Finds set difference between two lists.\n * @param {any[]} a The first list.\n * @param {any[]} b The second list.\n * @return {any[]}\n */\nexport function setDifference(a: any[], b: any[]): any[] {\n const bSet = new Set(b);\n return Array.from(new Set(a.filter((x) => !bSet.has(x))).values());\n}\n","/**\n * Denotes a vector of floating poit values.\n *\n * @export\n * @class Vector\n * @extends {Float32Array}\n */\nexport class Vector extends Float32Array {}\n\n/**\n * Denotes a two-dimensional matrix.\n *\n * @export\n * @class Matrix\n * @extends {Array<Vector>}\n */\nexport class Matrix extends Array<Vector> {}\n\n/**\n * Denotes cartesian coordinates.\n *\n * @export\n * @class Coordinates\n * @extends {Matrix}\n */\nexport class Coordinates extends Matrix {}\n\n/**\n * Denotes an array of arbitrary-typed vectors.\n *\n * @export\n * @class Vectors\n * @extends {Array<any>}\n */\nexport class Vectors extends Array<any> {}\n\n/**\n * Denotes a dictionary containing function options.\n *\n * @export\n * @type Options\n */\nexport type Options = {[name: string]: any};\n\n/**\n * Denotes custom distance metric between the two given vectors.\n *\n * @export\n * @type DistanceMetric\n * @param {any} v1 The first vector.\n * @param {any} v2 The second vector.\n * @return {number} Distance between these two vectors.\n */\nexport type DistanceMetric = (v1: any, v2: any) => (number);\n\n/**\n * Denotes a simple string to string dictionary.\n *\n * @export\n * @type StringDictionary\n */\nexport type StringDictionary = {[key: string]: string};\n",null,null,null,null,null,"import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from '../package-test';\nimport {after, before, category, delay, expect, expectObject, test} from '@datagrok-libraries/utils/src/test';\nimport {findMonomers} from '../utils';\nimport {getMonomerLibHelper, IMonomerLibHelper} from '@datagrok-libraries/bio/src/monomer-works/monomer-utils';\n\nconst LIB_STORAGE_NAME = 'Libraries';\nexport const LIB_DEFAULT: { [fileName: string]: string } = {'HELMCoreLibrary.json': 'HELMCoreLibrary.json'};\n\n\n/** Tests with default monomer library */\ncategory('findMonomers', () => {\n\n let monomerLibHelper: IMonomerLibHelper;\n /** Backup actual user's monomer libraries settings */\n let userLibrariesSettings: any = null;\n\n before(async () => {\n monomerLibHelper = await getMonomerLibHelper();\n userLibrariesSettings = await grok.dapi.userDataStorage.get(LIB_STORAGE_NAME, true);\n\n // Tests 'findMonomers' requires default monomer library loaded\n await grok.dapi.userDataStorage.post(LIB_STORAGE_NAME, LIB_DEFAULT, true);\n await monomerLibHelper.loadLibraries(true); // load default libraries\n });\n\n after(async () => {\n await grok.dapi.userDataStorage.put(LIB_STORAGE_NAME, userLibrariesSettings, true);\n });\n\n const tests: { [testName: string]: { test: string, tgt: Set<string> } } = {\n 'withoutMissed': {\n test: 'PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et}$$$$',\n tgt: new Set<string>(),\n },\n 'withMissed':\n {\n test: 'PEPTIDE1{meI.missed2.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et}$$$$',\n tgt: new Set<string>(['missed2'])\n }\n };\n\n for (const [testName, testData] of Object.entries(tests)) {\n test(testName, async () => {\n _testFindMonomers(testData.test, testData.tgt);\n });\n }\n\n function _testFindMonomers(testHelmValue: string, tgtMissedSet: Set<string>): void {\n const resMissedSet: Set<string> = findMonomers(testHelmValue);\n expectObject(resMissedSet, tgtMissedSet);\n }\n});\n","import * as DG from 'datagrok-api/dg';\nimport * as grok from 'datagrok-api/grok';\nimport {runTests, tests, TestContext} from '@datagrok-libraries/utils/src/test';\n\nimport './tests/helm-tests.ts';\nimport './tests/findMonomers-tests';\n\nexport const _package = new DG.Package();\nexport {tests};\n\n\n//name: test\n//input: string category {optional: true}\n//input: string test {optional: true}\n//input: object testContext {optional: true}\n//output: dataframe result\nexport async function test(category: string, test: string, testContext: TestContext): Promise<DG.DataFrame> {\n const data = await runTests({category, test, testContext});\n return DG.DataFrame.fromObjects(data)!;\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","DG","grok","tests","wasRegistered","currentCategory","assure","notNull","name","Error","TestContext","constructor","catchUnhandled","report","undefined","this","Test","category","test","options","timeout","Promise","resolve","reject","result","e","push","expect","actual","expected","error","expectFloat","tolerance","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","NaN","isNaN","areEqual","Math","abs","expectObject","expectedKey","expectedValue","entries","actualValue","Array","expectArray","isFinite","actualLength","length","expectedLength","i","before","after","addNamespace","s","f","replace","RegExp","nqName","runTests","package_","func","package","packageId","module","moduleTests","autoTestsCatName","moduleAutoTests","packFunctions","list","isArray","initAutoTests","id","results","console","log","testContext","toLowerCase","startsWith","x","beforeStatus","toString","t","res","execTest","data","all","filter","d","afterStatus","success","ms","skipped","r","setTimeout","delay","logger","successful","failed","description","params","assign","predicate","skip","skipReason","start","Date","stop","parseHelm","split","monomers","scil","Utils","isNullOrEmpty","seqs","p","detachAnnotation","str","indexOf","substring","ss","monomer","includes","element","residue","endsWith","lastIndexOf","firstPiece","thirdPiece","elements","el","sep","ret","frag","parentheses","bracket","braces","quote","c","c2","_detachAppendix","tag","repeat","endswith","m","complexMonomersExpected","complexTestNames","expectedResults","helmStrings","idx","monomerSet","Set","monomerArray","from","JSON","stringify","forEach","helm","monomersArray","sort","wu","peq","Uint32Array","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","seq1","seq2","diff","min","max","LEVENSHTEIN","a","b","tmp","n","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","j","vlen","k","pb","mb","xh","ph","mh","score","myers_x","distance","NEEDLEMANN_WUNSCH","args","matrix","fill","verticalGaps","horizontalGaps","prevRow","currRow","diagonal","top","left","perfectMatchSeq1","map","reduce","perfectMatchSeq2","maxScore","v1","v2","prod","Float32Array","vectorLength","v","sqrSum","sqrt","LIB_STORAGE_NAME","LIB_DEFAULT","monomerLibHelper","userLibrariesSettings","getMonomerLibHelper","loadLibraries","tgt","testName","testData","testHelmValue","tgtMissedSet","helmString","types","keys","org","webeditor","monomerTypeList","monomerNames","Monomers","getMonomerSet","splitString","val","findMonomers","_package"],"sourceRoot":""}
package/dist/package.js CHANGED
@@ -1,2 +1,2 @@
1
- var helm;(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{_package:()=>z,editMoleculeCell:()=>K,getMolfiles:()=>tt,helmCellRenderer:()=>q,helmWebEditor:()=>et,initHelm:()=>B,openEditor:()=>J,propertiesPanel:()=>X});const n=grok,r=ui,s=DG;class o{constructor(){this.w=200,this.h=100,this.host=r.div([],{style:{width:`${this.w}px`,height:`${this.h}px`}}),this.editor=new JSDraw2.Editor(this.host,{width:this.w,height:this.h,viewonly:!0})}resizeEditor(t,e){this.editor.setSize(t,e)}createWebEditor(t){const e=r.div();org.helm.webeditor.MolViewer.molscale=.8;const n=new scil.helm.App(e,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),s=n.calculateSizes();n.canvas.resize(s.rightwidth-100,s.topheight-210);let o={width:s.rightwidth-100+"px",height:s.bottomheight+"px"};return scil.apply(n.sequence.style,o),scil.apply(n.notation.style,o),o={width:s.rightwidth+"px",height:s.bottomheight+n.toolbarheight+"px"},scil.apply(n.properties.parent.style,o),n.structureview.resize(s.rightwidth,s.bottomheight+n.toolbarheight),n.mex.resize(s.topheight-80),setTimeout((function(){n.canvas.helm.setSequence(t,"HELM")}),200),{editorDiv:e,webEditor:n}}}function i(t,e){const n=[];for(let r=0;r<t.length;++r){const s=e.indexOf(t[r]),o=e.slice(0,s);n.push(o),n.push(t[r]),e=e.substring(s+t[r].length)}return n.push(e),n}function l(t){t=h(t,"$")[0];const e=[];if(!scil.Utils.isNullOrEmpty(t)){const n=h(t,"|");for(let r=0;r<n.length;++r){let s=(t=c(n[r]).str).indexOf("{");s=(t=t.substring(s+1)).indexOf("}");const o=h(t=t.substring(0,s),".");for(const t of o)if(t&&""!==t)if(t.startsWith("[")&&t.includes("]")){const n=t.substring(1,t.indexOf("]"));e.push(n);const r=t.substring(t.indexOf("]")+1);o.push(r)}else if(t.includes("[")&&t.endsWith("]")){const n=t.substring(t.lastIndexOf("[")+1,t.length-1);e.push(n);const r=t.substring(0,t.lastIndexOf("["));o.push(r)}else if(t.includes("(")&&t.includes(")")){const e=t.substring(0,t.indexOf("(")),n=t.substring(t.lastIndexOf(")")+1),r=[e,t.substring(e.length+1,t.length-n.length-1),n];for(const t of r)o.push(t)}else e.push(t)}}return e}function a(t){const e=Object.keys(org.helm.webeditor.monomerTypeList()),n=[],r=[];for(let t=0;t<e.length;t++)n.push(new scil.helm.Monomers.getMonomerSet(e[t])),Object.keys(n[t]).forEach((e=>{r.push(n[t][e].id)}));const s=l(t);return new Set(s.filter((t=>!r.includes(t))))}function h(t,e){const n=[];let r="",s=0,o=0,i=0,l=0;for(let a=0;a<t.length;++a){let h=t.substring(a,a+1);if(h==e&&0==o&&0==s&&0==i&&0==l)n.push(r),r="";else{if(r+=h,l>0&&"\\"==h&&a+1<t.length){++a;const e=t.substring(a,a+1);r+=e,h+=e}'"'==h?a>0&&"\\"==t.substring(a-1,a)||(l=0==l?1:0):"["==h?++o:"]"==h?--o:"("==h?++s:")"==h?--s:"{"==h?++i:"}"==h&&--i}}return n.push(r),n}function c(t){const e=u(t,'"');if(null!=e.tag)return e;const n=u(t,"'");return{tag:e.tag,repeat:n.tag,str:n.str}}function u(t,e){let n=null;if(scil.Utils.endswith(t,e)){let r=t.length-1;for(;r>0&&(r=t.lastIndexOf(e,r-1),!(r<=0||"\\"!=t.substring(r-1,r))););r>0&&r<t.length-1&&(n=t.substring(r+1,t.length-1),t=t.substring(0,r))}return null!=n&&(n=n.replace(new RegExp("\\"+e,"g"),e)),{tag:g(n),str:t}}function g(t){return scil.Utils.isNullOrEmpty(t)?t:t.replace(/[\\]./g,(function(t){switch(t){case"\\r":return"\r";case"\\n":return"\n";case"\\t":return"\t";default:return t.substring(1)}}))}wu;class m{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class p extends m{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}const f=/(\[[A-Za-z0-9-_]+\]|.)/g,C=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},d=[new m("PT",C.fasta.peptide,.5),new m("DNA",C.fasta.dna,.55),new m("RNA",C.fasta.rna,.55)],b=new Uint32Array(65536),T={gapOpen:8,gapExtend:2,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var w;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch"}(w||(w={}));const S={[w.HAMMING]:function(){return(t,e)=>{let n=0;t.length!==e.length&&(n=Math.abs(t.length-e.length));let r=0;for(let n=0;n<Math.min(t.length,e.length);n++)t[n]!==e[n]&&r++;return r+=n,r/=Math.max(t.length,e.length),r}},[w.LEVENSHTEIN]:function(){return(t,e)=>((t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,r=e.length,s=1<<n-1;let o=-1,i=0,l=n,a=n;for(;a--;)b[t.charCodeAt(a)]|=1<<a;for(a=0;a<r;a++){let t=b[e.charCodeAt(a)];const n=t|i;t|=(t&o)+o^o,i|=~(t|o),o&=t,i&s&&l++,o&s&&l--,i=i<<1|1,o=o<<1|~(n|i),i&=n}for(a=n;a--;)b[t.charCodeAt(a)]=0;return l})(t,e):((t,e)=>{const n=e.length,r=t.length,s=[],o=[],i=Math.ceil(n/32),l=Math.ceil(r/32);for(let t=0;t<i;t++)o[t]=-1,s[t]=0;let a=0;for(;a<l-1;a++){let i=0,l=-1;const h=32*a,c=Math.min(32,r)+h;for(let e=h;e<c;e++)b[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=b[e.charCodeAt(t)],r=o[t/32|0]>>>t&1,a=s[t/32|0]>>>t&1,h=n|i,c=((n|a)&l)+l^l|n|a;let u=i|~(c|l),g=l&c;u>>>31^r&&(o[t/32|0]^=1<<t),g>>>31^a&&(s[t/32|0]^=1<<t),u=u<<1|r,g=g<<1|a,l=g|~(h|u),i=u&h}for(let e=h;e<c;e++)b[t.charCodeAt(e)]=0}let h=0,c=-1;const u=32*a,g=Math.min(32,r-u)+u;for(let e=u;e<g;e++)b[t.charCodeAt(e)]|=1<<e;let m=r;for(let t=0;t<n;t++){const n=b[e.charCodeAt(t)],i=o[t/32|0]>>>t&1,l=s[t/32|0]>>>t&1,a=n|h,u=((n|l)&c)+c^c|n|l;let g=h|~(u|c),p=c&u;m+=g>>>r-1&1,m-=p>>>r-1&1,g>>>31^i&&(o[t/32|0]^=1<<t),p>>>31^l&&(s[t/32|0]^=1<<t),g=g<<1|i,p=p<<1|l,c=p|~(a|g),h=g&a}for(let e=u;e<g;e++)b[t.charCodeAt(e)]=0;return m})(t,e)})(t,e)/Math.max(t.length,e.length)},[w.NEEDLEMANN_WUNSCH]:function(t){return(e,n)=>{const{gapOpen:r,gapExtend:s,scoringMatrix:o,alphabetIndexes:i}={...T,...t},l=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)],a=new Array(e.length+1).fill(!1),h=new Array(e.length+1).fill(!1);let c=0,u=1;for(let t=1;t<e.length+1;t++)l[0][t]=-r-(t-1)*s;for(let t=1;t<n.length+1;t++){l[u][0]=-r-(t-1)*s;for(let g=1;g<e.length+1;g++){const m=l[c][g-1]+o[i[e[g-1]]][i[n[t-1]]],p=l[c][g]-(a[g]?s:r),f=l[u][g-1]-(h[g-1]?s:r);l[u][g]=Math.max(m,f,p),l[u][g]===m?(a[g]=!1,h[g]=!1):l[u][g]===f?(a[g]=!1,h[g]=!0):(a[g]=!0,h[g]=!1)}c=u,u=(u+1)%2}const g=e.split("").map((t=>o[i[t]][i[t]])).reduce(((t,e)=>t+e),0),m=n.split("").map((t=>o[i[t]][i[t]])).reduce(((t,e)=>t+e),0),p=Math.max(g,m);return(p-l[c][e.length])/p}}},A=new class{constructor(){this.uhTemp=`units-handler.${s.SEMTYPE.MACROMOLECULE}`}};class y{static setUnitsToFastaColumn(t){if(t.column.semType!==s.SEMTYPE.MACROMOLECULE||"fasta"!==t.column.getTag(s.TAGS.UNITS))throw new Error(`The column of notation 'fasta' must be '${s.SEMTYPE.MACROMOLECULE}'.`);t.column.setTag(s.TAGS.UNITS,"fasta"),y.setTags(t)}static setUnitsToSeparatorColumn(t,e){if(t.column.semType!==s.SEMTYPE.MACROMOLECULE||"separator"!==t.column.getTag(s.TAGS.UNITS))throw new Error(`The column of notation 'separator' must be '${s.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error("The column of notation 'separator' must have the separator tag.");t.column.setTag(s.TAGS.UNITS,"separator"),t.column.setTag("separator",e),y.setTags(t)}static setUnitsToHelmColumn(t){if(t.column.semType!==s.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation 'helm' must be '${s.SEMTYPE.MACROMOLECULE}'`);t.column.setTag(s.TAGS.UNITS,"helm"),y.setTags(t)}static setTags(t){const e=t.column.getTag(s.TAGS.UNITS),n=t.stats;if(Object.keys(n.freq).some((t=>t.length>1)),["fasta","separator"].includes(e)){if(0===Object.keys(n.freq).length)throw new Error("Alphabet is empty");const e=n.sameLength?"SEQ.MSA":"SEQ";t.column.setTag("aligned",e);const r=function(t,e,n="-"){const r=e.map((e=>{const r=function(t,e,n="-"){const r=new Set([...new Set(Object.keys(t)),...e]);r.delete(n);const s=[],o=[];for(const n of r)s.push(n in t?t[n]:0),o.push(e.has(n)?1:0);const i=new E(s),l=new E(o);return function(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let r=0;r<t.length;r++)n+=t[r]*e[r];return n}(i,l)/(M(i)*M(l))}(t,e.alphabet,n);return new p(e,t,r)}));let s;const o=Math.max(...r.map((t=>t.similarity>t.cutoff?t.similarity:-1)));s=o>0?r.find((t=>t.similarity===o)).name:"UN";return s}(n.freq,d);if(t.column.setTag("alphabet",r),"UN"===r){const e=Object.keys(n.freq).length,r=Object.keys(n.freq).some((t=>t.length>1));t.column.setTag(".alphabetSize",e.toString()),t.column.setTag(".alphabetIsMultichar",r?"true":"false")}}}get column(){return this._column}get units(){return this._units}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){const t=this.column.getTag("separator")??void 0;if("separator"===this.notation&&void 0===t)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return t}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if("helm"==this.notation||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=this.stats;e=Object.keys(t.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return"helm"===this.notation||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}get splitted(){if(null===this._splitted){const t=this.getSplitter(),e=this._column.length;this._splitted=new Array(e);const n=this._column.getRawData(),r=this._column.categories;for(let s=0;s<e;s++){const e=r[n[s]];this._splitted[s]=t(e)}}return this._splitted}get stats(){if(null===this._stats){const t={};let e=!0,n=null;for(const r of this.splitted){null==n?n=r.length:r.length!==n&&(e=!1);for(const e of r)e in t||(t[e]=0),t[e]+=1}this._stats={freq:t,sameLength:e}}return this._stats}isFasta(){return"fasta"===this.notation}isSeparator(){return"separator"===this.notation}isHelm(){return"helm"===this.notation}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}getNotation(){if(this.units.toLowerCase().startsWith("fasta"))return"fasta";if(this.units.toLowerCase().startsWith("separator"))return"separator";if(this.units.toLowerCase().startsWith("helm"))return"helm";throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getNewColumn(t,e){const n=this.column,r=n.length,o=t.toLowerCase()+"("+n.name+")",i=n.dataFrame.columns.getUnusedName(o),l=s.Column.fromList("string",i,new Array(r).fill(""));if(l.semType=s.SEMTYPE.MACROMOLECULE,l.setTag(s.TAGS.UNITS,t),"separator"===t){if(!e)throw new Error("Notation 'separator' requires separator value.");l.setTag("separator",e)}l.setTag(s.TAGS.CELL_RENDERER,"Macromolecule");const a=n.getTag("aligned");a&&l.setTag("aligned",a);const h=n.getTag("alphabet");h&&l.setTag("alphabet",h);let c=n.getTag(".alphabetSize");c&&l.setTag(".alphabetSize",c);const u=n.getTag(".alphabetIsMultichar");return void 0!==u&&l.setTag(".alphabetIsMultichar",u),"helm"==t&&(c=this.getAlphabetSize().toString(),l.setTag(".alphabetSize",c)),l}static getNewColumn(t){const e=y.getOrCreate(t),n=e.notation;return e.getNewColumn(n)}static unitsStringIsValid(t){return t=t.toLowerCase(),["fasta","separator","helm"].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!y.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const r=s.Column.fromList("string",e,new Array(t).fill(""));return r.semType=s.SEMTYPE.MACROMOLECULE,r.setTag(s.TAGS.UNITS,n),r}getSplitter(){return _(this._column)}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return w.HAMMING;switch(this.alphabet){case"DNA":case"RNA":default:return w.LEVENSHTEIN;case"PT":return w.NEEDLEMANN_WUNSCH}}getDistanceFunction(){return S[this.getDistanceFunctionName()]()}async checkHelmCompatibility(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(await async function(){const t=s.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installed for MonomerLibHelper.');return(await t[0].prepare().call()).getOutputParamValue()}()).getBioLib().getMonomerSymbolsByType("PEPTIDE".toString()),e=new Set(t),n=P(this.separator);for(const t of this.column.categories){const r=n(t);for(const t of r)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0}constructor(t){if(this._splitted=null,this._stats=null,t.type!=s.TYPE.STRING)throw new Error(`Unexpected column type '${t.type}', must be '${s.TYPE.STRING}'.`);this._column=t;const e=this._column.getTag(s.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?y._defaultGapSymbolsDict.FASTA:this.isHelm()?y._defaultGapSymbolsDict.HELM:y._defaultGapSymbolsDict.SEPARATOR,!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())y.setUnitsToFastaColumn(this);else if(this.isSeparator()){const e=t.getTag("separator");y.setUnitsToSeparatorColumn(this,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(s.TAGS.UNITS)}'.`);y.setUnitsToHelmColumn(this)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}static getOrCreate(t){return A.uhTemp in t.temp||(t.temp[A.uhTemp]=new y(t)),t.temp[A.uhTemp]}}y._defaultGapSymbolsDict={HELM:"*",SEPARATOR:"",FASTA:"-"};class E extends Float32Array{}function M(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}class N{static makePalette(t,e=!1,n=N){const r={};return t.forEach((t=>{const n=t[0],s=t[1];n.forEach(((t,n)=>{r[t]=this.colourPalette[s][e?0:n]}))})),new n(r)}constructor(t){this._palette=t}get(t){return this._palette[t]}}N.undefinedColor="rgb(100,100,100)",N.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]};class v extends N{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,v)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,v)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new v({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in v.aaSynonyms?v.aaSynonyms[t]:t;return super.get(e)}}v.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class O{static getPalette(t="grok"){switch(t){case"grok":return v.GrokGroups;case"lesk":return v.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",r="";for(const s of t)"("==s?e++:")"==s?e--:e?n+=s:r+=s;return isNaN(parseInt(n))?[r,n]:[r,""]}static getColorAAPivot(t="",e="grok"){const n=this.getPalette(e);let[r,s]=this.getInnerOuter(t);if(r=r.length>6?`${r.slice(0,3)}...`:r,s=s.length>6?`${s.slice(0,3)}...`:s,1==t.length||"("==t[1]){const e=t[0]?.toUpperCase();return e in n?[n.get(e),e,s,1]:[this.undefinedColor,r,s,1]}if("d"==t[0]&&t[1]in n&&(2==t.length||"("==t[2])){const e=t[1]?.toUpperCase();return e in n?[n.get(e),e,s,2]:[this.undefinedColor,r,s,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in n?[n.get(e),e,s,3]:[this.undefinedColor,r,s,3]}if(t[0]?.toLowerCase()==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in n?[n.get(e),e,s,4]:[this.undefinedColor,r,s,4]}return[this.undefinedColor,r,s,0]}}O.SemType="Aminoacids",O.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",O.undefinedColor="rgb(100,100,100)",O.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},O.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},O.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},O.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"};class H{}H.SemType="Nucleotides",H.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",H.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"};class x extends class{}{static buildPalette(){return[].concat(...Object.values(N.colourPalette))}get(t){const e=class{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}.hashCode(t)%x.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=s.Color.fromHtml(t),n=s.Color.g(e),r=s.Color.r(e),o=s.Color.b(e),i=Math.sqrt(Math.pow(0-r,2)+Math.pow(0-n,2)+Math.pow(0-o,2));return i>210?`rgb(${r/i*210},${n/i*210},${o/i*210})`:s.Color.toRgb(e)}(x.palette[e])}}function L(t){return t.toString().replace(f,".$1").slice(1).split(".").map((t=>t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):"-"===t?"":t))}function P(t,e){return n=>n.split(t,e)}x.palette=x.buildPalette();const G=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,F=/\[([^\[\]]+)]/g;function I(t){G.lastIndex=0;const e=G.exec(t.toString()),n=e?e[2]:null;return(n?n.split("."):[]).map((t=>{F.lastIndex=0;const e=F.exec(t);return e&&e.length>=2?e[1]:t}))}function _(t){if(t.semType!==s.SEMTYPE.MACROMOLECULE)throw new Error(`Get splitter for semType "${s.SEMTYPE.MACROMOLECULE}" only.`);return function(t,e,n){if(t.toLowerCase().startsWith("fasta"))return L;if(t.toLowerCase().startsWith("separator"))return P(e,void 0);if(t.toLowerCase().startsWith("helm"))return I;throw new Error(`Unexpected units ${t} .`)}(t.getTag(s.TAGS.UNITS),t.getTag("separator"))}const U=/(\w+)/g;var D;!function(t){t.MSA="MSA",t.classic="classic"}(D||(D={}));const R=(t,e,n,r,s,o,i="rgb(100,100,100)",l=0,a=!1,h=1,c="",u=!1,g=D.classic,m=[],p=0,f=null,C=[],d=null)=>{s.textAlign="start";let b=o.substring(0),T=u?"":c;g===D.MSA&&(T="");let w=!0,S=!0,A="difference";null!=f&&null!=f.cell.column&&(w=f.cell.column.temp["color-code"]??!0,S=f.cell.column.temp["compare-with-current"]??!0,A=f.cell.column.temp["highlight-difference"]??"difference");const y=C[p];S&&C.length>0&&"difference"===A&&(h=b==y?.3:h),S&&C.length>0&&"equal"===A&&(h=b!=y?.3:h),null!=d&&(b=function(t,e){const n=t.match(U),r=t.length>e||(n?.length??0)>1,s=n?.[0]??" ";return r?s.substring(0,e)+"…":s}(b,d));let E=s.measureText(b+T),M=s.measureText(b).width;s.measureText(b).width;const N=r/2-(E.fontBoundingBoxAscent+E.fontBoundingBoxDescent)/2+1;function v(n,r){const o=w?i:"rgb(0,0,0)";s.fillStyle=o,s.globalAlpha=h,g===D.classic&&(s.fillText(b,t+n,e+N),s.fillStyle="#808080",s.fillText(T,t+r,e+N)),g===D.MSA&&(s.fillStyle=o,s.fillText(b,t+n,e+N))}E=E.width,g===D.MSA&&(M=m[p],E=m[p]);const O=m[p];if(a||E>n)return v(O,O+M),O+M+s.measureText(T).width;{const t=(n-E)/2;return v(t,t+M),O+t+M}};function $(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?$(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}class k extends s.GridCellRenderer{get name(){return"helm"}get cellType(){return"helm"}get defaultWidth(){return 400}get defaultHeight(){return 100}onMouseMove(t,e){var n,s,o,h;try{let c=null;try{c=t.tableColumn}catch(t){}if(!c)return;const u=null!==(n=c.temp)&&void 0!==n?n:new Array(c.length);if(!u||0==Object.keys(u).length)return;const g=u["helm-sum-maxLengthWords"],m=u["helm-maxLengthWords"],p=Object.values(m).length-1,f=e.offsetX-t.gridColumn.left+(t.gridColumn.left-t.bounds.x);let C=0,d=p,b=!1;g[p+1]=f+1;let T=0;if(f>g[0])for(;!b;)T=Math.floor((d+C)/2),f>=g[T]&&f<=g[T+1]?(C=T,b=!0):f<g[T]?d=T-1:f>g[T+1]&&(C=T+1),C==d&&(b=!0);C=f>=g[C]?C+1:C;const w=a(t.cell.value),S=null!==(s=t.cell.value)&&void 0!==s?s:"",A=i(l(S),S),y=[];for(let t=0;t<A.length;++t)w.has(A[t])&&(y[t]=r.divV([r.divText(`Monomer ${A[t]} not found.`),r.divText("Open the Context Panel, then expand Manage Libraries")]));(null!==(h=null===(o=y[C])||void 0===o?void 0:o.childNodes.length)&&void 0!==h?h:0)>0?r.tooltip.show(r.div(y[C]),e.x+16,e.y+16):r.tooltip.hide()}catch(t){const e=$(t);console.error("Helm: HelmCellRenderer.onMouseMove() error:\n"+e)}}render(t,e,n,s,o,h,c){var u,g;t.save();try{let c=null;try{c=h.tableColumn}catch(t){}if(!c)return;const m=-1!==h.gridRow?h.grid:void 0,p="rgb(100,100,100)",f="#808080",C=a(h.cell.value),d=null!==(u=h.cell.value)&&void 0!==u?u:"",b=l(d);if(0==C.size){const t=r.div([],{style:{width:`${s}px`,height:`${o}px`}});return t.setAttribute("dataformat","helm"),t.setAttribute("data",h.cell.value),h.element=t,void new JSDraw2.Editor(t,{width:s,height:o,skin:"w8",viewonly:!0})}if(C.size>0){if(!m){const e=window.devicePixelRatio;o=28,t.canvas.height=o*e,t.canvas.style.height=`${o}px`}const r=null!==(g=c.temp["helm-maxLengthWords"])&&void 0!==g?g:[];b.length>r.length&&r.push(...new Array(b.length-r.length).fill(-1)),s=m?Math.min(m.canvas.width-e,s):t.canvas.width-e,t.save(),t.beginPath(),t.rect(e,n,s,o),t.clip(),t.font="12px monospace",t.textBaseline="top";let l=e;const a=i(b,d);for(let e=0;e<a.length;++e){r[e]=Math.max(r[e],7*a[e].length);const i=C.has(a[e])?"red":f;t.fillStyle=p,l=R(l,n,s,o,t,a[e],i,0,!0,1)}const h=new Array(r.length);h[0]=r[0];for(let t=1;t<a.length;t++)h[t]=h[t-1]+r[t];return void(c.temp={"helm-sum-maxLengthWords":h,"helm-maxLengthWords":r})}}finally{t.restore()}}}class W extends y{get splitter(){return null===this._splitter&&(this._splitter=_(this.column)),this._splitter}toFasta(t){return"fasta"===t}toSeparator(t){return"separator"===t}toHelm(t){return"helm"===t}convertFastaToSeparator(t,e=null){null===e&&(e=this.defaultGapSymbol);const n=this.getNewColumn("separator",t);return n.init((n=>{const r=this.column.get(n),s=this.splitter(r);for(let t=0;t<s.length;t++)s[t]===e&&(s[t]=y._defaultGapSymbolsDict.SEPARATOR);return s.join(t)})),n.setTag(s.TAGS.UNITS,"separator"),n}getHelmWrappers(){return[this.isDna()?"DNA1{":this.isRna()||this.isHelmCompatible()?"RNA1{":"PEPTIDE1{",this.isDna()?"D(":this.isRna()?"R(":"",this.isDna()||this.isRna()?")P":"","}$$$$"]}convertToHelmHelper(t,e,n,r,s,o){return`${n}${this.splitter(t).map((t=>t&&t!==e?1==t.length?`${r}${t}${s}`:`${r}[${t}]${s}`:y._defaultGapSymbolsDict.HELM)).join(".")}${o}`}convertStringToHelm(t,e=null){null===e&&(e=this.defaultGapSymbol);const[n,r,s,o]=this.getHelmWrappers();return this.convertToHelmHelper(t,e,n,r,s,o)}convertToHelm(t=null){null===t&&(t=this.defaultGapSymbol);const[e,n,r,o]=this.getHelmWrappers(),i=this.getNewColumn("helm");return i.init((s=>{const i=this.column.get(s);return this.convertToHelmHelper(i,t,e,n,r,o)})),i.setTag(s.TAGS.UNITS,"helm"),i}convertSeparatorToFasta(t=null){null===t&&(t=y._defaultGapSymbolsDict.FASTA);const e=this.getNewColumn("fasta");return e.init((e=>{const n=this.column.get(e),r=this.splitter(n),s=[];for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)s.push(t);else if(n.length>1){const t="["+n+"]";s.push(t)}else s.push(n)}return s.join("")})),e.setTag(s.TAGS.UNITS,"fasta"),e}convertHelmToFastaSeparator(t,e,n,r){r||(r=this.toFasta(e)?y._defaultGapSymbolsDict.FASTA:y._defaultGapSymbolsDict.SEPARATOR),n||(n=this.toFasta(e)?"":this.separator);const s=/(R\(|D\(|\)|P)/g,o=t.startsWith("DNA")||t.startsWith("RNA"),i=this.splitter(t),l=[];for(let t=0;t<i.length;t++){let n=i[t];if(o&&(n=n.replace(s,"")),n===y._defaultGapSymbolsDict.HELM)l.push(r);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";l.push(t)}else l.push(n)}return l.join(n)}convertHelm(t,e,n){const r=this.getNewColumn(t,e);r.init((r=>{const s=this.column.get(r);return this.convertHelmToFastaSeparator(s,t,e,n)})),_(r);const s=this.stats.sameLength?"SEQ.MSA":"SEQ";return r.setTag("aligned",s),r}convertHelmToSeparator(){return this.getNewColumn("separator")}convert(t,e=null){if(this.notation===t)throw new Error("tgt notation is invalid");if(this.toSeparator(t)&&null===e)throw new Error("tgt separator is not specified");if(this.isFasta()&&this.toSeparator(t)&&null!==e)return this.convertFastaToSeparator(e);if((this.isFasta()||this.isSeparator())&&this.toHelm(t))return this.convertToHelm();if(this.isSeparator()&&this.toFasta(t))return this.convertSeparatorToFasta();if(this.isHelm()&&this.toFasta(t))return this.convertHelm(t);if(this.isHelm()&&this.toSeparator(t))return this.convertHelm(t,e);throw new Error(`Not supported conversion from source notation '${this.notation}' to target notation '${t}'.`)}constructor(t){super(t),this._splitter=null}}var j=function(t,e,n,r){return new(n||(n=Promise))((function(s,o){function i(t){try{a(r.next(t))}catch(t){o(t)}}function l(t){try{a(r.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,l)}a((r=r.apply(t,e||[])).next())}))};const z=new s.Package;let Y=null;function B(){return j(this,void 0,void 0,(function*(){return Promise.all([new Promise(((t,e)=>{dojo.ready((function(){t(null)}))})),n.functions.call("Bio:getBioLib")]).then((([t,e])=>{Y=e,V(),Y.onChanged.subscribe((t=>{try{V();const t=Y.getPolymerTypes(),e="Monomer lib updated:<br />"+(0==t.length?"empty":t.map((t=>`${t} ${Y.getMonomerSymbolsByType(t).length}`)).join("<br />"));n.shell.info(e)}catch(t){const e=$(t);console.error("Helm: initHelm monomerLib.onChanged() error:\n"+e)}}))})).catch((t=>{const e=t instanceof Error?t.message:t?t.toString():"Exception 'undefined'";n.shell.error(`Package 'Helm' init initHelm() error: ${e}`);const r=new Error(e);throw r.stack=t.stack,r}))}))}function V(){org.helm.webeditor.Monomers.clear(),Y.getPolymerTypes().forEach((t=>{Y.getMonomerSymbolsByType(t).forEach((e=>{let n=!1;const r=Y.getMonomer(t,e),s={id:e,m:r.molfile,n:r.name,na:r.naturalAnalog,rs:r.rgroups.length,type:r.polymerType,mt:r.monomerType,at:{}};if(r.rgroups.length>0){s.rs=r.rgroups.length;const t={};r.rgroups.forEach((e=>{t[e.label]=e.capGroupName})),s.at=t}else null!=r.smiles?(s.rs=Object.keys(Z(r.smiles.toString())).length,s.at=Z(r.smiles.toString())):n=!0;n||org.helm.webeditor.Monomers.addOneMonomer(s)}))}));const t=n.shell.tv.grid;t&&t.invalidate()}function q(){return new k}function Q(t,e,s){const o=a(void 0===s?t.value:e);0==o.size?function(t,e,s){const o=r.div(),i=n.shell.tv.grid.dataFrame,l=new W(i.columns.bySemType("Macromolecule"));org.helm.webeditor.MolViewer.molscale=.8;const a=new scil.helm.App(o,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),h=a.calculateSizes();a.canvas.resize(h.rightwidth-100,h.topheight-210);let c={width:h.rightwidth-100+"px",height:h.bottomheight+"px"};scil.apply(a.sequence.style,c),scil.apply(a.notation.style,c),c={width:h.rightwidth+"px",height:h.bottomheight+a.toolbarheight+"px"},scil.apply(a.properties.parent.style,c),a.structureview.resize(h.rightwidth,h.bottomheight+a.toolbarheight),a.mex.resize(h.topheight-80),setTimeout((()=>{void 0===s?a.canvas.helm.setSequence(t.value,"HELM"):a.canvas.helm.setSequence(e,"HELM")}),200),r.dialog({showHeader:!1,showFooter:!0}).add(o).onOK((()=>{const e=a.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");if(void 0===s)t.value=e;else{const n=l.convertHelmToFastaSeparator(e,s);t.value=n}})).show({modal:!0,fullScreen:!0})}(t,e,s):n.shell.warning(`Monomers ${Array.from(o).join(", ")} are absent! <br/>Please, upload the monomer library! <br/><a href="https://datagrok.ai/help/domains/bio/macromolecules" target="_blank">Learn more</a>`)}function K(t){Q(t.cell,void 0,void 0)}function J(t){const e=n.shell.tv.grid.dataFrame,r=e.columns.bySemType("Macromolecule");"helm"===r.getTag(s.TAGS.UNITS)&&Q(e.currentCell,void 0,void 0);const o=new W(r).convertStringToHelm(t,"/");Q(e.currentCell,o,r.getTag(s.TAGS.UNITS))}function X(t){return j(this,void 0,void 0,(function*(){const e=n.shell.tv.grid.root.parentElement,o=r.div([]);e.appendChild(o);const i=new JSDraw2.Editor(o,{viewonly:!0});o.style.width="0px",o.style.height="0px",i.setHelm(t);const l=i.getFormula(!0),a=Math.round(100*i.getMolWeight())/100,h=Math.round(100*i.getExtinctionCoefficient(!0))/100;return e.lastChild.remove(),new s.Widget(r.tableFromMap({formula:l.replace(/<sub>/g,"").replace(/<\/sub>/g,""),"molecular weight":a,"extinction coefficient":h}))}))}function Z(t){const e=t.match(/(?<=\[)[^\][]*(?=])/gm),n={};let r,s="";for(let t=0;t<e.length;t++)if(null!=e[t]&&/\d/.test(e[t])){r=e[t][e[t].length-1],e[t]=e[t].replace(/[0-9]/g,"");for(let n=0;n<e[t].length;n++)":"!=e[t][n]&&(s+=e[t][n]);n["R"+r]=s,s=""}return n}function tt(t){const e=n.shell.tv.grid.root.parentElement,o=s.Column.string("mols",t.length),i=r.div([]);e.appendChild(i);const l=new JSDraw2.Editor(i,{viewonly:!0});return i.style.width="0px",i.style.height="0px",o.init((e=>(l.setHelm(t.get(e)),l.getMolfile()))),e.lastChild.remove(),o}function et(){return new o}helm=e})();
1
+ var helm;(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{_package:()=>z,editMoleculeCell:()=>K,getMolfiles:()=>tt,helmCellRenderer:()=>q,helmWebEditor:()=>et,initHelm:()=>B,openEditor:()=>J,propertiesPanel:()=>X});const n=grok,r=ui,s=DG;class o{constructor(){this.w=200,this.h=100,this.host=r.div([],{style:{width:`${this.w}px`,height:`${this.h}px`}}),this.editor=new JSDraw2.Editor(this.host,{width:this.w,height:this.h,viewonly:!0})}resizeEditor(t,e){this.editor.setSize(t,e)}createWebEditor(t){const e=r.div();org.helm.webeditor.MolViewer.molscale=.8;const n=new scil.helm.App(e,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),s=n.calculateSizes();n.canvas.resize(s.rightwidth-100,s.topheight-210);let o={width:s.rightwidth-100+"px",height:s.bottomheight+"px"};return scil.apply(n.sequence.style,o),scil.apply(n.notation.style,o),o={width:s.rightwidth+"px",height:s.bottomheight+n.toolbarheight+"px"},scil.apply(n.properties.parent.style,o),n.structureview.resize(s.rightwidth,s.bottomheight+n.toolbarheight),n.mex.resize(s.topheight-80),setTimeout((function(){n.canvas.helm.setSequence(t,"HELM")}),200),{editorDiv:e,webEditor:n}}}function i(t,e){const n=[];for(let r=0;r<t.length;++r){const s=e.indexOf(t[r]),o=e.slice(0,s);n.push(o),n.push(t[r]),e=e.substring(s+t[r].length)}return n.push(e),n}function l(t){t=h(t,"$")[0];const e=[];if(!scil.Utils.isNullOrEmpty(t)){const n=h(t,"|");for(let r=0;r<n.length;++r){let s=(t=c(n[r]).str).indexOf("{");s=(t=t.substring(s+1)).indexOf("}");const o=h(t=t.substring(0,s),".");for(const t of o)if(t&&""!==t)if(t.startsWith("[")&&t.includes("]")){const n=t.substring(1,t.indexOf("]"));e.push(n);const r=t.substring(t.indexOf("]")+1);o.push(r)}else if(t.includes("[")&&t.endsWith("]")){const n=t.substring(t.lastIndexOf("[")+1,t.length-1);e.push(n);const r=t.substring(0,t.lastIndexOf("["));o.push(r)}else if(t.includes("(")&&t.includes(")")){const e=t.substring(0,t.indexOf("(")),n=t.substring(t.lastIndexOf(")")+1),r=[e,t.substring(e.length+1,t.length-n.length-1),n];for(const t of r)o.push(t)}else e.push(t)}}return e}function a(t){const e=Object.keys(org.helm.webeditor.monomerTypeList()),n=[],r=[];for(let t=0;t<e.length;t++)n.push(new scil.helm.Monomers.getMonomerSet(e[t])),Object.keys(n[t]).forEach((e=>{r.push(n[t][e].id)}));const s=l(t);return new Set(s.filter((t=>!r.includes(t))))}function h(t,e){const n=[];let r="",s=0,o=0,i=0,l=0;for(let a=0;a<t.length;++a){let h=t.substring(a,a+1);if(h==e&&0==o&&0==s&&0==i&&0==l)n.push(r),r="";else{if(r+=h,l>0&&"\\"==h&&a+1<t.length){++a;const e=t.substring(a,a+1);r+=e,h+=e}'"'==h?a>0&&"\\"==t.substring(a-1,a)||(l=0==l?1:0):"["==h?++o:"]"==h?--o:"("==h?++s:")"==h?--s:"{"==h?++i:"}"==h&&--i}}return n.push(r),n}function c(t){const e=u(t,'"');if(null!=e.tag)return e;const n=u(t,"'");return{tag:e.tag,repeat:n.tag,str:n.str}}function u(t,e){let n=null;if(scil.Utils.endswith(t,e)){let r=t.length-1;for(;r>0&&(r=t.lastIndexOf(e,r-1),!(r<=0||"\\"!=t.substring(r-1,r))););r>0&&r<t.length-1&&(n=t.substring(r+1,t.length-1),t=t.substring(0,r))}return null!=n&&(n=n.replace(new RegExp("\\"+e,"g"),e)),{tag:g(n),str:t}}function g(t){return scil.Utils.isNullOrEmpty(t)?t:t.replace(/[\\]./g,(function(t){switch(t){case"\\r":return"\r";case"\\n":return"\n";case"\\t":return"\t";default:return t.substring(1)}}))}wu;class m{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class p extends m{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}const f=/(\[[A-Za-z0-9-_]+\]|.)/g,C=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},d=[new m("PT",C.fasta.peptide,.5),new m("DNA",C.fasta.dna,.55),new m("RNA",C.fasta.rna,.55)],b=new Uint32Array(65536),T={gapOpen:8,gapExtend:2,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var w;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch"}(w||(w={}));const S={[w.HAMMING]:function(){return(t,e)=>{let n=0;t.length!==e.length&&(n=Math.abs(t.length-e.length));let r=0;for(let n=0;n<Math.min(t.length,e.length);n++)t[n]!==e[n]&&r++;return r+=n,r/=Math.max(t.length,e.length),r}},[w.LEVENSHTEIN]:function(){return(t,e)=>((t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,r=e.length,s=1<<n-1;let o=-1,i=0,l=n,a=n;for(;a--;)b[t.charCodeAt(a)]|=1<<a;for(a=0;a<r;a++){let t=b[e.charCodeAt(a)];const n=t|i;t|=(t&o)+o^o,i|=~(t|o),o&=t,i&s&&l++,o&s&&l--,i=i<<1|1,o=o<<1|~(n|i),i&=n}for(a=n;a--;)b[t.charCodeAt(a)]=0;return l})(t,e):((t,e)=>{const n=e.length,r=t.length,s=[],o=[],i=Math.ceil(n/32),l=Math.ceil(r/32);for(let t=0;t<i;t++)o[t]=-1,s[t]=0;let a=0;for(;a<l-1;a++){let i=0,l=-1;const h=32*a,c=Math.min(32,r)+h;for(let e=h;e<c;e++)b[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=b[e.charCodeAt(t)],r=o[t/32|0]>>>t&1,a=s[t/32|0]>>>t&1,h=n|i,c=((n|a)&l)+l^l|n|a;let u=i|~(c|l),g=l&c;u>>>31^r&&(o[t/32|0]^=1<<t),g>>>31^a&&(s[t/32|0]^=1<<t),u=u<<1|r,g=g<<1|a,l=g|~(h|u),i=u&h}for(let e=h;e<c;e++)b[t.charCodeAt(e)]=0}let h=0,c=-1;const u=32*a,g=Math.min(32,r-u)+u;for(let e=u;e<g;e++)b[t.charCodeAt(e)]|=1<<e;let m=r;for(let t=0;t<n;t++){const n=b[e.charCodeAt(t)],i=o[t/32|0]>>>t&1,l=s[t/32|0]>>>t&1,a=n|h,u=((n|l)&c)+c^c|n|l;let g=h|~(u|c),p=c&u;m+=g>>>r-1&1,m-=p>>>r-1&1,g>>>31^i&&(o[t/32|0]^=1<<t),p>>>31^l&&(s[t/32|0]^=1<<t),g=g<<1|i,p=p<<1|l,c=p|~(a|g),h=g&a}for(let e=u;e<g;e++)b[t.charCodeAt(e)]=0;return m})(t,e)})(t,e)/Math.max(t.length,e.length)},[w.NEEDLEMANN_WUNSCH]:function(t){return(e,n)=>{const{gapOpen:r,gapExtend:s,scoringMatrix:o,alphabetIndexes:i}={...T,...t},l=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)],a=new Array(e.length+1).fill(!1),h=new Array(e.length+1).fill(!1);let c=0,u=1;for(let t=1;t<e.length+1;t++)l[0][t]=-r-(t-1)*s;for(let t=1;t<n.length+1;t++){l[u][0]=-r-(t-1)*s;for(let g=1;g<e.length+1;g++){const m=l[c][g-1]+o[i[e[g-1]]][i[n[t-1]]],p=l[c][g]-(a[g]?s:r),f=l[u][g-1]-(h[g-1]?s:r);l[u][g]=Math.max(m,f,p),l[u][g]===m?(a[g]=!1,h[g]=!1):l[u][g]===f?(a[g]=!1,h[g]=!0):(a[g]=!0,h[g]=!1)}c=u,u=(u+1)%2}const g=e.split("").map((t=>o[i[t]][i[t]])).reduce(((t,e)=>t+e),0),m=n.split("").map((t=>o[i[t]][i[t]])).reduce(((t,e)=>t+e),0),p=Math.max(g,m);return(p-l[c][e.length])/p}}},A=new class{constructor(){this.uhTemp=`units-handler.${s.SEMTYPE.MACROMOLECULE}`}};class y{static setUnitsToFastaColumn(t){if(t.column.semType!==s.SEMTYPE.MACROMOLECULE||"fasta"!==t.column.getTag(s.TAGS.UNITS))throw new Error(`The column of notation 'fasta' must be '${s.SEMTYPE.MACROMOLECULE}'.`);t.column.setTag(s.TAGS.UNITS,"fasta"),y.setTags(t)}static setUnitsToSeparatorColumn(t,e){if(t.column.semType!==s.SEMTYPE.MACROMOLECULE||"separator"!==t.column.getTag(s.TAGS.UNITS))throw new Error(`The column of notation 'separator' must be '${s.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error("The column of notation 'separator' must have the separator tag.");t.column.setTag(s.TAGS.UNITS,"separator"),t.column.setTag("separator",e),y.setTags(t)}static setUnitsToHelmColumn(t){if(t.column.semType!==s.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation 'helm' must be '${s.SEMTYPE.MACROMOLECULE}'`);t.column.setTag(s.TAGS.UNITS,"helm"),y.setTags(t)}static setTags(t){const e=t.column.getTag(s.TAGS.UNITS),n=t.stats;if(Object.keys(n.freq).some((t=>t.length>1)),["fasta","separator"].includes(e)){if(0===Object.keys(n.freq).length)throw new Error("Alphabet is empty");const e=n.sameLength?"SEQ.MSA":"SEQ";t.column.setTag("aligned",e);const r=function(t,e,n="-"){const r=e.map((e=>{const r=function(t,e,n="-"){const r=new Set([...new Set(Object.keys(t)),...e]);r.delete(n);const s=[],o=[];for(const n of r)s.push(n in t?t[n]:0),o.push(e.has(n)?1:0);const i=new E(s),l=new E(o);return function(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let r=0;r<t.length;r++)n+=t[r]*e[r];return n}(i,l)/(M(i)*M(l))}(t,e.alphabet,n);return new p(e,t,r)}));let s;const o=Math.max(...r.map((t=>t.similarity>t.cutoff?t.similarity:-1)));s=o>0?r.find((t=>t.similarity===o)).name:"UN";return s}(n.freq,d);if(t.column.setTag("alphabet",r),"UN"===r){const e=Object.keys(n.freq).length,r=Object.keys(n.freq).some((t=>t.length>1));t.column.setTag(".alphabetSize",e.toString()),t.column.setTag(".alphabetIsMultichar",r?"true":"false")}}}get column(){return this._column}get units(){return this._units}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){const t=this.column.getTag("separator")??void 0;if("separator"===this.notation&&void 0===t)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return t}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if("helm"==this.notation||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=this.stats;e=Object.keys(t.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return"helm"===this.notation||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}get splitted(){if(null===this._splitted){const t=this.getSplitter(),e=this._column.length;this._splitted=new Array(e);const n=this._column.getRawData(),r=this._column.categories;for(let s=0;s<e;s++){const e=r[n[s]];this._splitted[s]=t(e)}}return this._splitted}get stats(){if(null===this._stats){const t={};let e=!0,n=null;for(const r of this.splitted){null==n?n=r.length:r.length!==n&&(e=!1);for(const e of r)e in t||(t[e]=0),t[e]+=1}this._stats={freq:t,sameLength:e}}return this._stats}isFasta(){return"fasta"===this.notation}isSeparator(){return"separator"===this.notation}isHelm(){return"helm"===this.notation}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}getNotation(){if(this.units.toLowerCase().startsWith("fasta"))return"fasta";if(this.units.toLowerCase().startsWith("separator"))return"separator";if(this.units.toLowerCase().startsWith("helm"))return"helm";throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getNewColumn(t,e){const n=this.column,r=n.length,o=t.toLowerCase()+"("+n.name+")",i=n.dataFrame.columns.getUnusedName(o),l=s.Column.fromList("string",i,new Array(r).fill(""));if(l.semType=s.SEMTYPE.MACROMOLECULE,l.setTag(s.TAGS.UNITS,t),"separator"===t){if(!e)throw new Error("Notation 'separator' requires separator value.");l.setTag("separator",e)}l.setTag(s.TAGS.CELL_RENDERER,"Macromolecule");const a=n.getTag("aligned");a&&l.setTag("aligned",a);const h=n.getTag("alphabet");h&&l.setTag("alphabet",h);let c=n.getTag(".alphabetSize");c&&l.setTag(".alphabetSize",c);const u=n.getTag(".alphabetIsMultichar");return void 0!==u&&l.setTag(".alphabetIsMultichar",u),"helm"==t&&(c=this.getAlphabetSize().toString(),l.setTag(".alphabetSize",c)),l}static getNewColumn(t){const e=y.getOrCreate(t),n=e.notation;return e.getNewColumn(n)}static unitsStringIsValid(t){return t=t.toLowerCase(),["fasta","separator","helm"].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!y.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const r=s.Column.fromList("string",e,new Array(t).fill(""));return r.semType=s.SEMTYPE.MACROMOLECULE,r.setTag(s.TAGS.UNITS,n),r}getSplitter(){return _(this._column)}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return w.HAMMING;switch(this.alphabet){case"DNA":case"RNA":default:return w.LEVENSHTEIN;case"PT":return w.NEEDLEMANN_WUNSCH}}getDistanceFunction(){return S[this.getDistanceFunctionName()]()}async checkHelmCompatibility(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(await async function(){const t=s.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installed for MonomerLibHelper.');return(await t[0].prepare().call()).getOutputParamValue()}()).getBioLib().getMonomerSymbolsByType("PEPTIDE".toString()),e=new Set(t),n=P(this.separator);for(const t of this.column.categories){const r=n(t);for(const t of r)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0}constructor(t){if(this._splitted=null,this._stats=null,t.type!=s.TYPE.STRING)throw new Error(`Unexpected column type '${t.type}', must be '${s.TYPE.STRING}'.`);this._column=t;const e=this._column.getTag(s.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?y._defaultGapSymbolsDict.FASTA:this.isHelm()?y._defaultGapSymbolsDict.HELM:y._defaultGapSymbolsDict.SEPARATOR,!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())y.setUnitsToFastaColumn(this);else if(this.isSeparator()){const e=t.getTag("separator");y.setUnitsToSeparatorColumn(this,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(s.TAGS.UNITS)}'.`);y.setUnitsToHelmColumn(this)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}static getOrCreate(t){return A.uhTemp in t.temp||(t.temp[A.uhTemp]=new y(t)),t.temp[A.uhTemp]}}y._defaultGapSymbolsDict={HELM:"*",SEPARATOR:"",FASTA:"-"};class E extends Float32Array{}function M(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}class N{static makePalette(t,e=!1,n=N){const r={};return t.forEach((t=>{const n=t[0],s=t[1];n.forEach(((t,n)=>{r[t]=this.colourPalette[s][e?0:n]}))})),new n(r)}constructor(t){this._palette=t}get(t){return this._palette[t]}}N.undefinedColor="rgb(100,100,100)",N.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]};class v extends N{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,v)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,v)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new v({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in v.aaSynonyms?v.aaSynonyms[t]:t;return super.get(e)}}v.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class O{static getPalette(t="grok"){switch(t){case"grok":return v.GrokGroups;case"lesk":return v.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",r="";for(const s of t)"("==s?e++:")"==s?e--:e?n+=s:r+=s;return isNaN(parseInt(n))?[r,n]:[r,""]}static getColorAAPivot(t="",e="grok"){const n=this.getPalette(e);let[r,s]=this.getInnerOuter(t);if(r=r.length>6?`${r.slice(0,3)}...`:r,s=s.length>6?`${s.slice(0,3)}...`:s,1==t.length||"("==t[1]){const e=t[0]?.toUpperCase();return e in n?[n.get(e),e,s,1]:[this.undefinedColor,r,s,1]}if("d"==t[0]&&t[1]in n&&(2==t.length||"("==t[2])){const e=t[1]?.toUpperCase();return e in n?[n.get(e),e,s,2]:[this.undefinedColor,r,s,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in n?[n.get(e),e,s,3]:[this.undefinedColor,r,s,3]}if(t[0]?.toLowerCase()==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in n?[n.get(e),e,s,4]:[this.undefinedColor,r,s,4]}return[this.undefinedColor,r,s,0]}}O.SemType="Aminoacids",O.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",O.undefinedColor="rgb(100,100,100)",O.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},O.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},O.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},O.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"};class H{}H.SemType="Nucleotides",H.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",H.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"};class x extends class{}{static buildPalette(){return[].concat(...Object.values(N.colourPalette))}get(t){const e=class{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}.hashCode(t)%x.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=s.Color.fromHtml(t),n=s.Color.g(e),r=s.Color.r(e),o=s.Color.b(e),i=Math.sqrt(Math.pow(0-r,2)+Math.pow(0-n,2)+Math.pow(0-o,2));return i>210?`rgb(${r/i*210},${n/i*210},${o/i*210})`:s.Color.toRgb(e)}(x.palette[e])}}function L(t){return t.toString().replace(f,".$1").slice(1).split(".").map((t=>t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):"-"===t?"":t))}function P(t,e){return n=>n.split(t,e)}x.palette=x.buildPalette();const G=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,F=/\[([^\[\]]+)]/g;function I(t){G.lastIndex=0;const e=G.exec(t.toString()),n=e?e[2]:null;return(n?n.split("."):[]).map((t=>{F.lastIndex=0;const e=F.exec(t);return e&&e.length>=2?e[1]:t}))}function _(t){if(t.semType!==s.SEMTYPE.MACROMOLECULE)throw new Error(`Get splitter for semType "${s.SEMTYPE.MACROMOLECULE}" only.`);return function(t,e,n){if(t.toLowerCase().startsWith("fasta"))return L;if(t.toLowerCase().startsWith("separator"))return P(e,void 0);if(t.toLowerCase().startsWith("helm"))return I;throw new Error(`Unexpected units ${t} .`)}(t.getTag(s.TAGS.UNITS),t.getTag("separator"))}const U=/(\w+)/g;var D;function R(t,e,n,r,s,o,i="rgb(100,100,100)",l=0,a=!1,h=1,c="",u=!1,g=D.classic,m=[],p=0,f=null,C=[],d=null,b={}){s.textAlign="start";let T=o.substring(0),w=u?"":c;g===D.MSA&&(w="");let S=!0,A=!0,y="difference";null!=f&&null!=f.cell.column&&(S=f.cell.column.temp["color-code"]??!0,A=f.cell.column.temp["compare-with-current"]??!0,y=f.cell.column.temp["highlight-difference"]??"difference");const E=C[p];A&&C.length>0&&"difference"===y&&(h=T==E?.3:h),A&&C.length>0&&"equal"===y&&(h=T!=E?.3:h),null!=d&&(T=function(t,e){if(t.length<=e)return t;const n=t.match(U),r=t.length>e||(n?.length??0)>1,s=n?.[0]??" ";return r?s.substring(0,e)+"…":s}(T,d));const M=T+w;b[M]??(b[M]=s.measureText(M));let N=b[M];b[T]??(b[T]=s.measureText(T));let v=b[T].width;b[w]??(b[w]=s.measureText(w));const O=b[w].width,H=r/2-(N.fontBoundingBoxAscent+N.fontBoundingBoxDescent)/2+1;function x(n,r){const o=S?i:"rgb(0,0,0)";s.fillStyle=o,s.globalAlpha=h,g===D.classic&&(s.fillText(T,t+n,e+H),s.fillStyle="#808080",s.fillText(w,t+r,e+H)),g===D.MSA&&s.fillText(T,t+n,e+H)}N=N.width,g===D.MSA&&(v=m[p],N=m[p]);const L=(m[p]??0)-(m[0]??0);if(a||N>n)return x(L,L+v),t+L+v+O;{const e=(n-N)/2;return x(e,e+v),t+L+e+v}}function $(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?$(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}!function(t){t.MSA="MSA",t.classic="classic"}(D||(D={}));class k extends s.GridCellRenderer{get name(){return"helm"}get cellType(){return"helm"}get defaultWidth(){return 400}get defaultHeight(){return 100}onMouseMove(t,e){var n,s,o,h;try{let c=null;try{c=t.tableColumn}catch(t){}if(!c)return;const u=null!==(n=c.temp)&&void 0!==n?n:new Array(c.length);if(!u||0==Object.keys(u).length)return;const g=u["helm-sum-maxLengthWords"],m=u["helm-maxLengthWords"],p=Object.values(m).length-1,f=e.offsetX-t.gridColumn.left+(t.gridColumn.left-t.bounds.x);let C=0,d=p,b=!1;g[p+1]=f+1;let T=0;if(f>g[0])for(;!b;)T=Math.floor((d+C)/2),f>=g[T]&&f<=g[T+1]?(C=T,b=!0):f<g[T]?d=T-1:f>g[T+1]&&(C=T+1),C==d&&(b=!0);C=f>=g[C]?C+1:C;const w=a(t.cell.value),S=null!==(s=t.cell.value)&&void 0!==s?s:"",A=i(l(S),S),y=[];for(let t=0;t<A.length;++t)w.has(A[t])&&(y[t]=r.divV([r.divText(`Monomer ${A[t]} not found.`),r.divText("Open the Context Panel, then expand Manage Libraries")]));(null!==(h=null===(o=y[C])||void 0===o?void 0:o.childNodes.length)&&void 0!==h?h:0)>0?r.tooltip.show(r.div(y[C]),e.x+16,e.y+16):r.tooltip.hide()}catch(t){const e=$(t);console.error("Helm: HelmCellRenderer.onMouseMove() error:\n"+e)}}render(t,e,n,s,o,h,c){var u,g;t.save();try{let c=null;try{c=h.tableColumn}catch(t){}if(!c)return;const m=-1!==h.gridRow?h.grid:void 0,p="rgb(100,100,100)",f="#808080",C=a(h.cell.value),d=null!==(u=h.cell.value)&&void 0!==u?u:"",b=l(d);if(0==C.size){const t=r.div([],{style:{width:`${s}px`,height:`${o}px`}});return t.setAttribute("dataformat","helm"),t.setAttribute("data",h.cell.value),h.element=t,void new JSDraw2.Editor(t,{width:s,height:o,skin:"w8",viewonly:!0})}if(C.size>0){if(!m){const e=window.devicePixelRatio;o=28,t.canvas.height=o*e,t.canvas.style.height=`${o}px`}const r=null!==(g=c.temp["helm-maxLengthWords"])&&void 0!==g?g:[];b.length>r.length&&r.push(...new Array(b.length-r.length).fill(-1)),s=m?Math.min(m.canvas.width-e,s):t.canvas.width-e,t.save(),t.beginPath(),t.rect(e,n,s,o),t.clip(),t.font="12px monospace",t.textBaseline="top";let l=e;const a=i(b,d);for(let e=0;e<a.length;++e){r[e]=Math.max(r[e],7*a[e].length);const i=C.has(a[e])?"red":f;t.fillStyle=p,l=R(l,n,s,o,t,a[e],i,0,!0,1)}const h=new Array(r.length);h[0]=r[0];for(let t=1;t<a.length;t++)h[t]=h[t-1]+r[t];return void(c.temp={"helm-sum-maxLengthWords":h,"helm-maxLengthWords":r})}}finally{t.restore()}}}class W extends y{get splitter(){return null===this._splitter&&(this._splitter=_(this.column)),this._splitter}toFasta(t){return"fasta"===t}toSeparator(t){return"separator"===t}toHelm(t){return"helm"===t}convertFastaToSeparator(t,e=null){null===e&&(e=this.defaultGapSymbol);const n=this.getNewColumn("separator",t);return n.init((n=>{const r=this.column.get(n),s=this.splitter(r);for(let t=0;t<s.length;t++)s[t]===e&&(s[t]=y._defaultGapSymbolsDict.SEPARATOR);return s.join(t)})),n.setTag(s.TAGS.UNITS,"separator"),n}getHelmWrappers(){return[this.isDna()?"DNA1{":this.isRna()||this.isHelmCompatible()?"RNA1{":"PEPTIDE1{",this.isDna()?"D(":this.isRna()?"R(":"",this.isDna()||this.isRna()?")P":"","}$$$$"]}convertToHelmHelper(t,e,n,r,s,o){return`${n}${this.splitter(t).map((t=>t&&t!==e?1==t.length?`${r}${t}${s}`:`${r}[${t}]${s}`:y._defaultGapSymbolsDict.HELM)).join(".")}${o}`}convertStringToHelm(t,e=null){null===e&&(e=this.defaultGapSymbol);const[n,r,s,o]=this.getHelmWrappers();return this.convertToHelmHelper(t,e,n,r,s,o)}convertToHelm(t=null){null===t&&(t=this.defaultGapSymbol);const[e,n,r,o]=this.getHelmWrappers(),i=this.getNewColumn("helm");return i.init((s=>{const i=this.column.get(s);return this.convertToHelmHelper(i,t,e,n,r,o)})),i.setTag(s.TAGS.UNITS,"helm"),i}convertSeparatorToFasta(t=null){null===t&&(t=y._defaultGapSymbolsDict.FASTA);const e=this.getNewColumn("fasta");return e.init((e=>{const n=this.column.get(e),r=this.splitter(n),s=[];for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)s.push(t);else if(n.length>1){const t="["+n+"]";s.push(t)}else s.push(n)}return s.join("")})),e.setTag(s.TAGS.UNITS,"fasta"),e}convertHelmToFastaSeparator(t,e,n,r){r||(r=this.toFasta(e)?y._defaultGapSymbolsDict.FASTA:y._defaultGapSymbolsDict.SEPARATOR),n||(n=this.toFasta(e)?"":this.separator);const s=/(R\(|D\(|\)|P)/g,o=t.startsWith("DNA")||t.startsWith("RNA"),i=this.splitter(t),l=[];for(let t=0;t<i.length;t++){let n=i[t];if(o&&(n=n.replace(s,"")),n===y._defaultGapSymbolsDict.HELM)l.push(r);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";l.push(t)}else l.push(n)}return l.join(n)}convertHelm(t,e,n){const r=this.getNewColumn(t,e);r.init((r=>{const s=this.column.get(r);return this.convertHelmToFastaSeparator(s,t,e,n)})),_(r);const s=this.stats.sameLength?"SEQ.MSA":"SEQ";return r.setTag("aligned",s),r}convertHelmToSeparator(){return this.getNewColumn("separator")}convert(t,e=null){if(this.notation===t)throw new Error("tgt notation is invalid");if(this.toSeparator(t)&&null===e)throw new Error("tgt separator is not specified");if(this.isFasta()&&this.toSeparator(t)&&null!==e)return this.convertFastaToSeparator(e);if((this.isFasta()||this.isSeparator())&&this.toHelm(t))return this.convertToHelm();if(this.isSeparator()&&this.toFasta(t))return this.convertSeparatorToFasta();if(this.isHelm()&&this.toFasta(t))return this.convertHelm(t);if(this.isHelm()&&this.toSeparator(t))return this.convertHelm(t,e);throw new Error(`Not supported conversion from source notation '${this.notation}' to target notation '${t}'.`)}constructor(t){super(t),this._splitter=null}}var j=function(t,e,n,r){return new(n||(n=Promise))((function(s,o){function i(t){try{a(r.next(t))}catch(t){o(t)}}function l(t){try{a(r.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,l)}a((r=r.apply(t,e||[])).next())}))};const z=new s.Package;let Y=null;function B(){return j(this,void 0,void 0,(function*(){return Promise.all([new Promise(((t,e)=>{dojo.ready((function(){t(null)}))})),n.functions.call("Bio:getBioLib")]).then((([t,e])=>{Y=e,V(),Y.onChanged.subscribe((t=>{try{V();const t=Y.getPolymerTypes(),e="Monomer lib updated:<br />"+(0==t.length?"empty":t.map((t=>`${t} ${Y.getMonomerSymbolsByType(t).length}`)).join("<br />"));n.shell.info(e)}catch(t){const e=$(t);console.error("Helm: initHelm monomerLib.onChanged() error:\n"+e)}}))})).catch((t=>{const e=t instanceof Error?t.message:t?t.toString():"Exception 'undefined'";n.shell.error(`Package 'Helm' init initHelm() error: ${e}`);const r=new Error(e);throw r.stack=t.stack,r}))}))}function V(){org.helm.webeditor.Monomers.clear(),Y.getPolymerTypes().forEach((t=>{Y.getMonomerSymbolsByType(t).forEach((e=>{let n=!1;const r=Y.getMonomer(t,e),s={id:e,m:r.molfile,n:r.name,na:r.naturalAnalog,rs:r.rgroups.length,type:r.polymerType,mt:r.monomerType,at:{}};if(r.rgroups.length>0){s.rs=r.rgroups.length;const t={};r.rgroups.forEach((e=>{t[e.label]=e.capGroupName})),s.at=t}else null!=r.smiles?(s.rs=Object.keys(Z(r.smiles.toString())).length,s.at=Z(r.smiles.toString())):n=!0;n||org.helm.webeditor.Monomers.addOneMonomer(s)}))}));const t=n.shell.tv.grid;t&&t.invalidate()}function q(){return new k}function Q(t,e,s){const o=a(void 0===s?t.value:e);0==o.size?function(t,e,s){const o=r.div(),i=n.shell.tv.grid.dataFrame,l=new W(i.columns.bySemType("Macromolecule"));org.helm.webeditor.MolViewer.molscale=.8;const a=new scil.helm.App(o,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),h=a.calculateSizes();a.canvas.resize(h.rightwidth-100,h.topheight-210);let c={width:h.rightwidth-100+"px",height:h.bottomheight+"px"};scil.apply(a.sequence.style,c),scil.apply(a.notation.style,c),c={width:h.rightwidth+"px",height:h.bottomheight+a.toolbarheight+"px"},scil.apply(a.properties.parent.style,c),a.structureview.resize(h.rightwidth,h.bottomheight+a.toolbarheight),a.mex.resize(h.topheight-80),setTimeout((()=>{void 0===s?a.canvas.helm.setSequence(t.value,"HELM"):a.canvas.helm.setSequence(e,"HELM")}),200),r.dialog({showHeader:!1,showFooter:!0}).add(o).onOK((()=>{const e=a.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");if(void 0===s)t.value=e;else{const n=l.convertHelmToFastaSeparator(e,s);t.value=n}})).show({modal:!0,fullScreen:!0})}(t,e,s):n.shell.warning(`Monomers ${Array.from(o).join(", ")} are absent! <br/>Please, upload the monomer library! <br/><a href="https://datagrok.ai/help/domains/bio/macromolecules" target="_blank">Learn more</a>`)}function K(t){Q(t.cell,void 0,void 0)}function J(t){const e=n.shell.tv.grid.dataFrame,r=e.columns.bySemType("Macromolecule");"helm"===r.getTag(s.TAGS.UNITS)&&Q(e.currentCell,void 0,void 0);const o=new W(r).convertStringToHelm(t,"/");Q(e.currentCell,o,r.getTag(s.TAGS.UNITS))}function X(t){return j(this,void 0,void 0,(function*(){const e=n.shell.tv.grid.root.parentElement,o=r.div([]);e.appendChild(o);const i=new JSDraw2.Editor(o,{viewonly:!0});o.style.width="0px",o.style.height="0px",i.setHelm(t);const l=i.getFormula(!0),a=Math.round(100*i.getMolWeight())/100,h=Math.round(100*i.getExtinctionCoefficient(!0))/100;return e.lastChild.remove(),new s.Widget(r.tableFromMap({formula:l.replace(/<sub>/g,"").replace(/<\/sub>/g,""),"molecular weight":a,"extinction coefficient":h}))}))}function Z(t){const e=t.match(/(?<=\[)[^\][]*(?=])/gm),n={};let r,s="";for(let t=0;t<e.length;t++)if(null!=e[t]&&/\d/.test(e[t])){r=e[t][e[t].length-1],e[t]=e[t].replace(/[0-9]/g,"");for(let n=0;n<e[t].length;n++)":"!=e[t][n]&&(s+=e[t][n]);n["R"+r]=s,s=""}return n}function tt(t){const e=n.shell.tv.grid.root.parentElement,o=s.Column.string("mols",t.length),i=r.div([]);e.appendChild(i);const l=new JSDraw2.Editor(i,{viewonly:!0});return i.style.width="0px",i.style.height="0px",o.init((e=>(l.setHelm(t.get(e)),l.getMolfile()))),e.lastChild.remove(),o}function et(){return new o}helm=e})();
2
2
  //# sourceMappingURL=package.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","mappings":"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","sources":["webpack://helm/webpack/bootstrap","webpack://helm/webpack/runtime/define property getters","webpack://helm/webpack/runtime/hasOwnProperty shorthand","webpack://helm/webpack/runtime/make namespace object","webpack://helm/external var \"grok\"","webpack://helm/external var \"ui\"","webpack://helm/external var \"DG\"","webpack://helm/./src/helm-web-editor.ts","webpack://helm/./src/utils.ts","webpack://helm/external var \"wu\"","webpack://helm/types.ts","webpack://helm/consts.ts","webpack://helm/./node_modules/fastest-levenshtein/esm/mod.js","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.ts","webpack://helm/units-handler.ts","webpack://helm/utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/vector-operations.ts","webpack://helm/monomer-utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/type-declarations.ts","webpack://helm/seq-palettes.ts","webpack://helm/aminoacids.ts","webpack://helm/nucleotides.ts","webpack://helm/unknown.ts","webpack://helm/cell-renderer.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/to-console.ts","webpack://helm/./src/cell-renderer.ts","webpack://helm/notation-converter.ts","webpack://helm/./src/package.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = grok;","const __WEBPACK_NAMESPACE_OBJECT__ = ui;","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nexport class HelmWebEditor {\n host: any;\n editor: any;\n w = 200;\n h = 100;\n constructor() {\n this.host = ui.div([], {style: {width: `${this.w}px`, height: `${this.h}px`}});\n this.editor = new JSDraw2.Editor(this.host, {width: this.w, height: this.h, viewonly: true});\n }\n\n resizeEditor(w: number, h: number) {\n this.editor.setSize(w, h);\n }\n\n createWebEditor(value: string) {\n const editorView = ui.div();\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const webEditor = new scil.helm.App(editorView, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = webEditor.calculateSizes();\n webEditor.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(webEditor.sequence.style, s);\n //@ts-ignore\n scil.apply(webEditor.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + webEditor.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(webEditor.properties.parent.style, s);\n webEditor.structureview.resize(sizes.rightwidth, sizes.bottomheight + webEditor.toolbarheight);\n webEditor.mex.resize(sizes.topheight - 80);\n setTimeout(function() {\n webEditor.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n return {editorDiv: editorView, webEditor: webEditor};\n }\n}\n\n","import * as DG from 'datagrok-api/dg';\nimport {\n RGROUP_CAP_GROUP_NAME,\n RGROUP_CAP_GROUP_SMILES,\n jsonSdfMonomerLibDict,\n MONOMER_SYMBOL,\n RGROUP_ALTER_ID,\n RGROUPS,\n RGROUP_LABEL,\n SDF_MONOMER_NAME\n} from './constants';\n\nexport function getParts(subParts: string[], s: string): string[] {\n const j = 0;\n const allParts: string[] = [];\n for (let k = 0; k < subParts.length; ++k) {\n const indexOfMonomer = s.indexOf(subParts[k]);\n const helmBeforeMonomer = s.slice(j, indexOfMonomer);\n allParts.push(helmBeforeMonomer);\n allParts.push(subParts[k]);\n s = s.substring(indexOfMonomer + subParts[k].length);\n }\n allParts.push(s);\n return allParts;\n}\n\nexport function parseHelm(s: string) {\n const sections = split(s, '$');\n s = sections[0];\n const monomers = [];\n //@ts-ignore\n if (!scil.Utils.isNullOrEmpty(s)) {\n const seqs = split(s, '|');\n for (let i = 0; i < seqs.length; ++i) {\n const e = detachAnnotation(seqs[i]);\n s = e.str;\n\n let p = s.indexOf('{');\n\n s = s.substring(p + 1);\n p = s.indexOf('}');\n s = s.substring(0, p);\n\n const ss = split(s, '.');\n for (const monomer of ss) {\n if (!monomer || monomer === '') continue;\n if (monomer.startsWith('[') && monomer.includes(']')) {\n const element = monomer.substring(1, monomer.indexOf(']'));\n monomers.push(element);\n const residue = monomer.substring(monomer.indexOf(']') + 1);\n ss.push(residue);\n } else if (monomer.includes('[') && monomer.endsWith(']')) {\n const element = monomer.substring(monomer.lastIndexOf('[') + 1, monomer.length - 1);\n monomers.push(element);\n const residue = monomer.substring(0, monomer.lastIndexOf('['));\n ss.push(residue);\n } else if (monomer.includes('(') && monomer.includes(')')) {\n // here we only want to split the string at first '(' and last ')'\n // because entries like [L-hArg(Et,Et)]([L-hArg(Et,Et)]) where L-hArg(Et,Et) is a single monomer\n const firstPiece = monomer.substring(0, monomer.indexOf('('));\n const thirdPiece = monomer.substring(monomer.lastIndexOf(')') + 1);\n const secondPiece = monomer.substring(firstPiece.length + 1, monomer.length - thirdPiece.length - 1);\n const elements =[firstPiece, secondPiece, thirdPiece];\n for (const el of elements)\n ss.push(el);\n } else {\n monomers.push(monomer);\n }\n }\n }\n }\n return monomers;\n}\n\n// /** Find monomers missed in Helm monomer library configured and\n// * used in org.helm.webeditor / scil.helm.Monomers / org.helm.webeditor.Monomers .\n// */\n// export function findMonomers(helmString: string) {\n// //@ts-ignore\n// const types: string[] = Object.keys(org.helm.webeditor.monomerTypeList());\n// const monomerNameList: any[] = [];\n// const monomerNameI: number = 0;\n// const weMonomers = org.helm.webeditor.Monomers;\n// for (let typeI = 0; typeI < types.length; typeI++) {\n// //@ts-ignore\n// const ofTypeMonomers: {} = weMonomers.getMonomerSet(types[typeI]) ?? {};\n// Object.keys(ofTypeMonomers).forEach((key) => {\n// const monomer: any = ofTypeMonomers[key];\n// monomerNameList[monomerNameI] = monomer.id;\n// monomerNameI += 1;\n// });\n// }\n// const helmPartList = parseHelm(helmString);\n// return new Set(helmPartList.filter((val) => !monomerNameList.includes(val)));\n// }\n\nexport function findMonomers(helmString: string) {\n //@ts-ignore\n const types = Object.keys(org.helm.webeditor.monomerTypeList());\n const monomers: any = [];\n const monomerNames: any = [];\n for (let i = 0; i < types.length; i++) {\n //@ts-ignore\n // eslint-disable-next-line new-cap\n monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));\n Object.keys(monomers[i]).forEach((k) => {\n monomerNames.push(monomers[i][k].id);\n });\n }\n const splitString = parseHelm(helmString);\n return new Set(splitString.filter((val) => !monomerNames.includes(val)));\n}\n\nfunction split(s: string, sep: string) {\n const ret = [];\n let frag = '';\n let parentheses = 0;\n let bracket = 0;\n let braces = 0;\n let quote = 0;\n for (let i = 0; i < s.length; ++i) {\n let c = s.substring(i, i + 1);\n if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {\n ret.push(frag);\n frag = '';\n } else {\n frag += c;\n if (quote > 0) {\n if (c == '\\\\' && i + 1 < s.length) {\n ++i;\n const c2 = s.substring(i, i + 1);\n frag += c2;\n c += c2;\n }\n }\n if (c == '\\\"') {\n if (!(i > 0 && s.substring(i - 1, i) == '\\\\'))\n quote = quote == 0 ? 1 : 0;\n } else if (c == '[') {\n ++bracket;\n } else if (c == ']') {\n --bracket;\n } else if (c == '(') {\n ++parentheses;\n } else if (c == ')') {\n --parentheses;\n } else if (c == '{') {\n ++braces;\n } else if (c == '}') {\n --braces;\n }\n }\n }\n ret.push(frag);\n return ret;\n}\n\nfunction detachAnnotation(s: string) {\n const ret = _detachAppendix(s, '\\\"');\n if (ret.tag != null)\n return ret;\n\n const r = _detachAppendix(s, '\\'');\n return {tag: ret.tag, repeat: r.tag, str: r.str};\n}\n\nfunction _detachAppendix(s: string, c: string) {\n let tag = null;\n //@ts-ignore\n if (scil.Utils.endswith(s, c)) {\n let p = s.length - 1;\n while (p > 0) {\n p = s.lastIndexOf(c, p - 1);\n if (p <= 0 || s.substring(p - 1, p) != '\\\\')\n break;\n }\n\n if (p > 0 && p < s.length - 1) {\n tag = s.substring(p + 1, s.length - 1);\n s = s.substring(0, p);\n }\n }\n if (tag != null)\n tag = tag.replace(new RegExp('\\\\' + c, 'g'), c);\n return {tag: unescape(tag), str: s};\n}\n\nfunction unescape(s: string) {\n //@ts-ignore\n if (scil.Utils.isNullOrEmpty(s))\n return s;\n\n return s.replace(/[\\\\]./g, function(m) {\n switch (m) {\n case '\\\\r':\n return '\\r';\n case '\\\\n':\n return '\\n';\n case '\\\\t':\n return '\\t';\n default:\n return m.substring(1);\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = wu;",null,null,"const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {mmDistanceFunctionType} from './types';\n\n// Blosum 62 matrix for protein sequences\nconst BLOSUM62:Array<Array<number>> =\n[[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes: {[id:string]:number} = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\n\ninterface NeedlemanWunchArgs {\n gapOpen: number;\n gapExtend: number;\n scoringMatrix: number[][];\n alphabetIndexes: {[id:string]:number};\n}\n\nconst defaultArgs: NeedlemanWunchArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix\n * @param {Partial<NeedlemanWunchArgs>}args - arguments for Needleman-Wunch algorithm like gap penalty, Scoring matrix..\n * @return {mmDistanceFunctionType} - function that calculates the distance between two sequences\n*/\nexport function needlemanWunch(args: Partial<NeedlemanWunchArgs>): mmDistanceFunctionType {\n return (seq1: string, seq2: string) : number => {\n const {gapOpen, gapExtend, scoringMatrix, alphabetIndexes} = {...defaultArgs, ...args};\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix: number[][] = [\n new Array<number>(seq1.length + 1).fill(0),\n new Array<number>(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n const horizontalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal =\n matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen );\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(\n diagonal, left, top\n );\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n } else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n } else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need compare it to perfect match score to get reasonable distance\n const perfectMatchSeq1 = seq1.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const perfectMatchSeq2 = seq2.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const maxScore = Math.max(perfectMatchSeq1, perfectMatchSeq2);\n return (maxScore - matrix[prevRow][seq1.length]) / maxScore;\n };\n}\n","import {hamming} from './hamming';\nimport {levenstein} from './levenstein';\nimport {needlemanWunch} from './needleman-wunsch';\nimport {mmDistanceFunctionType} from './types';\n\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport enum MmDistanceFunctionsNames {\n HAMMING = 'Hamming',\n LEVENSHTEIN = 'Levenshtein',\n NEEDLEMANN_WUNSCH = 'Needlemann-Wunsch'\n};\n\nexport const mmDistanceFunctions: Record<MmDistanceFunctionsNames, (value?: any) => mmDistanceFunctionType> = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n","import {mmDistanceFunctionType} from './types';\n\nexport function hamming(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n result += diff;\n result /= Math.max(seq1.length, seq2.length);\n return result;\n };\n}\n","import {distance} from 'fastest-levenshtein';\nimport {mmDistanceFunctionType} from './types';\n\nexport function levenstein(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n return distance(seq1, seq2) / Math.max(seq1.length, seq2.length);\n };\n}\n",null,null,"import {Matrix, Vector, Coordinates, Vectors, DistanceMetric} from './type-declarations';\nimport {randomFloat, randomInt} from './random';\n\n/**\n * Asserts a condition by throwing an Error.\n *\n * @export\n * @param {boolean} [condition=false] Condition to assert.\n * @param {string} [message='Assertion error.'] Message to output.\n * @throws {Error}\n */\nexport function assert(condition: boolean = false, message: string = 'Assertion error.') {\n if (!condition)\n throw new Error(message);\n}\n\n/**\n * Creates new two-dimensional array and fills it with the value given.\n *\n * @param {number} dimension1 The first dimension of the coordinates (number of rows).\n * @param {number} dimension2 The second dimension of the coordinates (number of columns).\n * @param {number} [fill=0] A value to fill the coordinates with.\n * @return {Coordinates} A two-dimensional filled with the value given.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nfunction initCoordinates(dimension1: number, dimension2: number, fill: number = 0): Coordinates {\n return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));\n}\n\n/**\n * Transpose matrix.\n *\n * @export\n * @param {Matrix} matrix The matrix to be transposed.\n * @return {Matrix} Transposed matrix.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nexport function transposeMatrix(matrix: Matrix): Matrix {\n return new Array(matrix[0].length).fill(0)\n .map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));\n}\n\n/**\n * Adds two vectors with the second one to be multiplied by the given ratio.\n *\n * @export\n * @param {Vector} p The first vector to add.\n * @param {Vector} q The second vector to add.\n * @param {number} [multiplier=1] A multiplier to be used before the second vector is added.\n * @return {Vector} New vector contained the result of operation p+multiplier*q.\n */\nexport function vectorAdd(p: Vector, q: Vector, multiplier: number = 1): Vector {\n const nItems = p.length;\n\n assert(nItems == q.length, 'Vector lengths do not match.');\n\n const total = new Vector(nItems);\n\n for (let i = 0; i < p.length; ++i)\n total[i] = p[i] + multiplier * q[i];\n\n return total;\n}\n\n/**\n * Sums the vector's items.\n *\n * @param {Vector} v The vector to be summed.\n * @return {number} The vector's items sum.\n */\nfunction itemsSum(v: Vector): number {\n let total = 0;\n\n for (let i = 0; i < v.length; ++i)\n total += v[i];\n\n return total;\n}\n\n/**\n * Suqares the vector's items.\n *\n * @param {Vector} v The vector to square.\n * @return {Vector} A new vector containing the original's items squared.\n */\nfunction vectorSquare(v: Vector): Vector {\n const nItems = v.length;\n const total = new Vector(nItems);\n\n for (let i = 0; i < v.length; ++i)\n total[i] = v[i] * v[i];\n\n return total;\n}\n\nexport function vectorLength(v: Vector): number {\n let sqrSum: number = 0;\n for (let i: number = 0; i < v.length; i++)\n sqrSum += v[i] * v[i];\n return Math.sqrt(sqrSum);\n}\n\nexport function vectorDotProduct(v1: Vector, v2: Vector): number {\n if (v1.length != v2.length)\n throw new Error('The dimensionality of the vectors must match');\n let prod: number = 0;\n for (let i: number = 0; i < v1.length; i++)\n prod += v1[i] * v2[i];\n return prod;\n}\n\n/**\n * Creates a matrix filled with random floating point values.\n *\n * @export\n * @param {number} dimension1 The first dimension of the matrix.\n * @param {number} dimension2 The second dimension of the matrix.\n * @param {number} [scale=1.] Max value given by random generator.\n * @return {Matrix} A new matrix filled with random floating point values.\n */\nexport function fillRandomMatrix(dimension1: number, dimension2: number, scale: number = 1.): Matrix {\n const matrix = initCoordinates(dimension1, dimension2);\n\n for (let i = 0; i < dimension1; ++i) {\n for (let j = 0; j < dimension2; ++j)\n matrix[i][j] = randomFloat(scale);\n }\n return matrix;\n}\n\n/**\n * Calculates Euclidean distance between two vectors.\n *\n * @export\n * @param {Vector} p The first vector.\n * @param {Vector} q The second vector.\n * @return {number} Euclidean distance between the given vectors.\n */\nexport function calculateEuclideanDistance(p: Vector, q: Vector): number {\n const diff = vectorAdd(p, q, -1);\n const sqdiff = vectorSquare(diff);\n const sqdiffSumm = itemsSum(sqdiff);\n return Math.sqrt(sqdiffSumm);\n}\n\n/**\n * Creates a distance matrix using a custom distance function.\n *\n * @export\n * @param {Vectors} data Input vectors to calculate distances.\n * @param {DistanceMetric} distance Custom distance function.\n * @return {Matrix} Calculated custom distance matrix.\n */\nexport function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix {\n const nItems = data.length;\n const matrix = initCoordinates(nItems, nItems, 0);\n\n for (let i = 0; i < nItems; ++i) {\n for (let j = i + 1; j < nItems; ++j) {\n const d: number = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);\n matrix[i][j] = matrix[j][i] = d;\n }\n }\n return matrix;\n}\n\n/** Generates array from a range [begin; end] or [begin; end) if endExclusive. **/\nexport function genRange(begin: number, end: number, endExclusive = false): Int32Array {\n const nItems = end - begin + (endExclusive ? 0 : 1);\n const series = new Int32Array(nItems);\n\n for (let i = 0; i < nItems; ++i)\n series[i] = begin + i;\n\n return series;\n}\n\n/**\n * Returns order of values as if they are sorted.\n *\n * @export\n * @param {any[]} values Input array.\n * @param {boolean} [reverse=false] Whether to return reversed order.\n * @return {number[]} The order computed.\n */\nexport function argSort(values: any[], reverse = false): number[] {\n const sortfn = reverse ? (a: any[], b: any[]) => (b[0] - a[0]) : (a: any[], b: any[]) => (a[0] - b[0]);\n const decor = (v: any, i: number) => [v, i]; // set index to value\n const undecor = (a: any[]) => a[1]; // leave only index\n const _argsort = (arr: any[]) => arr.map(decor).sort(sortfn).map(undecor);\n return _argsort(values);\n}\n\n/**\n * Returns the indexes of the most diverse objects according to the dist function\n * @param {number} length total number of objects\n * @param {number} n number of diverse elements to find\n * @param {(i1: number, i2: number) => number} dist a function which calculates distance between\n * two objects using their indexes\n * @returns {number[]} The indexes of the most diverse objects\n */\nexport function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[] {\n function maxBy(values: IterableIterator<number>, orderBy: (i: number) => number) {\n let maxValue = null;\n let maxOrderBy = null;\n\n for (const element of values) {\n const elementOrderBy = orderBy(element);\n if (maxOrderBy == null || elementOrderBy > maxOrderBy) {\n maxValue = element;\n maxOrderBy = elementOrderBy;\n }\n }\n return maxValue;\n }\n\n const subset = [randomInt(length - 1)];\n const complement = new Set();\n\n for (let i = 0; i < length; ++i) {\n if (!subset.includes(i))\n complement.add(i);\n }\n\n while (subset.length < n) {\n const idx = maxBy(\n complement.values() as IterableIterator<number>,\n (i) => Math.min.apply(Math, subset.map(function(val, index) {\n return dist(i, val);\n })));\n if (idx) {\n subset.push(idx);\n complement.delete(idx);\n }\n }\n return subset;\n}\n\n/**\n * Returns normalized vector\n * @param {Vector} data numerical array\n */\nexport function normalize(data: Vector): Vector {\n let mean = 0;\n let std = 0;\n\n for (let i = 0; i < data.length; ++i)\n mean += data[i];\n\n mean /= data.length;\n\n for (let i = 0; i < data.length; ++i)\n std += (data[i] - mean) * (data[i] - mean);\n\n std = Math.sqrt(std / data.length);\n\n for (let i = 0; i < data.length; ++i)\n data[i] = (data[i] - mean) / std;\n\n return data;\n}\n\n/**\n * Finds set difference between two lists.\n * @param {any[]} a The first list.\n * @param {any[]} b The second list.\n * @return {any[]}\n */\nexport function setDifference(a: any[], b: any[]): any[] {\n const bSet = new Set(b);\n return Array.from(new Set(a.filter((x) => !bSet.has(x))).values());\n}\n",null,"/**\n * Denotes a vector of floating poit values.\n *\n * @export\n * @class Vector\n * @extends {Float32Array}\n */\nexport class Vector extends Float32Array {}\n\n/**\n * Denotes a two-dimensional matrix.\n *\n * @export\n * @class Matrix\n * @extends {Array<Vector>}\n */\nexport class Matrix extends Array<Vector> {}\n\n/**\n * Denotes cartesian coordinates.\n *\n * @export\n * @class Coordinates\n * @extends {Matrix}\n */\nexport class Coordinates extends Matrix {}\n\n/**\n * Denotes an array of arbitrary-typed vectors.\n *\n * @export\n * @class Vectors\n * @extends {Array<any>}\n */\nexport class Vectors extends Array<any> {}\n\n/**\n * Denotes a dictionary containing function options.\n *\n * @export\n * @type Options\n */\nexport type Options = {[name: string]: any};\n\n/**\n * Denotes custom distance metric between the two given vectors.\n *\n * @export\n * @type DistanceMetric\n * @param {any} v1 The first vector.\n * @param {any} v2 The second vector.\n * @return {number} Distance between these two vectors.\n */\nexport type DistanceMetric = (v1: any, v2: any) => (number);\n\n/**\n * Denotes a simple string to string dictionary.\n *\n * @export\n * @type StringDictionary\n */\nexport type StringDictionary = {[key: string]: string};\n",null,null,null,null,null,"import * as ui from 'datagrok-api/ui';\nimport * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\n\nexport function errorToConsole(err: any): string {\n if (typeof err === 'string' || err instanceof String) {\n return err as string;\n } else if ((typeof err == 'object' || err instanceof Object) && '$thrownJsError' in err) {\n return errorToConsole(err['$thrownJsError']);\n } else if (err instanceof Error) {\n return (err as Error).stack ?? (err as Error).message;\n } else {\n return err.toString();\n }\n}\n\nexport function rectToConsole(rect: DG.Rect): string {\n return `(x=${rect.x}, y=${rect.y}, w=${rect.width}, h=${rect.height})`;\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from './package';\nimport {findMonomers, parseHelm, getParts} from './utils';\nimport {printLeftOrCentered} from '@datagrok-libraries/bio/src/utils/cell-renderer';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\n\nconst enum tempTAGS {\n helmSumMaxLengthWords = 'helm-sum-maxLengthWords',\n helmMaxLengthWords = 'helm-maxLengthWords',\n}\n// Global flag is for replaceAll\nconst helmGapStartRe = /\\{(\\*\\.)+/g;\nconst helmGapIntRe = /\\.(\\*\\.)+/g;\nconst helmGapEndRe = /(\\.\\*)+\\}/g;\n\ntype TempType = { [tagName: string]: any };\n\n/** Helm cell renderer in case of no missed monomer draws with JSDraw2.Editor (webeditor),\n * in case of missed monomers presented, draws linear sequences aligned in width per monomer.\n */\nexport class HelmCellRenderer extends DG.GridCellRenderer {\n get name() { return 'helm'; }\n\n get cellType() { return 'helm'; }\n\n get defaultWidth(): number | null { return 400; }\n\n get defaultHeight(): number | null { return 100; }\n\n onMouseMove(gridCell: DG.GridCell, e: MouseEvent): void {\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const colTemp: TempType[] = tableCol.temp ?? new Array<TempType>(tableCol.length);\n // Exit if no missed monomers (tags are not presented in colTemp)\n if (!colTemp || Object.keys(colTemp).length == 0) return;\n\n const maxLengthWordsSum: { [pos: number]: number } = colTemp[tempTAGS.helmSumMaxLengthWords];\n const maxLengthWords: { [pos: number]: number } = colTemp[tempTAGS.helmMaxLengthWords];\n\n const maxIndex = Object.values(maxLengthWords).length - 1;\n const argsX = e.offsetX - gridCell.gridColumn.left + (gridCell.gridColumn.left - gridCell.bounds.x);\n let left = 0;\n let right = maxIndex;\n let found = false;\n maxLengthWordsSum[maxIndex + 1] = argsX + 1;\n let mid = 0;\n if (argsX > maxLengthWordsSum[0]) {\n while (!found) {\n mid = Math.floor((right + left) / 2);\n if (argsX >= maxLengthWordsSum[mid] && argsX <= maxLengthWordsSum[mid + 1]) {\n left = mid;\n found = true;\n } else if (argsX < maxLengthWordsSum[mid]) {\n right = mid - 1;\n } else if (argsX > maxLengthWordsSum[mid + 1]) {\n left = mid + 1;\n }\n if (left == right)\n found = true;\n }\n }\n left = (argsX >= maxLengthWordsSum[left]) ? left + 1 : left;\n const monomers = findMonomers(gridCell.cell.value);\n const s: string = gridCell.cell.value ?? '';\n const subParts: string[] = parseHelm(s);\n const allParts: string[] = getParts(subParts, s);\n const tooltipMessage: HTMLElement[] = [];\n for (let partI = 0; partI < allParts.length; ++partI) {\n if (monomers.has(allParts[partI])) {\n tooltipMessage[partI] = ui.divV([\n ui.divText(`Monomer ${allParts[partI]} not found.`),\n ui.divText('Open the Context Panel, then expand Manage Libraries')\n ]);\n }\n }\n\n (((tooltipMessage[left]?.childNodes.length ?? 0) > 0)) ?\n ui.tooltip.show(ui.div(tooltipMessage[left]), e.x + 16, e.y + 16) :\n ui.tooltip.hide();\n } catch (err: any) {\n const errMsg: string = errorToConsole(err);\n console.error('Helm: HelmCellRenderer.onMouseMove() error:\\n' + errMsg);\n }\n }\n\n render(g: CanvasRenderingContext2D, x: number, y: number, w: number, h: number,\n gridCell: DG.GridCell, cellStyle: DG.GridCellStyle\n ) {\n g.save();\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const grid = gridCell.gridRow !== -1 ? gridCell.grid : undefined;\n const undefinedColor = 'rgb(100,100,100)';\n const grayColor = '#808080';\n\n const missedMonomers = findMonomers(gridCell.cell.value);\n const s: string = gridCell.cell.value ?? '';\n const subParts: string[] = parseHelm(s);\n\n if (missedMonomers.size == 0) {\n const host = ui.div([], {style: {width: `${w}px`, height: `${h}px`}});\n host.setAttribute('dataformat', 'helm');\n host.setAttribute('data', gridCell.cell.value);\n gridCell.element = host;\n //@ts-ignore\n const canvas = new JSDraw2.Editor(host, {width: w, height: h, skin: 'w8', viewonly: true});\n return;\n }\n\n if (missedMonomers.size > 0) {\n if (!grid) {\n const r = window.devicePixelRatio;\n h = 28;\n g.canvas.height = h*r;\n g.canvas.style.height = `${h}px`;\n }\n const maxLengthWords: number[] = tableCol.temp[tempTAGS.helmMaxLengthWords] ?? [];\n if (subParts.length > maxLengthWords.length)\n maxLengthWords.push(...(new Array<number>(subParts.length - maxLengthWords.length).fill(-1)));\n\n w = grid ? Math.min(grid.canvas.width - x, w) : g.canvas.width - x;\n g.save();\n g.beginPath();\n g.rect(x, y, w, h);\n g.clip();\n g.font = '12px monospace';\n g.textBaseline = 'top';\n let x1 = x;\n const allParts: string[] = getParts(subParts, s);\n for (let i = 0; i < allParts.length; ++i) {\n maxLengthWords[i] = Math.max(maxLengthWords[i], allParts[i].length * 7); /* What is 7, width of char ? */\n const color = missedMonomers.has(allParts[i]) ? 'red' : grayColor;\n g.fillStyle = undefinedColor;\n x1 = printLeftOrCentered(x1, y, w, h, g, allParts[i], color, 0, true, 1.0);\n }\n\n const maxLengthWordSum: number[] = new Array<number>(maxLengthWords.length);\n maxLengthWordSum[0] = maxLengthWords[0];\n for (let partI = 1; partI < allParts.length; partI++)\n maxLengthWordSum[partI] = maxLengthWordSum[partI - 1] + maxLengthWords[partI];\n\n tableCol.temp = {\n [tempTAGS.helmSumMaxLengthWords]: maxLengthWordSum,\n [tempTAGS.helmMaxLengthWords]: maxLengthWords\n };\n return;\n }\n } finally {\n g.restore();\n }\n }\n}\n",null,"/* Do not change these import lines to match external modules in webpack configuration */\nimport * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {WebEditorMonomer, RGROUP_CAP_GROUP_NAME, RGROUP_LABEL, SMILES} from './constants';\nimport {HelmWebEditor} from './helm-web-editor';\nimport {HelmCellRenderer} from './cell-renderer';\nimport {IMonomerLib, Monomer} from '@datagrok-libraries/bio/src/types';\nimport {NotationConverter} from '@datagrok-libraries/bio/src/utils/notation-converter';\nimport {findMonomers} from './utils';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\nimport {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';\n\nexport const _package = new DG.Package();\nlet monomerLib: IMonomerLib | null = null;\n\n//tags: init\nexport async function initHelm(): Promise<void> {\n return Promise.all([new Promise((resolve, reject) => {\n // @ts-ignore\n dojo.ready(function() { resolve(null); });\n }), grok.functions.call('Bio:getBioLib')])\n .then(([_, lib]: [void, IMonomerLib]) => {\n monomerLib = lib;\n rewriteLibraries(); // initHelm()\n monomerLib.onChanged.subscribe((_) => {\n try {\n rewriteLibraries(); // initHelm()\n\n const monTypeList: string[] = monomerLib.getPolymerTypes();\n const msgStr: string = 'Monomer lib updated:<br />' + (\n monTypeList.length == 0 ? 'empty' : monTypeList.map((monType) => {\n return `${monType} ${monomerLib.getMonomerSymbolsByType(monType).length}`;\n }).join('<br />'));\n\n grok.shell.info(msgStr);\n } catch (err: any) {\n const errMsg = errorToConsole(err);\n console.error('Helm: initHelm monomerLib.onChanged() error:\\n' + errMsg);\n // throw err; // Prevent disabling event handler\n }\n });\n })\n .catch((err: any) => {\n const errMsg: string = err instanceof Error ? err.message : !!err ? err.toString() : 'Exception \\'undefined\\'';\n grok.shell.error(`Package \\'Helm\\' init initHelm() error: ${errMsg}`);\n const errRes = new Error(errMsg);\n errRes.stack = err.stack;\n throw errRes;\n });\n}\n\nfunction rewriteLibraries() {\n org.helm.webeditor.Monomers.clear();\n monomerLib.getPolymerTypes().forEach((polymerType) => {\n const monomerSymbols = monomerLib.getMonomerSymbolsByType(polymerType);\n monomerSymbols.forEach((monomerSymbol) => {\n let isBroken = false;\n const monomer: Monomer = monomerLib.getMonomer(polymerType, monomerSymbol);\n const webEditorMonomer: WebEditorMonomer = {\n id: monomerSymbol,\n m: monomer.molfile,\n n: monomer.name,\n na: monomer.naturalAnalog,\n rs: monomer.rgroups.length,\n type: monomer.polymerType,\n mt: monomer.monomerType,\n at: {}\n };\n\n if (monomer.rgroups.length > 0) {\n webEditorMonomer.rs = monomer.rgroups.length;\n const at = {};\n monomer.rgroups.forEach((it) => {\n at[it[RGROUP_LABEL]] = it[RGROUP_CAP_GROUP_NAME];\n });\n webEditorMonomer.at = at;\n } else if (monomer[SMILES] != null) {\n webEditorMonomer.rs = Object.keys(getRS(monomer[SMILES].toString())).length;\n webEditorMonomer.at = getRS(monomer[SMILES].toString());\n } else {\n isBroken = true;\n }\n\n if (!isBroken)\n org.helm.webeditor.Monomers.addOneMonomer(webEditorMonomer);\n });\n });\n\n // Obsolete\n const grid: DG.Grid = grok.shell.tv.grid;\n if (grid) grid.invalidate();\n}\n\n//name: helmCellRenderer\n//tags: cellRenderer\n//meta.cellType: helm\n//meta.columnTags: units=helm\n//output: grid_cell_renderer result\nexport function helmCellRenderer(): HelmCellRenderer {\n return new HelmCellRenderer();\n}\n\nfunction checkMonomersAndOpenWebEditor(cell?: DG.Cell, value?: string, units?: string) {\n const cellValue = typeof units === 'undefined' ? cell.value : value;\n const monomers = findMonomers(cellValue);\n if (monomers.size == 0) { webEditor(cell, value, units); } else {\n grok.shell.warning(`Monomers ${Array.from(monomers).join(', ')} are absent! <br/>` +\n `Please, upload the monomer library! <br/>` +\n `<a href=\"https://datagrok.ai/help/domains/bio/macromolecules\" target=\"_blank\">Learn more</a>`);\n }\n}\n\n//tags: cellEditor\n//description: Macromolecule\n//input: grid_cell cell\n//meta.columnTags: quality=Macromolecule, units=helm\nexport function editMoleculeCell(cell: DG.GridCell): void {\n checkMonomersAndOpenWebEditor(cell.cell, undefined, undefined);\n}\n\n//name: Open Helm Web Editor\n//description: Adds editor\n//meta.action: Open Helm Web Editor\n//input: string mol { semType: Macromolecule }\nexport function openEditor(mol: string): void {\n const df = grok.shell.tv.grid.dataFrame;\n const col = df.columns.bySemType('Macromolecule');\n const colUnits = col.getTag(DG.TAGS.UNITS);\n if (colUnits === NOTATION.HELM)\n checkMonomersAndOpenWebEditor(df.currentCell, undefined, undefined);\n const converter = new NotationConverter(col);\n const resStr = converter.convertStringToHelm(mol, '/');\n checkMonomersAndOpenWebEditor(df.currentCell, resStr, col.getTag(DG.TAGS.UNITS));\n}\n\n//name: Properties\n//tags: panel, widgets\n//input: string helmString {semType: Macromolecule}\n//output: widget result\nexport async function propertiesPanel(helmString: string) {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n editor.setHelm(helmString);\n const formula = editor.getFormula(true);\n const molWeight = Math.round(editor.getMolWeight() * 100) / 100;\n const coef = Math.round(editor.getExtinctionCoefficient(true) * 100) / 100;\n parent.lastChild.remove();\n return new DG.Widget(\n ui.tableFromMap({\n 'formula': formula.replace(/<sub>/g, '').replace(/<\\/sub>/g, ''),\n 'molecular weight': molWeight,\n 'extinction coefficient': coef,\n })\n );\n}\n\nfunction webEditor(cell?: DG.Cell, value?: string, units?: string) {\n const view = ui.div();\n const df = grok.shell.tv.grid.dataFrame;\n const converter = new NotationConverter(df.columns.bySemType('Macromolecule'));\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const app = new scil.helm.App(view, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = app.calculateSizes();\n app.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(app.sequence.style, s);\n //@ts-ignore\n scil.apply(app.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + app.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(app.properties.parent.style, s);\n app.structureview.resize(sizes.rightwidth, sizes.bottomheight + app.toolbarheight);\n app.mex.resize(sizes.topheight - 80);\n setTimeout(() => {\n if (typeof units === 'undefined')\n app.canvas.helm.setSequence(cell.value, 'HELM');\n else\n app.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n //@ts-ignore\n ui.dialog({showHeader: false, showFooter: true})\n .add(view)\n .onOK(() => {\n const helmValue = app.canvas.getHelm(true).replace(/<\\/span>/g, '')\n .replace(/<span style='background:#bbf;'>/g, '');\n if (typeof units === 'undefined') {\n cell.value = helmValue;\n } else {\n const convertedRes = converter.convertHelmToFastaSeparator(helmValue, units);\n cell.value = convertedRes;\n }\n }).show({modal: true, fullScreen: true});\n}\n\nfunction getRS(smiles: string) {\n const newS = smiles.match(/(?<=\\[)[^\\][]*(?=])/gm);\n const res = {};\n let el = '';\n let digit;\n for (let i = 0; i < newS.length; i++) {\n if (newS[i] != null) {\n if (/\\d/.test(newS[i])) {\n digit = newS[i][newS[i].length - 1];\n newS[i] = newS[i].replace(/[0-9]/g, '');\n for (let j = 0; j < newS[i].length; j++) {\n if (newS[i][j] != ':')\n el += newS[i][j];\n }\n res['R' + digit] = el;\n el = '';\n }\n }\n }\n return res;\n}\n\n//name: getMolfiles\n//input: column col {semType: Macromolecule}\n//output: column res\nexport function getMolfiles(col: DG.Column): DG.Column {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const res = DG.Column.string('mols', col.length);\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n res.init((i) => {\n editor.setHelm(col.get(i));\n const mol = editor.getMolfile();\n return mol;\n });\n parent.lastChild.remove();\n return res;\n}\n\n//name: helmWebEditor\n//output: object\nexport function helmWebEditor(): HelmWebEditor {\n return new HelmWebEditor();\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","grok","ui","DG","HelmWebEditor","constructor","w","h","this","host","style","width","height","editor","JSDraw2","Editor","viewonly","resizeEditor","setSize","createWebEditor","editorView","org","helm","webeditor","MolViewer","molscale","webEditor","scil","App","showabout","mexfontsize","mexrnapinontab","topmargin","mexmonomerstab","sequenceviewonly","mexfavoritefirst","mexfilter","sizes","calculateSizes","canvas","resize","rightwidth","topheight","s","bottomheight","apply","sequence","notation","toolbarheight","properties","parent","structureview","mex","setTimeout","setSequence","editorDiv","getParts","subParts","allParts","k","length","indexOfMonomer","indexOf","helmBeforeMonomer","slice","push","substring","parseHelm","split","monomers","Utils","isNullOrEmpty","seqs","i","p","detachAnnotation","str","ss","monomer","startsWith","includes","element","residue","endsWith","lastIndexOf","firstPiece","thirdPiece","elements","el","findMonomers","helmString","types","keys","monomerTypeList","monomerNames","Monomers","getMonomerSet","forEach","id","splitString","Set","filter","val","sep","ret","frag","parentheses","bracket","braces","quote","c","c2","_detachAppendix","tag","r","repeat","endswith","replace","RegExp","m","wu","peq","Uint32Array","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","seq1","seq2","diff","Math","abs","result","min","max","LEVENSHTEIN","a","b","tmp","n","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","j","start","vlen","pb","mb","xh","ph","mh","score","myers_x","distance","NEEDLEMANN_WUNSCH","args","matrix","Array","fill","verticalGaps","horizontalGaps","prevRow","currRow","diagonal","top","left","perfectMatchSeq1","map","reduce","perfectMatchSeq2","maxScore","v1","v2","Error","prod","Float32Array","vectorLength","v","sqrSum","sqrt","errorToConsole","err","String","stack","message","toString","HelmCellRenderer","name","cellType","defaultWidth","defaultHeight","onMouseMove","gridCell","e","tableCol","tableColumn","colTemp","temp","maxLengthWordsSum","maxLengthWords","maxIndex","values","argsX","offsetX","gridColumn","bounds","x","right","found","mid","floor","cell","tooltipMessage","partI","has","childNodes","y","errMsg","console","error","render","g","cellStyle","save","grid","gridRow","undefined","undefinedColor","grayColor","missedMonomers","size","setAttribute","skin","window","devicePixelRatio","beginPath","rect","clip","font","textBaseline","x1","color","fillStyle","printLeftOrCentered","maxLengthWordSum","restore","_package","monomerLib","initHelm","Promise","all","resolve","reject","dojo","ready","then","_","lib","rewriteLibraries","onChanged","subscribe","monTypeList","getPolymerTypes","msgStr","monType","getMonomerSymbolsByType","join","catch","errRes","clear","polymerType","monomerSymbol","isBroken","getMonomer","webEditorMonomer","molfile","na","naturalAnalog","rs","rgroups","type","mt","monomerType","at","it","getRS","addOneMonomer","invalidate","helmCellRenderer","checkMonomersAndOpenWebEditor","units","view","df","converter","NotationConverter","columns","bySemType","app","showHeader","showFooter","add","onOK","helmValue","getHelm","convertedRes","convertHelmToFastaSeparator","show","modal","fullScreen","from","editMoleculeCell","openEditor","mol","col","getTag","currentCell","resStr","convertStringToHelm","propertiesPanel","root","parentElement","appendChild","setHelm","formula","getFormula","molWeight","round","getMolWeight","coef","getExtinctionCoefficient","lastChild","remove","smiles","newS","match","res","digit","test","getMolfiles","init","getMolfile","helmWebEditor"],"sourceRoot":""}
1
+ {"version":3,"file":"package.js","mappings":"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","sources":["webpack://helm/webpack/bootstrap","webpack://helm/webpack/runtime/define property getters","webpack://helm/webpack/runtime/hasOwnProperty shorthand","webpack://helm/webpack/runtime/make namespace object","webpack://helm/external var \"grok\"","webpack://helm/external var \"ui\"","webpack://helm/external var \"DG\"","webpack://helm/./src/helm-web-editor.ts","webpack://helm/./src/utils.ts","webpack://helm/external var \"wu\"","webpack://helm/types.ts","webpack://helm/consts.ts","webpack://helm/./node_modules/fastest-levenshtein/esm/mod.js","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.ts","webpack://helm/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.ts","webpack://helm/units-handler.ts","webpack://helm/utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/vector-operations.ts","webpack://helm/monomer-utils.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/type-declarations.ts","webpack://helm/seq-palettes.ts","webpack://helm/aminoacids.ts","webpack://helm/nucleotides.ts","webpack://helm/unknown.ts","webpack://helm/cell-renderer.ts","webpack://helm/./node_modules/@datagrok-libraries/utils/src/to-console.ts","webpack://helm/./src/cell-renderer.ts","webpack://helm/notation-converter.ts","webpack://helm/./src/package.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = grok;","const __WEBPACK_NAMESPACE_OBJECT__ = ui;","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nexport class HelmWebEditor {\n host: any;\n editor: any;\n w = 200;\n h = 100;\n constructor() {\n this.host = ui.div([], {style: {width: `${this.w}px`, height: `${this.h}px`}});\n this.editor = new JSDraw2.Editor(this.host, {width: this.w, height: this.h, viewonly: true});\n }\n\n resizeEditor(w: number, h: number) {\n this.editor.setSize(w, h);\n }\n\n createWebEditor(value: string) {\n const editorView = ui.div();\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const webEditor = new scil.helm.App(editorView, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = webEditor.calculateSizes();\n webEditor.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(webEditor.sequence.style, s);\n //@ts-ignore\n scil.apply(webEditor.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + webEditor.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(webEditor.properties.parent.style, s);\n webEditor.structureview.resize(sizes.rightwidth, sizes.bottomheight + webEditor.toolbarheight);\n webEditor.mex.resize(sizes.topheight - 80);\n setTimeout(function() {\n webEditor.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n return {editorDiv: editorView, webEditor: webEditor};\n }\n}\n\n","import * as DG from 'datagrok-api/dg';\nimport {\n RGROUP_CAP_GROUP_NAME,\n RGROUP_CAP_GROUP_SMILES,\n jsonSdfMonomerLibDict,\n MONOMER_SYMBOL,\n RGROUP_ALTER_ID,\n RGROUPS,\n RGROUP_LABEL,\n SDF_MONOMER_NAME\n} from './constants';\n\nexport function getParts(subParts: string[], s: string): string[] {\n const j = 0;\n const allParts: string[] = [];\n for (let k = 0; k < subParts.length; ++k) {\n const indexOfMonomer = s.indexOf(subParts[k]);\n const helmBeforeMonomer = s.slice(j, indexOfMonomer);\n allParts.push(helmBeforeMonomer);\n allParts.push(subParts[k]);\n s = s.substring(indexOfMonomer + subParts[k].length);\n }\n allParts.push(s);\n return allParts;\n}\n\nexport function parseHelm(s: string) {\n const sections = split(s, '$');\n s = sections[0];\n const monomers = [];\n //@ts-ignore\n if (!scil.Utils.isNullOrEmpty(s)) {\n const seqs = split(s, '|');\n for (let i = 0; i < seqs.length; ++i) {\n const e = detachAnnotation(seqs[i]);\n s = e.str;\n\n let p = s.indexOf('{');\n\n s = s.substring(p + 1);\n p = s.indexOf('}');\n s = s.substring(0, p);\n\n const ss = split(s, '.');\n for (const monomer of ss) {\n if (!monomer || monomer === '') continue;\n if (monomer.startsWith('[') && monomer.includes(']')) {\n const element = monomer.substring(1, monomer.indexOf(']'));\n monomers.push(element);\n const residue = monomer.substring(monomer.indexOf(']') + 1);\n ss.push(residue);\n } else if (monomer.includes('[') && monomer.endsWith(']')) {\n const element = monomer.substring(monomer.lastIndexOf('[') + 1, monomer.length - 1);\n monomers.push(element);\n const residue = monomer.substring(0, monomer.lastIndexOf('['));\n ss.push(residue);\n } else if (monomer.includes('(') && monomer.includes(')')) {\n // here we only want to split the string at first '(' and last ')'\n // because entries like [L-hArg(Et,Et)]([L-hArg(Et,Et)]) where L-hArg(Et,Et) is a single monomer\n const firstPiece = monomer.substring(0, monomer.indexOf('('));\n const thirdPiece = monomer.substring(monomer.lastIndexOf(')') + 1);\n const secondPiece = monomer.substring(firstPiece.length + 1, monomer.length - thirdPiece.length - 1);\n const elements =[firstPiece, secondPiece, thirdPiece];\n for (const el of elements)\n ss.push(el);\n } else {\n monomers.push(monomer);\n }\n }\n }\n }\n return monomers;\n}\n\n// /** Find monomers missed in Helm monomer library configured and\n// * used in org.helm.webeditor / scil.helm.Monomers / org.helm.webeditor.Monomers .\n// */\n// export function findMonomers(helmString: string) {\n// //@ts-ignore\n// const types: string[] = Object.keys(org.helm.webeditor.monomerTypeList());\n// const monomerNameList: any[] = [];\n// const monomerNameI: number = 0;\n// const weMonomers = org.helm.webeditor.Monomers;\n// for (let typeI = 0; typeI < types.length; typeI++) {\n// //@ts-ignore\n// const ofTypeMonomers: {} = weMonomers.getMonomerSet(types[typeI]) ?? {};\n// Object.keys(ofTypeMonomers).forEach((key) => {\n// const monomer: any = ofTypeMonomers[key];\n// monomerNameList[monomerNameI] = monomer.id;\n// monomerNameI += 1;\n// });\n// }\n// const helmPartList = parseHelm(helmString);\n// return new Set(helmPartList.filter((val) => !monomerNameList.includes(val)));\n// }\n\nexport function findMonomers(helmString: string) {\n //@ts-ignore\n const types = Object.keys(org.helm.webeditor.monomerTypeList());\n const monomers: any = [];\n const monomerNames: any = [];\n for (let i = 0; i < types.length; i++) {\n //@ts-ignore\n // eslint-disable-next-line new-cap\n monomers.push(new scil.helm.Monomers.getMonomerSet(types[i]));\n Object.keys(monomers[i]).forEach((k) => {\n monomerNames.push(monomers[i][k].id);\n });\n }\n const splitString = parseHelm(helmString);\n return new Set(splitString.filter((val) => !monomerNames.includes(val)));\n}\n\nfunction split(s: string, sep: string) {\n const ret = [];\n let frag = '';\n let parentheses = 0;\n let bracket = 0;\n let braces = 0;\n let quote = 0;\n for (let i = 0; i < s.length; ++i) {\n let c = s.substring(i, i + 1);\n if (c == sep && bracket == 0 && parentheses == 0 && braces == 0 && quote == 0) {\n ret.push(frag);\n frag = '';\n } else {\n frag += c;\n if (quote > 0) {\n if (c == '\\\\' && i + 1 < s.length) {\n ++i;\n const c2 = s.substring(i, i + 1);\n frag += c2;\n c += c2;\n }\n }\n if (c == '\\\"') {\n if (!(i > 0 && s.substring(i - 1, i) == '\\\\'))\n quote = quote == 0 ? 1 : 0;\n } else if (c == '[') {\n ++bracket;\n } else if (c == ']') {\n --bracket;\n } else if (c == '(') {\n ++parentheses;\n } else if (c == ')') {\n --parentheses;\n } else if (c == '{') {\n ++braces;\n } else if (c == '}') {\n --braces;\n }\n }\n }\n ret.push(frag);\n return ret;\n}\n\nfunction detachAnnotation(s: string) {\n const ret = _detachAppendix(s, '\\\"');\n if (ret.tag != null)\n return ret;\n\n const r = _detachAppendix(s, '\\'');\n return {tag: ret.tag, repeat: r.tag, str: r.str};\n}\n\nfunction _detachAppendix(s: string, c: string) {\n let tag = null;\n //@ts-ignore\n if (scil.Utils.endswith(s, c)) {\n let p = s.length - 1;\n while (p > 0) {\n p = s.lastIndexOf(c, p - 1);\n if (p <= 0 || s.substring(p - 1, p) != '\\\\')\n break;\n }\n\n if (p > 0 && p < s.length - 1) {\n tag = s.substring(p + 1, s.length - 1);\n s = s.substring(0, p);\n }\n }\n if (tag != null)\n tag = tag.replace(new RegExp('\\\\' + c, 'g'), c);\n return {tag: unescape(tag), str: s};\n}\n\nfunction unescape(s: string) {\n //@ts-ignore\n if (scil.Utils.isNullOrEmpty(s))\n return s;\n\n return s.replace(/[\\\\]./g, function(m) {\n switch (m) {\n case '\\\\r':\n return '\\r';\n case '\\\\n':\n return '\\n';\n case '\\\\t':\n return '\\t';\n default:\n return m.substring(1);\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = wu;",null,null,"const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {mmDistanceFunctionType} from './types';\n\n// Blosum 62 matrix for protein sequences\nconst BLOSUM62:Array<Array<number>> =\n[[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes: {[id:string]:number} = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\n\ninterface NeedlemanWunchArgs {\n gapOpen: number;\n gapExtend: number;\n scoringMatrix: number[][];\n alphabetIndexes: {[id:string]:number};\n}\n\nconst defaultArgs: NeedlemanWunchArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix\n * @param {Partial<NeedlemanWunchArgs>}args - arguments for Needleman-Wunch algorithm like gap penalty, Scoring matrix..\n * @return {mmDistanceFunctionType} - function that calculates the distance between two sequences\n*/\nexport function needlemanWunch(args: Partial<NeedlemanWunchArgs>): mmDistanceFunctionType {\n return (seq1: string, seq2: string) : number => {\n const {gapOpen, gapExtend, scoringMatrix, alphabetIndexes} = {...defaultArgs, ...args};\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix: number[][] = [\n new Array<number>(seq1.length + 1).fill(0),\n new Array<number>(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n const horizontalGaps: boolean[] = new Array<boolean>(seq1.length + 1).fill(false);\n\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal =\n matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen );\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(\n diagonal, left, top\n );\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n } else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n } else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need compare it to perfect match score to get reasonable distance\n const perfectMatchSeq1 = seq1.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const perfectMatchSeq2 = seq2.split('').map((c) => scoringMatrix[alphabetIndexes[c]][alphabetIndexes[c]])\n .reduce((a, b) => a + b, 0);\n const maxScore = Math.max(perfectMatchSeq1, perfectMatchSeq2);\n return (maxScore - matrix[prevRow][seq1.length]) / maxScore;\n };\n}\n","import {hamming} from './hamming';\nimport {levenstein} from './levenstein';\nimport {needlemanWunch} from './needleman-wunsch';\nimport {mmDistanceFunctionType} from './types';\n\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport enum MmDistanceFunctionsNames {\n HAMMING = 'Hamming',\n LEVENSHTEIN = 'Levenshtein',\n NEEDLEMANN_WUNSCH = 'Needlemann-Wunsch'\n};\n\nexport const mmDistanceFunctions: Record<MmDistanceFunctionsNames, (value?: any) => mmDistanceFunctionType> = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n","import {mmDistanceFunctionType} from './types';\n\nexport function hamming(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n result += diff;\n result /= Math.max(seq1.length, seq2.length);\n return result;\n };\n}\n","import {distance} from 'fastest-levenshtein';\nimport {mmDistanceFunctionType} from './types';\n\nexport function levenstein(): mmDistanceFunctionType {\n return (seq1: string, seq2: string) => {\n return distance(seq1, seq2) / Math.max(seq1.length, seq2.length);\n };\n}\n",null,null,"import {Matrix, Vector, Coordinates, Vectors, DistanceMetric} from './type-declarations';\nimport {randomFloat, randomInt} from './random';\n\n/**\n * Asserts a condition by throwing an Error.\n *\n * @export\n * @param {boolean} [condition=false] Condition to assert.\n * @param {string} [message='Assertion error.'] Message to output.\n * @throws {Error}\n */\nexport function assert(condition: boolean = false, message: string = 'Assertion error.') {\n if (!condition)\n throw new Error(message);\n}\n\n/**\n * Creates new two-dimensional array and fills it with the value given.\n *\n * @param {number} dimension1 The first dimension of the coordinates (number of rows).\n * @param {number} dimension2 The second dimension of the coordinates (number of columns).\n * @param {number} [fill=0] A value to fill the coordinates with.\n * @return {Coordinates} A two-dimensional filled with the value given.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nfunction initCoordinates(dimension1: number, dimension2: number, fill: number = 0): Coordinates {\n return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));\n}\n\n/**\n * Transpose matrix.\n *\n * @export\n * @param {Matrix} matrix The matrix to be transposed.\n * @return {Matrix} Transposed matrix.\n * @todo Might be slow since used Array.map. Probably needs performance revision.\n */\nexport function transposeMatrix(matrix: Matrix): Matrix {\n return new Array(matrix[0].length).fill(0)\n .map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));\n}\n\n/**\n * Adds two vectors with the second one to be multiplied by the given ratio.\n *\n * @export\n * @param {Vector} p The first vector to add.\n * @param {Vector} q The second vector to add.\n * @param {number} [multiplier=1] A multiplier to be used before the second vector is added.\n * @return {Vector} New vector contained the result of operation p+multiplier*q.\n */\nexport function vectorAdd(p: Vector, q: Vector, multiplier: number = 1): Vector {\n const nItems = p.length;\n\n assert(nItems == q.length, 'Vector lengths do not match.');\n\n const total = new Vector(nItems);\n\n for (let i = 0; i < p.length; ++i)\n total[i] = p[i] + multiplier * q[i];\n\n return total;\n}\n\n/**\n * Sums the vector's items.\n *\n * @param {Vector} v The vector to be summed.\n * @return {number} The vector's items sum.\n */\nfunction itemsSum(v: Vector): number {\n let total = 0;\n\n for (let i = 0; i < v.length; ++i)\n total += v[i];\n\n return total;\n}\n\n/**\n * Suqares the vector's items.\n *\n * @param {Vector} v The vector to square.\n * @return {Vector} A new vector containing the original's items squared.\n */\nfunction vectorSquare(v: Vector): Vector {\n const nItems = v.length;\n const total = new Vector(nItems);\n\n for (let i = 0; i < v.length; ++i)\n total[i] = v[i] * v[i];\n\n return total;\n}\n\nexport function vectorLength(v: Vector): number {\n let sqrSum: number = 0;\n for (let i: number = 0; i < v.length; i++)\n sqrSum += v[i] * v[i];\n return Math.sqrt(sqrSum);\n}\n\nexport function vectorDotProduct(v1: Vector, v2: Vector): number {\n if (v1.length != v2.length)\n throw new Error('The dimensionality of the vectors must match');\n let prod: number = 0;\n for (let i: number = 0; i < v1.length; i++)\n prod += v1[i] * v2[i];\n return prod;\n}\n\n/**\n * Creates a matrix filled with random floating point values.\n *\n * @export\n * @param {number} dimension1 The first dimension of the matrix.\n * @param {number} dimension2 The second dimension of the matrix.\n * @param {number} [scale=1.] Max value given by random generator.\n * @return {Matrix} A new matrix filled with random floating point values.\n */\nexport function fillRandomMatrix(dimension1: number, dimension2: number, scale: number = 1.): Matrix {\n const matrix = initCoordinates(dimension1, dimension2);\n\n for (let i = 0; i < dimension1; ++i) {\n for (let j = 0; j < dimension2; ++j)\n matrix[i][j] = randomFloat(scale);\n }\n return matrix;\n}\n\n/**\n * Calculates Euclidean distance between two vectors.\n *\n * @export\n * @param {Vector} p The first vector.\n * @param {Vector} q The second vector.\n * @return {number} Euclidean distance between the given vectors.\n */\nexport function calculateEuclideanDistance(p: Vector, q: Vector): number {\n const diff = vectorAdd(p, q, -1);\n const sqdiff = vectorSquare(diff);\n const sqdiffSumm = itemsSum(sqdiff);\n return Math.sqrt(sqdiffSumm);\n}\n\n/**\n * Creates a distance matrix using a custom distance function.\n *\n * @export\n * @param {Vectors} data Input vectors to calculate distances.\n * @param {DistanceMetric} distance Custom distance function.\n * @return {Matrix} Calculated custom distance matrix.\n */\nexport function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix {\n const nItems = data.length;\n const matrix = initCoordinates(nItems, nItems, 0);\n\n for (let i = 0; i < nItems; ++i) {\n for (let j = i + 1; j < nItems; ++j) {\n const d: number = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);\n matrix[i][j] = matrix[j][i] = d;\n }\n }\n return matrix;\n}\n\n/** Generates array from a range [begin; end] or [begin; end) if endExclusive. **/\nexport function genRange(begin: number, end: number, endExclusive = false): Int32Array {\n const nItems = end - begin + (endExclusive ? 0 : 1);\n const series = new Int32Array(nItems);\n\n for (let i = 0; i < nItems; ++i)\n series[i] = begin + i;\n\n return series;\n}\n\n/**\n * Returns order of values as if they are sorted.\n *\n * @export\n * @param {any[]} values Input array.\n * @param {boolean} [reverse=false] Whether to return reversed order.\n * @return {number[]} The order computed.\n */\nexport function argSort(values: any[], reverse = false): number[] {\n const sortfn = reverse ? (a: any[], b: any[]) => (b[0] - a[0]) : (a: any[], b: any[]) => (a[0] - b[0]);\n const decor = (v: any, i: number) => [v, i]; // set index to value\n const undecor = (a: any[]) => a[1]; // leave only index\n const _argsort = (arr: any[]) => arr.map(decor).sort(sortfn).map(undecor);\n return _argsort(values);\n}\n\n/**\n * Returns the indexes of the most diverse objects according to the dist function\n * @param {number} length total number of objects\n * @param {number} n number of diverse elements to find\n * @param {(i1: number, i2: number) => number} dist a function which calculates distance between\n * two objects using their indexes\n * @returns {number[]} The indexes of the most diverse objects\n */\nexport function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[] {\n function maxBy(values: IterableIterator<number>, orderBy: (i: number) => number) {\n let maxValue = null;\n let maxOrderBy = null;\n\n for (const element of values) {\n const elementOrderBy = orderBy(element);\n if (maxOrderBy == null || elementOrderBy > maxOrderBy) {\n maxValue = element;\n maxOrderBy = elementOrderBy;\n }\n }\n return maxValue;\n }\n\n const subset = [randomInt(length - 1)];\n const complement = new Set();\n\n for (let i = 0; i < length; ++i) {\n if (!subset.includes(i))\n complement.add(i);\n }\n\n while (subset.length < n) {\n const idx = maxBy(\n complement.values() as IterableIterator<number>,\n (i) => Math.min.apply(Math, subset.map(function(val, index) {\n return dist(i, val);\n })));\n if (idx) {\n subset.push(idx);\n complement.delete(idx);\n }\n }\n return subset;\n}\n\n/**\n * Returns normalized vector\n * @param {Vector} data numerical array\n */\nexport function normalize(data: Vector): Vector {\n let mean = 0;\n let std = 0;\n\n for (let i = 0; i < data.length; ++i)\n mean += data[i];\n\n mean /= data.length;\n\n for (let i = 0; i < data.length; ++i)\n std += (data[i] - mean) * (data[i] - mean);\n\n std = Math.sqrt(std / data.length);\n\n for (let i = 0; i < data.length; ++i)\n data[i] = (data[i] - mean) / std;\n\n return data;\n}\n\n/**\n * Finds set difference between two lists.\n * @param {any[]} a The first list.\n * @param {any[]} b The second list.\n * @return {any[]}\n */\nexport function setDifference(a: any[], b: any[]): any[] {\n const bSet = new Set(b);\n return Array.from(new Set(a.filter((x) => !bSet.has(x))).values());\n}\n",null,"/**\n * Denotes a vector of floating poit values.\n *\n * @export\n * @class Vector\n * @extends {Float32Array}\n */\nexport class Vector extends Float32Array {}\n\n/**\n * Denotes a two-dimensional matrix.\n *\n * @export\n * @class Matrix\n * @extends {Array<Vector>}\n */\nexport class Matrix extends Array<Vector> {}\n\n/**\n * Denotes cartesian coordinates.\n *\n * @export\n * @class Coordinates\n * @extends {Matrix}\n */\nexport class Coordinates extends Matrix {}\n\n/**\n * Denotes an array of arbitrary-typed vectors.\n *\n * @export\n * @class Vectors\n * @extends {Array<any>}\n */\nexport class Vectors extends Array<any> {}\n\n/**\n * Denotes a dictionary containing function options.\n *\n * @export\n * @type Options\n */\nexport type Options = {[name: string]: any};\n\n/**\n * Denotes custom distance metric between the two given vectors.\n *\n * @export\n * @type DistanceMetric\n * @param {any} v1 The first vector.\n * @param {any} v2 The second vector.\n * @return {number} Distance between these two vectors.\n */\nexport type DistanceMetric = (v1: any, v2: any) => (number);\n\n/**\n * Denotes a simple string to string dictionary.\n *\n * @export\n * @type StringDictionary\n */\nexport type StringDictionary = {[key: string]: string};\n",null,null,null,null,null,"import * as ui from 'datagrok-api/ui';\nimport * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\n\nexport function errorToConsole(err: any): string {\n if (typeof err === 'string' || err instanceof String) {\n return err as string;\n } else if ((typeof err == 'object' || err instanceof Object) && '$thrownJsError' in err) {\n return errorToConsole(err['$thrownJsError']);\n } else if (err instanceof Error) {\n return (err as Error).stack ?? (err as Error).message;\n } else {\n return err.toString();\n }\n}\n\nexport function rectToConsole(rect: DG.Rect): string {\n return `(x=${rect.x}, y=${rect.y}, w=${rect.width}, h=${rect.height})`;\n}\n","import * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {_package} from './package';\nimport {findMonomers, parseHelm, getParts} from './utils';\nimport {printLeftOrCentered} from '@datagrok-libraries/bio/src/utils/cell-renderer';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\n\nconst enum tempTAGS {\n helmSumMaxLengthWords = 'helm-sum-maxLengthWords',\n helmMaxLengthWords = 'helm-maxLengthWords',\n}\n// Global flag is for replaceAll\nconst helmGapStartRe = /\\{(\\*\\.)+/g;\nconst helmGapIntRe = /\\.(\\*\\.)+/g;\nconst helmGapEndRe = /(\\.\\*)+\\}/g;\n\ntype TempType = { [tagName: string]: any };\n\n/** Helm cell renderer in case of no missed monomer draws with JSDraw2.Editor (webeditor),\n * in case of missed monomers presented, draws linear sequences aligned in width per monomer.\n */\nexport class HelmCellRenderer extends DG.GridCellRenderer {\n get name() { return 'helm'; }\n\n get cellType() { return 'helm'; }\n\n get defaultWidth(): number | null { return 400; }\n\n get defaultHeight(): number | null { return 100; }\n\n onMouseMove(gridCell: DG.GridCell, e: MouseEvent): void {\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const colTemp: TempType[] = tableCol.temp ?? new Array<TempType>(tableCol.length);\n // Exit if no missed monomers (tags are not presented in colTemp)\n if (!colTemp || Object.keys(colTemp).length == 0) return;\n\n const maxLengthWordsSum: { [pos: number]: number } = colTemp[tempTAGS.helmSumMaxLengthWords];\n const maxLengthWords: { [pos: number]: number } = colTemp[tempTAGS.helmMaxLengthWords];\n\n const maxIndex = Object.values(maxLengthWords).length - 1;\n const argsX = e.offsetX - gridCell.gridColumn.left + (gridCell.gridColumn.left - gridCell.bounds.x);\n let left = 0;\n let right = maxIndex;\n let found = false;\n maxLengthWordsSum[maxIndex + 1] = argsX + 1;\n let mid = 0;\n if (argsX > maxLengthWordsSum[0]) {\n while (!found) {\n mid = Math.floor((right + left) / 2);\n if (argsX >= maxLengthWordsSum[mid] && argsX <= maxLengthWordsSum[mid + 1]) {\n left = mid;\n found = true;\n } else if (argsX < maxLengthWordsSum[mid]) {\n right = mid - 1;\n } else if (argsX > maxLengthWordsSum[mid + 1]) {\n left = mid + 1;\n }\n if (left == right)\n found = true;\n }\n }\n left = (argsX >= maxLengthWordsSum[left]) ? left + 1 : left;\n const monomers = findMonomers(gridCell.cell.value);\n const s: string = gridCell.cell.value ?? '';\n const subParts: string[] = parseHelm(s);\n const allParts: string[] = getParts(subParts, s);\n const tooltipMessage: HTMLElement[] = [];\n for (let partI = 0; partI < allParts.length; ++partI) {\n if (monomers.has(allParts[partI])) {\n tooltipMessage[partI] = ui.divV([\n ui.divText(`Monomer ${allParts[partI]} not found.`),\n ui.divText('Open the Context Panel, then expand Manage Libraries')\n ]);\n }\n }\n\n (((tooltipMessage[left]?.childNodes.length ?? 0) > 0)) ?\n ui.tooltip.show(ui.div(tooltipMessage[left]), e.x + 16, e.y + 16) :\n ui.tooltip.hide();\n } catch (err: any) {\n const errMsg: string = errorToConsole(err);\n console.error('Helm: HelmCellRenderer.onMouseMove() error:\\n' + errMsg);\n }\n }\n\n render(g: CanvasRenderingContext2D, x: number, y: number, w: number, h: number,\n gridCell: DG.GridCell, cellStyle: DG.GridCellStyle\n ) {\n g.save();\n try {\n /* Can not do anything without tableColumn containing temp */\n let tableCol: DG.Column | null = null;\n try { tableCol = gridCell.tableColumn; } catch { }\n if (!tableCol) return;\n\n const grid = gridCell.gridRow !== -1 ? gridCell.grid : undefined;\n const undefinedColor = 'rgb(100,100,100)';\n const grayColor = '#808080';\n\n const missedMonomers = findMonomers(gridCell.cell.value);\n const s: string = gridCell.cell.value ?? '';\n const subParts: string[] = parseHelm(s);\n\n if (missedMonomers.size == 0) {\n const host = ui.div([], {style: {width: `${w}px`, height: `${h}px`}});\n host.setAttribute('dataformat', 'helm');\n host.setAttribute('data', gridCell.cell.value);\n gridCell.element = host;\n //@ts-ignore\n const canvas = new JSDraw2.Editor(host, {width: w, height: h, skin: 'w8', viewonly: true});\n return;\n }\n\n if (missedMonomers.size > 0) {\n if (!grid) {\n const r = window.devicePixelRatio;\n h = 28;\n g.canvas.height = h*r;\n g.canvas.style.height = `${h}px`;\n }\n const maxLengthWords: number[] = tableCol.temp[tempTAGS.helmMaxLengthWords] ?? [];\n if (subParts.length > maxLengthWords.length)\n maxLengthWords.push(...(new Array<number>(subParts.length - maxLengthWords.length).fill(-1)));\n\n w = grid ? Math.min(grid.canvas.width - x, w) : g.canvas.width - x;\n g.save();\n g.beginPath();\n g.rect(x, y, w, h);\n g.clip();\n g.font = '12px monospace';\n g.textBaseline = 'top';\n let x1 = x;\n const allParts: string[] = getParts(subParts, s);\n for (let i = 0; i < allParts.length; ++i) {\n maxLengthWords[i] = Math.max(maxLengthWords[i], allParts[i].length * 7); /* What is 7, width of char ? */\n const color = missedMonomers.has(allParts[i]) ? 'red' : grayColor;\n g.fillStyle = undefinedColor;\n x1 = printLeftOrCentered(x1, y, w, h, g, allParts[i], color, 0, true, 1.0);\n }\n\n const maxLengthWordSum: number[] = new Array<number>(maxLengthWords.length);\n maxLengthWordSum[0] = maxLengthWords[0];\n for (let partI = 1; partI < allParts.length; partI++)\n maxLengthWordSum[partI] = maxLengthWordSum[partI - 1] + maxLengthWords[partI];\n\n tableCol.temp = {\n [tempTAGS.helmSumMaxLengthWords]: maxLengthWordSum,\n [tempTAGS.helmMaxLengthWords]: maxLengthWords\n };\n return;\n }\n } finally {\n g.restore();\n }\n }\n}\n",null,"/* Do not change these import lines to match external modules in webpack configuration */\nimport * as grok from 'datagrok-api/grok';\nimport * as ui from 'datagrok-api/ui';\nimport * as DG from 'datagrok-api/dg';\n\nimport {WebEditorMonomer, RGROUP_CAP_GROUP_NAME, RGROUP_LABEL, SMILES} from './constants';\nimport {HelmWebEditor} from './helm-web-editor';\nimport {HelmCellRenderer} from './cell-renderer';\nimport {IMonomerLib, Monomer} from '@datagrok-libraries/bio/src/types';\nimport {NotationConverter} from '@datagrok-libraries/bio/src/utils/notation-converter';\nimport {findMonomers} from './utils';\nimport {errorToConsole} from '@datagrok-libraries/utils/src/to-console';\nimport {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';\n\nexport const _package = new DG.Package();\nlet monomerLib: IMonomerLib | null = null;\n\n//tags: init\nexport async function initHelm(): Promise<void> {\n return Promise.all([new Promise((resolve, reject) => {\n // @ts-ignore\n dojo.ready(function() { resolve(null); });\n }), grok.functions.call('Bio:getBioLib')])\n .then(([_, lib]: [void, IMonomerLib]) => {\n monomerLib = lib;\n rewriteLibraries(); // initHelm()\n monomerLib.onChanged.subscribe((_) => {\n try {\n rewriteLibraries(); // initHelm()\n\n const monTypeList: string[] = monomerLib.getPolymerTypes();\n const msgStr: string = 'Monomer lib updated:<br />' + (\n monTypeList.length == 0 ? 'empty' : monTypeList.map((monType) => {\n return `${monType} ${monomerLib.getMonomerSymbolsByType(monType).length}`;\n }).join('<br />'));\n\n grok.shell.info(msgStr);\n } catch (err: any) {\n const errMsg = errorToConsole(err);\n console.error('Helm: initHelm monomerLib.onChanged() error:\\n' + errMsg);\n // throw err; // Prevent disabling event handler\n }\n });\n })\n .catch((err: any) => {\n const errMsg: string = err instanceof Error ? err.message : !!err ? err.toString() : 'Exception \\'undefined\\'';\n grok.shell.error(`Package \\'Helm\\' init initHelm() error: ${errMsg}`);\n const errRes = new Error(errMsg);\n errRes.stack = err.stack;\n throw errRes;\n });\n}\n\nfunction rewriteLibraries() {\n org.helm.webeditor.Monomers.clear();\n monomerLib.getPolymerTypes().forEach((polymerType) => {\n const monomerSymbols = monomerLib.getMonomerSymbolsByType(polymerType);\n monomerSymbols.forEach((monomerSymbol) => {\n let isBroken = false;\n const monomer: Monomer = monomerLib.getMonomer(polymerType, monomerSymbol);\n const webEditorMonomer: WebEditorMonomer = {\n id: monomerSymbol,\n m: monomer.molfile,\n n: monomer.name,\n na: monomer.naturalAnalog,\n rs: monomer.rgroups.length,\n type: monomer.polymerType,\n mt: monomer.monomerType,\n at: {}\n };\n\n if (monomer.rgroups.length > 0) {\n webEditorMonomer.rs = monomer.rgroups.length;\n const at = {};\n monomer.rgroups.forEach((it) => {\n at[it[RGROUP_LABEL]] = it[RGROUP_CAP_GROUP_NAME];\n });\n webEditorMonomer.at = at;\n } else if (monomer[SMILES] != null) {\n webEditorMonomer.rs = Object.keys(getRS(monomer[SMILES].toString())).length;\n webEditorMonomer.at = getRS(monomer[SMILES].toString());\n } else {\n isBroken = true;\n }\n\n if (!isBroken)\n org.helm.webeditor.Monomers.addOneMonomer(webEditorMonomer);\n });\n });\n\n // Obsolete\n const grid: DG.Grid = grok.shell.tv.grid;\n if (grid) grid.invalidate();\n}\n\n//name: helmCellRenderer\n//tags: cellRenderer\n//meta.cellType: helm\n//meta.columnTags: units=helm\n//output: grid_cell_renderer result\nexport function helmCellRenderer(): HelmCellRenderer {\n return new HelmCellRenderer();\n}\n\nfunction checkMonomersAndOpenWebEditor(cell?: DG.Cell, value?: string, units?: string) {\n const cellValue = typeof units === 'undefined' ? cell.value : value;\n const monomers = findMonomers(cellValue);\n if (monomers.size == 0) { webEditor(cell, value, units); } else {\n grok.shell.warning(`Monomers ${Array.from(monomers).join(', ')} are absent! <br/>` +\n `Please, upload the monomer library! <br/>` +\n `<a href=\"https://datagrok.ai/help/domains/bio/macromolecules\" target=\"_blank\">Learn more</a>`);\n }\n}\n\n//tags: cellEditor\n//description: Macromolecule\n//input: grid_cell cell\n//meta.columnTags: quality=Macromolecule, units=helm\nexport function editMoleculeCell(cell: DG.GridCell): void {\n checkMonomersAndOpenWebEditor(cell.cell, undefined, undefined);\n}\n\n//name: Open Helm Web Editor\n//description: Adds editor\n//meta.action: Open Helm Web Editor\n//input: string mol { semType: Macromolecule }\nexport function openEditor(mol: string): void {\n const df = grok.shell.tv.grid.dataFrame;\n const col = df.columns.bySemType('Macromolecule');\n const colUnits = col.getTag(DG.TAGS.UNITS);\n if (colUnits === NOTATION.HELM)\n checkMonomersAndOpenWebEditor(df.currentCell, undefined, undefined);\n const converter = new NotationConverter(col);\n const resStr = converter.convertStringToHelm(mol, '/');\n checkMonomersAndOpenWebEditor(df.currentCell, resStr, col.getTag(DG.TAGS.UNITS));\n}\n\n//name: Properties\n//tags: panel, widgets\n//input: string helmString {semType: Macromolecule}\n//output: widget result\nexport async function propertiesPanel(helmString: string) {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n editor.setHelm(helmString);\n const formula = editor.getFormula(true);\n const molWeight = Math.round(editor.getMolWeight() * 100) / 100;\n const coef = Math.round(editor.getExtinctionCoefficient(true) * 100) / 100;\n parent.lastChild.remove();\n return new DG.Widget(\n ui.tableFromMap({\n 'formula': formula.replace(/<sub>/g, '').replace(/<\\/sub>/g, ''),\n 'molecular weight': molWeight,\n 'extinction coefficient': coef,\n })\n );\n}\n\nfunction webEditor(cell?: DG.Cell, value?: string, units?: string) {\n const view = ui.div();\n const df = grok.shell.tv.grid.dataFrame;\n const converter = new NotationConverter(df.columns.bySemType('Macromolecule'));\n org.helm.webeditor.MolViewer.molscale = 0.8;\n const app = new scil.helm.App(view, {\n showabout: false,\n mexfontsize: '90%',\n mexrnapinontab: true,\n topmargin: 20,\n mexmonomerstab: true,\n sequenceviewonly: false,\n mexfavoritefirst: true,\n mexfilter: true\n });\n const sizes = app.calculateSizes();\n app.canvas.resize(sizes.rightwidth - 100, sizes.topheight - 210);\n let s = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};\n //@ts-ignore\n scil.apply(app.sequence.style, s);\n //@ts-ignore\n scil.apply(app.notation.style, s);\n s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + app.toolbarheight) + 'px'};\n //@ts-ignore\n scil.apply(app.properties.parent.style, s);\n app.structureview.resize(sizes.rightwidth, sizes.bottomheight + app.toolbarheight);\n app.mex.resize(sizes.topheight - 80);\n setTimeout(() => {\n if (typeof units === 'undefined')\n app.canvas.helm.setSequence(cell.value, 'HELM');\n else\n app.canvas.helm.setSequence(value, 'HELM');\n }, 200);\n //@ts-ignore\n ui.dialog({showHeader: false, showFooter: true})\n .add(view)\n .onOK(() => {\n const helmValue = app.canvas.getHelm(true).replace(/<\\/span>/g, '')\n .replace(/<span style='background:#bbf;'>/g, '');\n if (typeof units === 'undefined') {\n cell.value = helmValue;\n } else {\n const convertedRes = converter.convertHelmToFastaSeparator(helmValue, units);\n cell.value = convertedRes;\n }\n }).show({modal: true, fullScreen: true});\n}\n\nfunction getRS(smiles: string) {\n const newS = smiles.match(/(?<=\\[)[^\\][]*(?=])/gm);\n const res = {};\n let el = '';\n let digit;\n for (let i = 0; i < newS.length; i++) {\n if (newS[i] != null) {\n if (/\\d/.test(newS[i])) {\n digit = newS[i][newS[i].length - 1];\n newS[i] = newS[i].replace(/[0-9]/g, '');\n for (let j = 0; j < newS[i].length; j++) {\n if (newS[i][j] != ':')\n el += newS[i][j];\n }\n res['R' + digit] = el;\n el = '';\n }\n }\n }\n return res;\n}\n\n//name: getMolfiles\n//input: column col {semType: Macromolecule}\n//output: column res\nexport function getMolfiles(col: DG.Column): DG.Column {\n const grid = grok.shell.tv.grid;\n const parent = grid.root.parentElement;\n const res = DG.Column.string('mols', col.length);\n const host = ui.div([]);\n parent.appendChild(host);\n const editor = new JSDraw2.Editor(host, {viewonly: true});\n host.style.width = '0px';\n host.style.height = '0px';\n res.init((i) => {\n editor.setHelm(col.get(i));\n const mol = editor.getMolfile();\n return mol;\n });\n parent.lastChild.remove();\n return res;\n}\n\n//name: helmWebEditor\n//output: object\nexport function helmWebEditor(): HelmWebEditor {\n return new HelmWebEditor();\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","grok","ui","DG","HelmWebEditor","constructor","w","h","this","host","style","width","height","editor","JSDraw2","Editor","viewonly","resizeEditor","setSize","createWebEditor","editorView","org","helm","webeditor","MolViewer","molscale","webEditor","scil","App","showabout","mexfontsize","mexrnapinontab","topmargin","mexmonomerstab","sequenceviewonly","mexfavoritefirst","mexfilter","sizes","calculateSizes","canvas","resize","rightwidth","topheight","s","bottomheight","apply","sequence","notation","toolbarheight","properties","parent","structureview","mex","setTimeout","setSequence","editorDiv","getParts","subParts","allParts","k","length","indexOfMonomer","indexOf","helmBeforeMonomer","slice","push","substring","parseHelm","split","monomers","Utils","isNullOrEmpty","seqs","i","p","detachAnnotation","str","ss","monomer","startsWith","includes","element","residue","endsWith","lastIndexOf","firstPiece","thirdPiece","elements","el","findMonomers","helmString","types","keys","monomerTypeList","monomerNames","Monomers","getMonomerSet","forEach","id","splitString","Set","filter","val","sep","ret","frag","parentheses","bracket","braces","quote","c","c2","_detachAppendix","tag","r","repeat","endswith","replace","RegExp","m","wu","peq","Uint32Array","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","seq1","seq2","diff","Math","abs","result","min","max","LEVENSHTEIN","a","b","tmp","n","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","j","start","vlen","pb","mb","xh","ph","mh","score","myers_x","distance","NEEDLEMANN_WUNSCH","args","matrix","Array","fill","verticalGaps","horizontalGaps","prevRow","currRow","diagonal","top","left","perfectMatchSeq1","map","reduce","perfectMatchSeq2","maxScore","v1","v2","Error","prod","Float32Array","vectorLength","v","sqrSum","sqrt","errorToConsole","err","String","stack","message","toString","HelmCellRenderer","name","cellType","defaultWidth","defaultHeight","onMouseMove","gridCell","e","tableCol","tableColumn","colTemp","temp","maxLengthWordsSum","maxLengthWords","maxIndex","values","argsX","offsetX","gridColumn","bounds","x","right","found","mid","floor","cell","tooltipMessage","partI","has","childNodes","y","errMsg","console","error","render","g","cellStyle","save","grid","gridRow","undefined","undefinedColor","grayColor","missedMonomers","size","setAttribute","skin","window","devicePixelRatio","beginPath","rect","clip","font","textBaseline","x1","color","fillStyle","printLeftOrCentered","maxLengthWordSum","restore","_package","monomerLib","initHelm","Promise","all","resolve","reject","dojo","ready","then","_","lib","rewriteLibraries","onChanged","subscribe","monTypeList","getPolymerTypes","msgStr","monType","getMonomerSymbolsByType","join","catch","errRes","clear","polymerType","monomerSymbol","isBroken","getMonomer","webEditorMonomer","molfile","na","naturalAnalog","rs","rgroups","type","mt","monomerType","at","it","getRS","addOneMonomer","invalidate","helmCellRenderer","checkMonomersAndOpenWebEditor","units","view","df","converter","NotationConverter","columns","bySemType","app","showHeader","showFooter","add","onOK","helmValue","getHelm","convertedRes","convertHelmToFastaSeparator","show","modal","fullScreen","from","editMoleculeCell","openEditor","mol","col","getTag","currentCell","resStr","convertStringToHelm","propertiesPanel","root","parentElement","appendChild","setHelm","formula","getFormula","molWeight","round","getMolWeight","coef","getExtinctionCoefficient","lastChild","remove","smiles","newS","match","res","digit","test","getMolfiles","init","getMolfile","helmWebEditor"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@datagrok/helm",
3
3
  "friendlyName": "Helm",
4
- "version": "2.1.12",
4
+ "version": "2.1.13",
5
5
  "author": {
6
6
  "name": "Oleksandra Serhiienko",
7
7
  "email": "oserhiienko@datagrok.ai"
@@ -15,7 +15,7 @@
15
15
  "helm/JSDraw/Pistoia.HELM-uncompressed.js"
16
16
  ],
17
17
  "dependencies": {
18
- "@datagrok-libraries/bio": "^5.32.7",
18
+ "@datagrok-libraries/bio": "^5.33.2",
19
19
  "@datagrok-libraries/utils": "^2.5.0",
20
20
  "cash-dom": "^8.1.1",
21
21
  "datagrok-api": "^1.10.2",