From bb62a625a77b34859c245475d265c1bb9e94d4b9 Mon Sep 17 00:00:00 2001 From: Alkid Date: Thu, 8 Aug 2024 15:33:03 +0200 Subject: [PATCH 1/6] Coverage report on git workflow --- .github/workflows/test.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index be929a87..6bee0285 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,3 +24,9 @@ jobs: wget https://files.dice-research.org/projects/Ontolearn/KGs.zip unzip KGs.zip python -m pytest -p no:warnings -x + + - name: Coverage report + run: | + pip install coverage + coverage run -m pytest + coverage report -m \ No newline at end of file From c627fb77c5e6a6a1fe53316b868760a75ca85d27 Mon Sep 17 00:00:00 2001 From: Alkid Date: Thu, 8 Aug 2024 17:06:05 +0200 Subject: [PATCH 2/6] Added owlapy logo and static bandages --- README.md | 5 +++++ docs/_static/images/owlapy_logo.png | Bin 0 -> 7780 bytes 2 files changed, 5 insertions(+) create mode 100644 docs/_static/images/owlapy_logo.png diff --git a/README.md b/README.md index 249174dd..a52ba31a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ # OWLAPY +[![Coverage](https://img.shields.io/badge/coverage-82%25-green)](https://dice-group.github.io/owlapy/usage/further_resources.html#coverage-report) +[![Pypi](https://img.shields.io/badge/pypi-1.2.0-blue)](https://pypi.org/project/owlapy/1.2.0/) +[![Docs](https://img.shields.io/badge/documentation-1.2.0-yellow)](https://dice-group.github.io/owlapy/usage/main.html) + +![OWLAPY](docs/_static/images/owlapy_logo.png) OWLAPY is a Python Framework for creating and manipulating OWL Ontologies. diff --git a/docs/_static/images/owlapy_logo.png b/docs/_static/images/owlapy_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc2b75700aa5f7112c0f8360d101060b6aea2c0 GIT binary patch literal 7780 zcmb7IXE$%px_j5njzSi^XwbsMj!y15CMNwH1fQAMDpgkUdhed!q03Qzz z=bsY~@6r4Nd^~)70{q8|keGl3NC+e#r6Fab1+jr>80k4UDA`1WglReXrMWp?&`3Nb z`{M)+2N(D8Eed>m3NVNU1pa^Hp&dYi3s?iJVW2Ss&`HoRNYEa-0rZbSqGO=_iTB^Y z#zDix!a&D;e5ytaK*PX5!@|JA$HT(GdSv`zV`7m!#U>@=lhZVJA!p|Q5Q{_cmzIvj zyZEfiaTZo>Xkd27#5$#bP{O1<+^y(Gy`A3Wdi}We>zr;Soj+66eRd$>)v;4JALCGqhWf6D&umB)!>jQe*v~`KwZM;V-t)^v)_i*D?r9;4V*F5*hVNDkg0Al0Sh4WW$>s}o`$~CCo=H2$=GQj6QZM?h;XuJ67}CGqnAu5?y8Uo7?^GLTV{gxyM^W(rC}`qlK||Qb%h3QG zUpX=KcIydOEX~)uWH#1|dV|Y?iGAv0V&22bE02X4pH{kn)_(IexHC$4aqd%D9Deh- z6@?#i(A#zNCQN1s$s9}NaR1Jv0%>#!!s{f}fgr^anEY+)h^$ zV#IJ_bVZVdQ)wNpr{FXV7x~+rcAM<2-QIJnPz^;xJXTAha^#v#6TZ4L{5U!OnE)(E zvK}h2=ACcZ`a^&5#DmKU<>O}@qa54T3FGzzu|{s^dIpx_%QS)nn?-qFpE1Bzx$^9h zc&AC+#u9y_0XmICB2?LTI+J3@`|$TX{tPOHoZ()sv6&R7swW=Sfkp8eP$*P=7$Vpy zEHuKH>#NV!GRN3Hl#QS^pnqK%+e1x&5M7`~3EE;9jt7v^>>rpTyzO#Q@f5$m>%3|e zLF|e^&LueMiJs_*XehkFIHWChv-X2(-e+|$CLiTxh6>vb;+J|E8%=!EZAh1$I5O|a zEc3J~LO(ZHHytI8R7J@c7a!;%Q7$`cZubmI!(RY%N}x+=spR=js&#@ zMq(mWV&M8+v8nNAru?7n>OSMEZ{FPnXb@a5xz48cl}5!vT8)3p>4CRs}{VD+H!AsdWS<2c6@7Q>07IG4j|S9M&b1A1H*8cc>@3gU(% zin!KX9c@+aW(m(xLa<9CRsCTLomq}g`((Xaymqh7i+yW

