diff --git a/.pylintrc b/.pylintrc index 6410487c..6731d31d 100644 --- a/.pylintrc +++ b/.pylintrc @@ -612,3 +612,6 @@ variable-naming-style=snake_case # naming-style. If left empty, variable names will be checked with the set # naming style. #variable-rgx= + +[MASTER] +extension-pkg-allow-list=formula_dispersion diff --git a/MANIFEST.in b/MANIFEST.in index ba2d1d90..6b5bcc73 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1 @@ -recursive-include src/elli/database/refractiveindexinfo-database *.yml -include src/elli/formula_parser/dispersion_function_grammer.lark \ No newline at end of file +recursive-include src/elli/database/refractiveindexinfo-database *.yml \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 85850b1b..7ada152f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,8 @@ dependencies = [ "pyyaml", "importlib-resources", "rapidfuzz", - "lark>=1.1.5", "pint", + "formula-dispersion>=0.1.2", ] [project.optional-dependencies] diff --git a/requirements/dev-requirements.txt b/requirements/dev-requirements.txt index 7193b689..d821d0fd 100644 --- a/requirements/dev-requirements.txt +++ b/requirements/dev-requirements.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # -# pip-compile --extra=fitting --extra=testing --generate-hashes --output-file=requirements/dev-requirements.txt pyproject.toml requirements/fitting-requirements.txt +# pip-compile --extra=fitting --extra=testing --generate-hashes --output-file=requirements/dev-requirements.txt --resolver=backtracking pyproject.toml requirements/fitting-requirements.txt # appnope==0.1.3 \ --hash=sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24 \ @@ -263,6 +263,76 @@ fonttools==4.37.1 \ # via # -r requirements/fitting-requirements.txt # matplotlib +formula-dispersion==0.1.2 \ + --hash=sha256:0040412ec3a02fc69055e0f4cf8f661350efc56a3fc4ecfdc9284b6d5773a627 \ + --hash=sha256:010d89d15cc4a12d92bf0ad95cb14292e59cc1f5654a25e93c3453d4fb8d31c2 \ + --hash=sha256:0323e88cd494ea0955f59396ef493c6adfba6f98bd01cf3018b006264689fb5f \ + --hash=sha256:05a63bd889460a6edbf463ef695741fabeb29f97af9887ccb53a111e61488da4 \ + --hash=sha256:107f9446863ee7d1422c54ea38b4d2cbffcfc7f1c8aa521a1fc631444299a7ea \ + --hash=sha256:10e5cc18cc57923048e52b03a6bf27a898d1e8f7f82345a9e5cfac563f788a66 \ + --hash=sha256:189582669edf2d474e19299b896e73e2699a0d734d73a7ab102789b84701225a \ + --hash=sha256:192f2fbecf74b8fd4abfda23bd3382e24cfd04dd32272ecb86b5b997c026e1e4 \ + --hash=sha256:1abe27cc65d18951db941d49426d28630920b1e7f4e8588eb49df1a1705fb57d \ + --hash=sha256:1af600397418a8a26a2173e972496f0e80bcd1cb361693908ba37389adbdc689 \ + --hash=sha256:22f3820d3f574cdc1f85e81ec06fd67e127fc73688c6d375d5399cea83996d08 \ + --hash=sha256:24ff7173d2b02e4fcc0cb4598aad16651b0b2edbdc88275b59daf7fc9ae65385 \ + --hash=sha256:251fba322893483070a88efe461cb74589a70f9a2b8b21b9c135e52f7c4e955a \ + --hash=sha256:33377d49127895c035b73b9e87dd6a91e7e675c65db45e71a5fada624b19b526 \ + --hash=sha256:34a9648bc48fea0e41729f4d53fda57b8e1342642f0a136480bb58f1822b0773 \ + --hash=sha256:41f0ef4442f3ea175949d6bf9e7c924d3522e6acc3ed0cd8a45f413a3e284766 \ + --hash=sha256:49360258d9c7ccddb313d78d42adb1bd2ceb824e79543f4bf0a287a4f88c05d5 \ + --hash=sha256:4b11e904adee624b75b3c617af019c5b8247e4310664aee5d08ec9946a837934 \ + --hash=sha256:50745c714123e20c1b23b3c4c80f4f8875ebe717ed16c77146f8623159e081c1 \ + --hash=sha256:53bb34a1906cf6e61b6eae81fed3c0eab4e4ec2235a4be9931748c6f52c378e6 \ + --hash=sha256:548628e639e1304567fa129e502f2196bb56937fc3d30893295ca99b76d43482 \ + --hash=sha256:56867f3660dbc8b413bd5a5ca32343d39b81797643f8dbea92fed19915fe32d6 \ + --hash=sha256:5983a96237660428d8d748000c9c0f0c73602360a2f9670e0212563e14e520fe \ + --hash=sha256:5bd4a311c4101dca13de23d081c36a384ac7c2186395b00e9660d8b829ef3dd1 \ + --hash=sha256:6420ef098b3a20b5466d9bd1b03e43deabaedb3907362332a3fbdd2ee0e2ac50 \ + --hash=sha256:6547d5ccb8706790e81bc9f5e5886915317e2b150d3e2cdc552eb3e162fe4a23 \ + --hash=sha256:692cba1fe033328c88afa54c0176773c797fa8de2699dba53242a676291fa29e \ + --hash=sha256:6b7365a1498559f5183721a40bf0ce99a8e340264e8e50cb28fad5f0a1ac2f9e \ + --hash=sha256:7287d0f339d64458a444f91142cc5a2bbe2b19217ea67bd2860a43a52a92c02d \ + --hash=sha256:7775ade7579c91cd3895823899bbe57491ece9f4e6e409b9623b02616a93d64d \ + --hash=sha256:79d2d0b7156065cebc4323a9426fff139da37b80cad9b1501ed2525ebc88e955 \ + --hash=sha256:7cce3d64a7870e6ff959b26a1321a2f2d6a09717c27ee9f8cc142b127bf16042 \ + --hash=sha256:819abae0187337c6871996a1304927329383bc606251ad88e1bd51c31569f924 \ + --hash=sha256:82ebde297209caeb48d095798d989f59af477fa386d97db5d0b7caeb866dd3f4 \ + --hash=sha256:8f699319475817577ddbb38c62f87e57fd7f7a89657332f3cbe58f27f903dcd4 \ + --hash=sha256:8f73fc3b166df8e23514657c6594c1260268e86106b12dad271f1f393617d0ec \ + --hash=sha256:914a42a1cd3fe46705156c59e1db33db2b88545df49732aa8822f286046d82cc \ + --hash=sha256:9eaef7070ccd955a96bd227ee6b3d6609ae9203f0f3c0abe831cf2b4baf28846 \ + --hash=sha256:a0e7e43f0ff849e089e452f244cf20d3ea3b251bed76416832edc5dc6d6e7663 \ + --hash=sha256:a55273aca55fcaa7f8f57d39ab3ad7b25540ca4fb2666f7eab7759f21f1dc19e \ + --hash=sha256:a8deb1743282d86b1aebfc77b35aaba2b6bd7a46a2e16539fdd2811cd5320a84 \ + --hash=sha256:aa56ea82b13f128eca27cc093d7ba1240d05abf5bfd77874abe4865fca0855ad \ + --hash=sha256:aa7b2346af62700719a6a2dc200e8db77488bd3616a853b9141b52c8800a0b84 \ + --hash=sha256:bf83c2ea18667ce30ce489827f3fe3108d4fa7e6dea37023ca8e3a2a8d6a6743 \ + --hash=sha256:bfde9e5f5d6680ac5824c3f66138f777ca65a451357be6775c91367697a6271d \ + --hash=sha256:c6ec4f997ae2b3477bd50d1e714934c4e0a7344d61c8ce7c2e2876ae1d37d15d \ + --hash=sha256:c790268dcfc9a1141e0e488a5b8570184e61fbc2fa5c0cfeb9c0b1beb56261f5 \ + --hash=sha256:c825540673ff7b36cfcec27084d5fab6385b8075c1ee2592479f044f37053e56 \ + --hash=sha256:c8bce86dcaa9547052f538d02e8c4fe2f1f5a3b957075caf1fa7798255ef3af1 \ + --hash=sha256:ca89ee345248965002462160c9d7c4bce10be69e970a4e5cee85166b526927d2 \ + --hash=sha256:cd7e6065de65e3771b397e8a547d1aaf14b56f64ce313c9020f51c365ccfd9d7 \ + --hash=sha256:cdc7c5b00002ca98da20ccdd2d7e8ff3af26a41e33d760f3c06ff1456bfc6cdd \ + --hash=sha256:cfd92df86e7419111fc2029355b9483c4b46084016427f43e5106ce9ed9e5862 \ + --hash=sha256:d1ae6404a879549a67dc30774b0381dd14159d83cd3f3156956cce045c950cad \ + --hash=sha256:d2d831b5fe7c8009b4b2821be5c665d38da186d90afdac5cc28877a42e949766 \ + --hash=sha256:d9051b73be64a8e2f6044f3ec1364835cb21414d0ba261ea4b68a7f81865776e \ + --hash=sha256:d9378e63867c473c894d69affe0c70f5322bf2fd48bd27b5d0f612b48dee947b \ + --hash=sha256:d98db634abd5a112449c257a991389ee3fd5a9f328a37daf425a7e7e20c55a93 \ + --hash=sha256:d998142f4dc5f801c9bf1a77eca12e3a1323142530d96438eaa2c0871c514261 \ + --hash=sha256:db3bd0cdfd48a47e1a3c888a00e2f88b5970b5422addd44913063d56b4316cc7 \ + --hash=sha256:dff82baf856ae5433976a9c94bae3b921a04465951c885feeae4ed678d3e004a \ + --hash=sha256:e0e009ad5372af3e29f1f17141a76bec54101a6e3ded33e07447aca1042c05ca \ + --hash=sha256:e70de7fd86f817ed3f994c868199b66591fd17143bbfba8a60b51420cd09a197 \ + --hash=sha256:e9bd52c9a6313e97a94f3065804d46942275ed518213353c7c4f1d5c88fcf87b \ + --hash=sha256:ebc6a294ed7d085a1eb41d5a94c89b1e325e363d136774b35c3c73b5e3a4bdcb \ + --hash=sha256:fdcc3c06b0e20185376047bfa40b80c5b0a9b8623a8936b3f56f8ae1984c7b73 + # via + # -r requirements/fitting-requirements.txt + # pyElli (pyproject.toml) future==0.18.3 \ --hash=sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307 # via @@ -457,12 +527,6 @@ kiwisolver==1.4.4 \ # via # -r requirements/fitting-requirements.txt # matplotlib -lark==1.1.5 \ - --hash=sha256:4b534eae1f9af5b4ea000bea95776350befe1981658eea3820a01c37e504bb4d \ - --hash=sha256:8476f9903e93fbde4f6c327f74d79e9b4bd0ed9294c5dfa3164ab8c581b5de2a - # via - # -r requirements/fitting-requirements.txt - # pyElli (pyproject.toml) lmfit==1.0.3 \ --hash=sha256:d067c3ea501f035af5d3c079e6e6e35dc3cc1ac7d439429a425b0aeb5a7858a2 # via diff --git a/requirements/fitting-requirements.txt b/requirements/fitting-requirements.txt index fed27aa7..78ac6453 100644 --- a/requirements/fitting-requirements.txt +++ b/requirements/fitting-requirements.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # -# pip-compile --extra=fitting --generate-hashes --output-file=requirements/fitting-requirements.txt pyproject.toml requirements/requirements.txt +# pip-compile --extra=fitting --generate-hashes --output-file=requirements/fitting-requirements.txt --resolver=backtracking pyproject.toml requirements/requirements.txt # appnope==0.1.3 \ --hash=sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24 \ @@ -175,6 +175,76 @@ fonttools==4.37.1 \ --hash=sha256:4606e1a88ee1f6699d182fea9511bd9a8a915d913eab4584e5226da1180fcce7 \ --hash=sha256:fff6b752e326c15756c819fe2fe7ceab69f96a1dbcfe8911d0941cdb49905007 # via matplotlib +formula-dispersion==0.1.2 \ + --hash=sha256:0040412ec3a02fc69055e0f4cf8f661350efc56a3fc4ecfdc9284b6d5773a627 \ + --hash=sha256:010d89d15cc4a12d92bf0ad95cb14292e59cc1f5654a25e93c3453d4fb8d31c2 \ + --hash=sha256:0323e88cd494ea0955f59396ef493c6adfba6f98bd01cf3018b006264689fb5f \ + --hash=sha256:05a63bd889460a6edbf463ef695741fabeb29f97af9887ccb53a111e61488da4 \ + --hash=sha256:107f9446863ee7d1422c54ea38b4d2cbffcfc7f1c8aa521a1fc631444299a7ea \ + --hash=sha256:10e5cc18cc57923048e52b03a6bf27a898d1e8f7f82345a9e5cfac563f788a66 \ + --hash=sha256:189582669edf2d474e19299b896e73e2699a0d734d73a7ab102789b84701225a \ + --hash=sha256:192f2fbecf74b8fd4abfda23bd3382e24cfd04dd32272ecb86b5b997c026e1e4 \ + --hash=sha256:1abe27cc65d18951db941d49426d28630920b1e7f4e8588eb49df1a1705fb57d \ + --hash=sha256:1af600397418a8a26a2173e972496f0e80bcd1cb361693908ba37389adbdc689 \ + --hash=sha256:22f3820d3f574cdc1f85e81ec06fd67e127fc73688c6d375d5399cea83996d08 \ + --hash=sha256:24ff7173d2b02e4fcc0cb4598aad16651b0b2edbdc88275b59daf7fc9ae65385 \ + --hash=sha256:251fba322893483070a88efe461cb74589a70f9a2b8b21b9c135e52f7c4e955a \ + --hash=sha256:33377d49127895c035b73b9e87dd6a91e7e675c65db45e71a5fada624b19b526 \ + --hash=sha256:34a9648bc48fea0e41729f4d53fda57b8e1342642f0a136480bb58f1822b0773 \ + --hash=sha256:41f0ef4442f3ea175949d6bf9e7c924d3522e6acc3ed0cd8a45f413a3e284766 \ + --hash=sha256:49360258d9c7ccddb313d78d42adb1bd2ceb824e79543f4bf0a287a4f88c05d5 \ + --hash=sha256:4b11e904adee624b75b3c617af019c5b8247e4310664aee5d08ec9946a837934 \ + --hash=sha256:50745c714123e20c1b23b3c4c80f4f8875ebe717ed16c77146f8623159e081c1 \ + --hash=sha256:53bb34a1906cf6e61b6eae81fed3c0eab4e4ec2235a4be9931748c6f52c378e6 \ + --hash=sha256:548628e639e1304567fa129e502f2196bb56937fc3d30893295ca99b76d43482 \ + --hash=sha256:56867f3660dbc8b413bd5a5ca32343d39b81797643f8dbea92fed19915fe32d6 \ + --hash=sha256:5983a96237660428d8d748000c9c0f0c73602360a2f9670e0212563e14e520fe \ + --hash=sha256:5bd4a311c4101dca13de23d081c36a384ac7c2186395b00e9660d8b829ef3dd1 \ + --hash=sha256:6420ef098b3a20b5466d9bd1b03e43deabaedb3907362332a3fbdd2ee0e2ac50 \ + --hash=sha256:6547d5ccb8706790e81bc9f5e5886915317e2b150d3e2cdc552eb3e162fe4a23 \ + --hash=sha256:692cba1fe033328c88afa54c0176773c797fa8de2699dba53242a676291fa29e \ + --hash=sha256:6b7365a1498559f5183721a40bf0ce99a8e340264e8e50cb28fad5f0a1ac2f9e \ + --hash=sha256:7287d0f339d64458a444f91142cc5a2bbe2b19217ea67bd2860a43a52a92c02d \ + --hash=sha256:7775ade7579c91cd3895823899bbe57491ece9f4e6e409b9623b02616a93d64d \ + --hash=sha256:79d2d0b7156065cebc4323a9426fff139da37b80cad9b1501ed2525ebc88e955 \ + --hash=sha256:7cce3d64a7870e6ff959b26a1321a2f2d6a09717c27ee9f8cc142b127bf16042 \ + --hash=sha256:819abae0187337c6871996a1304927329383bc606251ad88e1bd51c31569f924 \ + --hash=sha256:82ebde297209caeb48d095798d989f59af477fa386d97db5d0b7caeb866dd3f4 \ + --hash=sha256:8f699319475817577ddbb38c62f87e57fd7f7a89657332f3cbe58f27f903dcd4 \ + --hash=sha256:8f73fc3b166df8e23514657c6594c1260268e86106b12dad271f1f393617d0ec \ + --hash=sha256:914a42a1cd3fe46705156c59e1db33db2b88545df49732aa8822f286046d82cc \ + --hash=sha256:9eaef7070ccd955a96bd227ee6b3d6609ae9203f0f3c0abe831cf2b4baf28846 \ + --hash=sha256:a0e7e43f0ff849e089e452f244cf20d3ea3b251bed76416832edc5dc6d6e7663 \ + --hash=sha256:a55273aca55fcaa7f8f57d39ab3ad7b25540ca4fb2666f7eab7759f21f1dc19e \ + --hash=sha256:a8deb1743282d86b1aebfc77b35aaba2b6bd7a46a2e16539fdd2811cd5320a84 \ + --hash=sha256:aa56ea82b13f128eca27cc093d7ba1240d05abf5bfd77874abe4865fca0855ad \ + --hash=sha256:aa7b2346af62700719a6a2dc200e8db77488bd3616a853b9141b52c8800a0b84 \ + --hash=sha256:bf83c2ea18667ce30ce489827f3fe3108d4fa7e6dea37023ca8e3a2a8d6a6743 \ + --hash=sha256:bfde9e5f5d6680ac5824c3f66138f777ca65a451357be6775c91367697a6271d \ + --hash=sha256:c6ec4f997ae2b3477bd50d1e714934c4e0a7344d61c8ce7c2e2876ae1d37d15d \ + --hash=sha256:c790268dcfc9a1141e0e488a5b8570184e61fbc2fa5c0cfeb9c0b1beb56261f5 \ + --hash=sha256:c825540673ff7b36cfcec27084d5fab6385b8075c1ee2592479f044f37053e56 \ + --hash=sha256:c8bce86dcaa9547052f538d02e8c4fe2f1f5a3b957075caf1fa7798255ef3af1 \ + --hash=sha256:ca89ee345248965002462160c9d7c4bce10be69e970a4e5cee85166b526927d2 \ + --hash=sha256:cd7e6065de65e3771b397e8a547d1aaf14b56f64ce313c9020f51c365ccfd9d7 \ + --hash=sha256:cdc7c5b00002ca98da20ccdd2d7e8ff3af26a41e33d760f3c06ff1456bfc6cdd \ + --hash=sha256:cfd92df86e7419111fc2029355b9483c4b46084016427f43e5106ce9ed9e5862 \ + --hash=sha256:d1ae6404a879549a67dc30774b0381dd14159d83cd3f3156956cce045c950cad \ + --hash=sha256:d2d831b5fe7c8009b4b2821be5c665d38da186d90afdac5cc28877a42e949766 \ + --hash=sha256:d9051b73be64a8e2f6044f3ec1364835cb21414d0ba261ea4b68a7f81865776e \ + --hash=sha256:d9378e63867c473c894d69affe0c70f5322bf2fd48bd27b5d0f612b48dee947b \ + --hash=sha256:d98db634abd5a112449c257a991389ee3fd5a9f328a37daf425a7e7e20c55a93 \ + --hash=sha256:d998142f4dc5f801c9bf1a77eca12e3a1323142530d96438eaa2c0871c514261 \ + --hash=sha256:db3bd0cdfd48a47e1a3c888a00e2f88b5970b5422addd44913063d56b4316cc7 \ + --hash=sha256:dff82baf856ae5433976a9c94bae3b921a04465951c885feeae4ed678d3e004a \ + --hash=sha256:e0e009ad5372af3e29f1f17141a76bec54101a6e3ded33e07447aca1042c05ca \ + --hash=sha256:e70de7fd86f817ed3f994c868199b66591fd17143bbfba8a60b51420cd09a197 \ + --hash=sha256:e9bd52c9a6313e97a94f3065804d46942275ed518213353c7c4f1d5c88fcf87b \ + --hash=sha256:ebc6a294ed7d085a1eb41d5a94c89b1e325e363d136774b35c3c73b5e3a4bdcb \ + --hash=sha256:fdcc3c06b0e20185376047bfa40b80c5b0a9b8623a8936b3f56f8ae1984c7b73 + # via + # -r requirements/requirements.txt + # pyElli (pyproject.toml) future==0.18.3 \ --hash=sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307 # via uncertainties @@ -342,12 +412,6 @@ kiwisolver==1.4.4 \ --hash=sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09 \ --hash=sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c # via matplotlib -lark==1.1.5 \ - --hash=sha256:4b534eae1f9af5b4ea000bea95776350befe1981658eea3820a01c37e504bb4d \ - --hash=sha256:8476f9903e93fbde4f6c327f74d79e9b4bd0ed9294c5dfa3164ab8c581b5de2a - # via - # -r requirements/requirements.txt - # pyElli (pyproject.toml) lmfit==1.0.3 \ --hash=sha256:d067c3ea501f035af5d3c079e6e6e35dc3cc1ac7d439429a425b0aeb5a7858a2 # via pyElli (pyproject.toml) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 42d363c4..701ea15c 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,9 +1,77 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # -# pip-compile --generate-hashes --output-file=requirements/requirements.txt pyproject.toml +# pip-compile --generate-hashes --output-file=requirements/requirements.txt --resolver=backtracking pyproject.toml # +formula-dispersion==0.1.2 \ + --hash=sha256:0040412ec3a02fc69055e0f4cf8f661350efc56a3fc4ecfdc9284b6d5773a627 \ + --hash=sha256:010d89d15cc4a12d92bf0ad95cb14292e59cc1f5654a25e93c3453d4fb8d31c2 \ + --hash=sha256:0323e88cd494ea0955f59396ef493c6adfba6f98bd01cf3018b006264689fb5f \ + --hash=sha256:05a63bd889460a6edbf463ef695741fabeb29f97af9887ccb53a111e61488da4 \ + --hash=sha256:107f9446863ee7d1422c54ea38b4d2cbffcfc7f1c8aa521a1fc631444299a7ea \ + --hash=sha256:10e5cc18cc57923048e52b03a6bf27a898d1e8f7f82345a9e5cfac563f788a66 \ + --hash=sha256:189582669edf2d474e19299b896e73e2699a0d734d73a7ab102789b84701225a \ + --hash=sha256:192f2fbecf74b8fd4abfda23bd3382e24cfd04dd32272ecb86b5b997c026e1e4 \ + --hash=sha256:1abe27cc65d18951db941d49426d28630920b1e7f4e8588eb49df1a1705fb57d \ + --hash=sha256:1af600397418a8a26a2173e972496f0e80bcd1cb361693908ba37389adbdc689 \ + --hash=sha256:22f3820d3f574cdc1f85e81ec06fd67e127fc73688c6d375d5399cea83996d08 \ + --hash=sha256:24ff7173d2b02e4fcc0cb4598aad16651b0b2edbdc88275b59daf7fc9ae65385 \ + --hash=sha256:251fba322893483070a88efe461cb74589a70f9a2b8b21b9c135e52f7c4e955a \ + --hash=sha256:33377d49127895c035b73b9e87dd6a91e7e675c65db45e71a5fada624b19b526 \ + --hash=sha256:34a9648bc48fea0e41729f4d53fda57b8e1342642f0a136480bb58f1822b0773 \ + --hash=sha256:41f0ef4442f3ea175949d6bf9e7c924d3522e6acc3ed0cd8a45f413a3e284766 \ + --hash=sha256:49360258d9c7ccddb313d78d42adb1bd2ceb824e79543f4bf0a287a4f88c05d5 \ + --hash=sha256:4b11e904adee624b75b3c617af019c5b8247e4310664aee5d08ec9946a837934 \ + --hash=sha256:50745c714123e20c1b23b3c4c80f4f8875ebe717ed16c77146f8623159e081c1 \ + --hash=sha256:53bb34a1906cf6e61b6eae81fed3c0eab4e4ec2235a4be9931748c6f52c378e6 \ + --hash=sha256:548628e639e1304567fa129e502f2196bb56937fc3d30893295ca99b76d43482 \ + --hash=sha256:56867f3660dbc8b413bd5a5ca32343d39b81797643f8dbea92fed19915fe32d6 \ + --hash=sha256:5983a96237660428d8d748000c9c0f0c73602360a2f9670e0212563e14e520fe \ + --hash=sha256:5bd4a311c4101dca13de23d081c36a384ac7c2186395b00e9660d8b829ef3dd1 \ + --hash=sha256:6420ef098b3a20b5466d9bd1b03e43deabaedb3907362332a3fbdd2ee0e2ac50 \ + --hash=sha256:6547d5ccb8706790e81bc9f5e5886915317e2b150d3e2cdc552eb3e162fe4a23 \ + --hash=sha256:692cba1fe033328c88afa54c0176773c797fa8de2699dba53242a676291fa29e \ + --hash=sha256:6b7365a1498559f5183721a40bf0ce99a8e340264e8e50cb28fad5f0a1ac2f9e \ + --hash=sha256:7287d0f339d64458a444f91142cc5a2bbe2b19217ea67bd2860a43a52a92c02d \ + --hash=sha256:7775ade7579c91cd3895823899bbe57491ece9f4e6e409b9623b02616a93d64d \ + --hash=sha256:79d2d0b7156065cebc4323a9426fff139da37b80cad9b1501ed2525ebc88e955 \ + --hash=sha256:7cce3d64a7870e6ff959b26a1321a2f2d6a09717c27ee9f8cc142b127bf16042 \ + --hash=sha256:819abae0187337c6871996a1304927329383bc606251ad88e1bd51c31569f924 \ + --hash=sha256:82ebde297209caeb48d095798d989f59af477fa386d97db5d0b7caeb866dd3f4 \ + --hash=sha256:8f699319475817577ddbb38c62f87e57fd7f7a89657332f3cbe58f27f903dcd4 \ + --hash=sha256:8f73fc3b166df8e23514657c6594c1260268e86106b12dad271f1f393617d0ec \ + --hash=sha256:914a42a1cd3fe46705156c59e1db33db2b88545df49732aa8822f286046d82cc \ + --hash=sha256:9eaef7070ccd955a96bd227ee6b3d6609ae9203f0f3c0abe831cf2b4baf28846 \ + --hash=sha256:a0e7e43f0ff849e089e452f244cf20d3ea3b251bed76416832edc5dc6d6e7663 \ + --hash=sha256:a55273aca55fcaa7f8f57d39ab3ad7b25540ca4fb2666f7eab7759f21f1dc19e \ + --hash=sha256:a8deb1743282d86b1aebfc77b35aaba2b6bd7a46a2e16539fdd2811cd5320a84 \ + --hash=sha256:aa56ea82b13f128eca27cc093d7ba1240d05abf5bfd77874abe4865fca0855ad \ + --hash=sha256:aa7b2346af62700719a6a2dc200e8db77488bd3616a853b9141b52c8800a0b84 \ + --hash=sha256:bf83c2ea18667ce30ce489827f3fe3108d4fa7e6dea37023ca8e3a2a8d6a6743 \ + --hash=sha256:bfde9e5f5d6680ac5824c3f66138f777ca65a451357be6775c91367697a6271d \ + --hash=sha256:c6ec4f997ae2b3477bd50d1e714934c4e0a7344d61c8ce7c2e2876ae1d37d15d \ + --hash=sha256:c790268dcfc9a1141e0e488a5b8570184e61fbc2fa5c0cfeb9c0b1beb56261f5 \ + --hash=sha256:c825540673ff7b36cfcec27084d5fab6385b8075c1ee2592479f044f37053e56 \ + --hash=sha256:c8bce86dcaa9547052f538d02e8c4fe2f1f5a3b957075caf1fa7798255ef3af1 \ + --hash=sha256:ca89ee345248965002462160c9d7c4bce10be69e970a4e5cee85166b526927d2 \ + --hash=sha256:cd7e6065de65e3771b397e8a547d1aaf14b56f64ce313c9020f51c365ccfd9d7 \ + --hash=sha256:cdc7c5b00002ca98da20ccdd2d7e8ff3af26a41e33d760f3c06ff1456bfc6cdd \ + --hash=sha256:cfd92df86e7419111fc2029355b9483c4b46084016427f43e5106ce9ed9e5862 \ + --hash=sha256:d1ae6404a879549a67dc30774b0381dd14159d83cd3f3156956cce045c950cad \ + --hash=sha256:d2d831b5fe7c8009b4b2821be5c665d38da186d90afdac5cc28877a42e949766 \ + --hash=sha256:d9051b73be64a8e2f6044f3ec1364835cb21414d0ba261ea4b68a7f81865776e \ + --hash=sha256:d9378e63867c473c894d69affe0c70f5322bf2fd48bd27b5d0f612b48dee947b \ + --hash=sha256:d98db634abd5a112449c257a991389ee3fd5a9f328a37daf425a7e7e20c55a93 \ + --hash=sha256:d998142f4dc5f801c9bf1a77eca12e3a1323142530d96438eaa2c0871c514261 \ + --hash=sha256:db3bd0cdfd48a47e1a3c888a00e2f88b5970b5422addd44913063d56b4316cc7 \ + --hash=sha256:dff82baf856ae5433976a9c94bae3b921a04465951c885feeae4ed678d3e004a \ + --hash=sha256:e0e009ad5372af3e29f1f17141a76bec54101a6e3ded33e07447aca1042c05ca \ + --hash=sha256:e70de7fd86f817ed3f994c868199b66591fd17143bbfba8a60b51420cd09a197 \ + --hash=sha256:e9bd52c9a6313e97a94f3065804d46942275ed518213353c7c4f1d5c88fcf87b \ + --hash=sha256:ebc6a294ed7d085a1eb41d5a94c89b1e325e363d136774b35c3c73b5e3a4bdcb \ + --hash=sha256:fdcc3c06b0e20185376047bfa40b80c5b0a9b8623a8936b3f56f8ae1984c7b73 + # via pyElli (pyproject.toml) h5py==3.7.0 \ --hash=sha256:03d64fb86bb86b978928bad923b64419a23e836499ec6363e305ad28afd9d287 \ --hash=sha256:04e2e1e2fc51b8873e972a08d2f89625ef999b1f2d276199011af57bb9fc7851 \ @@ -30,10 +98,6 @@ importlib-resources==5.10.0 \ --hash=sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668 \ --hash=sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437 # via pyElli (pyproject.toml) -lark==1.1.5 \ - --hash=sha256:4b534eae1f9af5b4ea000bea95776350befe1981658eea3820a01c37e504bb4d \ - --hash=sha256:8476f9903e93fbde4f6c327f74d79e9b4bd0ed9294c5dfa3164ab8c581b5de2a - # via pyElli (pyproject.toml) numpy==1.23.2 \ --hash=sha256:17e5226674f6ea79e14e3b91bfbc153fdf3ac13f5cc54ee7bc8fdbe820a32da0 \ --hash=sha256:2bd879d3ca4b6f39b7770829f73278b7c5e248c91d538aab1e506c628353e47f \ diff --git a/scripts/generate_requirements.sh b/scripts/generate_requirements.sh index ff90af1b..65b448f5 100755 --- a/scripts/generate_requirements.sh +++ b/scripts/generate_requirements.sh @@ -1,11 +1,11 @@ #!/bin/bash -pip-compile --generate-hashes --output-file=requirements/requirements.txt pyproject.toml +pip-compile --resolver=backtracking --generate-hashes --output-file=requirements/requirements.txt pyproject.toml -pip-compile --extra=fitting --generate-hashes --output-file=requirements/fitting-requirements.txt \ +pip-compile --resolver=backtracking --extra=fitting --generate-hashes --output-file=requirements/fitting-requirements.txt \ requirements/requirements.txt pyproject.toml -pip-compile --extra=fitting --extra=testing --generate-hashes \ +pip-compile --resolver=backtracking --extra=fitting --extra=testing --generate-hashes \ --output-file=requirements/dev-requirements.txt \ requirements/fitting-requirements.txt \ pyproject.toml \ No newline at end of file diff --git a/src/elli/dispersions/formula.py b/src/elli/dispersions/formula.py index 7d718b49..fdae9cfe 100644 --- a/src/elli/dispersions/formula.py +++ b/src/elli/dispersions/formula.py @@ -3,10 +3,10 @@ import numpy as np import numpy.typing as npt +from formula_dispersion import parse, get_representation from elli.units import ureg from elli.dispersions.base_dispersion import BaseDispersion, Dispersion, IndexDispersion -from elli.formula_parser.parser import parse_formula, FormulaTransformer class FormulaParser(BaseDispersion): @@ -95,7 +95,7 @@ def _set_unit_conversion(self, unit: str): raise ValueError(f"Unsupported unit `{unit}`.") def _check_repr(self): - representation = parse_formula(self.formula).data + representation = get_representation(self.formula) if isinstance(self, FormulaIndex) and not representation == "n": raise ValueError( @@ -108,12 +108,9 @@ def _check_repr(self): ) def __dispersion_function(self, lbda: npt.ArrayLike) -> npt.NDArray: - return FormulaTransformer( - x_axis_name=self.f_axis_name, - x_axis_values=lbda, - single_params=self.single_params, - repeated_params=self.rep_params_dl, - ).transform(parse_formula(self.formula))[1] + return parse( + self.formula, self.f_axis_name, lbda, self.single_params, self.rep_params_dl + ) class Formula(Dispersion, FormulaParser): diff --git a/src/elli/formula_parser/__init__.py b/src/elli/formula_parser/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/elli/formula_parser/dispersion_function_grammar.lark b/src/elli/formula_parser/dispersion_function_grammar.lark deleted file mode 100644 index 7524723a..00000000 --- a/src/elli/formula_parser/dispersion_function_grammar.lark +++ /dev/null @@ -1,51 +0,0 @@ -?assignment: "eps" "=" kkr_expression -> eps - | "n" "=" kkr_expression -> n - -?kkr_expression: expression - | "" "+" "1j" "*" term -> kkr_term - -?expression: term - | expression "+" term -> add - | expression "-" term -> sub - -?term: factor - | term "*" factor -> mul - | term "/" factor -> div - -?factor: power - | power "**" power -> power - - -?power: "(" expression ")" - | FUNC "(" expression ")" -> func - | "sum" "[" repeated_expression "]" -> sum_expr - | NAME -> single_param_name - | SIGNED_NUMBER -> number - | BUILTIN -> builtin - -?repeated_expression: repeated_term - | repeated_expression "+" repeated_term -> add - | repeated_expression "-" repeated_term -> sub - - -?repeated_term: repeated_factor - | repeated_term "*" repeated_factor -> mul - | repeated_term "/" repeated_factor -> div - -?repeated_factor: repeated_power - | repeated_power "**" repeated_power -> power - -?repeated_power: "(" repeated_expression ")" - | FUNC "(" repeated_expression ")" -> func - | SIGNED_NUMBER -> number - | NAME -> param_name - | BUILTIN -> builtin - -FUNC.1: "sin" | "cos" | "tan" | "sqrt" | "dawsn" | "ln" | "log" | "heaviside" -BUILTIN.1: "1j" | "pi" | "eps_0" | "hbar" | "h" | "c" - -%import common.CNAME -> NAME -%import common.SIGNED_NUMBER -%import common.WS_INLINE - -%ignore WS_INLINE \ No newline at end of file diff --git a/src/elli/formula_parser/parser.py b/src/elli/formula_parser/parser.py deleted file mode 100644 index 1f265518..00000000 --- a/src/elli/formula_parser/parser.py +++ /dev/null @@ -1,183 +0,0 @@ -"""This modules creates a formula parser""" -from functools import lru_cache -import os -from operator import add, mul, neg, sub, truediv -from typing import Dict - -import numpy as np -import scipy.constants as sc -from lark import Lark, Transformer, v_args -from scipy.special import dawsn # pylint: disable=no-name-in-module - - -@v_args(inline=True) -class FormulaTransformer(Transformer): - """Transformer class for parsing formulas""" - - single_params: Dict[str, float] - repeated_params: Dict[str, np.ndarray] - no_repeated_params: int - - number = float - add = add - sub = sub - mul = mul - div = truediv - neg = neg - power = pow - - def _check_and_set(self, repeated_params): - if not repeated_params: - self.no_repeated_params = 0 - return - - if not isinstance(repeated_params, dict): - raise ValueError( - f"Repeated parameters must be a dict but found {type(repeated_params)}" - ) - - params = iter(repeated_params.items()) - length = len(next(params)[1]) - for name, param in params: - if not isinstance(param, np.ndarray): - raise TypeError( - f"Expected {name} to be of type numpy ndarray but found type {type(param)}" - ) - if length != len(param): - raise ValueError("Repeated parameters must have all the same length.") - - self.no_repeated_params = length - - def _check_and_set_single(self, single_params): - for name, param in single_params.items(): - if not isinstance(param, (float, int)): - raise TypeError( - f"Expected {name} to be of type float but found type {type(param)}." - ) - self.single_params = single_params - - def __init__( - self, - x_axis_name: str, - x_axis_values: np.ndarray, - single_params: Dict[str, float], - repeated_params: Dict[str, np.ndarray], - ): - super().__init__() - if not isinstance(x_axis_name, str): - raise TypeError("x_axis_name must be a string.") - - if not isinstance(x_axis_values, np.ndarray): - raise TypeError("x_axis_values must be a numpy array.") - - self.x_axis_name = x_axis_name - self.x_axis_values = x_axis_values - - self._check_and_set(repeated_params) - self._check_and_set_single(single_params) - - self.repeated_params = repeated_params - self.single_params = single_params - - def eps(self, inp): - """Return an epsilon type formula""" - return "eps", inp - - # pylint: disable=invalid-name - def n(self, inp): - """Return an index type formula""" - return "n", inp - - def kkr_term(self, term): - """Calculate the kramers kronig transformation on the function""" - raise NotImplementedError("kkr transformation not yet implemented") - - def func(self, name, val): - """Evaluates a function""" - names = { - "sin": np.sin, - "cos": np.cos, - "tan": np.tan, - "sqrt": np.emath.sqrt, - "dawsn": dawsn, - "ln": np.log, - "log": np.log10, - "heaviside": np.heaviside, - } - - if name in names: - return names[name](val) - - raise ValueError(f"Unknown function: {name}") - - def builtin(self, name): - """Returns the values for builtin tokens""" - names = { - "1j": 1j, - "pi": sc.pi, - "eps_0": sc.epsilon_0, - "hbar": sc.hbar, - "h": sc.h, - "c": sc.c, - } - - if name in names: - return names[name] - - raise ValueError(f"Unknown constant: {name}") - - def sum_expr(self, expr): - """Sum an expression""" - return expr.sum(axis=1) - - def single_param_name(self, name): - """Return a parameter inside a non-repeated section""" - if name == self.x_axis_name: - return self.x_axis_values - - if name in self.single_params: - return self.single_params[name] - - raise ValueError(f"No such parameter {name}") - - def param_name(self, name): - """Return a parameter inside a repeated section""" - if name == self.x_axis_name: - return np.einsum( - "i,j->ij", self.x_axis_values, np.ones(self.no_repeated_params) - ) - - if name in self.single_params: - return self.single_params[name] - - if name in self.repeated_params: - return self.repeated_params[name] - - raise ValueError(f"No such parameter {name}") - - -__location__ = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__))) - -with open( - f"{__location__}/dispersion_function_grammar.lark", encoding="utf-8" -) as formula_grammar: - grammar = Lark( - formula_grammar, - start="assignment", - parser="lalr", - ) - - -@lru_cache(maxsize=128) -def parse_formula(formula: str): - """ - Parses a dispersion formula string into an abstract syntax tree. - Uses caching to avoid re-parsing of the formula. - - Args: - formula (str): The formula string to parse. - - Returns: - Lark.Tree: The parsed formula Tree. - """ - return grammar.parse(formula)