C_)1(i8?3QAg;enyE- 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 Date: Thu, 8 Aug 2024 17:06:39 +0200 Subject: [PATCH 3/6] Added to docs: Further Resources --- docs/index.rst | 2 + docs/usage/further_resources.md | 70 +++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 docs/usage/further_resources.md diff --git a/docs/index.rst b/docs/index.rst index 21fcae58..7ee05793 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,6 +8,7 @@ Welcome to OWLAPY! .. toctree:: :maxdepth: 2 + .. image:: _static/images/owlapy_logo.png :caption: Contents: usage/main @@ -15,4 +16,5 @@ Welcome to OWLAPY! usage/ontologies usage/reasoner usage/owlapi_adaptor + usage/further_resources autoapi/owlapy/index \ No newline at end of file diff --git a/docs/usage/further_resources.md b/docs/usage/further_resources.md new file mode 100644 index 00000000..3b846c9c --- /dev/null +++ b/docs/usage/further_resources.md @@ -0,0 +1,70 @@ +# Further Resources + +Currently, we are working on our manuscript describing our framework. +If you want to attribute our library, please use our +[GitHub page](https://github.com/dice-group/owlapy) for reference. + +## More Inside the Project + +Examples and test cases provide a good starting point to get to know +the project better. Find them in the folders +[examples](https://github.com/dice-group/owlapy/tree/develop/examples) and [tests](https://github.com/dice-group/owlapy/tree/develop/tests). + +## Contribution + +Feel free to create a pull request and we will take a look on it. +Your commitment is well appreciated! + +## Questions + +In case you have any question, please contact: `caglardemir8@gmail.com` +or open an issue on our [GitHub issues page](https://github.com/dice-group/owlapy/issues). + +## Coverage Report +The coverage report is generated using [coverage.py](https://coverage.readthedocs.io/en/7.6.1/). + +``` +Name Stmts Miss Cover Missing +---------------------------------------------------------------------------------- +owlapy/__init__.py 4 0 100% +owlapy/class_expression/__init__.py 8 0 100% +owlapy/class_expression/class_expression.py 49 6 88% 25, 32, 41, 50, 58, 62 +owlapy/class_expression/nary_boolean_expression.py 26 1 96% 25 +owlapy/class_expression/owl_class.py 33 1 97% 44 +owlapy/class_expression/restriction.py 356 40 89% 33, 41, 49, 68, 71, 89, 94, 162, 170, 245-246, 297, 302, 305, 335, 340, 343, 346, 386, 426, 437, 451, 491, 499, 502, 579-580, 611, 616, 654, 659, 662, 695, 700, 703, 751, 754, 794, 823, 829 +owlapy/converter.py 399 191 52% 52-68, 75-76, 79, 82, 148, 152, 157, 169, 176, 184, 214, 246-257, 264-282, 294, 304-307, 313-359, 366-387, 394-401, 417-420, 431, 451, 460-481, 489-491, 498-511, 515-521, 525-548, 552-555, 559-560, 564-576, 580-587, 591-592, 620, 624-628 +owlapy/iri.py 82 7 91% 54, 69, 82, 97, 128, 133, 150 +owlapy/meta_classes.py 28 5 82% 22, 32, 51, 71, 85 +owlapy/namespaces.py 29 4 86% 33, 36, 40, 43 +owlapy/owl_annotation.py 18 4 78% 17, 25, 43, 51 +owlapy/owl_axiom.py 601 181 70% 36, 39, 42, 45, 59, 111-113, 116, 119, 136-138, 141, 144, 147-150, 153, 156, 182-184, 187, 190, 193, 196-200, 203, 206, 221, 253-256, 259-261, 264, 267, 288, 291, 294, 332-335, 338-340, 343, 346, 398-401, 404-406, 409, 412, 468, 533-536, 539, 542, 561-563, 566, 569, 572, 575, 578-581, 584, 587, 620-623, 626, 629, 645-648, 652, 656, 674-675, 683, 692, 695-697, 700, 703, 711, 733-737, 745, 753, 761, 764-766, 769, 772, 786-788, 791, 794, 797-800, 803, 806, 822-824, 827, 830, 833-836, 839, 842, 858-860, 863, 866, 869-872, 875, 878, 905-908, 911, 914, 982-985, 988, 991, 1018, 1044, 1068, 1071-1073, 1076, 1079, 1091, 1103, 1116, 1129, 1142, 1157, 1172, 1182, 1185-1187, 1190, 1193, 1208, 1227-1230, 1233, 1236, 1254-1257, 1260, 1263 +owlapy/owl_data_ranges.py 44 3 93% 41, 46, 102 +owlapy/owl_datatype.py 20 2 90% 33-34 +owlapy/owl_individual.py 21 1 95% 37 +owlapy/owl_literal.py 306 83 73% 49, 65, 77, 86, 90, 99, 103, 112, 116, 125, 129, 138, 142, 151, 155, 164, 169, 173, 185, 203, 208, 214, 217, 221, 244, 247-249, 252, 255, 258, 262, 288, 293, 299, 302, 306, 311, 323, 329, 332-334, 337, 340, 343, 346, 350, 355, 373, 376-378, 381, 384, 387, 391, 415, 418-420, 423, 426, 429, 433, 454, 459, 462-464, 467, 470, 473, 477, 489-491, 494, 497-499, 502, 505 +owlapy/owl_object.py 49 10 80% 12, 16, 20, 24, 36, 48, 63, 79-81 +owlapy/owl_ontology.py 447 69 85% 86, 97-100, 103, 106, 109-111, 134, 143, 152, 161, 173, 183, 195, 207, 219, 231, 236, 245, 249, 292-295, 304, 312, 329-330, 341, 345-346, 358-359, 371-372, 376, 379-381, 384, 387, 419, 423, 433, 441, 445, 449-450, 462, 473-474, 553-554, 559, 595, 599, 603, 613, 617, 629, 658, 680, 701, 706, 736, 742, 750 +owlapy/owl_ontology_manager.py 593 178 70% 40, 48, 66, 80, 94, 104, 114, 125, 140, 151, 155, 168-169, 177, 182, 200, 208-211, 312-318, 341-350, 355-376, 396, 466, 469, 474-496, 501-511, 516, 521-527, 539, 542-543, 583, 588-593, 603, 608, 625, 634-645, 650-665, 676, 681, 691, 703, 707, 743, 749, 760, 766, 771-795, 800-807, 825-831, 850, 853, 859-866, 883, 888 +owlapy/owl_property.py 77 14 82% 17, 24, 32, 40, 54, 63, 67, 76, 126, 158, 162, 169, 174, 193 +owlapy/owl_reasoner.py 925 210 77% 63, 81, 100, 117, 132, 145, 158, 173, 188, 208, 225, 242, 261, 276, 291, 309, 324, 345, 362, 378, 384, 403, 452-455, 572, 584-586, 591-597, 604, 653-661, 665-671, 689, 727-734, 760, 795-799, 825-828, 836, 856-858, 860-864, 871, 884-886, 888-890, 897, 902-904, 924, 928-929, 942-944, 965, 981-985, 1010-1012, 1113, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1160-1162, 1168, 1172, 1175, 1178, 1181, 1184, 1187, 1193, 1196, 1210, 1216, 1240-1243, 1251-1290, 1305, 1318-1328, 1353-1356, 1363, 1372, 1386, 1456-1461, 1488, 1498-1502, 1510-1514, 1555-1561, 1573, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1657, 1661, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1687, 1691, 1694, 1697 +owlapy/owlapi_adaptor.py 131 66 50% 18, 74-76, 91-98, 110-115, 151-152, 164-165, 179-180, 195-196, 214, 232, 251, 271, 287, 305, 320, 333, 346, 361, 376, 390, 404, 419, 434, 450, 454-483, 511 +owlapy/owlapi_mapper.py 104 15 86% 35, 51, 68, 72, 76, 80, 84, 88, 133-136, 141, 145, 149 +owlapy/parser.py 379 20 95% 316, 327, 338, 400-401, 405, 416, 577, 618, 656, 667, 678, 721, 723, 751-752, 756, 763, 779-780 +owlapy/providers.py 38 3 92% 41, 54, 56 +owlapy/render.py 292 48 84% 79-114, 143-158, 176, 180-181, 186, 206, 222, 231, 236, 241, 375, 379-380, 386, 405, 421, 430, 435, 440 +owlapy/utils.py 775 233 70% 160, 164, 168, 172, 178, 184-188, 192-196, 200, 204, 208, 214, 218, 222, 226, 230, 236, 242, 248, 252, 256, 260, 264-267, 271-274, 278, 285, 300-302, 305-314, 317, 320, 323, 326, 329, 333-339, 343, 350, 354, 358, 362, 366, 370, 374-378, 382-386, 390-394, 398-402, 406, 410, 414-419, 423-428, 432-437, 441, 445, 449-453, 457-461, 465-469, 473-477, 481-485, 489, 493-497, 501, 505-510, 514-519, 523-528, 532, 536-540, 545, 550, 554, 558, 562, 566, 570, 574, 578, 582-587, 591-597, 601, 605, 609, 614, 619, 624, 628, 632, 636, 640, 644-647, 651-654, 658, 662, 666, 671, 676, 681, 685, 736, 740, 746, 748, 751, 753, 755, 790, 796, 852, 866-868, 877, 919-920, 940, 1039, 1044, 1049, 1071, 1075, 1083, 1087, 1092, 1161, 1164-1182, 1195-1197, 1202-1206 +owlapy/vocab.py 95 5 95% 32, 35, 38, 113-114 +tests/test_class_expression_semantics.py 17 0 100% +tests/test_examples.py 14 0 100% +tests/test_owlapi_adaptor.py 63 0 100% +tests/test_owlapy.py 38 1 97% 47 +tests/test_owlapy_cnf_dnf.py 72 0 100% +tests/test_owlapy_fastinstancechecker.py 199 1 99% 417 +tests/test_owlapy_nnf.py 252 0 100% +tests/test_owlapy_ontology_management.py 588 1 99% 830 +tests/test_owlapy_owl2sparql_converter.py 39 14 64% 23-36, 412 +tests/test_owlapy_parser.py 350 0 100% +tests/test_owlapy_render.py 137 1 99% 191 +---------------------------------------------------------------------------------- +TOTAL 7698 1418 82% +``` \ No newline at end of file From 01da1bf6c409eb2c1beca4bf5f3a2a14a8855313 Mon Sep 17 00:00:00 2001 From: Alkid Date: Fri, 9 Aug 2024 12:59:40 +0200 Subject: [PATCH 4/6] added logo and favicon to docs --- docs/_static/images/favicon.ico | Bin 0 -> 766 bytes docs/_static/images/owlapy_logo.png | Bin 7780 -> 17726 bytes docs/conf.py | 4 ++++ docs/index.rst | 1 - 4 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/_static/images/favicon.ico diff --git a/docs/_static/images/favicon.ico b/docs/_static/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..42e8969edc8c3345e10706d5e1c4f57ed92469e1 GIT binary patch literal 766 zcmZQzU<5)11py$*!tjELfkBLcfk6X^6@b_Qh(Y4GKt!M$!}^6i46mO*!li_|;*5eo xAi$sm1`0sOQHc+9rIHeod8G1*cMk&t$o&ZON#&F3e^SjyS5KOKKz|J-001VUA|?O; literal 0 HcmV?d00001 diff --git a/docs/_static/images/owlapy_logo.png b/docs/_static/images/owlapy_logo.png index ffc2b75700aa5f7112c0f8360d101060b6aea2c0..0ee8462109c865d2bc2e1e90149fe54b82e0003a 100644 GIT binary patch literal 17726 zcmV(-K-|BHP)M;Ya`mqRE>K)a z)14<;)c==wFby+B4nwgo=!1$snEkv?blEu zYPM`%Gq9^tCv&{{>}~t@y*rD${F?~yu`cM}kjl|)juR!9001BWNklFz6JX4r(eyPIqv=7$OiK_e_GH*Pj4?$v$x5cbWt4+a1K_gi(UdS>ExhY&L} z{iCYu)Tz_0aak|Ra}%No!AH762qp&k;iIJ=p8nDew+QKPq;G157jl^>7yZJ;kI<&w z33r%AMr(f3EErPSqooe$Q!~9Y%{!UK`kXw-vR;|xVi7g*WHoj31_RJ z&yU2gXsk87NO_iupr{-U9AuUmG^dwE@@Fi`qCUVyrjhnM0 zG?YVUyl@8noJ(z*m5w0DmY>g=oALm;6bp0P?#p$9M)G*=A=u?NNL7sp*Btc5(E$R94Sui1U`I#09qeX zXXOH&T)|AvfD_1XOX&e8hX zh;6|fmWd`N(AQ+dW&uGS%{>5%xg`Ipu~6$FtS8K z>&1R7Co_iwkO(~yMrw0FOq=tG>SnEPk}_5 zAIk(!@{E`ljtH2X7f7^7TT6h0y5;?TtvKk$j_h+4yN07WtcoUi)} zErkT3n*X_nIN(!#)&ju`b>MNT=MzyLf*&2UaJ_mTV?s?$=!&vtA2q_3_sLpAw@PV z7e~k+%j;v%1F_E=gNT zvO-ffSYvf1$^gy&k0LrKW?p3wJ5o}Pkk$&x$iz0HR)ilIJXWh;EfFNpNhR1?7}eH? zsHFvYYZF_c)@Vu4hG25ZMs46-t#1_K2jb7m$!{00}e%jOb=QUp)%Ss8;k>%5&40hMnIGBEca3I5L62b z;b}^ENetc}X=ltYkW%T4Vu<(vL4x&Ul4>XhJZ-K_KtU{fwX`rFu@XVr|Jdwk)Kcm> zEt9E=x>oZ98`1B#Zz zSy1Z1td)VaY}y=4hJkuiEywi8KqDAMN3CA*QNRme_3)qwr7v6&t*wY~>6^C;q)>|@ zsHjoUCIuz?X2x|8s`E*95kqh+ePZk6V6uR>>Ku_gx3SrIw;<7CDB0)gsYk6>lS)9? zMUiOn2)?wV>iFpBSLQZzzBZfub6HgdWu&b)7%6}{c$3JX)-FO$PPsv>F{+G}{(C(s zh)lm;PEBOriE7|O+J&-Dx(hL?jDw`R*M+GyvO%iT&!RXU6~E@=<>-F@DA)e}b~zqz zewDVs@~h;N{k3uJ&6^fv)p&|I*=#W+jn)`V19BuQk?dLGe@#eN@2*v?_(sJhU69r* zd`M4vR%B&aZhkIrAD{mI{ra|@?r=T4z5f3D>GA&OJg<(65I@^`8XZ^_HelDxks1V% zIEOo8h>afUUaIWD8x6F!f(~*m$(pDp`9gdAqA0u`6?xhJ1ldg$#i*>Z@wffc``vCg zne@Bc>2^CEZnxd;ZnxS^?%tpF%gyJbqiiHfnDtHJTSlV(xMo-8T6Bt^w%(ON-5HQp zW<(e0?iD~$M5$zz+QQJWiCk>Oj_969z7ow7rsm`Or{52&$zV&@pxd23Os2T#cD?Pc zCU5W0x8tMgD08w+s*h8ofE2_Kg;Pa?^S`u5RxJckEq4&>Sq?{PX_4xH^R>4h0;~sP zW3 zh@hqQq#2CqAZnBd7+N9|Rbr?dbwX`=Mux!F!Y&lcm)(@9Xf-DB)}Ks<9YWr0M)tlwK0b2@ z-gZ3Bq~BpWSpRr?9$V-mIKcGcL~Ss%VMo2QhlYe`} zP>!nc{`YP*oOTAxL}cc)znH9cTS^XD@xkKe{ASo)T%CM6xwyF54yI=p*Z;csdb(JA zKRX`|2mStHHXE!b%*eYPF#(UW?e_=6?~BR%e$LsiT3BdCq)MvUX*+J9h%%BWe9~w{ zy^tKW2XfRMB%9TyHI657=WRXGB!9^_r4lusFXwxjJJlFA*6GaF!xgf8*e6GT{pn!Fkh!^;F{nQM`|H{1|Jbzl z*R<6)9^zXQ6>5TpXf6uI*hEk?sU>J=>nyd$UVdmxI|}Q%A4^R&;ix0L%|^TK9_?4;}wky7gCNCa1;SEd4;8d2_l**S1eNM8@4?dJ-+o0FmS^@ ze=5w?c5M)M;lk(pMlry8zphq;im}f%8%5P5 zvn321>FoRQREn@13*%AI$|jpyh)3XEQV3)PvXsPT2Y@PKh!g5m*cBGaGV^G=;_cEv z76<|r)QVgn6RU^C-iYEphAvX#rmj;(l=ESq&gnhc;u#O4YpT-Pli$pVN}&YvVj`mZ zC5~0<95k9d5COAPDJzO35_PMai0V=pQK!bRW@x^x@wWF+ALtSUV&(C|tvXIRk8?a~ zFNxf03!|zT?&Wi2tJQKEN!Dv3S=gG*5WVs1s@pY9!Yno>$mqL(oCq)DPs>A)F?@_> zgy~v!UN%ZaIK&#a8>N@WeFjCyZJH3!DZ0?wz>F2!7yy|pvq?zn#KIgaB`MxH+8j|e zCkrGYb?0G*(QHi;WNMmwlQ0a~Y{(9lHz+E*qEQ;Gnue}$16~@A+<4+Yg%ndbp8Nx} z)#=n?RCiaF(6)}CCWR2`Gth$Ktkkp(KL`L^!N-;E?e+W83!5IFU)X;$+8=a-=X2L- zRns{4EV^*KIEv{Apbg&iCUkG0s4%H?-w$erU9R6hC!izdfpV2*Ocp)v(*E^=q$}g?p@nEia!BE$mCIl`xOpR+@wi zf`wi$i7k%?5|-%1J-;4xeV^^=+Ga2s4SZWw#Ojr*Afwh~tDj4$h_F>(DN2h@EoJKo zOMa_!*N>T(il8!Eu})L#XTM&bejaz)wpjy?x9h8`oAJR(iD50PN!KD41Ukd>5|mkJ zg-u3CazFq&752~^{pU4k2~q0?Smo&D$HUDt2&O6!5ffSz{z!^6%cZ)f@PeanSWGRd zqDUWi=T>2R2~rT>UBQ=_-RE%_Pycy%>C^)%^%yp56#yxk6J#R<5J`qT?8iLDQtTZh ziC02&e1UjgbByNb;5l^DHV@Z7zgkVsM2sBCF-(NV+(LJB9@5oezRk8LVGHrHVb5<%?MYauv@K45xUO zA}ws_A~E6e9aUwkZM<@SbNloAbh?Q1{LABj(g%er(OX+j)AH>xuT5H5*}h% z6-uqLV;vW2IQKbqo?|N0DNNKix{rXn`NhngUj8`U*aqGPZI#FK@yQVnWFF7FGaaeqgk`$MGIJu;GGn;Xg4Am-?1ob@M*XwjH{ec1%6qG5Xao%QRuk8;AA zu)Mho#0BWsm<%=@$-pTT>>(wEGHw@k1jDB2PE?mT6<;&-;O#}p&=Q9NgC*p!h zTqXz=lrVdm2O_VCSYJ!0K$Fg}*g{l4llC-w=I+&(iIwH^=yK7xxC4Q}xB+!}U7_|)-(6QQTVG%m6gOR)kE|M+Z&bqc=r;Tfn^}}?rs8(ak%Chq{F@z#t(WN9u z#5Gh!0Cx_Yq{FOe`}+c->}!9V7l|=V3f+WgyRd-;jCW}VXm_s(B;{5YNB^wbhPtmP ze#Hp7XXoPyYN&5b=8@Z|x@iMD(P=rc$Jk>we!cD59iw7sicvXyj28>nNiqxU46SbZ zsvSh*hIL7SURenOLd1HIDtc|{puxuzP5Vfdq`qeUy8E zVlj(=0_UkSed+`Ry}k)h_quL(Mz53!e3e4gpo`vQ)7+9_r;ZmF;9dkjtnQO_tOTPb#KsZFvx$Di5t%L@}Nt?Wf z;|?*YbgrBEv^oP1uR19Hi{m!xBp~Zi*){+)ePi`Jo@AlbPi9UuMMjRIDg$5M!I%4$ zZk;BWEYo;6$(Pq%Te^ii$|4_Q|2?fMR21pz z@_RV$B8!t1U08&Y;3!<=)petLKL*SV^CV7D5l1fryB3u1|Ni*+?bm=Jfxm*)>zAxV z2bc5dPCqfeh92M*;;^aCVFZK6kB^V!Y-6i-=f@Ex^dOFa$Km@~y&|nCE<$fFGb{f+ ztz$+{SvXeO&i#@+)G5fNUc|03N`kU8?CvudE!C#-Bu&4s+nQ~z&+%j*R|8+Ada&hXmKsaDhQIm>2bnw8Gn<3Ntof_w9GzQgf*l@x8wI9a{~7+z< z=5N;Ly-9P30sQ&-*=VJcJ#YNFvg-!fuXJib_Zpvm|9%X@Tt2>t!L;Zs4^L2f#*PL4 z$7!AZe@^QPhR79pN@Mxen$AI`JfGv&GDNz}3WF%rVqZN?>GVzF`O!l+FoOa9{`=$i zZO5;*4O=x;`|zsYFAZl^1QIn`^Ki1f8P)u)j5ArV1pPUnado#;ZcNi-pryGGrrtIf?^)$RQMzuarO0q1@>Q%Pk~Xn4~7 z-uHdqrw`Uu$wTDMoq)(}V-H||UR+$55QymNYk!b-)AizbvENG=niTlbZ?3K(kc&S9 zvoY*l{g}2r(J*R@Z0SkyX4oIv{!Y&Wp@qKzAJ$kCRYPKB36@hsp&DmOr6bLHcDC7b zmRaU73Y!}VtQ_UEX1VQT&L8AsX4UgDf6z3W&5Iy_rKK7;yz`-{wf$ALN>iwhqNw7@ z{mnI~kLI5sQ-;?!uxj)ga-Fq5-(*|gZrWxVL(EA$w^Gv{Kv^32`w66Gj=&TPUg1QY zB3Eb~Uuf_|YTWxRd3AxaazZJ6IYLp4yjkv&AnOqQ!}ET>3$Oll-`b8}+iQPh zfk?D1JDN{J7t#}%e1JXD0MXbSS^e0d)&l7)A3$8$5QPoWMyFY89}RPdvUPUVqXJlv zOV~@2ODgJcpk0i#Ih<+KI4;ZWF0KOjIG0(Lxq(^`OF4ohg2)ZOygfhb<^TJ6H-dub z8tQoC+qu~F{pCc3%XG~kn+R&AWi?>UfI=7RpsptSt_h*QnuLENDptLf*?-$Qdhz1< zb?fHcG!%sjtrO%bkro4O`4L(t=uE~lG``3L#h|&upQ%Y&5=%^uN`~xpcK5yWtE(&M zV}oEGi}1y&v-LcRBH!QakY>;>4$9sxwd{szn$c=;EP+ZxNJ8zqZA35JE*;S`um=)l z*oP*+b$b5e`^*tp3s=lCxfNH=%lRKAT36?RP@Y^UOAlX4ay6~X4U7_LV~R_VG4Uq5 z{d^dJO6hjZb=!4CthD31{d&LiLQfZS-w2^j=G!2mZ2vCA)O>+JM6oko!gb5V1bHG+ zXRG057oO12UwxZRBt_H8_K;gSjO4DDt<)p5PSy>&N%Es4`Fu{63pA23t&Hav^W-70 zpWtcc&quDwic31X`Ct(AuUlus;kOVQu1kb)(r$N%Vh|0}fU)aL(*T5)wHg~J?_&(& zVJw9mxK75<)j$#(_FJdDuHB5bi(}}1>q3Rr70QUS-@IsZw~iMWy~YB`1zNtXN{Ft+ zdn=B$_(@V2?SqiwZA_c`ZoSrZFrRj?OARhMRD57M8XUp;GG26h+rk({rrl9J0GfXEPW=@G+SOn~UpGIFH67+*6ph+%6b zgIP3*heRd)LJ$de>7d(dJwKvjo#A|$C@w97v{`aVGX91Pj3Fn6OGsvoQJg@(B;!u} z#e-Uo4T0hlnAE*}Iv8D_o}C??U)s@joFIW$FfK|YeprNQVNPi5nc?&(F`V`XlSYO!s3a$-ihf>5%uEhbi2!qq|N# zZ(c;JF~XoVadOwsrk!J#J~~y^rQIeSq;_z5b$WVw(}hA`1d^lLrQyraV}TQU+#X`! zpCohhp;ptlyKsQCa_d5Rgw_?4m;A4a>SQ$8Kv^78gB=Rtc0VOf7)m5wX2aB9cCh|_ zmK?`hdl0QWjAmmEJL}YcSntM?q&sA`%;wR+hO9OkcHxtTqlm7pVtP>Nqf#PC9I2Hm zw6}CosP`)?+((iRsjl2Fk%ZFnWy5M-S``vzQD9q80-GR{8nB^Ff4<7r>uj_2eS6?9 zLlFD-iwQ`VW-#A{@g`0PeT;UL7S~1et?+`{Xf-X%qQyp5=+Hvs@T177s(e5$71$m} z>vB`Lt{aDeFo_};N07KRq&x!9SmQ|zI#H;p&NN$Xx2w(8YSNNtS;5GLt`>e-Q0^?K zErk5@=8yXyLy%zRHe2~iCvR(MS%)eTMW7M~ED+mTZRm%sV_nn;G6Y#<)NQ>uN5YZ8 zVzS5pJC+S7ucMfm)Q1T1VR!rvt>i+Z${Z-Jc~)&F(5^R7}X9A z8x&ga@UA#wm(QLwR!2mEox3S<{o35U2)k3Wd>oJ4Rb|qjRaDFtM7jK z=D0>(C})`*tz+X%ncr1$Qb4Bj5xu~ilq#=2LeZ6ywc(RIw$N%KuB*SQP~0>ENeRlG z712Qa>+4InE!a1!^-dzlnf{;?lGY{NLskH(tA>%cT*K~%P<&|1=pL~nDEy$HDJFz5 z8E?8TKD3colm8D|S9U8D@}~q{z2x=T!5I$l3yjE=9vNf#HZ)XMzx{af+0n3i?2I?5 zIbUtyhCpO=vkh!!%ip!(ZK4u>e|t>}&CsS(D}PCKEp+R5J_O=tn=Vz$)@ZXDnQ5jI zgj8a9Yjf0l``tSxT6L^We1!J>4_ZgzOf9eM2QCH2zL`@&&9QtC%uFq2VTgk3BI)DT zmnScOcc79d-XfmH-ZZu8##oIPnV*YVO%kB?&)yx;F-i9#u$s_+Ay~)91k-EgYcJlK z1Bhr8d-N0Vu^_mh=+nXA^3ALJae^hOptGw(kR1I#MC%G)>i|hBT{-FC&q zfTq^{&y$}%oxD8xe5@f1--n)%_yHD_pUo24+ubc4qC?+l5Yqnes&#hstb1WW)4r2j zMHH}##KrP%+D1vdfmLO#JOqn_AYBx3=WafrGnF^5ei=(htMehv;UR;f090q5sz7*h zkdfn?p)4?Y!t4~i}|Kq1me>*w(tgEW3z{+0e>vWqf9Zy0?4?EE2f>Hq$ zuP)x5_h=xn)w2n94cK0Wrqnte-H?&v-EHO%ccF&~Q4)elNaL^@-Bt@CStNuVSK-G* z9@#=wEE3IHbZH$*-U8iaiiE=~LUnF~j&PmZuTNgX>&b8bK6&}kl{8f~P=dX9=IIDQ z&!J#NGz?95Ro5Wlmsh>BXZ;I1NOz8CXt%dIv@SB86N)uN+ENVJO-Ho;smR+8=~}ag zy`#TS%Y|CqLUjhO9AV~X6$`agufy{&DCTsCXV>|0X1O?MR1%rYVMN&Z_3PhXKZQV^ zKK<>lColi?dnfrXCD-GXHkO5xkRf4!KvE&PB_U~)9!nHXwMLw>T9uiqZGmo?wu_zV z2xIFEdpvvg|37E%efPab(00Z?ZL0xJ^X2}0?|%12w&wcfQ$J_1hsiXAE1aC&hX zdHL6$9|-Mr>BDd~>-V;e2=-y%VL{IzkJMb$2LHvoy&qU`ytnmq zwUSwCZ^G_9PbCI^4nhS?ZZy36*_YPT001BWNkl<5QITI>tEzcB~Uxpwj&7n8-9M=p9Qm7IL+H`-utv$TYs|ibA2P)7>9*$ z7S8(PyaLt*`+NXYwlLFE%8j>Y&oL{&#Oo0j?%M6mHx2g`^eZRmWbEz~uKQHBGEpKW z-r}mwyUTg=A2l8G-ZNGKf}eHR5nXo}j26RDbh>dh2;y)$yy*2-d>y{*-od(|9FH{uG)U()d3oMjk`o*=JFAz)joIwf2 z4dP-K5Z@FGpz+JIy?d}Z$&F`05VBXQ;jCGupYhi#z?&^c4cJRcAdJbizxlG^dA1_i zCr0W(M-Y8+&n^iAx%q*wnQ8(O8(@|fX!=FBn6wfp5RS;{4&rLH8p_p#pMw}N1@VRM zHja09-n|9~){hH?_A5TfeS=mF|(&4~&%weMi&WJh4=c=wK2>=(5CR(Eh73!$9Dy^gxA7Thf; zP|tSjf3E-0i2RFi7LVY~PBBST2S0;APzh&oU$b4q)&F(2wT$WTW8&s~hjGz&8KsxX z)9h3($2+dY9z2@@valbKCrG;JXGfiL{pqB|P^e-FOKBBV)oHSdW+93rx2u`F>KEzW!pRYOr(Fb#7)0729AaaS!eDG(Me5z;T_0TR4~H`-#>12So; zgR5RyJ9txat#LR)80zFbydz<+7nAcU*-UU1c{wmA*a$<;CV_x*J$U6u)ElUaCU4D< zjkCzZGK6Yb7OUUzjEd9NSdm5coPrIx^~(;^i(*kqgkf1Q8HAGvIiX03qoE&_{d{hv z-*u8Cd7lgh@E1o5B16A`HZ{~C0rij1p5RvN(W(GasU0F;$Pz_!Q?$s+DGahclEw73 zq$s)6ToW

    |dO)C7U>dsb7+;TF%`n2a&>7p7z}L`63;#v_nhGPxWZ8@=m^%F!0P zA^5yPwHi!I8idq?cd+wa-h0Y{WHOod=BuM9&vuGp8VD5-#VKxzFn~)_6aFN=*h4SKy;92E1C3<{3!D4m+!&c8CVsR3l?Zs&xAy0 zI<64T`U0M3^V8xR}Sw4V4wzliKI1b9% zL=(y?sbL%Jlr<;G^&r6OI{KJ-f)-(v3O&ns=HpAmDq;J@CEkA>Umh z81z_f*&QDZL9tLGepIpy6LYr2L6;402?$7GYBTcIugmwh+Lg5w-M+o~d);MSQMzs@ zVoZl2hRCD|14IxKM7h+QC|YIL^@o7M`DP%@?i2O8Kf*BBN=A?#Vp|pSfM{H*3P1?S zRbB^#2xPrdnG0kolX>{#fyQVytdmwZ=iNs{QV|ki#y)2d(U=#7ZyJ%5X#$YTN%7kx zl2R@Rg3R55FTOr)XdZ5AlEfh(-D-gWfskluu8BY%r*NR-T01=6b~S}g;SD}=K+u1% zhA3I4pj^rV?|i>vNQ3nKs@^y-xK@)(0PymPm zKn{Lg-gQ}VJy}^B0Iswz@HRN4NWl8dZP||fbp8asRkQ>@Fa{PX$Nqcjc# zQhD}jBXapDyPP3gNW{E6aIgYM*3yjmM3WnNCKjiLlY|4gt00_(z+WW2Eb{H8!_BSJ z3JPQ*)wu7wnzwTNe6Ln%FRE4rtUd24sRKG)5=c2$-x6`e;xrb?CX%x?;N2F+v)1JA zwaWRb3GsZH5Hbw-?KtO69z`%~)J%8#n`5uDsUjuP?ihnCG$_peQKtpnMI<50&fk%-LQWQmTPybkNr+T&+ zj!dn#dW=AnoS5sfIJFKLbhhwX=HjS1asI`DU?fid-erl~{R$BAJ6-E^y0OFooB1(H zr19^k`|b7(AZxp;FCdjyzB08=v22l|U@dJv=uS4A@lH$v!d3e(tQ-DJI(J%=$)uBv zK&=9Tfwq2?vmq%ee^}jLyCIRKTJ7+Kj}h_4@o$c1gP?(wC`B>Jt;sPDVh2x^djjIj zfjD3AT#gENr^0skE^9P`Eq;^IUJfK4)@`M{ef)WUe{I3ivG1q0$$-!dn)#6_8%_et zVmv1%5p#i(#tXrwn1z#N5^>b806}4>?7H-D0*V!1Y-mQ=_Wt*ulhvj6mnCAG>A^*&94&(2Qr!>t|4VOXXLr3e@Q&B6)Rcrs^{2BlJ6}IrwBTR) z063QNbAB2~*g+sI(`JhQj%tS%)p%vQEO8;3LRK=7qD&paB_LBb&Jlq2`~fP*{Nu;B zZJd8tO#%WqSY)EZhyuy$3vqM=5LupPw$|h?Iq0Z`1FUe_vJ-|vA_Wp-jfJ~`;Qm^H zLk$HYT#cFRzEW?M{;1D{BK1HX5wqQ(|Lyz1=yo8ONHGjkc4*o%iAbqxF_>TG=ZU0P zA(}7M&Tm;7kgU~3UFSIT%_Gc`G^;ljDFyy8--NF++fgj3s$U^{u@Xf7-5g+CaW^^E^xLyaQ@x@_~&SdbWeJM@dgkG+BMcX8JJKfwx<}+ zL<^G;o+am60ZjrVt?9E`ya-mrC}cP?_n+j#8*Jt2&9;>)=92S%AzQVNal1VsizaRH?Rm;8$pSr zw-y(O=4kZ3o<%qrYPM?jM!jEqx&QJX*Xwu4C)ODbb5v`?2TxFN#RnWQSgi<|_|mL( zG7glz@nYy$P%2x+q~n2)0b*i;>qsi|00LQQ=mABecNM_#jH&i^wEy8^{O8+ytb@^$ zcy4DEC&u}hata8TFai>8y?R#M9y6JEgahFwOF6JJ zy`uoM*K=D@|Kqp+jN;KK?-S2i?8mY1$370};==d*7x0Dr>JXG8dHRe*mN*bUTpke+ zahZU{5+-PiyC|52#{<#fji%&LGVN*x(YXddjxKc<1+!ZZ&Xt#l0p3->aA?nMzZ;K` zC~S3gsH$g}%B5FM2q8Fa^5SFq4*9vsA>xOAXKQWM=N~N}ymkUZ(S*o?k4aYss5wL~ z8H0EOjiRBky@}=`5A#|Y5N^IOXRCsv-q*l3+(O{Kzc|PXf~|bY1c~QOf9gv-c>zRo z;6s0DYx_~mV-ubZGV~5d!&3C^mK;qI9N)=2Qiko#vRW;7!jsPWfrvXx`hJb(S>#%U zAle^~V6SjyitHj|ngkh{2lq4Y!_be{HrKdC#spo#HT1-ec5whXjh>uCOtqw`R!#U3 z=YBlr&F^k9bw0hx3-br2DKi?{@@`+ zlc*stIH2|bVi+j%z{*T+{Sa(#GF@jCF^=?F!SUsQ2k5iHT~vi89;gP4O}p+(j3<_s zGMnnhfP~?zhnuBem-u`?Cb7MOpv>YASX5pLx+q?O=tMG939>npPI%;ef)nwtPXm=c z;iuue3RGu$6K2|Gts(cp@DbWh~MEArY{-FS?tH3p;U`^RZ{Z z6gLQ1Gia8LGMFEpVJp{ymEBG^o8zBwuzZ;Flwrmlao6u~(FgRhyew=QQzV-r?5dK9DM&YDDKt<^r{ z7R#SYpA$c@U@LXN@?yVfX#s$2=VN zu?R`12-U;P!8}hhykWN6>VLzKf+q=o5(w-oP!Jr<03a{IxvhBI=d@Lde9cr>B2YHI zAPHUyg7lqHT~1QoQfEK@uHYE0`pKt3(x|15ktUXv*>qw5Egk7U4Fr5F<#vbAO!C(N*0?TgV+8d`Nar;L(rzA|FaOcwa=FS?5* zISW@=-+@DfiLo$4-LGbgS~|^0ivzJB3WzLCaBSJh&<0QCLr}6iKX^{szH(04MBbic z*+KhDtU6(Gw;t%QYy2f&{TzxCj;tZTd9l2_+=(A8b{ECI!WpOaomXIc)#!GL)Zd~9 zw53FN7DZj|V9N%2Qw%RF(zbIx4iY0)BoLfUTwi|szV8{5fks>yq;>z&fyhg5G@c|{(r8v$4wBk*0~#5$axpq< z&V$C|&YC*bfEbqP-T>lbteQ*0LjIATDLaQ8vX9Yvj4;-_3n?Ja)^i`~L5*gqwfjd% z6U1e03W!s%Q+IptNK&Utp!qSz%;==o+ zM-R8V!sv>vRrzJ{>6f~xuJx18D6X!s#55ZM5fv*rz|X`uFB8NnMDfOobQK6QO!KIB zK84*Jv%52iL;^P`j^nKD4PnPG?>xe__UO*FhO>(}@4JmNqLq@ikQC|ne^rY#GsPWp zLANHUvS~)qR%Ci*TirQBY;XKpfg+U?4RON^x(FtFbKN+M=85PZ>BSN`1vPkpi5U08rWCAFmxLWP^GUtavy4h%)1YRemK1offh(N(0Z1wrtl zdzPkTdt=ExRv=UR?7De;iM?c}^I~sJ`T)ckcUE&befP&(Ynz)mC0Z$E{-=}2{Z;;s zzNP<;Pr*L>gLx3EbDvzlvX8ifY)Ot+pexeA115qOve1SaNn|pCPwZfzaZWYpPkPN$ z^tyJjITYM2Fuwq#{^gYp1T*M3)q|T; z;)&~ScpsMMiHcQOX1)?$H+2D{E$3kb(V^F$G@GZFg8@V&O%O^GPWHeI>KDj5mjH>k zwl`5-ktHSdfQfJ_rA4uYZj;w9mG!5eqnbPI8T#mf>K?V#`~d->4mvFkmcu_}xHKy|5aAZ3D|18Cjc~?mkLw&m5efoK? zR;-$GdQi~LF!^*z>x>~sld#ZJw8a%?@{TETRb;MCw$>TUD@W1U)j1mBV-QHA*~AvU zAbK~NOMv9!HMBts3#D6iqohA_sZz00~#OiAy>w0QK-GfmAf@A)j~g z+3&yY72T?&f6!`ADJowvhbS4C3n;Ez*xvMr%%G+^n_-cuXilyNg9oQGI40FQiKc6< z{us1fj2MI%)Y8PAZ@>{tOMn`Cz-l59gnqJ&-c z5aB>g+NOnas7b{kIIf(oNEPMO|Nq_jd7kfMdp0@omJvkB?(EEX$74T!etbW$tyX!5 z&DrAk)swT%hK6kn>+1sVn*7(A<=1$G73euph)t>XCV@CH1C&J!W|`d{k6!-uKe2OB z)zoixg{8EPcE7^p{`I50qQEy#qiMS8)hn9}xzvz2=pMhjJgdXdfDo&EH7P`N7`tkO zr+b+X_FA+;i|sz@MMFZgml?FD_m(v z@e==>#UXC7c>eD4VBTzxz2w62a4NZ#*RXbbv~}n40~)UQnrZF5z8e31Zi{;?7RR&Kq&#Ft#&upe5d~jO z1GcHKMFckJj$rsrDQV*KHMJI4ErV3SY2_{!{ABX>bPU8S94UtEL zu8y=hW}83sx98aUum1Y_-J6f^N0aHw2zgc_U&KmgUUfX-I4m4*CV?H{jZdkl38ZS4 zL8_uMBx!3+-L&0!(th{$=a+Ad>7Jc`4=W`$WRHekX~*jN?D^&Slh1AE=LBV$yMt#G z`J(7`oz7^QC34jgtqsYUfn27dZp=?sQwo%OL>5Icw-LNq%|p7aO$emKO#$h~h53s( zxl>$(8nVF+;ceq&@oN6vGYap<&GF_3u66Mb4)wbEU_Os;_z}xEkDZ0=C9W3=Ed{v> zuyXx+2dp?r3#&RoS|z{P6^aDZ#SFysO$y+78N>MASW9+x8>f=5A98WQt<<%6G@9+* ze=*%=RiW-P8+9aWdagL{uac`W5DBV)6=I0Bjs%62N_yyfcvqWK>ufLiJg#=*Q*yL> zo0hNpZB>GB`7CkxEjwYgK8*U%O`2Dg7$=0v)pk%wXUyP7yqWL-Dq&_ z9_<`G+Upx7C-?vR{fqO-d^)D5Vmfu>>3ldCyQy)bl80EZ@(Q$Yk6e{Rd^0k}vDcIy zc2$y0YHzmS+|_-Ms!PyCl@rx^YqvJ}&(iVS zwOkU&{6A`Mb&*=9?v^a4fZ?GU@k()P_r{I88->lwH;2^fc6M&>-jK|JTenW{9RB@c zC=T^rZ(iC-Y`C7kSe>zMEhGU9{BmRA=XtS^7{u_ z!CU*YD{GOx+1>r4t)0`;JEtVmwzdEG!-eZiEiBgB*Gc3~68JT_N70C|kC5fV>s-i#;=Do8b<<)wa1f|9A*@vPFdgU*qx_tw*$xI)}qGJtPx&SuA?&_?c` zyN`}v9gIc;?nh1~UkwzcjFJUlZ-DE{N&dJl$)j^niUl)Nb7^~OZ(6Ecr@LD#*uXS} zPlNB16j>V+x`WBTzPWXD`-oJq`~DNQy*Bp<;Ip~6e*ETO*s00{7$Z*8v6P%;v$_m- zY93o0Phzevr4po8SB77dk0Ry+-Y`e1ofh$W=)gc)Us^2`ZzsW2>qgz#$KStsytRL_ zvAU6;k`3`FMB|I(PH!%LxQr{O0@|8G&)(PQ9|qDg5-R{#iyiU?JSs8Lwdk0-Rs%0@ zM)(?VQx%$&aGWW?;%k`2O{zAf|D!N@^2g!Br~9*fJJ67u%(gmtupU={lO{FDl?^n|HrHf4*RGUs9v|_xp?KbcIYt*fmz=apYuI(eh4X z(h9b+#e^({)U3eFD@3kug=-aHZahfFCsKD0q*{1eRLKkCrzXjAyR~jSogAD$d4Kuw zp9DpbrfNX7DzBE3#A-C;6+tLT;OU z7q0#+NHtS{vhX(C8{Twl+uiWlU@{?X-*H?7hAO%+T@wayn%>TH}6LLn|WMBBG(14;Y`+leYmt=|C~1?2iu z>Y6pk@kw?S4g+=Gz}}XH9iI-q5hyTAZhVpo>Z`qJhXXlSCJvpAvTB`R)I=~&qA|#3 zF?kgm&t9=ifGg1Q9)Un1RG2h+*0mP2B%Ztoml}Ng z-1;|2+N%Sl!(;ckgn#((iY1sr zOMZ zkdX(M-lr~FAOhI));G8_1ONa7g-Jv~R3Jl4PG_b2HqrxiwGDnQE+P@l#cfy+DkWXk zh`+w}s`gf(QyagOT33KnrF|ewB%8xDeJ*`Quj)h&wFY(jrPC!FD6Jau3mM^@MhXL? zQA?A00CQEiut-QL=e?AApo3FgD>-->B@CCIqE`!JS>nw$gKCO|nI&&?A%xd6ii$p) z8q$Vfk{K;MRi7vX?y}?sQB<8U=LH?3q2pA3Dps+BvYJSG$@<2p=Tzk)C6!lMp0$`k z$k8p$>XaFa=NnL6FB)_S5)neMz0Q=(wM4XZS?{obK^M0{VXs+!A6ABb!Yv)O0IwyM zXKw;nQUfW;RZgL^$at!AL+Ub?U8`f>7Ck8idU9%A;eIX2H+fF1rMv@EiDp#VWhvh5 z;`Ph%f^`Azg=x z(zgbVSxEzOK8g|DfEdN4`z&b(>39d%3E58#vZqv=$m!@>@QpMCl>#)bd>~x0u+q>o zWDHT8E2BB&>51zsDe7jgT-cpi3%e(~cUxwFPviOdJDa+4V4#Ch*8?9#{T6yY# z{G#PN$vE1^9|WCXrb$i8`s~9M>y~!oe+?hih!2BuA3q;SIl5>E#N0$tWQ~;ffPMWH;)ZvOfh6C?H0MCY^n} zPhEn0MT_2nzr=e$Cy3uFAC>$0K%~EdUQJcyi;?%@E=`h3psLEi2{t(H0Q)6zIzBG9 zp_R(AiWn?yix$ale6o0y0l!E4aG|^i_0fUl6K!q@4#w|^{0|z!4R0$nMRwqCr{aUr z8TlHiT5muOI-U`cSssE^o(8T<4e5vcLhsVgATI~}Jp2Kca82Bx3KcXZPZzoUP_&r?`-gJfRJ7{w>_>& zzsQEP%U2bjq_X?d-Ifkzbnqh~uMSsM{s*!I0#Uw;3YY)@002ov JPDHLkV1kuSSyKQ2 literal 7780 zcmb7IXE$%px_j5njzSi^XwbsMj!y15CMNwH1fQAMDpgkUdhed!q03Qzz z=bsY~@6r4Nd^~)70{q8|keGl3NC+e#r6Fab1+jr>80k4UDA`1WglReXrMWp?&`3Nb z`{M)+2N(D8Eed>m3NVNU1pa^Hp&dYi3s?iJVW2Ss&`HoRNYEa-0rZbSqGO=_iTB^Y z#zDix!a&D;e5ytaK*PX5!@|JA$HT(GdSv`zV`7m!#U>@=lhZVJA!p|Q5Q{_cmzIvj zyZEfiaTZo>Xkd27#5$#bP{O1<+^y(Gy`A3Wdi}We>zr;Soj+66eRd$>)v;4JALCGqhWf6D&umB)!>jQe*v~`KwZM;V-t)^v)_i*D?r9;4V*F5*hVNDkg0Al0Sh4WW$>s}o`$~CCo=H2$=GQj6QZM?h;XuJ67}CGqnAu5?y8Uo7?^GLTV{gxyM^W(rC}`qlK||Qb%h3QG zUpX=KcIydOEX~)uWH#1|dV|Y?iGAv0V&22bE02X4pH{kn)_(IexHC$4aqd%D9Deh- z6@?#i(A#zNCQN1s$s9}NaR1Jv0%>#!!s{f}fgr^anEY+)h^$ zV#IJ_bVZVdQ)wNpr{FXV7x~+rcAM<2-QIJnPz^;xJXTAha^#v#6TZ4L{5U!OnE)(E zvK}h2=ACcZ`a^&5#DmKU<>O}@qa54T3FGzzu|{s^dIpx_%QS)nn?-qFpE1Bzx$^9h zc&AC+#u9y_0XmICB2?LTI+J3@`|$TX{tPOHoZ()sv6&R7swW=Sfkp8eP$*P=7$Vpy zEHuKH>#NV!GRN3Hl#QS^pnqK%+e1x&5M7`~3EE;9jt7v^>>rpTyzO#Q@f5$m>%3|e zLF|e^&LueMiJs_*XehkFIHWChv-X2(-e+|$CLiTxh6>vb;+J|E8%=!EZAh1$I5O|a zEc3J~LO(ZHHytI8R7J@c7a!;%Q7$`cZubmI!(RY%N}x+=spR=js&#@ zMq(mWV&M8+v8nNAru?7n>OSMEZ{FPnXb@a5xz48cl}5!vT8)3p>4CRs}{VD+H!AsdWS<2c6@7Q>07IG4j|S9M&b1A1H*8cc>@3gU(% zin!KX9c@+aW(m(xLa<9CRsCTLomq}g`((Xaymqh7i+yW

    C_)1(i8?3QAg;enyE- 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 Date: Fri, 9 Aug 2024 13:29:47 +0200 Subject: [PATCH 5/6] added coverager configs --- .coveragerc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 00000000..c642d5ef --- /dev/null +++ b/.coveragerc @@ -0,0 +1,18 @@ +[run] +omit = + tests/* + +[report] +exclude_lines = + pragma: no cover + def __repr__ + if self.debug: + if settings.DEBUG + raise AssertionError + raise NotImplementedError + if 0: + if __name__ == .__main__.: + if TYPE_CHECKING: + class .*\bProtocol\): + @(abc\.)?abstractmethod + pass \ No newline at end of file From bd3f2c4c349c4a678b72594a0cf42dc2aca40c8c Mon Sep 17 00:00:00 2001 From: Alkid Date: Fri, 9 Aug 2024 13:33:26 +0200 Subject: [PATCH 6/6] updated coverage report --- README.md | 2 +- docs/usage/further_resources.md | 59 ++++++++++++++------------------- 2 files changed, 25 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index a52ba31a..e24bc777 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # OWLAPY -[![Coverage](https://img.shields.io/badge/coverage-82%25-green)](https://dice-group.github.io/owlapy/usage/further_resources.html#coverage-report) +[![Coverage](https://img.shields.io/badge/coverage-78%25-green)](https://dice-group.github.io/owlapy/usage/further_resources.html#coverage-report) [![Pypi](https://img.shields.io/badge/pypi-1.2.0-blue)](https://pypi.org/project/owlapy/1.2.0/) [![Docs](https://img.shields.io/badge/documentation-1.2.0-yellow)](https://dice-group.github.io/owlapy/usage/main.html) diff --git a/docs/usage/further_resources.md b/docs/usage/further_resources.md index 3b846c9c..46a55f2a 100644 --- a/docs/usage/further_resources.md +++ b/docs/usage/further_resources.md @@ -28,43 +28,32 @@ Name Stmts Miss Cover Missi ---------------------------------------------------------------------------------- owlapy/__init__.py 4 0 100% owlapy/class_expression/__init__.py 8 0 100% -owlapy/class_expression/class_expression.py 49 6 88% 25, 32, 41, 50, 58, 62 -owlapy/class_expression/nary_boolean_expression.py 26 1 96% 25 +owlapy/class_expression/class_expression.py 34 2 94% 58, 62 +owlapy/class_expression/nary_boolean_expression.py 24 0 100% owlapy/class_expression/owl_class.py 33 1 97% 44 -owlapy/class_expression/restriction.py 356 40 89% 33, 41, 49, 68, 71, 89, 94, 162, 170, 245-246, 297, 302, 305, 335, 340, 343, 346, 386, 426, 437, 451, 491, 499, 502, 579-580, 611, 616, 654, 659, 662, 695, 700, 703, 751, 754, 794, 823, 829 -owlapy/converter.py 399 191 52% 52-68, 75-76, 79, 82, 148, 152, 157, 169, 176, 184, 214, 246-257, 264-282, 294, 304-307, 313-359, 366-387, 394-401, 417-420, 431, 451, 460-481, 489-491, 498-511, 515-521, 525-548, 552-555, 559-560, 564-576, 580-587, 591-592, 620, 624-628 -owlapy/iri.py 82 7 91% 54, 69, 82, 97, 128, 133, 150 -owlapy/meta_classes.py 28 5 82% 22, 32, 51, 71, 85 -owlapy/namespaces.py 29 4 86% 33, 36, 40, 43 -owlapy/owl_annotation.py 18 4 78% 17, 25, 43, 51 -owlapy/owl_axiom.py 601 181 70% 36, 39, 42, 45, 59, 111-113, 116, 119, 136-138, 141, 144, 147-150, 153, 156, 182-184, 187, 190, 193, 196-200, 203, 206, 221, 253-256, 259-261, 264, 267, 288, 291, 294, 332-335, 338-340, 343, 346, 398-401, 404-406, 409, 412, 468, 533-536, 539, 542, 561-563, 566, 569, 572, 575, 578-581, 584, 587, 620-623, 626, 629, 645-648, 652, 656, 674-675, 683, 692, 695-697, 700, 703, 711, 733-737, 745, 753, 761, 764-766, 769, 772, 786-788, 791, 794, 797-800, 803, 806, 822-824, 827, 830, 833-836, 839, 842, 858-860, 863, 866, 869-872, 875, 878, 905-908, 911, 914, 982-985, 988, 991, 1018, 1044, 1068, 1071-1073, 1076, 1079, 1091, 1103, 1116, 1129, 1142, 1157, 1172, 1182, 1185-1187, 1190, 1193, 1208, 1227-1230, 1233, 1236, 1254-1257, 1260, 1263 -owlapy/owl_data_ranges.py 44 3 93% 41, 46, 102 +owlapy/class_expression/restriction.py 313 26 92% 41, 49, 68, 71, 89, 170, 245-246, 302, 305, 335, 340, 343, 426, 451, 499, 502, 579-580, 616, 659, 662, 700, 703, 751, 823 +owlapy/converter.py 397 189 52% 52-68, 75-76, 79, 82, 152, 157, 169, 176, 184, 246-257, 264-282, 294, 304-307, 313-359, 366-387, 394-401, 417-420, 431, 451, 460-481, 489-491, 498-511, 515-521, 525-548, 552-555, 559-560, 564-576, 580-587, 591-592, 620, 624-628 +owlapy/iri.py 79 7 91% 54, 69, 82, 97, 128, 133, 150 +owlapy/meta_classes.py 11 0 100% +owlapy/namespaces.py 27 3 89% 36, 40, 43 +owlapy/owl_annotation.py 17 4 76% 17, 25, 43, 51 +owlapy/owl_axiom.py 518 157 70% 36, 39, 42, 45, 59, 111-113, 116, 136-138, 141, 144, 147-150, 153, 182-184, 187, 190, 193, 196-200, 203, 253-256, 259-261, 264, 288, 291, 294, 332-335, 338-340, 343, 398-401, 404-406, 409, 533-536, 539, 561-563, 566, 569, 572, 575, 578-581, 584, 620-623, 626, 645-648, 652, 656, 674-675, 683, 692, 695-697, 700, 711, 733-737, 745, 753, 761, 764-766, 769, 786-788, 791, 794, 797-800, 803, 822-824, 827, 830, 833-836, 839, 858-860, 863, 866, 869-872, 875, 905-908, 911, 982-985, 988, 1018, 1044, 1071-1073, 1076, 1091, 1103, 1116, 1129, 1142, 1157, 1172, 1185-1187, 1190, 1208, 1227-1230, 1233, 1254-1257, 1260 +owlapy/owl_data_ranges.py 40 1 98% 46 owlapy/owl_datatype.py 20 2 90% 33-34 -owlapy/owl_individual.py 21 1 95% 37 -owlapy/owl_literal.py 306 83 73% 49, 65, 77, 86, 90, 99, 103, 112, 116, 125, 129, 138, 142, 151, 155, 164, 169, 173, 185, 203, 208, 214, 217, 221, 244, 247-249, 252, 255, 258, 262, 288, 293, 299, 302, 306, 311, 323, 329, 332-334, 337, 340, 343, 346, 350, 355, 373, 376-378, 381, 384, 387, 391, 415, 418-420, 423, 426, 429, 433, 454, 459, 462-464, 467, 470, 473, 477, 489-491, 494, 497-499, 502, 505 -owlapy/owl_object.py 49 10 80% 12, 16, 20, 24, 36, 48, 63, 79-81 -owlapy/owl_ontology.py 447 69 85% 86, 97-100, 103, 106, 109-111, 134, 143, 152, 161, 173, 183, 195, 207, 219, 231, 236, 245, 249, 292-295, 304, 312, 329-330, 341, 345-346, 358-359, 371-372, 376, 379-381, 384, 387, 419, 423, 433, 441, 445, 449-450, 462, 473-474, 553-554, 559, 595, 599, 603, 613, 617, 629, 658, 680, 701, 706, 736, 742, 750 -owlapy/owl_ontology_manager.py 593 178 70% 40, 48, 66, 80, 94, 104, 114, 125, 140, 151, 155, 168-169, 177, 182, 200, 208-211, 312-318, 341-350, 355-376, 396, 466, 469, 474-496, 501-511, 516, 521-527, 539, 542-543, 583, 588-593, 603, 608, 625, 634-645, 650-665, 676, 681, 691, 703, 707, 743, 749, 760, 766, 771-795, 800-807, 825-831, 850, 853, 859-866, 883, 888 -owlapy/owl_property.py 77 14 82% 17, 24, 32, 40, 54, 63, 67, 76, 126, 158, 162, 169, 174, 193 -owlapy/owl_reasoner.py 925 210 77% 63, 81, 100, 117, 132, 145, 158, 173, 188, 208, 225, 242, 261, 276, 291, 309, 324, 345, 362, 378, 384, 403, 452-455, 572, 584-586, 591-597, 604, 653-661, 665-671, 689, 727-734, 760, 795-799, 825-828, 836, 856-858, 860-864, 871, 884-886, 888-890, 897, 902-904, 924, 928-929, 942-944, 965, 981-985, 1010-1012, 1113, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1160-1162, 1168, 1172, 1175, 1178, 1181, 1184, 1187, 1193, 1196, 1210, 1216, 1240-1243, 1251-1290, 1305, 1318-1328, 1353-1356, 1363, 1372, 1386, 1456-1461, 1488, 1498-1502, 1510-1514, 1555-1561, 1573, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1657, 1661, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1687, 1691, 1694, 1697 -owlapy/owlapi_adaptor.py 131 66 50% 18, 74-76, 91-98, 110-115, 151-152, 164-165, 179-180, 195-196, 214, 232, 251, 271, 287, 305, 320, 333, 346, 361, 376, 390, 404, 419, 434, 450, 454-483, 511 -owlapy/owlapi_mapper.py 104 15 86% 35, 51, 68, 72, 76, 80, 84, 88, 133-136, 141, 145, 149 -owlapy/parser.py 379 20 95% 316, 327, 338, 400-401, 405, 416, 577, 618, 656, 667, 678, 721, 723, 751-752, 756, 763, 779-780 +owlapy/owl_individual.py 20 1 95% 37 +owlapy/owl_literal.py 286 73 74% 49, 77, 86, 90, 99, 103, 112, 116, 125, 129, 138, 142, 151, 155, 164, 169, 173, 203, 208, 217, 221, 244, 247-249, 252, 258, 262, 288, 293, 302, 306, 311, 323, 329, 332-334, 337, 340, 346, 350, 355, 373, 376-378, 381, 387, 391, 415, 418-420, 423, 429, 433, 454, 459, 462-464, 467, 473, 477, 489-491, 494, 497-499, 502 +owlapy/owl_object.py 27 4 85% 24, 79-81 +owlapy/owl_ontology.py 391 40 90% 86, 97-100, 103, 109-111, 249, 292-295, 304, 312, 329, 341, 345, 358, 371, 376, 379-381, 384, 423, 433, 449-450, 473-474, 553-554, 595, 599, 603, 629, 736, 742, 750 +owlapy/owl_ontology_manager.py 568 167 71% 48, 140, 151, 155, 168-169, 177, 200, 208-211, 312-318, 341-350, 355-376, 396, 466, 469, 474-496, 501-511, 521-527, 539, 542-543, 583, 588-593, 603, 608, 625, 634-645, 650-665, 676, 681, 691, 703, 707, 743, 749, 760, 766, 771-795, 800-807, 825-831, 850, 853, 859-862, 888 +owlapy/owl_property.py 69 11 84% 17, 24, 32, 40, 67, 76, 126, 158, 162, 174, 193 +owlapy/owl_reasoner.py 841 175 79% 452-455, 572, 584-586, 591-597, 604, 653-659, 665-669, 727-734, 760, 795-799, 825-828, 856-858, 860-862, 871, 884-886, 888-890, 897, 902-904, 924, 928-929, 942-944, 965, 1010-1012, 1113, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 1145, 1160-1162, 1168, 1172, 1175, 1178, 1181, 1184, 1187, 1193, 1196, 1210, 1240-1243, 1251-1290, 1305, 1318-1328, 1353-1356, 1372, 1386, 1456-1460, 1488, 1498-1502, 1510-1514, 1555-1561, 1573, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, 1657, 1661, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1687, 1691, 1694, 1697 +owlapy/owlapi_adaptor.py 130 65 50% 18, 74-76, 91-96, 110-115, 151-152, 164-165, 179-180, 195-196, 214, 232, 251, 271, 287, 305, 320, 333, 346, 361, 376, 390, 404, 419, 434, 450, 454-483, 511 +owlapy/owlapi_mapper.py 103 14 86% 35, 51, 72, 76, 80, 84, 88, 133-136, 141, 145, 149 +owlapy/parser.py 371 16 96% 316, 327, 400-401, 416, 577, 618, 656, 667, 721, 723, 751-752, 763, 779-780 owlapy/providers.py 38 3 92% 41, 54, 56 -owlapy/render.py 292 48 84% 79-114, 143-158, 176, 180-181, 186, 206, 222, 231, 236, 241, 375, 379-380, 386, 405, 421, 430, 435, 440 -owlapy/utils.py 775 233 70% 160, 164, 168, 172, 178, 184-188, 192-196, 200, 204, 208, 214, 218, 222, 226, 230, 236, 242, 248, 252, 256, 260, 264-267, 271-274, 278, 285, 300-302, 305-314, 317, 320, 323, 326, 329, 333-339, 343, 350, 354, 358, 362, 366, 370, 374-378, 382-386, 390-394, 398-402, 406, 410, 414-419, 423-428, 432-437, 441, 445, 449-453, 457-461, 465-469, 473-477, 481-485, 489, 493-497, 501, 505-510, 514-519, 523-528, 532, 536-540, 545, 550, 554, 558, 562, 566, 570, 574, 578, 582-587, 591-597, 601, 605, 609, 614, 619, 624, 628, 632, 636, 640, 644-647, 651-654, 658, 662, 666, 671, 676, 681, 685, 736, 740, 746, 748, 751, 753, 755, 790, 796, 852, 866-868, 877, 919-920, 940, 1039, 1044, 1049, 1071, 1075, 1083, 1087, 1092, 1161, 1164-1182, 1195-1197, 1202-1206 -owlapy/vocab.py 95 5 95% 32, 35, 38, 113-114 -tests/test_class_expression_semantics.py 17 0 100% -tests/test_examples.py 14 0 100% -tests/test_owlapi_adaptor.py 63 0 100% -tests/test_owlapy.py 38 1 97% 47 -tests/test_owlapy_cnf_dnf.py 72 0 100% -tests/test_owlapy_fastinstancechecker.py 199 1 99% 417 -tests/test_owlapy_nnf.py 252 0 100% -tests/test_owlapy_ontology_management.py 588 1 99% 830 -tests/test_owlapy_owl2sparql_converter.py 39 14 64% 23-36, 412 -tests/test_owlapy_parser.py 350 0 100% -tests/test_owlapy_render.py 137 1 99% 191 +owlapy/render.py 290 46 84% 79-114, 143-158, 176, 180, 186, 206, 222, 231, 236, 241, 375, 379, 386, 405, 421, 430, 435, 440 +owlapy/utils.py 766 227 70% 164, 168, 172, 178, 184-188, 192-196, 200, 204, 208, 214, 218, 222, 226, 230, 236, 242, 248, 252, 256, 260, 264-267, 271-274, 278, 285, 300-302, 305-314, 317, 320, 323, 326, 329, 333-339, 343, 354, 358, 362, 366, 370, 374-378, 382-386, 390-394, 398-402, 406, 410, 414-419, 423-428, 432-437, 441, 445, 449-453, 457-461, 465-469, 473-477, 481-485, 489, 493-497, 501, 505-510, 514-519, 523-528, 532, 536-540, 545, 554, 558, 562, 566, 570, 574, 578, 582-587, 591-597, 601, 605, 609, 614, 619, 624, 628, 632, 636, 640, 644-647, 651-654, 658, 662, 666, 671, 676, 681, 685, 736, 740, 746, 748, 751, 753, 796, 852, 866-868, 877, 919-920, 940, 1039, 1044, 1049, 1071, 1075, 1083, 1087, 1092, 1164-1182, 1195-1197, 1202-1206 +owlapy/vocab.py 92 4 96% 32, 35, 113-114 ---------------------------------------------------------------------------------- -TOTAL 7698 1418 82% +TOTAL 5517 1238 78% ``` \ No newline at end of file