diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..a73c1f6 --- /dev/null +++ b/Pipfile @@ -0,0 +1,21 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +dask = "==2023.11.0" +fastapi = "==0.104.1" +geopy = "==2.4.1" +gunicorn = "==21.2.0" +numpy = "==1.26.2" +polars = "==0.19.17" +requests = "==2.31.0" +uvicorn = "==0.24.0.post1" +xarray = "==2023.11.0" +zarr = "==2.16.1" + +[dev-packages] + +[requires] +python_version = "3.11" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..2142e57 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,675 @@ +{ + "_meta": { + "hash": { + "sha256": "13e9ff18b162ea783b2abd159e100ab72769e901cadbb6c79a4a7215c0290828" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "annotated-types": { + "hashes": [ + "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43", + "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d" + ], + "markers": "python_version >= '3.8'", + "version": "==0.6.0" + }, + "anyio": { + "hashes": [ + "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780", + "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5" + ], + "markers": "python_version >= '3.7'", + "version": "==3.7.1" + }, + "asciitree": { + "hashes": [ + "sha256:4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e" + ], + "version": "==0.3.3" + }, + "certifi": { + "hashes": [ + "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", + "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.11.17" + }, + "charset-normalizer": { + "hashes": [ + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" + }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "cloudpickle": { + "hashes": [ + "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7", + "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882" + ], + "markers": "python_version >= '3.8'", + "version": "==3.0.0" + }, + "dask": { + "hashes": [ + "sha256:06b8f39755d37ff6ef4db422774db1f1d5d6788d33f0628c80861dc6452f878c", + "sha256:b950951ee3f8c86f003b577b6928ecf20089eee6677719578deaba8fd9a78203" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2023.11.0" + }, + "fastapi": { + "hashes": [ + "sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241", + "sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.104.1" + }, + "fasteners": { + "hashes": [ + "sha256:758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237", + "sha256:b4f37c3ac52d8a445af3a66bce57b33b5e90b97c696b7b984f530cf8f0ded09c" + ], + "markers": "python_version >= '3.6'", + "version": "==0.19" + }, + "fsspec": { + "hashes": [ + "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5", + "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529" + ], + "markers": "python_version >= '3.8'", + "version": "==2023.10.0" + }, + "geographiclib": { + "hashes": [ + "sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734", + "sha256:f7f41c85dc3e1c2d3d935ec86660dc3b2c848c83e17f9a9e51ba9d5146a15859" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0" + }, + "geopy": { + "hashes": [ + "sha256:50283d8e7ad07d89be5cb027338c6365a32044df3ae2556ad3f52f4840b3d0d1", + "sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==2.4.1" + }, + "gunicorn": { + "hashes": [ + "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0", + "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033" + ], + "index": "pypi", + "markers": "python_version >= '3.5'", + "version": "==21.2.0" + }, + "h11": { + "hashes": [ + "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", + "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" + ], + "markers": "python_version >= '3.7'", + "version": "==0.14.0" + }, + "idna": { + "hashes": [ + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + ], + "markers": "python_version >= '3.5'", + "version": "==3.6" + }, + "importlib-metadata": { + "hashes": [ + "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", + "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + ], + "markers": "python_version >= '3.8'", + "version": "==6.8.0" + }, + "locket": { + "hashes": [ + "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", + "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.0.0" + }, + "numcodecs": { + "hashes": [ + "sha256:05d91a433733e7eef268d7e80ec226a0232da244289614a8f3826901aec1098e", + "sha256:0e79bf9d1d37199ac00a60ff3adb64757523291d19d03116832e600cac391c51", + "sha256:135b2d47563f7b9dc5ee6ce3d1b81b0f1397f69309e909f1a35bb0f7c553d45e", + "sha256:21d8267bd4313f4d16f5b6287731d4c8ebdab236038f29ad1b0e93c9b2ca64ee", + "sha256:29dfb195f835a55c4d490fb097aac8c1bcb96c54cf1b037d9218492c95e9d8c5", + "sha256:2f1ba2f4af3fd3ba65b1bcffb717fe65efe101a50a91c368f79f3101dbb1e243", + "sha256:2f84df6b8693206365a5b37c005bfa9d1be486122bde683a7b6446af4b75d862", + "sha256:2fbb12a6a1abe95926f25c65e283762d63a9bf9e43c0de2c6a1a798347dfcb40", + "sha256:760627780a8b6afdb7f942f2a0ddaf4e31d3d7eea1d8498cf0fd3204a33c4618", + "sha256:82d7107f80f9307235cb7e74719292d101c7ea1e393fe628817f0d635b7384f5", + "sha256:941b7446b68cf79f089bcfe92edaa3b154533dcbcd82474f994b28f2eedb1c60", + "sha256:a191a8e347ecd016e5c357f2bf41fbcb026f6ffe78fff50c77ab12e96701d155", + "sha256:abff3554a6892a89aacf7b642a044e4535499edf07aeae2f2e6e8fc08c9ba07f", + "sha256:c17687b1fd1fef68af616bc83f896035d24e40e04e91e7e6dae56379eb59fe33", + "sha256:c258bd1d3dfa75a9b708540d23b2da43d63607f9df76dfa0309a7597d1de3b73", + "sha256:caf1a1e6678aab9c1e29d2109b299f7a467bd4d4c34235b1f0e082167846b88f", + "sha256:d37f628fe92b3699e65831d5733feca74d2e33b50ef29118ffd41c13c677210e", + "sha256:e04649ea504aff858dbe294631f098fbfd671baf58bfc04fc48d746554c05d67", + "sha256:eeaf42768910f1c6eebf6c1bb00160728e62c9343df9e2e315dc9fe12e3f6071", + "sha256:ef964d4860d3e6b38df0633caf3e51dc850a6293fd8e93240473642681d95136", + "sha256:f2207871868b2464dc11c513965fd99b958a9d7cde2629be7b2dc84fdaab013b" + ], + "markers": "python_version >= '3.8'", + "version": "==0.12.1" + }, + "numpy": { + "hashes": [ + "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a", + "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6", + "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2", + "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79", + "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9", + "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919", + "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d", + "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060", + "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75", + "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f", + "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe", + "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167", + "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef", + "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75", + "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3", + "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7", + "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7", + "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d", + "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b", + "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186", + "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0", + "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1", + "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6", + "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e", + "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523", + "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36", + "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841", + "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818", + "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00", + "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80", + "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440", + "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210", + "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8", + "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea", + "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec", + "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.26.2" + }, + "packaging": { + "hashes": [ + "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", + "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + ], + "markers": "python_version >= '3.7'", + "version": "==23.2" + }, + "pandas": { + "hashes": [ + "sha256:0296a66200dee556850d99b24c54c7dfa53a3264b1ca6f440e42bad424caea03", + "sha256:04d4c58e1f112a74689da707be31cf689db086949c71828ef5da86727cfe3f82", + "sha256:08637041279b8981a062899da0ef47828df52a1838204d2b3761fbd3e9fcb549", + "sha256:11a771450f36cebf2a4c9dbd3a19dfa8c46c4b905a3ea09dc8e556626060fe71", + "sha256:1329dbe93a880a3d7893149979caa82d6ba64a25e471682637f846d9dbc10dd2", + "sha256:1f539e113739a3e0cc15176bf1231a553db0239bfa47a2c870283fd93ba4f683", + "sha256:22929f84bca106921917eb73c1521317ddd0a4c71b395bcf767a106e3494209f", + "sha256:321ecdb117bf0f16c339cc6d5c9a06063854f12d4d9bc422a84bb2ed3207380a", + "sha256:35172bff95f598cc5866c047f43c7f4df2c893acd8e10e6653a4b792ed7f19bb", + "sha256:3cc4469ff0cf9aa3a005870cb49ab8969942b7156e0a46cc3f5abd6b11051dfb", + "sha256:4441ac94a2a2613e3982e502ccec3bdedefe871e8cea54b8775992485c5660ef", + "sha256:465571472267a2d6e00657900afadbe6097c8e1dc43746917db4dfc862e8863e", + "sha256:59dfe0e65a2f3988e940224e2a70932edc964df79f3356e5f2997c7d63e758b4", + "sha256:72c84ec1b1d8e5efcbff5312abe92bfb9d5b558f11e0cf077f5496c4f4a3c99e", + "sha256:7cf4cf26042476e39394f1f86868d25b265ff787c9b2f0d367280f11afbdee6d", + "sha256:7fa2ad4ff196768ae63a33f8062e6838efed3a319cf938fdf8b95e956c813042", + "sha256:a5d53c725832e5f1645e7674989f4c106e4b7249c1d57549023ed5462d73b140", + "sha256:acf08a73b5022b479c1be155d4988b72f3020f308f7a87c527702c5f8966d34f", + "sha256:b99c4e51ef2ed98f69099c72c75ec904dd610eb41a32847c4fcbc1a975f2d2b8", + "sha256:d5ded6ff28abbf0ea7689f251754d3789e1edb0c4d0d91028f0b980598418a58", + "sha256:de21e12bf1511190fc1e9ebc067f14ca09fccfb189a813b38d63211d54832f5f", + "sha256:f7ea8ae8004de0381a2376662c0505bb0a4f679f4c61fbfd122aa3d1b0e5f09d", + "sha256:fc77309da3b55732059e484a1efc0897f6149183c522390772d3561f9bf96c00", + "sha256:fca5680368a5139d4920ae3dc993eb5106d49f814ff24018b64d8850a52c6ed2", + "sha256:fcd76d67ca2d48f56e2db45833cf9d58f548f97f61eecd3fdc74268417632b8a" + ], + "markers": "python_version >= '3.9'", + "version": "==2.1.3" + }, + "partd": { + "hashes": [ + "sha256:27e766663d36c161e2827aa3e28541c992f0b9527d3cca047e13fb3acdb989e6", + "sha256:56c25dd49e6fea5727e731203c466c6e092f308d8f0024e199d02f6aa2167f67" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.1" + }, + "polars": { + "hashes": [ + "sha256:325d70b77d680562fa8aac4da69cb58c610b82f0f545383b3c6012cc20c45296", + "sha256:40b9cc201ca6ee22b2c28e1b1597ea38062e648c855d2d9991dcb85e4ab0e322", + "sha256:ac6c74a90b631cbdb0b2b3baf99a05dcc170341754062512b2e95c188506b6f6", + "sha256:d7acd6622f1f9cdda73e4c42d5d9179796a2e0832c91ce48081f3d4765faaaae", + "sha256:f837e27fd55d91c38bc2b0ebd825fd3334c87373e567f40cc51133db89275fef", + "sha256:fd7db41079fd8875157515e4083379a8d9bf060f7766a0f95343d9667d4f9f1c" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.19.17" + }, + "pydantic": { + "hashes": [ + "sha256:80c50fb8e3dcecfddae1adbcc00ec5822918490c99ab31f6cf6140ca1c1429f0", + "sha256:ff177ba64c6faf73d7afa2e8cad38fd456c0dbe01c9954e71038001cd15a6edd" + ], + "markers": "python_version >= '3.7'", + "version": "==2.5.2" + }, + "pydantic-core": { + "hashes": [ + "sha256:038c9f763e650712b899f983076ce783175397c848da04985658e7628cbe873b", + "sha256:074f3d86f081ce61414d2dc44901f4f83617329c6f3ab49d2bc6c96948b2c26b", + "sha256:079206491c435b60778cf2b0ee5fd645e61ffd6e70c47806c9ed51fc75af078d", + "sha256:09b0e985fbaf13e6b06a56d21694d12ebca6ce5414b9211edf6f17738d82b0f8", + "sha256:0f6116a558fd06d1b7c2902d1c4cf64a5bd49d67c3540e61eccca93f41418124", + "sha256:103ef8d5b58596a731b690112819501ba1db7a36f4ee99f7892c40da02c3e189", + "sha256:16e29bad40bcf97aac682a58861249ca9dcc57c3f6be22f506501833ddb8939c", + "sha256:206ed23aecd67c71daf5c02c3cd19c0501b01ef3cbf7782db9e4e051426b3d0d", + "sha256:2248485b0322c75aee7565d95ad0e16f1c67403a470d02f94da7344184be770f", + "sha256:27548e16c79702f1e03f5628589c6057c9ae17c95b4c449de3c66b589ead0520", + "sha256:2d0ae0d8670164e10accbeb31d5ad45adb71292032d0fdb9079912907f0085f4", + "sha256:3128e0bbc8c091ec4375a1828d6118bc20404883169ac95ffa8d983b293611e6", + "sha256:3387277f1bf659caf1724e1afe8ee7dbc9952a82d90f858ebb931880216ea955", + "sha256:34708cc82c330e303f4ce87758828ef6e457681b58ce0e921b6e97937dd1e2a3", + "sha256:35613015f0ba7e14c29ac6c2483a657ec740e5ac5758d993fdd5870b07a61d8b", + "sha256:3ad873900297bb36e4b6b3f7029d88ff9829ecdc15d5cf20161775ce12306f8a", + "sha256:40180930807ce806aa71eda5a5a5447abb6b6a3c0b4b3b1b1962651906484d68", + "sha256:439c9afe34638ace43a49bf72d201e0ffc1a800295bed8420c2a9ca8d5e3dbb3", + "sha256:45e95333b8418ded64745f14574aa9bfc212cb4fbeed7a687b0c6e53b5e188cd", + "sha256:4641e8ad4efb697f38a9b64ca0523b557c7931c5f84e0fd377a9a3b05121f0de", + "sha256:49b08aae5013640a3bfa25a8eebbd95638ec3f4b2eaf6ed82cf0c7047133f03b", + "sha256:4bc536201426451f06f044dfbf341c09f540b4ebdb9fd8d2c6164d733de5e634", + "sha256:4ce601907e99ea5b4adb807ded3570ea62186b17f88e271569144e8cca4409c7", + "sha256:4e40f2bd0d57dac3feb3a3aed50f17d83436c9e6b09b16af271b6230a2915459", + "sha256:4e47a76848f92529879ecfc417ff88a2806438f57be4a6a8bf2961e8f9ca9ec7", + "sha256:513b07e99c0a267b1d954243845d8a833758a6726a3b5d8948306e3fe14675e3", + "sha256:531f4b4252fac6ca476fbe0e6f60f16f5b65d3e6b583bc4d87645e4e5ddde331", + "sha256:57d52fa717ff445cb0a5ab5237db502e6be50809b43a596fb569630c665abddf", + "sha256:59986de5710ad9613ff61dd9b02bdd2f615f1a7052304b79cc8fa2eb4e336d2d", + "sha256:5baab5455c7a538ac7e8bf1feec4278a66436197592a9bed538160a2e7d11e36", + "sha256:5c7d5b5005f177764e96bd584d7bf28d6e26e96f2a541fdddb934c486e36fd59", + "sha256:60b7607753ba62cf0739177913b858140f11b8af72f22860c28eabb2f0a61937", + "sha256:615a0a4bff11c45eb3c1996ceed5bdaa2f7b432425253a7c2eed33bb86d80abc", + "sha256:61ea96a78378e3bd5a0be99b0e5ed00057b71f66115f5404d0dae4819f495093", + "sha256:652c1988019752138b974c28f43751528116bcceadad85f33a258869e641d753", + "sha256:6637560562134b0e17de333d18e69e312e0458ee4455bdad12c37100b7cad706", + "sha256:678265f7b14e138d9a541ddabbe033012a2953315739f8cfa6d754cc8063e8ca", + "sha256:699156034181e2ce106c89ddb4b6504c30db8caa86e0c30de47b3e0654543260", + "sha256:6b9ff467ffbab9110e80e8c8de3bcfce8e8b0fd5661ac44a09ae5901668ba997", + "sha256:6c327e9cd849b564b234da821236e6bcbe4f359a42ee05050dc79d8ed2a91588", + "sha256:6d30226dfc816dd0fdf120cae611dd2215117e4f9b124af8c60ab9093b6e8e71", + "sha256:6e227c40c02fd873c2a73a98c1280c10315cbebe26734c196ef4514776120aeb", + "sha256:6e4d090e73e0725b2904fdbdd8d73b8802ddd691ef9254577b708d413bf3006e", + "sha256:70f4b4851dbb500129681d04cc955be2a90b2248d69273a787dda120d5cf1f69", + "sha256:70f947628e074bb2526ba1b151cee10e4c3b9670af4dbb4d73bc8a89445916b5", + "sha256:774de879d212db5ce02dfbf5b0da9a0ea386aeba12b0b95674a4ce0593df3d07", + "sha256:77fa384d8e118b3077cccfcaf91bf83c31fe4dc850b5e6ee3dc14dc3d61bdba1", + "sha256:79e0a2cdbdc7af3f4aee3210b1172ab53d7ddb6a2d8c24119b5706e622b346d0", + "sha256:7e88f5696153dc516ba6e79f82cc4747e87027205f0e02390c21f7cb3bd8abfd", + "sha256:7f8210297b04e53bc3da35db08b7302a6a1f4889c79173af69b72ec9754796b8", + "sha256:81982d78a45d1e5396819bbb4ece1fadfe5f079335dd28c4ab3427cd95389944", + "sha256:823fcc638f67035137a5cd3f1584a4542d35a951c3cc68c6ead1df7dac825c26", + "sha256:853a2295c00f1d4429db4c0fb9475958543ee80cfd310814b5c0ef502de24dda", + "sha256:88e74ab0cdd84ad0614e2750f903bb0d610cc8af2cc17f72c28163acfcf372a4", + "sha256:8aa1768c151cf562a9992462239dfc356b3d1037cc5a3ac829bb7f3bda7cc1f9", + "sha256:8c8a8812fe6f43a3a5b054af6ac2d7b8605c7bcab2804a8a7d68b53f3cd86e00", + "sha256:95b15e855ae44f0c6341ceb74df61b606e11f1087e87dcb7482377374aac6abe", + "sha256:96581cfefa9123accc465a5fd0cc833ac4d75d55cc30b633b402e00e7ced00a6", + "sha256:9bd18fee0923ca10f9a3ff67d4851c9d3e22b7bc63d1eddc12f439f436f2aada", + "sha256:a33324437018bf6ba1bb0f921788788641439e0ed654b233285b9c69704c27b4", + "sha256:a6a16f4a527aae4f49c875da3cdc9508ac7eef26e7977952608610104244e1b7", + "sha256:a717aef6971208f0851a2420b075338e33083111d92041157bbe0e2713b37325", + "sha256:a71891847f0a73b1b9eb86d089baee301477abef45f7eaf303495cd1473613e4", + "sha256:aae7ea3a1c5bb40c93cad361b3e869b180ac174656120c42b9fadebf685d121b", + "sha256:ab1cdb0f14dc161ebc268c09db04d2c9e6f70027f3b42446fa11c153521c0e88", + "sha256:ab4ea451082e684198636565224bbb179575efc1658c48281b2c866bfd4ddf04", + "sha256:abf058be9517dc877227ec3223f0300034bd0e9f53aebd63cf4456c8cb1e0863", + "sha256:af36f36538418f3806048f3b242a1777e2540ff9efaa667c27da63d2749dbce0", + "sha256:b53e9ad053cd064f7e473a5f29b37fc4cc9dc6d35f341e6afc0155ea257fc911", + "sha256:b7851992faf25eac90bfcb7bfd19e1f5ffa00afd57daec8a0042e63c74a4551b", + "sha256:b9b759b77f5337b4ea024f03abc6464c9f35d9718de01cfe6bae9f2e139c397e", + "sha256:ba39688799094c75ea8a16a6b544eb57b5b0f3328697084f3f2790892510d144", + "sha256:ba6b6b3846cfc10fdb4c971980a954e49d447cd215ed5a77ec8190bc93dd7bc5", + "sha256:bb4c2eda937a5e74c38a41b33d8c77220380a388d689bcdb9b187cf6224c9720", + "sha256:c0b97ec434041827935044bbbe52b03d6018c2897349670ff8fe11ed24d1d4ab", + "sha256:c1452a1acdf914d194159439eb21e56b89aa903f2e1c65c60b9d874f9b950e5d", + "sha256:c2027d05c8aebe61d898d4cffd774840a9cb82ed356ba47a90d99ad768f39789", + "sha256:c2adbe22ab4babbca99c75c5d07aaf74f43c3195384ec07ccbd2f9e3bddaecec", + "sha256:c2d97e906b4ff36eb464d52a3bc7d720bd6261f64bc4bcdbcd2c557c02081ed2", + "sha256:c339dabd8ee15f8259ee0f202679b6324926e5bc9e9a40bf981ce77c038553db", + "sha256:c6eae413494a1c3f89055da7a5515f32e05ebc1a234c27674a6956755fb2236f", + "sha256:c949f04ecad823f81b1ba94e7d189d9dfb81edbb94ed3f8acfce41e682e48cef", + "sha256:c97bee68898f3f4344eb02fec316db93d9700fb1e6a5b760ffa20d71d9a46ce3", + "sha256:ca61d858e4107ce5e1330a74724fe757fc7135190eb5ce5c9d0191729f033209", + "sha256:cb4679d4c2b089e5ef89756bc73e1926745e995d76e11925e3e96a76d5fa51fc", + "sha256:cb774298da62aea5c80a89bd58c40205ab4c2abf4834453b5de207d59d2e1651", + "sha256:ccd4d5702bb90b84df13bd491be8d900b92016c5a455b7e14630ad7449eb03f8", + "sha256:cf9d3fe53b1ee360e2421be95e62ca9b3296bf3f2fb2d3b83ca49ad3f925835e", + "sha256:d2ae91f50ccc5810b2f1b6b858257c9ad2e08da70bf890dee02de1775a387c66", + "sha256:d37f8ec982ead9ba0a22a996129594938138a1503237b87318392a48882d50b7", + "sha256:d81e6987b27bc7d101c8597e1cd2bcaa2fee5e8e0f356735c7ed34368c471550", + "sha256:dcf4e6d85614f7a4956c2de5a56531f44efb973d2fe4a444d7251df5d5c4dcfd", + "sha256:de790a3b5aa2124b8b78ae5faa033937a72da8efe74b9231698b5a1dd9be3405", + "sha256:e47e9a08bcc04d20975b6434cc50bf82665fbc751bcce739d04a3120428f3e27", + "sha256:e60f112ac88db9261ad3a52032ea46388378034f3279c643499edb982536a093", + "sha256:e87fc540c6cac7f29ede02e0f989d4233f88ad439c5cdee56f693cc9c1c78077", + "sha256:eac5c82fc632c599f4639a5886f96867ffced74458c7db61bc9a66ccb8ee3113", + "sha256:ebb4e035e28f49b6f1a7032920bb9a0c064aedbbabe52c543343d39341a5b2a3", + "sha256:ec1e72d6412f7126eb7b2e3bfca42b15e6e389e1bc88ea0069d0cc1742f477c6", + "sha256:ef98ca7d5995a82f43ec0ab39c4caf6a9b994cb0b53648ff61716370eadc43cf", + "sha256:f0cbc7fff06a90bbd875cc201f94ef0ee3929dfbd5c55a06674b60857b8b85ed", + "sha256:f4791cf0f8c3104ac668797d8c514afb3431bc3305f5638add0ba1a5a37e0d88", + "sha256:f5e412d717366e0677ef767eac93566582518fe8be923361a5c204c1a62eaafe", + "sha256:fb2ed8b3fe4bf4506d6dab3b93b83bbc22237e230cba03866d561c3577517d18", + "sha256:fe0a5a1025eb797752136ac8b4fa21aa891e3d74fd340f864ff982d649691867" + ], + "markers": "python_version >= '3.7'", + "version": "==2.14.5" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.8.2" + }, + "pytz": { + "hashes": [ + "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", + "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" + ], + "version": "==2023.3.post1" + }, + "pyyaml": { + "hashes": [ + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0.1" + }, + "requests": { + "hashes": [ + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==2.31.0" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "sniffio": { + "hashes": [ + "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", + "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.0" + }, + "starlette": { + "hashes": [ + "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75", + "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91" + ], + "markers": "python_version >= '3.7'", + "version": "==0.27.0" + }, + "toolz": { + "hashes": [ + "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", + "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194" + ], + "markers": "python_version >= '3.5'", + "version": "==0.12.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" + ], + "markers": "python_version >= '3.8'", + "version": "==4.8.0" + }, + "tzdata": { + "hashes": [ + "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a", + "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda" + ], + "markers": "python_version >= '2'", + "version": "==2023.3" + }, + "urllib3": { + "hashes": [ + "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3", + "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54" + ], + "markers": "python_version >= '3.8'", + "version": "==2.1.0" + }, + "uvicorn": { + "hashes": [ + "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e", + "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.24.0.post1" + }, + "xarray": { + "hashes": [ + "sha256:933b5101e965120ed58e29525667ab34aafcea1886c236ade72a34d7bb465d9c", + "sha256:9a45e10741844b5f948d8e1e768b460df7e90696d18e2eff2c1d47f5d9d50252" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2023.11.0" + }, + "zarr": { + "hashes": [ + "sha256:4276cf4b4a653431042cd53ff2282bc4d292a6842411e88529964504fb073286", + "sha256:de4882433ccb5b42cc1ec9872b95e64ca3a13581424666b28ed265ad76c7056f" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.16.1" + }, + "zipp": { + "hashes": [ + "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", + "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + ], + "markers": "python_version >= '3.8'", + "version": "==3.17.0" + } + }, + "develop": {} +} diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/change_log.md b/change_log.md index 75425e7..6dfaf96 100644 --- a/change_log.md +++ b/change_log.md @@ -43,3 +43,6 @@ ###### ver 0.2.4 Add jsonsrc can feed JSON url/string, and fix openapi.json in /swagger ###### ver 0.2.5 Package upgrade/improve pm2 restart by pre_stop + + +#### ver 0.3.0 Breaking upgrade to GEBCO(2023) now. Change to use pipenv for package version management diff --git a/conf/ecosystem.config.js b/conf/ecosystem.config.js index 28116ac..9f99de8 100644 --- a/conf/ecosystem.config.js +++ b/conf/ecosystem.config.js @@ -1,7 +1,7 @@ module.exports = { apps : [{ name: 'gebco', - script: 'gunicorn gebco_app:app -w 4 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:8013 --keyfile conf/privkey.pem --certfile conf/fullchain.pem --reload', + script: 'gunicorn gebco_app:app -w 2 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:8013 --keyfile conf/privkey.pem --certfile conf/fullchain.pem --reload', args: '', merge_logs: true, autorestart: true, diff --git a/data_src/GEBCO_2023_Grid_documentation.pdf b/data_src/GEBCO_2023_Grid_documentation.pdf new file mode 100755 index 0000000..d1e2e57 Binary files /dev/null and b/data_src/GEBCO_2023_Grid_documentation.pdf differ diff --git a/data_src/GEBCO_Grid_terms_of_use.pdf b/data_src/GEBCO_Grid_terms_of_use.pdf new file mode 100755 index 0000000..e6428c1 Binary files /dev/null and b/data_src/GEBCO_Grid_terms_of_use.pdf differ diff --git a/dev/read_gebco_raw01.ipynb b/dev/read_gebco_raw01.ipynb new file mode 100644 index 0000000..aa8f409 --- /dev/null +++ b/dev/read_gebco_raw01.ipynb @@ -0,0 +1,2977 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exe time: 0.012810468673706055 sec\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (lon: 86400, lat: 43200)\n",
+       "Coordinates:\n",
+       "  * lon        (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n",
+       "  * lat        (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n",
+       "Data variables:\n",
+       "    elevation  (lat, lon) int16 dask.array<chunksize=(43200, 86400), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.6\n",
+       "    title:        The GEBCO_2020 Grid - a continuous terrain model for oceans...\n",
+       "    institution:  On behalf of the General Bathymetric Chart of the Oceans (G...\n",
+       "    source:       The GEBCO_2020 Grid is the latest global bathymetric produc...\n",
+       "    history:      Information on the development of the data set and the sour...\n",
+       "    references:   DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n",
+       "    comment:      The data in the GEBCO_2020 Grid should not be used for navi...\n",
+       "    node_offset:  1.0
" + ], + "text/plain": [ + "\n", + "Dimensions: (lon: 86400, lat: 43200)\n", + "Coordinates:\n", + " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", + " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", + "Data variables:\n", + " elevation (lat, lon) int16 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.6\n", + " title: The GEBCO_2020 Grid - a continuous terrain model for oceans...\n", + " institution: On behalf of the General Bathymetric Chart of the Oceans (G...\n", + " source: The GEBCO_2020 Grid is the latest global bathymetric produc...\n", + " history: Information on the development of the data set and the sour...\n", + " references: DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n", + " comment: The data in the GEBCO_2020 Grid should not be used for navi...\n", + " node_offset: 1.0" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import xarray as xr\n", + "import time, sys\n", + "st = time.time()\n", + "#xr.open_mfdataset('~/R/gebco/*.nc', parallel=True)\n", + "ds = xr.open_mfdataset(\n", + " '../data_src/GEBCO_2023_sub_ice_topo.nc', chunks={0: 60, 1: 60}, \n", + " decode_cf=False, decode_times=False) #.load()\n", + "et = time.time()\n", + "print('Exe time: ', et-st, 'sec')\n", + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "112\n" + ] + }, + { + "data": { + "text/plain": [ + "6.9522857666015625" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(sys.getsizeof(ds))\n", + "ds['elevation'].nbytes/(1024 ** 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dimensions: (lon: 86400, lat: 43200)\n", + "Coordinates:\n", + " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", + " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", + "Data variables:\n", + " crs |S1 ...\n", + " elevation (lat, lon) int16 dask.array\n", + "Attributes: (12/36)\n", + " title: The GEBCO_2022 Grid - a continuous terra...\n", + " summary: The GEBCO_2022 Grid is a continuous, glo...\n", + " keywords: BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n", + " Conventions: CF-1.6, ACDD-1.3\n", + " id: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", + " naming_authority: https://dx.doi.org\n", + " ... ...\n", + " geospatial_vertical_units: meters\n", + " geospatial_vertical_resolution: 1.0\n", + " geospatial_vertical_positive: up\n", + " identifier_product_doi: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", + " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", + " node_offset: 1.0\n", + "\n", + "Dimensions: (lon: 86400, lat: 43200)\n", + "Coordinates:\n", + " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", + " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", + "Data variables:\n", + " elevation (lat, lon) int16 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.6\n", + " title: The GEBCO_2020 Grid - a continuous terrain model for oceans...\n", + " institution: On behalf of the General Bathymetric Chart of the Oceans (G...\n", + " source: The GEBCO_2020 Grid is the latest global bathymetric produc...\n", + " history: Information on the development of the data set and the sour...\n", + " references: DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n", + " comment: The data in the GEBCO_2020 Grid should not be used for navi...\n", + " node_offset: 1.0\n" + ] + } + ], + "source": [ + "import xarray as xr\n", + "import dask\n", + "\n", + "# Open the GEBCO_2022 dataset\n", + "ds1 = xr.open_mfdataset('../data_src/GEBCO_2022_sub_ice_topo.nc', chunks={0: 60, 1: 60},\n", + " decode_cf=False, decode_times=False)\n", + "\n", + "# Open the GEBCO_2023 dataset\n", + "ds2 = xr.open_mfdataset('../data_src/GEBCO_2023_sub_ice_topo.nc', chunks={0: 60, 1: 60},\n", + " decode_cf=False, decode_times=False)\n", + "\n", + "# Inspect the structure and metadata\n", + "print(ds1)\n", + "print(ds2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "print(isinstance(ds1['elevation'].data, dask.array.Array))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Assuming ds1 uses Dask, get its chunk sizes\n", + "# chunk_sizes = {dim: ds1[dim].data.chunksize for dim in ds1.dims}\n", + "\n", + "# Apply these chunk sizes to ds2\n", + "# ds2 = ds2.chunk(chunk_sizes)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'title': 'The GEBCO_2022 Grid - a continuous terrain model for oceans and land at 15 arc-second intervals', 'summary': 'The GEBCO_2022 Grid is a continuous, global terrain model for ocean and land with a spatial resolution of 15 arc seconds.The grid uses as a base-map Version 2.4 of the SRTM15+ data set (Tozer et al, 2019). This data set is a fusion of land topography with measured and estimated seafloor topography. It is augmented with gridded bathymetric data sets developed as part of the Nippon Foundation-GEBCO Seabed 2030 Project.', 'keywords': 'BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ELEVATION/DIGITAL TERRAIN MODELS', 'Conventions': 'CF-1.6, ACDD-1.3', 'id': 'DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c86abc0289c', 'naming_authority': 'https://dx.doi.org', 'history': 'Information on the development of the data set and the source data sets included in the grid can be found in the data set documentation available from https://www.gebco.net', 'source': 'The GEBCO_2022 Grid is the latest global bathymetric product released by the General Bathymetric Chart of the Oceans (GEBCO) and has been developed through the Nippon Foundation-GEBCO Seabed 2030 Project. This is a collaborative project between the Nippon Foundation of Japan and GEBCO. The Seabed 2030 Project aims to bring together all available bathymetric data to produce the definitive map of the world ocean floor and make it available to all.', 'comment': 'The data in the GEBCO_2022 Grid should not be used for navigation or any purpose relating to safety at sea.', 'license': 'The GEBCO Grid is placed in the public domain and may be used free of charge. Use of the GEBCO Grid indicates that the user accepts the conditions of use and disclaimer information: https://www.gebco.net/data_and_products/gridded_bathymetry_data/gebco_2019/grid_terms_of_use.html', 'date_created': '2022-06-22', 'creator_name': 'GEBCO through the Nippon Foundation-GEBCO Seabed 2030 Project', 'creator_email': 'gdacc@seabed2030.org', 'creator_url': 'https://www.gebco.net', 'institution': 'On behalf of the General Bathymetric Chart of the Oceans (GEBCO), the data are held at the British Oceanographic Data Centre (BODC).', 'project': 'Nippon Foundation - GEBCO Seabed2030 Project', 'creator_type': 'International organisation', 'geospatial_bounds': array([-180., -90., 180., 90.]), 'geospatial_bounds_crs': 'WGS84', 'geospatial_bounds_vertical_crs': 'EPSG:5831', 'geospatial_lat_min': -90.0, 'geospatial_lat_max': 90.0, 'geospatial_lat_units': 'degrees_north', 'geospatial_lat_resolution': 0.004166666666666667, 'geospatial_lon_min': -180.0, 'geospatial_lon_max': 180.0, 'geospatial_lon_units': 'degrees_east', 'geospatial_lon_resolution': 0.004166666666666667, 'geospatial_vertical_min': -10977.0, 'geospatial_vertical_max': 8685.0, 'geospatial_vertical_units': 'meters', 'geospatial_vertical_resolution': 1.0, 'geospatial_vertical_positive': 'up', 'identifier_product_doi': 'DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c86abc0289c', 'references': 'DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c86abc0289c', 'node_offset': 1.0}\n", + "---------------\n", + "{'Conventions': 'CF-1.6', 'title': 'The GEBCO_2020 Grid - a continuous terrain model for oceans and land at 15 arc-second intervals', 'institution': 'On behalf of the General Bathymetric Chart of the Oceans (GEBCO), the data are held at the British Oceanographic Data Centre (BODC).', 'source': 'The GEBCO_2020 Grid is the latest global bathymetric product released by the General Bathymetric Chart of the Oceans (GEBCO) and has been developed through the Nippon Foundation-GEBCO Seabed 2030 Project. This is a collaborative project between the Nippon Foundation of Japan and GEBCO. The Seabed 2030 Project aims to bring together all available bathymetric data to produce the definitive map of the world ocean floor and make it available to all.', 'history': 'Information on the development of the data set and the source data sets included in the grid can be found in the data set documentation available from https://www.gebco.net', 'references': 'DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e', 'comment': 'The data in the GEBCO_2020 Grid should not be used for navigation or any purpose relating to safety at sea.', 'node_offset': 1.0}\n", + "--------------- data_vars\n", + "{'grid_mapping_name': 'latitude_longitude', 'epsg_code': 'EPSG:4326', 'inverse_flattening': 298.257223563, 'semi_major_axis': 6378137.0}\n", + "{'standard_name': 'height_above_mean_sea_level', 'long_name': 'Elevation relative to sea level', 'units': 'm', 'grid_mapping': 'crs', 'sdn_parameter_urn': 'SDN:P01::ALATZZ01', 'sdn_parameter_name': 'Sea floor height (above mean sea level) {bathymetric height}', 'sdn_uom_urn': 'SDN:P06::ULAA', 'sdn_uom_name': 'Metres'}\n", + "--------------- data_vars in ds2\n", + "{'standard_name': 'height_above_reference_ellipsoid', 'long_name': 'Elevation relative to sea level', 'units': 'm', 'sdn_parameter_urn': 'SDN:P01::ALATZZ01', 'sdn_parameter_name': 'Sea floor height (above mean sea level) {bathymetric height}', 'sdn_uom_urn': 'SDN:P06::ULAA', 'sdn_uom_name': 'Metres'}\n" + ] + } + ], + "source": [ + "print(ds1.attrs)\n", + "print(\"---------------\")\n", + "print(ds2.attrs)\n", + "print(\"--------------- data_vars\")\n", + "for var in ds1.data_vars:\n", + " print(ds1[var].attrs)\n", + "\n", + "print(\"--------------- data_vars in ds2\")\n", + "\n", + "for var in ds2.data_vars:\n", + " print(ds2[var].attrs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Example: Copying global attributes\n", + "# ds2.attrs = ds1.attrs\n", + "\n", + "# Example: Copying variable-specific attributes\n", + "# for var in ds2.data_vars:\n", + "# if var in ds1.data_vars:\n", + "# ds2[var].attrs = ds1[var].attrs" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chunk_sizes = {'lat': 60, 'lon': 60} # Replace with the actual chunk sizes used for ds1\n", + "\n", + "# Apply these chunk sizes to ds2\n", + "ds2 = ds2.chunk(chunk_sizes)\n", + "ds2.to_zarr('../data/GEBCO_2023_sub_ice_topo.zarr', mode='w')" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "larger-chunk read time: 0.007239341735839844 sec\n", + "112\n", + "smaller-chunk read time: 0.0065441131591796875 sec\n", + "112\n" + ] + }, + { + "data": { + "text/plain": [ + "6.9522857666015625" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st = time.time()\n", + "#larger chunk size\n", + "ds2 = xr.open_mfdataset(\n", + " '../data_src/GEBCO_2023_sub_ice_topo.nc', chunks={0: 45, 1: 45}, #{0: 120, 1: 120}\n", + " decode_cf=False, decode_times=False) #.load()\n", + "et = time.time()\n", + "print('larger-chunk read time: ', et-st, 'sec')\n", + "print(sys.getsizeof(ds2))\n", + "ds2['elevation'].nbytes/(1024 ** 3)\n", + "\n", + "st = time.time()\n", + "#smaller chunk size\n", + "ds3 = xr.open_mfdataset(\n", + " '../data_src/GEBCO_2023_sub_ice_topo.nc', chunks={0: 30, 1: 30}, \n", + " decode_cf=False, decode_times=False) #.load()\n", + "et = time.time()\n", + "print('smaller-chunk read time: ', et-st, 'sec')\n", + "print(sys.getsizeof(ds2))\n", + "ds2['elevation'].nbytes/(1024 ** 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-4008\n", + "-4311\n", + "-4805\n", + "-4770\n", + "-3752\n", + "-3739\n", + "-3761\n", + "-3691\n", + "-3840\n" + ] + } + ], + "source": [ + "print(ds.sel(lat=23.326173, lon=123.978125, method='nearest')['elevation'].values)\n", + "print(ds.sel(lat=23.317670, lon=123.973958, method='nearest')['elevation'].values)\n", + "print(ds.sel(lat=21.336378, lon=123.003125, method='nearest')['elevation'].values)\n", + "print(ds.sel(lat=21.33, lon=123.0, method='nearest')['elevation'].values)\n", + "print(ds[\"elevation\"].values[27200,72956]) #this is correct value (got depth = -3729)\n", + "print(ds[\"elevation\"].values[27200,72957])\n", + "print(ds[\"elevation\"].values[27200,72955])\n", + "print(ds[\"elevation\"].values[27201,72956])\n", + "print(ds[\"elevation\"].values[27199,72956]) #But we got -3813, this is: after subset got a latitude offset 1? why (in zprofile01.ipynb correct it)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Slicing time for chunk-60: 0.006575822830200195 sec\n", + "Slicing time for larger chunk: 0.005826711654663086 sec\n", + "Exe time for smaller chunk: 0.0052683353424072266 sec\n" + ] + } + ], + "source": [ + "#The following try different subsetting and index methods\n", + "st = time.time()\n", + "ds_s1 = ds.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", + "ds_s1.close() #try if it can close\n", + "et = time.time()\n", + "print('Slicing time for chunk-60: ', et-st, 'sec')\n", + "\n", + "st = time.time()\n", + "ds_s2 = ds2.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", + "ds_s2.close() #try if it can close\n", + "et = time.time()\n", + "print('Slicing time for larger chunk: ', et-st, 'sec')\n", + "\n", + "st = time.time()\n", + "ds_s3 = ds3.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", + "ds_s3.close() #try if it can close\n", + "et = time.time()\n", + "print('Exe time for smaller chunk: ', et-st, 'sec')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.1062154769897461" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_s1['elevation'].nbytes/(1024 ** 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (lon: 7200, lat: 7920)\n",
+       "Coordinates:\n",
+       "  * lon        (lon) float64 105.0 105.0 105.0 105.0 ... 135.0 135.0 135.0 135.0\n",
+       "  * lat        (lat) float64 2.002 2.006 2.01 2.015 ... 34.99 34.99 34.99 35.0\n",
+       "Data variables:\n",
+       "    crs        |S1 ...\n",
+       "    elevation  (lat, lon) int16 dask.array<chunksize=(7920, 7200), meta=np.ndarray>\n",
+       "Attributes: (12/36)\n",
+       "    title:                           The GEBCO_2022 Grid - a continuous terra...\n",
+       "    summary:                         The GEBCO_2022 Grid is a continuous, glo...\n",
+       "    keywords:                        BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n",
+       "    Conventions:                     CF-1.6, ACDD-1.3\n",
+       "    id:                              DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
+       "    naming_authority:                https://dx.doi.org\n",
+       "    ...                              ...\n",
+       "    geospatial_vertical_units:       meters\n",
+       "    geospatial_vertical_resolution:  1.0\n",
+       "    geospatial_vertical_positive:    up\n",
+       "    identifier_product_doi:          DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
+       "    references:                      DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
+       "    node_offset:                     1.0
" + ], + "text/plain": [ + "\n", + "Dimensions: (lon: 7200, lat: 7920)\n", + "Coordinates:\n", + " * lon (lon) float64 105.0 105.0 105.0 105.0 ... 135.0 135.0 135.0 135.0\n", + " * lat (lat) float64 2.002 2.006 2.01 2.015 ... 34.99 34.99 34.99 35.0\n", + "Data variables:\n", + " crs |S1 ...\n", + " elevation (lat, lon) int16 dask.array\n", + "Attributes: (12/36)\n", + " title: The GEBCO_2022 Grid - a continuous terra...\n", + " summary: The GEBCO_2022 Grid is a continuous, glo...\n", + " keywords: BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n", + " Conventions: CF-1.6, ACDD-1.3\n", + " id: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", + " naming_authority: https://dx.doi.org\n", + " ... ...\n", + " geospatial_vertical_units: meters\n", + " geospatial_vertical_resolution: 1.0\n", + " geospatial_vertical_positive: up\n", + " identifier_product_doi: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", + " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", + " node_offset: 1.0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#da1 = getattr(ds_s1, 'elevation')\n", + "#da1\n", + "#https://www.programcreek.com/python/example/123571/xarray.decode_cf\n", + "#da1.attrs['_Unsigned']='false'\n", + "ds_s1\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#da1" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exe time: 0.009853124618530273 sec\n", + "[[-121 -119 -116 -111 -106 -101 -94 -88 -82 -76]\n", + " [-123 -121 -119 -115 -109 -103 -97 -91 -86 -79]\n", + " [-126 -124 -122 -118 -113 -106 -100 -95 -88 -83]\n", + " [-127 -127 -126 -123 -116 -110 -103 -97 -91 -86]\n", + " [-127 -127 -128 -126 -118 -112 -106 -99 -94 -88]\n", + " [-127 -127 -126 -125 -119 -113 -107 -102 -96 -91]\n", + " [-127 -127 -126 -123 -118 -113 -108 -103 -99 -94]\n", + " [-126 -125 -124 -122 -118 -113 -109 -104 -100 -96]\n", + " [-125 -124 -123 -120 -118 -114 -110 -107 -102 -98]\n", + " [-123 -123 -121 -120 -118 -114 -112 -108 -104 -100]]\n" + ] + } + ], + "source": [ + "st = time.time()\n", + "st1 = ds_s1.isel(lon=slice(1000, 1010), lat=slice(2000, 2010))\n", + "xt1 = st1['elevation'].values\n", + "et = time.time()\n", + "print('Exe time: ', et-st, 'sec')\n", + "print(xt1)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10, 10)\n", + "3.1 Get index of point by two subsetting time: 0.004407644271850586 sec\n", + "[[3 4]\n", + " [1 2]]\n", + "(array([3, 1]), array([4, 2]))\n", + "3.2 Get index of point by numpy ix_ time: 0.002244710922241211 sec\n", + "[-116, -119]\n", + "[-116 -119]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "print(st1[\"elevation\"].shape)\n", + "st = time.time()\n", + "pt1 = [st1[\"elevation\"].values[3,4], st1[\"elevation\"].values[1,2]]\n", + "et = time.time()\n", + "print('3.1 Get index of point by two subsetting time: ', et-st, 'sec')\n", + "\n", + "st = time.time()\n", + "#pt2 = st1[\"elevation\"].values[np.ix_([3,4],[1,2])]\n", + "idx_arr = np.array([[3,4],[1,2]])\n", + "print(idx_arr)\n", + "print(tuple(idx_arr.T))\n", + "#https://stackoverflow.com/questions/43034563/numpy-array-of-multiple-indices-replace-with-a-different-matrix\n", + "pt2=st1['elevation'].values[tuple(idx_arr.T)]\n", + "et = time.time()\n", + "print('3.2 Get index of point by numpy ix_ time: ', et-st, 'sec')\n", + "print(pt1)\n", + "print(pt2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#slow\n", + "x = xr.DataArray([-45,-44.95833,-44,-43.95822], dims=['longitude'])\n", + "y = xr.DataArray([35,35.004167,36,36.004168], dims=['latitude'])\n", + "st = time.time()\n", + "#ds_s2 = ds.sel(lon=x, lat=y, method='nearest') \n", + "et = time.time()\n", + "#print('Exe time: ', et-st, 'sec')\n", + "#print(ds_s2) \n", + "#print(ds_s2['elevation'].values)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#https://stackoverflow.com/questions/58706834/angled-slice-in-xarray\n", + "startLat = 35.0\n", + "startLon = -45.0\n", + "endLat = 36.0\n", + "endLon = -43.0\n", + "n = 3600/15 #15 arc-second\n", + "# not work, need another dimension to project\n", + "#x = xr.DataArray(np.linspace(startLon,endLon,n), dims='z')\n", + "#y = xr.DataArray(np.linspace(startLat,endLat,n), dims='z')\n", + "#st = time.time()\n", + "#ds_s3 = ds.interp(lon=x, lat=y, method='linear')\n", + "#et = time.time()\n", + "#print('Exe time: ', et-st, 'sec')\n", + "#print(ds_s3) \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import orjson\n", + "import json\n", + "st = time.time()\n", + "jt1 = orjson.dumps(xt1.tolist(), option=orjson.OPT_NAIVE_UTC | orjson.OPT_SERIALIZE_NUMPY)\n", + "et = time.time()\n", + "print('4.1 Convert JSON by orjson time: ', et-st, 'sec')\n", + "st = time.time()\n", + "jt2 = json.dumps(xt1.tolist())\n", + "et = time.time()\n", + "print('4.2 Convert JSON by json.dump time: ', et-st, 'sec')\n", + "\n", + "print(jt1)\n", + "print(jt2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ds.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import zarr\n", + "import dask" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#compressor = zarr.Blosc(cname='zstd', clevel=3, shuffle=2)\n", + "dask.config.set(scheduler='single-threaded')\n", + "#da = getattr(ds, 'elevation')\n", + "#https://www.programcreek.com/python/example/123571/xarray.decode_cf\n", + "#da.attrs['_Unsigned']='false'\n", + "#ds3 #### try 0:30 chunk #### not work\n", + "#In GEBCO_2022 it works but in GEBCO_2023, it encounter ValueError: Codec does not support buffers of > 2147483647 bytes\n", + "# https://chat.openai.com/c/67eaa069-b863-4924-9f56-1a1ef98c8b79 \n", + "#ds.to_zarr('../data/GEBCO_2023_sub_ice_topo.zarr', mode='w',\n", + "# #encoding={\"elevation\": {\"_Unsigned\": \"false\"}},\n", + "# group='gebco') ##compute=False, , encoding={'gebbco': {'compressor': compressor}})\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "##import xarray as xr\n", + "##import zarr\n", + "#from numcodecs import Zlib\n", + "\n", + "## Open your dataset\n", + "#ds = xr.open_mfdataset('../data_src/GEBCO_2023_sub_ice_topo.nc', chunks={0: 60, 1: 60}, \n", + "# decode_cf=False, decode_times=False)\n", + "\n", + "## Specify the compressor\n", + "#compressor = Zlib(level=1) # Level can be adjusted for compression speed vs ratio\n", + "\n", + "## Update encoding for each variable in dataset\n", + "#encoding = {var: {'compressor': compressor} for var in ds.data_vars}\n", + "\n", + "## Convert to Zarr\n", + "#ds.to_zarr('../data/GEBCO_2023_sub_ice_topo_compressor.zarr', mode='w', group='gebco', encoding=encoding)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#import xarray as xr\n", + "#import zarr\n", + "from numcodecs import Zlib\n", + "#from numcodecs import Blosc\n", + "\n", + "\n", + "# Open your dataset from NetCDF\n", + "ds = xr.open_mfdataset('../data_src/GEBCO_2023_sub_ice_topo.nc', chunks={0: 60, 1: 60}, \n", + " decode_cf=False, decode_times=False)\n", + "\n", + "# Specify the compressor\n", + "compressor = Zlib(level=1) # Level can be adjusted for compression speed vs ratio\n", + "\n", + "# Define the Blosc compressor\n", + "# blosc_compressor = Blosc(cname='lz4', clevel=5, shuffle=Blosc.SHUFFLE, blocksize=0)\n", + "\n", + "# Apply the Blosc compressor to all variables\n", + "\n", + "# Convert to Zarr without specifying a group, and with the new encoding\n", + "# Update encoding for each variable in dataset\n", + "encoding = {var: {'compressor': compressor} for var in ds.data_vars}\n", + "#encoding = {var: {'compressor': blosc_compressor} for var in ds.data_vars}\n", + "\n", + "# Convert to Zarr without specifying a group\n", + "ds.to_zarr('../data/GEBCO_2023_sub_ice_topo_compressor.zarr', mode='w', encoding=encoding)\n", + "#ds.to_zarr('../data/GEBCO_2023_sub_ice_topo.zarr', mode='w', encoding=encoding)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dask Dashboard is available at http://localhost:8787/status\n" + ] + }, + { + "ename": "TypeError", + "evalue": "__init__() got an unexpected keyword argument 'max_buffer_size'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 17\u001b[0m\n\u001b[1;32m 11\u001b[0m ds \u001b[39m=\u001b[39m xr\u001b[39m.\u001b[39mopen_mfdataset(\u001b[39m'\u001b[39m\u001b[39m../data_src/GEBCO_2023_sub_ice_topo.nc\u001b[39m\u001b[39m'\u001b[39m, \n\u001b[1;32m 12\u001b[0m \u001b[39m# chunks={'lat': 30, 'lon': 30}, #why it's too slow\u001b[39;00m\n\u001b[1;32m 13\u001b[0m chunks\u001b[39m=\u001b[39m{\u001b[39m0\u001b[39m: \u001b[39m60\u001b[39m, \u001b[39m1\u001b[39m: \u001b[39m60\u001b[39m},\n\u001b[1;32m 14\u001b[0m decode_cf\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m, decode_times\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[1;32m 16\u001b[0m \u001b[39m# Define the Blosc compressor\u001b[39;00m\n\u001b[0;32m---> 17\u001b[0m blosc_compressor \u001b[39m=\u001b[39m Blosc(cname\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39mlz4\u001b[39;49m\u001b[39m'\u001b[39;49m, clevel\u001b[39m=\u001b[39;49m\u001b[39m5\u001b[39;49m, shuffle\u001b[39m=\u001b[39;49mBlosc\u001b[39m.\u001b[39;49mSHUFFLE, blocksize\u001b[39m=\u001b[39;49m\u001b[39m0\u001b[39;49m, max_buffer_size\u001b[39m=\u001b[39;49m\u001b[39m2\u001b[39;49m\u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49m\u001b[39m40\u001b[39;49m \u001b[39m-\u001b[39;49m \u001b[39m1\u001b[39;49m)\n\u001b[1;32m 19\u001b[0m \u001b[39m# Apply the Blosc compressor to all variables\u001b[39;00m\n\u001b[1;32m 20\u001b[0m encoding \u001b[39m=\u001b[39m {var: {\u001b[39m'\u001b[39m\u001b[39mcompressor\u001b[39m\u001b[39m'\u001b[39m: blosc_compressor} \u001b[39mfor\u001b[39;00m var \u001b[39min\u001b[39;00m ds\u001b[39m.\u001b[39mdata_vars}\n", + "File \u001b[0;32mnumcodecs/blosc.pyx:548\u001b[0m, in \u001b[0;36mnumcodecs.blosc.Blosc.__init__\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: __init__() got an unexpected keyword argument 'max_buffer_size'" + ] + } + ], + "source": [ + "import xarray as xr\n", + "from numcodecs import Blosc\n", + "from dask.distributed import Client, progress\n", + "\n", + "# Start a Dask distributed client for parallel processing and monitoring\n", + "client = Client('tcp://localhost:8786')\n", + "\n", + "print(f\"Dask Dashboard is available at {client.dashboard_link}\")\n", + "\n", + "# Open your dataset with specified chunk sizes\n", + "ds = xr.open_mfdataset('../data_src/GEBCO_2023_sub_ice_topo.nc', \n", + " # chunks={'lat': 30, 'lon': 30}, #why it's too slow\n", + " chunks={0: 60, 1: 60},\n", + " decode_cf=False, decode_times=False)\n", + "\n", + "# Define the Blosc compressor\n", + "blosc_compressor = Blosc(cname='lz4', clevel=5, shuffle=Blosc.SHUFFLE, blocksize=0, max_buffer_size=2**40 - 1)\n", + "\n", + "# Apply the Blosc compressor to all variables\n", + "encoding = {var: {'compressor': blosc_compressor} for var in ds.data_vars}\n", + "\n", + "# Convert to Zarr\n", + "future = client.persist(ds.to_zarr('../data/GEBCO_2023_sub_ice_topo.zarr', mode='w', encoding=encoding))\n", + "progress(future) " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'time' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[15], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m st \u001b[39m=\u001b[39m time\u001b[39m.\u001b[39mtime()\n\u001b[1;32m 2\u001b[0m dz1 \u001b[39m=\u001b[39m xr\u001b[39m.\u001b[39mopen_zarr(\n\u001b[1;32m 3\u001b[0m \u001b[39m'\u001b[39m\u001b[39m../data/GEBCO_2023_sub_ice_topo.zarr\u001b[39m\u001b[39m'\u001b[39m, chunks\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mauto\u001b[39m\u001b[39m'\u001b[39m, \n\u001b[1;32m 4\u001b[0m group\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mgebco\u001b[39m\u001b[39m'\u001b[39m, decode_cf\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m, decode_times\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[1;32m 6\u001b[0m et \u001b[39m=\u001b[39m time\u001b[39m.\u001b[39mtime()\n", + "\u001b[0;31mNameError\u001b[0m: name 'time' is not defined" + ] + } + ], + "source": [ + "st = time.time()\n", + "dz1 = xr.open_zarr(\n", + " '../data/GEBCO_2023_sub_ice_topo.zarr', chunks='auto', \n", + " group='gebco', decode_cf=False, decode_times=False)\n", + "\n", + "et = time.time()\n", + "print('Exe time: ', et-st, 'sec')\n", + "dz1" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exe time: 0.007412433624267578 sec\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (lat: 43200, lon: 86400)\n",
+       "Coordinates:\n",
+       "  * lat        (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n",
+       "  * lon        (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n",
+       "Data variables:\n",
+       "    elevation  (lat, lon) int16 dask.array<chunksize=(43200, 86400), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.6\n",
+       "    comment:      The data in the GEBCO_2020 Grid should not be used for navi...\n",
+       "    history:      Information on the development of the data set and the sour...\n",
+       "    institution:  On behalf of the General Bathymetric Chart of the Oceans (G...\n",
+       "    node_offset:  1.0\n",
+       "    references:   DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n",
+       "    source:       The GEBCO_2020 Grid is the latest global bathymetric produc...\n",
+       "    title:        The GEBCO_2020 Grid - a continuous terrain model for oceans...
" + ], + "text/plain": [ + "\n", + "Dimensions: (lat: 43200, lon: 86400)\n", + "Coordinates:\n", + " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", + " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", + "Data variables:\n", + " elevation (lat, lon) int16 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.6\n", + " comment: The data in the GEBCO_2020 Grid should not be used for navi...\n", + " history: Information on the development of the data set and the sour...\n", + " institution: On behalf of the General Bathymetric Chart of the Oceans (G...\n", + " node_offset: 1.0\n", + " references: DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n", + " source: The GEBCO_2020 Grid is the latest global bathymetric produc...\n", + " title: The GEBCO_2020 Grid - a continuous terrain model for oceans..." + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st = time.time()\n", + "dz2 = xr.open_zarr(\n", + " '../data/GEBCO_2023_sub_ice_topo_compressor.zarr', chunks='auto', \n", + " group='gebco', decode_cf=False, decode_times=False)\n", + "\n", + "et = time.time()\n", + "print('Exe time: ', et-st, 'sec')\n", + "dz2" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Codec does not support buffers of > 2147483647 bytes", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[39], line 13\u001b[0m\n\u001b[1;32m 10\u001b[0m encoding \u001b[39m=\u001b[39m {var: {\u001b[39m'\u001b[39m\u001b[39mcompressor\u001b[39m\u001b[39m'\u001b[39m: blosc_compressor} \u001b[39mfor\u001b[39;00m var \u001b[39min\u001b[39;00m ds\u001b[39m.\u001b[39mdata_vars}\n\u001b[1;32m 12\u001b[0m \u001b[39m# Convert to Zarr without specifying a group, and with the new encoding\u001b[39;00m\n\u001b[0;32m---> 13\u001b[0m ds_compress\u001b[39m.\u001b[39;49mto_zarr(\u001b[39m'\u001b[39;49m\u001b[39m../data/GEBCO_2023_sub_ice_topo.zarr\u001b[39;49m\u001b[39m'\u001b[39;49m, mode\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39mw\u001b[39;49m\u001b[39m'\u001b[39;49m, encoding\u001b[39m=\u001b[39;49mencoding)\n\u001b[1;32m 14\u001b[0m \u001b[39m#encoding={\"elevation\": {\"_Unsigned\": \"false\"}},\u001b[39;00m\n\u001b[1;32m 15\u001b[0m \u001b[39m#group='gebco') \u001b[39;00m\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/xarray/core/dataset.py:2497\u001b[0m, in \u001b[0;36mDataset.to_zarr\u001b[0;34m(self, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region, safe_chunks, storage_options, zarr_version, write_empty_chunks, chunkmanager_store_kwargs)\u001b[0m\n\u001b[1;32m 2359\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Write dataset contents to a zarr group.\u001b[39;00m\n\u001b[1;32m 2360\u001b[0m \n\u001b[1;32m 2361\u001b[0m \u001b[39mZarr chunks are determined in the following way:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2493\u001b[0m \u001b[39m The I/O user guide, with more details and examples.\u001b[39;00m\n\u001b[1;32m 2494\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 2495\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mxarray\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mbackends\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mapi\u001b[39;00m \u001b[39mimport\u001b[39;00m to_zarr\n\u001b[0;32m-> 2497\u001b[0m \u001b[39mreturn\u001b[39;00m to_zarr( \u001b[39m# type: ignore[call-overload,misc]\u001b[39;49;00m\n\u001b[1;32m 2498\u001b[0m \u001b[39mself\u001b[39;49m,\n\u001b[1;32m 2499\u001b[0m store\u001b[39m=\u001b[39;49mstore,\n\u001b[1;32m 2500\u001b[0m chunk_store\u001b[39m=\u001b[39;49mchunk_store,\n\u001b[1;32m 2501\u001b[0m storage_options\u001b[39m=\u001b[39;49mstorage_options,\n\u001b[1;32m 2502\u001b[0m mode\u001b[39m=\u001b[39;49mmode,\n\u001b[1;32m 2503\u001b[0m synchronizer\u001b[39m=\u001b[39;49msynchronizer,\n\u001b[1;32m 2504\u001b[0m group\u001b[39m=\u001b[39;49mgroup,\n\u001b[1;32m 2505\u001b[0m encoding\u001b[39m=\u001b[39;49mencoding,\n\u001b[1;32m 2506\u001b[0m compute\u001b[39m=\u001b[39;49mcompute,\n\u001b[1;32m 2507\u001b[0m consolidated\u001b[39m=\u001b[39;49mconsolidated,\n\u001b[1;32m 2508\u001b[0m append_dim\u001b[39m=\u001b[39;49mappend_dim,\n\u001b[1;32m 2509\u001b[0m region\u001b[39m=\u001b[39;49mregion,\n\u001b[1;32m 2510\u001b[0m safe_chunks\u001b[39m=\u001b[39;49msafe_chunks,\n\u001b[1;32m 2511\u001b[0m zarr_version\u001b[39m=\u001b[39;49mzarr_version,\n\u001b[1;32m 2512\u001b[0m write_empty_chunks\u001b[39m=\u001b[39;49mwrite_empty_chunks,\n\u001b[1;32m 2513\u001b[0m chunkmanager_store_kwargs\u001b[39m=\u001b[39;49mchunkmanager_store_kwargs,\n\u001b[1;32m 2514\u001b[0m )\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/xarray/backends/api.py:1775\u001b[0m, in \u001b[0;36mto_zarr\u001b[0;34m(dataset, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region, safe_chunks, storage_options, zarr_version, write_empty_chunks, chunkmanager_store_kwargs)\u001b[0m\n\u001b[1;32m 1773\u001b[0m \u001b[39m# TODO: figure out how to properly handle unlimited_dims\u001b[39;00m\n\u001b[1;32m 1774\u001b[0m dump_to_store(dataset, zstore, writer, encoding\u001b[39m=\u001b[39mencoding)\n\u001b[0;32m-> 1775\u001b[0m writes \u001b[39m=\u001b[39m writer\u001b[39m.\u001b[39;49msync(\n\u001b[1;32m 1776\u001b[0m compute\u001b[39m=\u001b[39;49mcompute, chunkmanager_store_kwargs\u001b[39m=\u001b[39;49mchunkmanager_store_kwargs\n\u001b[1;32m 1777\u001b[0m )\n\u001b[1;32m 1779\u001b[0m \u001b[39mif\u001b[39;00m compute:\n\u001b[1;32m 1780\u001b[0m _finalize_store(writes, zstore)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/xarray/backends/common.py:256\u001b[0m, in \u001b[0;36mArrayWriter.sync\u001b[0;34m(self, compute, chunkmanager_store_kwargs)\u001b[0m\n\u001b[1;32m 253\u001b[0m \u001b[39mif\u001b[39;00m chunkmanager_store_kwargs \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 254\u001b[0m chunkmanager_store_kwargs \u001b[39m=\u001b[39m {}\n\u001b[0;32m--> 256\u001b[0m delayed_store \u001b[39m=\u001b[39m chunkmanager\u001b[39m.\u001b[39;49mstore(\n\u001b[1;32m 257\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msources,\n\u001b[1;32m 258\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mtargets,\n\u001b[1;32m 259\u001b[0m lock\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mlock,\n\u001b[1;32m 260\u001b[0m compute\u001b[39m=\u001b[39;49mcompute,\n\u001b[1;32m 261\u001b[0m flush\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m,\n\u001b[1;32m 262\u001b[0m regions\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mregions,\n\u001b[1;32m 263\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mchunkmanager_store_kwargs,\n\u001b[1;32m 264\u001b[0m )\n\u001b[1;32m 265\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39msources \u001b[39m=\u001b[39m []\n\u001b[1;32m 266\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtargets \u001b[39m=\u001b[39m []\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/xarray/core/daskmanager.py:211\u001b[0m, in \u001b[0;36mDaskManager.store\u001b[0;34m(self, sources, targets, **kwargs)\u001b[0m\n\u001b[1;32m 203\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mstore\u001b[39m(\n\u001b[1;32m 204\u001b[0m \u001b[39mself\u001b[39m,\n\u001b[1;32m 205\u001b[0m sources: DaskArray \u001b[39m|\u001b[39m Sequence[DaskArray],\n\u001b[1;32m 206\u001b[0m targets: Any,\n\u001b[1;32m 207\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs,\n\u001b[1;32m 208\u001b[0m ):\n\u001b[1;32m 209\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mdask\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39marray\u001b[39;00m \u001b[39mimport\u001b[39;00m store\n\u001b[0;32m--> 211\u001b[0m \u001b[39mreturn\u001b[39;00m store(\n\u001b[1;32m 212\u001b[0m sources\u001b[39m=\u001b[39;49msources,\n\u001b[1;32m 213\u001b[0m targets\u001b[39m=\u001b[39;49mtargets,\n\u001b[1;32m 214\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 215\u001b[0m )\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/array/core.py:1236\u001b[0m, in \u001b[0;36mstore\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 1234\u001b[0m \u001b[39melif\u001b[39;00m compute:\n\u001b[1;32m 1235\u001b[0m store_dsk \u001b[39m=\u001b[39m HighLevelGraph(layers, dependencies)\n\u001b[0;32m-> 1236\u001b[0m compute_as_if_collection(Array, store_dsk, map_keys, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 1237\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 1239\u001b[0m \u001b[39melse\u001b[39;00m:\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/base.py:369\u001b[0m, in \u001b[0;36mcompute_as_if_collection\u001b[0;34m(cls, dsk, keys, scheduler, get, **kwargs)\u001b[0m\n\u001b[1;32m 367\u001b[0m schedule \u001b[39m=\u001b[39m get_scheduler(scheduler\u001b[39m=\u001b[39mscheduler, \u001b[39mcls\u001b[39m\u001b[39m=\u001b[39m\u001b[39mcls\u001b[39m, get\u001b[39m=\u001b[39mget)\n\u001b[1;32m 368\u001b[0m dsk2 \u001b[39m=\u001b[39m optimization_function(\u001b[39mcls\u001b[39m)(dsk, keys, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m--> 369\u001b[0m \u001b[39mreturn\u001b[39;00m schedule(dsk2, keys, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/threaded.py:90\u001b[0m, in \u001b[0;36mget\u001b[0;34m(dsk, keys, cache, num_workers, pool, **kwargs)\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(pool, multiprocessing\u001b[39m.\u001b[39mpool\u001b[39m.\u001b[39mPool):\n\u001b[1;32m 88\u001b[0m pool \u001b[39m=\u001b[39m MultiprocessingPoolExecutor(pool)\n\u001b[0;32m---> 90\u001b[0m results \u001b[39m=\u001b[39m get_async(\n\u001b[1;32m 91\u001b[0m pool\u001b[39m.\u001b[39;49msubmit,\n\u001b[1;32m 92\u001b[0m pool\u001b[39m.\u001b[39;49m_max_workers,\n\u001b[1;32m 93\u001b[0m dsk,\n\u001b[1;32m 94\u001b[0m keys,\n\u001b[1;32m 95\u001b[0m cache\u001b[39m=\u001b[39;49mcache,\n\u001b[1;32m 96\u001b[0m get_id\u001b[39m=\u001b[39;49m_thread_get_id,\n\u001b[1;32m 97\u001b[0m pack_exception\u001b[39m=\u001b[39;49mpack_exception,\n\u001b[1;32m 98\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs,\n\u001b[1;32m 99\u001b[0m )\n\u001b[1;32m 101\u001b[0m \u001b[39m# Cleanup pools associated to dead threads\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[39mwith\u001b[39;00m pools_lock:\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/local.py:512\u001b[0m, in \u001b[0;36mget_async\u001b[0;34m(submit, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, chunksize, **kwargs)\u001b[0m\n\u001b[1;32m 510\u001b[0m _execute_task(task, data) \u001b[39m# Re-execute locally\u001b[39;00m\n\u001b[1;32m 511\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 512\u001b[0m raise_exception(exc, tb)\n\u001b[1;32m 513\u001b[0m res, worker_id \u001b[39m=\u001b[39m loads(res_info)\n\u001b[1;32m 514\u001b[0m state[\u001b[39m\"\u001b[39m\u001b[39mcache\u001b[39m\u001b[39m\"\u001b[39m][key] \u001b[39m=\u001b[39m res\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/local.py:320\u001b[0m, in \u001b[0;36mreraise\u001b[0;34m(exc, tb)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[39mif\u001b[39;00m exc\u001b[39m.\u001b[39m__traceback__ \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m tb:\n\u001b[1;32m 319\u001b[0m \u001b[39mraise\u001b[39;00m exc\u001b[39m.\u001b[39mwith_traceback(tb)\n\u001b[0;32m--> 320\u001b[0m \u001b[39mraise\u001b[39;00m exc\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/local.py:225\u001b[0m, in \u001b[0;36mexecute_task\u001b[0;34m(key, task_info, dumps, loads, get_id, pack_exception)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 224\u001b[0m task, data \u001b[39m=\u001b[39m loads(task_info)\n\u001b[0;32m--> 225\u001b[0m result \u001b[39m=\u001b[39m _execute_task(task, data)\n\u001b[1;32m 226\u001b[0m \u001b[39mid\u001b[39m \u001b[39m=\u001b[39m get_id()\n\u001b[1;32m 227\u001b[0m result \u001b[39m=\u001b[39m dumps((result, \u001b[39mid\u001b[39m))\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/core.py:127\u001b[0m, in \u001b[0;36m_execute_task\u001b[0;34m(arg, cache, dsk)\u001b[0m\n\u001b[1;32m 123\u001b[0m func, args \u001b[39m=\u001b[39m arg[\u001b[39m0\u001b[39m], arg[\u001b[39m1\u001b[39m:]\n\u001b[1;32m 124\u001b[0m \u001b[39m# Note: Don't assign the subtask results to a variable. numpy detects\u001b[39;00m\n\u001b[1;32m 125\u001b[0m \u001b[39m# temporaries by their reference count and can execute certain\u001b[39;00m\n\u001b[1;32m 126\u001b[0m \u001b[39m# operations in-place.\u001b[39;00m\n\u001b[0;32m--> 127\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49m(_execute_task(a, cache) \u001b[39mfor\u001b[39;49;00m a \u001b[39min\u001b[39;49;00m args))\n\u001b[1;32m 128\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39mnot\u001b[39;00m ishashable(arg):\n\u001b[1;32m 129\u001b[0m \u001b[39mreturn\u001b[39;00m arg\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/array/core.py:4402\u001b[0m, in \u001b[0;36mstore_chunk\u001b[0;34m(x, out, index, lock, return_stored)\u001b[0m\n\u001b[1;32m 4399\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mstore_chunk\u001b[39m(\n\u001b[1;32m 4400\u001b[0m x: ArrayLike, out: ArrayLike, index: \u001b[39mslice\u001b[39m, lock: Any, return_stored: \u001b[39mbool\u001b[39m\n\u001b[1;32m 4401\u001b[0m ):\n\u001b[0;32m-> 4402\u001b[0m \u001b[39mreturn\u001b[39;00m load_store_chunk(x, out, index, lock, return_stored, \u001b[39mFalse\u001b[39;49;00m)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/dask/array/core.py:4384\u001b[0m, in \u001b[0;36mload_store_chunk\u001b[0;34m(x, out, index, lock, return_stored, load_stored)\u001b[0m\n\u001b[1;32m 4382\u001b[0m \u001b[39mif\u001b[39;00m x \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 4383\u001b[0m \u001b[39mif\u001b[39;00m is_arraylike(x):\n\u001b[0;32m-> 4384\u001b[0m out[index] \u001b[39m=\u001b[39m x\n\u001b[1;32m 4385\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 4386\u001b[0m out[index] \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39masanyarray(x)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/zarr/core.py:1495\u001b[0m, in \u001b[0;36mArray.__setitem__\u001b[0;34m(self, selection, value)\u001b[0m\n\u001b[1;32m 1493\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mvindex[selection] \u001b[39m=\u001b[39m value\n\u001b[1;32m 1494\u001b[0m \u001b[39melif\u001b[39;00m is_pure_orthogonal_indexing(pure_selection, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mndim):\n\u001b[0;32m-> 1495\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mset_orthogonal_selection(pure_selection, value, fields\u001b[39m=\u001b[39;49mfields)\n\u001b[1;32m 1496\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 1497\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mset_basic_selection(pure_selection, value, fields\u001b[39m=\u001b[39mfields)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/zarr/core.py:1684\u001b[0m, in \u001b[0;36mArray.set_orthogonal_selection\u001b[0;34m(self, selection, value, fields)\u001b[0m\n\u001b[1;32m 1681\u001b[0m \u001b[39m# setup indexer\u001b[39;00m\n\u001b[1;32m 1682\u001b[0m indexer \u001b[39m=\u001b[39m OrthogonalIndexer(selection, \u001b[39mself\u001b[39m)\n\u001b[0;32m-> 1684\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_set_selection(indexer, value, fields\u001b[39m=\u001b[39;49mfields)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/zarr/core.py:2038\u001b[0m, in \u001b[0;36mArray._set_selection\u001b[0;34m(self, indexer, value, fields)\u001b[0m\n\u001b[1;32m 2035\u001b[0m chunk_value \u001b[39m=\u001b[39m chunk_value[item]\n\u001b[1;32m 2037\u001b[0m \u001b[39m# put data\u001b[39;00m\n\u001b[0;32m-> 2038\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_chunk_setitem(chunk_coords, chunk_selection, chunk_value, fields\u001b[39m=\u001b[39;49mfields)\n\u001b[1;32m 2039\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 2040\u001b[0m lchunk_coords, lchunk_selection, lout_selection \u001b[39m=\u001b[39m \u001b[39mzip\u001b[39m(\u001b[39m*\u001b[39mindexer)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/zarr/core.py:2304\u001b[0m, in \u001b[0;36mArray._chunk_setitem\u001b[0;34m(self, chunk_coords, chunk_selection, value, fields)\u001b[0m\n\u001b[1;32m 2301\u001b[0m lock \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_synchronizer[ckey]\n\u001b[1;32m 2303\u001b[0m \u001b[39mwith\u001b[39;00m lock:\n\u001b[0;32m-> 2304\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_chunk_setitem_nosync(chunk_coords, chunk_selection, value, fields\u001b[39m=\u001b[39;49mfields)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/zarr/core.py:2314\u001b[0m, in \u001b[0;36mArray._chunk_setitem_nosync\u001b[0;34m(self, chunk_coords, chunk_selection, value, fields)\u001b[0m\n\u001b[1;32m 2312\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_chunk_delitem(ckey)\n\u001b[1;32m 2313\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m-> 2314\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mchunk_store[ckey] \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_encode_chunk(cdata)\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/zarr/core.py:2444\u001b[0m, in \u001b[0;36mArray._encode_chunk\u001b[0;34m(self, chunk)\u001b[0m\n\u001b[1;32m 2442\u001b[0m \u001b[39m# compress\u001b[39;00m\n\u001b[1;32m 2443\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_compressor:\n\u001b[0;32m-> 2444\u001b[0m cdata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_compressor\u001b[39m.\u001b[39;49mencode(chunk)\n\u001b[1;32m 2445\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 2446\u001b[0m cdata \u001b[39m=\u001b[39m chunk\n", + "File \u001b[0;32mnumcodecs/blosc.pyx:559\u001b[0m, in \u001b[0;36mnumcodecs.blosc.Blosc.encode\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/numcodecs/compat.py:155\u001b[0m, in \u001b[0;36mensure_contiguous_ndarray\u001b[0;34m(buf, max_buffer_size, flatten)\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mensure_contiguous_ndarray\u001b[39m(buf, max_buffer_size\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m, flatten\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m np\u001b[39m.\u001b[39marray:\n\u001b[1;32m 127\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Convenience function to coerce `buf` to a numpy array, if it is not already a\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39m numpy array. Also ensures that the returned value exports fully contiguous memory,\u001b[39;00m\n\u001b[1;32m 129\u001b[0m \u001b[39m and supports the new-style buffer interface. If the optional max_buffer_size is\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 151\u001b[0m \u001b[39m return a view on memory exported by `buf`.\u001b[39;00m\n\u001b[1;32m 152\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[1;32m 154\u001b[0m \u001b[39mreturn\u001b[39;00m ensure_ndarray(\n\u001b[0;32m--> 155\u001b[0m ensure_contiguous_ndarray_like(\n\u001b[1;32m 156\u001b[0m buf, max_buffer_size\u001b[39m=\u001b[39;49mmax_buffer_size, flatten\u001b[39m=\u001b[39;49mflatten\n\u001b[1;32m 157\u001b[0m )\n\u001b[1;32m 158\u001b[0m )\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.3/envs/py311/lib/python3.11/site-packages/numcodecs/compat.py:121\u001b[0m, in \u001b[0;36mensure_contiguous_ndarray_like\u001b[0;34m(buf, max_buffer_size, flatten)\u001b[0m\n\u001b[1;32m 119\u001b[0m \u001b[39mif\u001b[39;00m max_buffer_size \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m arr\u001b[39m.\u001b[39mnbytes \u001b[39m>\u001b[39m max_buffer_size:\n\u001b[1;32m 120\u001b[0m msg \u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mCodec does not support buffers of > \u001b[39m\u001b[39m{}\u001b[39;00m\u001b[39m bytes\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m.\u001b[39mformat(max_buffer_size)\n\u001b[0;32m--> 121\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(msg)\n\u001b[1;32m 123\u001b[0m \u001b[39mreturn\u001b[39;00m arr\n", + "\u001b[0;31mValueError\u001b[0m: Codec does not support buffers of > 2147483647 bytes" + ] + } + ], + "source": [ + "# import xarray as xr\n", + "from numcodecs import Blosc\n", + "\n", + "# Open the existing Zarr dataset\n", + "ds_compress = xr.open_zarr('../data/GEBCO_2023_sub_ice_topo_compressor.zarr')\n", + "\n", + "blosc_compressor = Blosc(cname='lz4', clevel=5, shuffle=Blosc.SHUFFLE, blocksize=0)\n", + "\n", + "# Apply the Blosc compressor to all variables\n", + "encoding = {var: {'compressor': blosc_compressor} for var in ds.data_vars}\n", + "\n", + "# Convert to Zarr without specifying a group, and with the new encoding\n", + "ds_compress.to_zarr('../data/GEBCO_2023_sub_ice_topo.zarr', mode='w', encoding=encoding)\n", + " #encoding={\"elevation\": {\"_Unsigned\": \"false\"}},\n", + " #group='gebco') \n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exe time: 0.008665800094604492 sec\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (lat: 43200, lon: 86400)\n",
+       "Coordinates:\n",
+       "  * lat        (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n",
+       "  * lon        (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n",
+       "Data variables:\n",
+       "    elevation  (lat, lon) int16 dask.array<chunksize=(60, 60), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.6\n",
+       "    comment:      The data in the GEBCO_2020 Grid should not be used for navi...\n",
+       "    history:      Information on the development of the data set and the sour...\n",
+       "    institution:  On behalf of the General Bathymetric Chart of the Oceans (G...\n",
+       "    node_offset:  1.0\n",
+       "    references:   DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n",
+       "    source:       The GEBCO_2020 Grid is the latest global bathymetric produc...\n",
+       "    title:        The GEBCO_2020 Grid - a continuous terrain model for oceans...
" + ], + "text/plain": [ + "\n", + "Dimensions: (lat: 43200, lon: 86400)\n", + "Coordinates:\n", + " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", + " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", + "Data variables:\n", + " elevation (lat, lon) int16 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.6\n", + " comment: The data in the GEBCO_2020 Grid should not be used for navi...\n", + " history: Information on the development of the data set and the sour...\n", + " institution: On behalf of the General Bathymetric Chart of the Oceans (G...\n", + " node_offset: 1.0\n", + " references: DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n", + " source: The GEBCO_2020 Grid is the latest global bathymetric produc...\n", + " title: The GEBCO_2020 Grid - a continuous terrain model for oceans..." + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "st = time.time()\n", + "dz = xr.open_zarr(\n", + " '../data/GEBCO_2023_sub_ice_topo.zarr', chunks='auto', #group='gebco', \n", + " decode_cf=False, decode_times=False)\n", + "\n", + "et = time.time()\n", + "print('Exe time: ', et-st, 'sec')\n", + "dz" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['crs', 'elevation', 'gebco', 'lat', 'lon']\n", + "Variable: crs\n", + "Compression: None\n", + "Chunk Size: ()\n", + "Variable: elevation\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (43200, 86400)\n", + "Variable: lat\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (21600,)\n", + "Variable: lon\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (43200,)\n" + ] + } + ], + "source": [ + "import zarr\n", + "\n", + "# Open the Zarr store\n", + "store = zarr.open_group('../data/GEBCO_2022_sub_ice_topo.zarr', mode='r')\n", + "print(list(store.keys()))\n", + "# Inspect attributes\n", + "for var in store.array_keys():\n", + " arr = store[var]\n", + " print(f\"Variable: {var}\")\n", + " print(f\"Compression: {arr.compressor}\")\n", + " print(f\"Chunk Size: {arr.chunks}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['elevation', 'lat', 'lon']\n", + "Variable: elevation\n", + "Compression: Zlib(level=1)\n", + "Chunk Size: (43200, 86400)\n", + "Variable: lat\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (21600,)\n", + "Variable: lon\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (43200,)\n" + ] + } + ], + "source": [ + "#import zarr\n", + "\n", + "# Open the Zarr store\n", + "store2 = zarr.open_group('../data/GEBCO_2023_sub_ice_topo_compressor.zarr', mode='r')\n", + "print(list(store2.keys()))\n", + "## Inspect attributes\n", + "## Access the 'gebco' group\n", + "# gebco_group = store2['gebco']\n", + "\n", + "## Inspect attributes within the 'gebco' group\n", + "#for var in gebco_group.array_keys():\n", + "# arr = gebco_group[var]\n", + "# print(f\"Variable: {var}\")\n", + "# print(f\"Compression: {arr.compressor}\")\n", + "# print(f\"Chunk Size: {arr.chunks}\")\n", + "\n", + "for var in store2.array_keys():\n", + " arr = store2[var]\n", + " print(f\"Variable: {var}\")\n", + " print(f\"Compression: {arr.compressor}\")\n", + " print(f\"Chunk Size: {arr.chunks}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['elevation', 'lat', 'lon']\n", + "Variable: elevation\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (60, 60)\n", + "Variable: lat\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (21600,)\n", + "Variable: lon\n", + "Compression: Blosc(cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=0)\n", + "Chunk Size: (43200,)\n" + ] + } + ], + "source": [ + "#import zarr\n", + "\n", + "# Open the Zarr store\n", + "store = zarr.open_group('../data/GEBCO_2023_sub_ice_topo.zarr', mode='r')\n", + "print(list(store.keys()))\n", + "# Inspect attributes\n", + "for var in store.array_keys():\n", + " arr = store[var]\n", + " print(f\"Variable: {var}\")\n", + " print(f\"Compression: {arr.compressor}\")\n", + " print(f\"Chunk Size: {arr.chunks}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "112\n" + ] + }, + { + "data": { + "text/plain": [ + "6.9522857666015625" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(sys.getsizeof(dz))\n", + "dz['elevation'].nbytes/(1024 ** 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exe time: 40.998939990997314 sec\n", + "[[-121 -119 -116 -111 -106 -101 -94 -88 -82 -76]\n", + " [-123 -121 -119 -115 -109 -103 -97 -91 -86 -79]\n", + " [-126 -124 -122 -118 -113 -106 -100 -95 -88 -83]\n", + " [-127 -127 -126 -123 -116 -110 -103 -97 -91 -86]\n", + " [-127 -127 -128 -126 -118 -112 -106 -99 -94 -88]\n", + " [-127 -127 -126 -125 -119 -113 -107 -102 -96 -91]\n", + " [-127 -127 -126 -123 -118 -113 -108 -103 -99 -94]\n", + " [-126 -125 -124 -122 -118 -113 -109 -104 -100 -96]\n", + " [-125 -124 -123 -120 -118 -114 -110 -107 -102 -98]\n", + " [-123 -123 -121 -120 -118 -114 -112 -108 -104 -100]]\n" + ] + } + ], + "source": [ + "st = time.time()\n", + "dz_s1 = dz.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", + "dz_s1.close() #try if it can close\n", + "zt1 = dz_s1.isel(lon=slice(1000, 1010), lat=slice(2000, 2010))\n", + "xz1 = zt1['elevation'].values\n", + "et = time.time()\n", + "print('Exe time: ', et-st, 'sec')\n", + "print(xz1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "st = time.time()\n", + "jz1 = orjson.dumps(xz1.tolist(), option=orjson.OPT_NAIVE_UTC | orjson.OPT_SERIALIZE_NUMPY)\n", + "et = time.time()\n", + "print('4.1z Convert JSON by orjson time: ', et-st, 'sec')\n", + "print(jz1)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.8.10 ('py39')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "e4b16f993b66de7f38f135ed21ea7c985362ee20cd8e4dede1c122c7165d5297" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/simu_gebco01.py b/dev/simu_gebco01.py similarity index 99% rename from simu_gebco01.py rename to dev/simu_gebco01.py index 02eeefc..805eef2 100644 --- a/simu_gebco01.py +++ b/dev/simu_gebco01.py @@ -12,7 +12,7 @@ from typing import Union #, Optional # from loggerConfig import logger # from models import zprofSchema -from xmeridian import * +from src.xmeridian import * import dask # from multiprocessing.pool import Pool @@ -39,7 +39,7 @@ global ds #logger.info ds = xr.open_zarr( - 'GEBCO_2022_sub_ice_topo.zarr', chunks='auto', group='gebco', + 'data/GEBCO_2023_sub_ice_topo.zarr', chunks='auto', group='gebco', decode_cf=False, decode_times=False) # @app.on_event("shutdown") @@ -382,7 +382,7 @@ def zprofile(lon: str, lat: str, mode: Union[str, None] = None): return JSONResponse(content=out) -#print(zprofile(lon='123,123.15', lat='22.13,22', mode='dataframe')) +print(zprofile(lon='123,123.15', lat='22.13,22', mode='dataframe')) #print(zprofile(lon='123,123.15', lat='22.13,22', mode='dataframe,zonly')) #out = zprofile(lon='123,123.15', lat='22.13', mode='dataframe') #print(out) \ No newline at end of file diff --git a/wireframe01.ipynb b/dev/wireframe01.ipynb similarity index 100% rename from wireframe01.ipynb rename to dev/wireframe01.ipynb diff --git a/zprofile01.ipynb b/dev/zprofile01.ipynb similarity index 63% rename from zprofile01.ipynb rename to dev/zprofile01.ipynb index b2628c4..73e1ebc 100644 --- a/zprofile01.ipynb +++ b/dev/zprofile01.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 105, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -16,14 +16,14 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Exe time: 0.005364179611206055 sec\n" + "Exe time: 0.5036609172821045 sec\n" ] }, { @@ -72,7 +72,7 @@ "}\n", "\n", ".xr-wrap {\n", - " display: block;\n", + " display: block !important;\n", " min-width: 300px;\n", " max-width: 700px;\n", "}\n", @@ -386,24 +386,18 @@ " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", "Data variables:\n", - " crs |S1 ...\n", - " elevation (lat, lon) int16 dask.array<chunksize=(675, 2700), meta=np.ndarray>\n", - "Attributes: (12/36)\n", - " Conventions: CF-1.6, ACDD-1.3\n", - " comment: The data in the GEBCO_2022 Grid should n...\n", - " creator_email: gdacc@seabed2030.org\n", - " creator_name: GEBCO through the Nippon Foundation-GEBC...\n", - " creator_type: International organisation\n", - " creator_url: https://www.gebco.net\n", - " ... ...\n", - " node_offset: 1.0\n", - " project: Nippon Foundation - GEBCO Seabed2030 Pro...\n", - " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " source: The GEBCO_2022 Grid is the latest global...\n", - " summary: The GEBCO_2022 Grid is a continuous, glo...\n", - " title: The GEBCO_2022 Grid - a continuous terra..." ], "text/plain": [ "\n", @@ -503,25 +461,19 @@ " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", "Data variables:\n", - " crs |S1 ...\n", - " elevation (lat, lon) int16 dask.array\n", - "Attributes: (12/36)\n", - " Conventions: CF-1.6, ACDD-1.3\n", - " comment: The data in the GEBCO_2022 Grid should n...\n", - " creator_email: gdacc@seabed2030.org\n", - " creator_name: GEBCO through the Nippon Foundation-GEBC...\n", - " creator_type: International organisation\n", - " creator_url: https://www.gebco.net\n", - " ... ...\n", - " node_offset: 1.0\n", - " project: Nippon Foundation - GEBCO Seabed2030 Pro...\n", - " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " source: The GEBCO_2022 Grid is the latest global...\n", - " summary: The GEBCO_2022 Grid is a continuous, glo...\n", - " title: The GEBCO_2022 Grid - a continuous terra..." + " elevation (lat, lon) int16 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.6\n", + " comment: The data in the GEBCO_2020 Grid should not be used for navi...\n", + " history: Information on the development of the data set and the sour...\n", + " institution: On behalf of the General Bathymetric Chart of the Oceans (G...\n", + " node_offset: 1.0\n", + " references: DOI: 10.5285/836f016a-33be-6ddc-e053-6c86abc0788e\n", + " source: The GEBCO_2020 Grid is the latest global bathymetric produc...\n", + " title: The GEBCO_2020 Grid - a continuous terrain model for oceans..." ] }, - "execution_count": 102, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -529,7 +481,7 @@ "source": [ "st = time.time()\n", "ds = xr.open_zarr(\n", - " 'GEBCO_2022_sub_ice_topo.zarr', chunks='auto', \n", + " 'data/GEBCO_2023_sub_ice_topo.zarr', chunks='auto', \n", " group='gebco', decode_cf=False, decode_times=False)\n", "\n", "et = time.time()\n", @@ -539,14 +491,14 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Estimated memory usage: 7120.129395484924 Mb\n" + "Estimated memory usage: 7120.12939453125 Mb\n" ] } ], @@ -557,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -598,16 +550,16 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([2.55682213])" + "array([2.55699391])" ] }, - "execution_count": 58, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -621,12 +573,12 @@ " geodesic((loc[lk-1, 1], loc[lk-1, 0]),\n", " (loc[lk, 1], loc[lk, 0])).km))\n", "\n", - "curDist(np.array([[121.53967066033685,25.070035818788032], [121.56499lonx[414543,25.06911681954908]]))" + "curDist(np.array([[121.53967066033685,25.070035818788032], [121.56499414543,25.06911681954908]]))" ] }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -671,377 +623,378 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "72369 27616\n", + "72368 27615\n", "m, b: 0.06490248512891315 17.175908845785813\n", - "line: 72370 121.54166666666669 0.5406250000000189 121.54062500000002 25.064197452407125 27616\n", - "line: 72371 121.54583333333335 0.5447916666666818 121.54479166666668 25.064467879428495 27616\n", - "line: 72372 121.55000000000001 0.5489583333333447 121.54895833333335 25.064738306449865 27616\n", + "line: 72369 121.53750000000002 0.536458333333356 121.53645833333336 25.063927025385755 27615\n", + "line: 72370 121.54166666666669 0.5406250000000189 121.54062500000002 25.064197452407125 27615\n", + "line: 72371 121.54583333333335 0.5447916666666818 121.54479166666668 25.064467879428495 27615\n", "m, b: 0.6648659566106117 -55.749993007023775\n", - "line: 72373 121.55416666666667 0.5531250000000075 121.55312500000001 25.066541725110483 27616\n", - "line: 72374 121.55833333333334 0.5572916666666704 121.55729166666667 25.069311999929695 27617\n", - "line: 72375 121.5625 0.5614583333333333 121.56145833333333 25.072082274748908 27618\n", - "line: 72376 121.56666666666666 0.5656249999999962 121.565625 25.074852549568106 27618\n", - "line: 72377 121.57083333333333 0.569791666666659 121.56979166666666 25.07762282438732 27619\n", - "line: 72378 121.57499999999999 0.5739583333333219 121.57395833333332 25.080393099206532 27620\n", - "line: 72379 121.57916666666665 0.5781249999999848 121.57812499999999 25.08316337402573 27620\n", - "line: 72380 121.58333333333331 0.5822916666666477 121.58229166666665 25.085933648844943 27621\n", - "line: 72381 121.58749999999998 0.5864583333333105 121.58645833333331 25.088703923664156 27622\n", - "line: 72382 121.59166666666664 0.5906249999999734 121.59062499999997 25.091474198483354 27622\n", - "line: 72383 121.59583333333336 0.5947916666666931 121.5947916666667 25.09424447330261 27623\n", - "line: 72384 121.60000000000002 0.598958333333356 121.59895833333336 25.097014748121808 27624\n", - "line: 72385 121.60416666666669 0.6031250000000189 121.60312500000002 25.09978502294102 27624\n", - "line: 72386 121.60833333333335 0.6072916666666818 121.60729166666668 25.102555297760233 27625\n", - "line: 72387 121.61250000000001 0.6114583333333447 121.61145833333335 25.105325572579446 27626\n", - "line: 72388 121.61666666666667 0.6156250000000075 121.61562500000001 25.108095847398644 27626\n", - "line: 72389 121.62083333333334 0.6197916666666704 121.61979166666667 25.110866122217857 27627\n", - "line: 72390 121.625 0.6239583333333333 121.62395833333333 25.11363639703707 27628\n", - "line: 72391 121.62916666666666 0.6281249999999962 121.628125 25.116406671856268 27628\n", - "line: 72392 121.63333333333333 0.632291666666659 121.63229166666666 25.11917694667548 27629\n", - "line: 72393 121.63749999999999 0.6364583333333219 121.63645833333332 25.121947221494693 27630\n", - "line: 72394 121.64166666666665 0.6406249999999848 121.64062499999999 25.12471749631389 27630\n", - "line: 72395 121.64583333333331 0.6447916666666477 121.64479166666665 25.127487771133104 27631\n", - "line: 72396 121.64999999999998 0.6489583333333105 121.64895833333331 25.130258045952317 27632\n", - "line: 72397 121.65416666666664 0.6531249999999734 121.65312499999997 25.13302832077153 27632\n", - "line: 72398 121.65833333333336 0.6572916666666931 121.6572916666667 25.13579859559077 27633\n", - "line: 72399 121.66250000000002 0.661458333333356 121.66145833333336 25.138568870409983 27634\n", - "line: 72400 121.66666666666669 0.6656250000000189 121.66562500000002 25.141339145229182 27634\n", - "line: 72401 121.67083333333335 0.6697916666666818 121.66979166666668 25.144109420048395 27635\n", - "line: 72402 121.67500000000001 0.6739583333333447 121.67395833333335 25.146879694867607 27636\n", - "line: 72403 121.67916666666667 0.6781250000000075 121.67812500000001 25.149649969686806 27636\n", - "line: 72404 121.68333333333334 0.6822916666666704 121.68229166666667 25.15242024450602 27637\n", - "line: 72405 121.6875 0.6864583333333333 121.68645833333333 25.15519051932523 27638\n", - "line: 72406 121.69166666666666 0.6906249999999962 121.690625 25.15796079414443 27638\n", - "line: 72407 121.69583333333333 0.694791666666659 121.69479166666666 25.160731068963642 27639\n", - "line: 72408 121.69999999999999 0.6989583333333219 121.69895833333332 25.163501343782855 27640\n", - "line: 72409 121.70416666666665 0.7031249999999848 121.70312499999999 25.166271618602067 27640\n", - "line: 72410 121.70833333333331 0.7072916666666477 121.70729166666665 25.169041893421266 27641\n", - "line: 72411 121.71249999999998 0.7114583333333105 121.71145833333331 25.17181216824048 27642\n", - "line: 72412 121.71666666666664 0.7156249999999734 121.71562499999997 25.17458244305969 27642\n", - "line: 72413 121.72083333333336 0.7197916666666931 121.7197916666667 25.177352717878932 27643\n", - "line: 72414 121.72500000000002 0.723958333333356 121.72395833333336 25.180122992698145 27644\n", - "line: 72415 121.72916666666669 0.7281250000000189 121.72812500000002 25.182893267517343 27644\n", - "line: 72416 121.73333333333335 0.7322916666666818 121.73229166666668 25.185663542336556 27645\n", - "line: 72417 121.73750000000001 0.7364583333333447 121.73645833333335 25.18843381715577 27646\n", - "line: 72418 121.74166666666667 0.7406250000000075 121.74062500000001 25.19120409197498 27646\n", - "line: 72419 121.74583333333334 0.7447916666666704 121.74479166666667 25.19397436679418 27647\n", - "line: 72420 121.75 0.7489583333333333 121.74895833333333 25.196744641613392 27648\n", - "line: 72421 121.75416666666666 0.7531249999999962 121.753125 25.199514916432605 27648\n", - "line: 72422 121.75833333333333 0.757291666666659 121.75729166666666 25.202285191251804 27649\n", - "line: 72423 121.76249999999999 0.7614583333333219 121.76145833333332 25.205055466071016 27650\n", - "line: 72424 121.76666666666665 0.7656249999999848 121.76562499999999 25.20782574089023 27650\n", - "line: 72425 121.77083333333331 0.7697916666666477 121.76979166666665 25.210596015709427 27651\n", - "line: 72426 121.77499999999998 0.7739583333333105 121.77395833333331 25.21336629052864 27652\n", - "line: 72427 121.77916666666664 0.7781249999999734 121.77812499999997 25.216136565347853 27652\n", - "line: 72428 121.78333333333336 0.7822916666666931 121.7822916666667 25.218906840167094 27653\n", - "line: 72429 121.78750000000002 0.786458333333356 121.78645833333336 25.221677114986306 27654\n", - "line: 72430 121.79166666666669 0.7906250000000189 121.79062500000002 25.22444738980552 27654\n", - "line: 72431 121.79583333333335 0.7947916666666818 121.79479166666668 25.227217664624717 27655\n", - "line: 72432 121.80000000000001 0.7989583333333447 121.79895833333335 25.22998793944393 27656\n", - "line: 72433 121.80416666666667 0.8031250000000075 121.80312500000001 25.232758214263143 27656\n", - "line: 72434 121.80833333333334 0.8072916666666704 121.80729166666667 25.23552848908234 27657\n", - "line: 72435 121.8125 0.8114583333333333 121.81145833333333 25.238298763901554 27658\n", - "line: 72436 121.81666666666666 0.8156249999999962 121.815625 25.241069038720767 27658\n", - "line: 72437 121.82083333333333 0.819791666666659 121.81979166666666 25.243839313539965 27659\n", - "line: 72438 121.82499999999999 0.8239583333333219 121.82395833333332 25.246609588359178 27660\n", - "line: 72439 121.82916666666665 0.8281249999999848 121.82812499999999 25.24937986317839 27660\n", - "line: 72440 121.83333333333331 0.8322916666666477 121.83229166666665 25.252150137997603 27661\n", - "line: 72441 121.83749999999998 0.8364583333333105 121.83645833333331 25.2549204128168 27662\n", - "line: 72442 121.84166666666664 0.8406249999999734 121.84062499999997 25.257690687636014 27662\n", - "line: 72443 121.84583333333336 0.8447916666666931 121.8447916666667 25.260460962455255 27663\n", - "line: 72444 121.85000000000002 0.848958333333356 121.84895833333336 25.263231237274468 27664\n", - "line: 72445 121.85416666666669 0.8531250000000189 121.85312500000002 25.26600151209368 27664\n", - "line: 72446 121.85833333333335 0.8572916666666818 121.85729166666668 25.26877178691288 27665\n", - "line: 72447 121.86250000000001 0.8614583333333447 121.86145833333335 25.27154206173209 27666\n", - "line: 72448 121.86666666666667 0.8656250000000075 121.86562500000001 25.274312336551304 27666\n", - "line: 72449 121.87083333333334 0.8697916666666704 121.86979166666667 25.277082611370503 27667\n", - "line: 72450 121.875 0.8739583333333333 121.87395833333333 25.279852886189715 27668\n", - "line: 72451 121.87916666666666 0.8781249999999962 121.878125 25.282623161008928 27668\n", - "line: 72452 121.88333333333333 0.882291666666659 121.88229166666666 25.28539343582814 27669\n", - "line: 72453 121.88749999999999 0.8864583333333219 121.88645833333332 25.28816371064734 27670\n", - "line: 72454 121.89166666666665 0.8906249999999848 121.89062499999999 25.290933985466552 27670\n", - "line: 72455 121.89583333333331 0.8947916666666477 121.89479166666665 25.293704260285764 27671\n", - "line: 72456 121.89999999999998 0.8989583333333105 121.89895833333331 25.296474535104963 27672\n", - "line: 72457 121.90416666666664 0.9031249999999734 121.90312499999997 25.299244809924176 27672\n", - "line: 72458 121.90833333333336 0.9072916666666931 121.9072916666667 25.302015084743417 27673\n", - "line: 72459 121.91250000000002 0.911458333333356 121.91145833333336 25.30478535956263 27674\n", - "line: 72460 121.91666666666669 0.9156250000000189 121.91562500000002 25.307555634381842 27674\n", - "line: 72461 121.92083333333335 0.9197916666666818 121.91979166666668 25.310325909201055 27675\n", - "line: 72462 121.92500000000001 0.9239583333333447 121.92395833333335 25.313096184020253 27676\n", - "line: 72463 121.92916666666667 0.9281250000000075 121.92812500000001 25.315866458839466 27676\n", - "line: 72464 121.93333333333334 0.9322916666666704 121.93229166666667 25.31863673365868 27677\n", - "line: 72465 121.9375 0.9364583333333333 121.93645833333333 25.321407008477877 27678\n", - "line: 72466 121.94166666666666 0.9406249999999962 121.940625 25.32417728329709 27678\n", - "line: 72467 121.94583333333333 0.944791666666659 121.94479166666666 25.326947558116302 27679\n", - "line: 72468 121.94999999999999 0.9489583333333219 121.94895833333332 25.3297178329355 27680\n", - "line: 72469 121.95416666666665 0.9531249999999848 121.95312499999999 25.332488107754713 27680\n", - "line: 72470 121.95833333333331 0.9572916666666477 121.95729166666665 25.335258382573926 27681\n", - "line: 72471 121.96249999999998 0.9614583333333105 121.96145833333331 25.338028657393124 27682\n", - "line: 72472 121.96666666666664 0.9656249999999734 121.96562499999997 25.340798932212337 27682\n", - "line: 72473 121.97083333333336 0.9697916666666931 121.9697916666667 25.343569207031592 27683\n", - "line: 72474 121.97500000000002 0.973958333333356 121.97395833333336 25.34633948185079 27684\n", - "line: 72475 121.97916666666669 0.9781250000000189 121.97812500000002 25.349109756670003 27684\n", - "line: 72476 121.98333333333335 0.9822916666666818 121.98229166666668 25.351880031489216 27685\n", - "line: 72477 121.98750000000001 0.9864583333333447 121.98645833333335 25.354650306308415 27686\n", - "line: 72478 121.99166666666667 0.9906250000000075 121.99062500000001 25.357420581127627 27686\n", - "line: 72479 121.99583333333334 0.9947916666666704 121.99479166666667 25.36019085594684 27687\n", - "line: 72480 122.0 -0.0010416666666666667 121.99895833333333 25.36296113076604 27688\n", - "line: 72481 122.00416666666666 0.0031249999999962107 122.003125 25.36573140558525 27688\n", - "line: 72482 122.00833333333333 0.007291666666659088 122.00729166666666 25.368501680404464 27689\n", - "line: 72483 122.01249999999999 0.011458333333321965 122.01145833333332 25.371271955223676 27690\n", - "line: 72484 122.01666666666665 0.015624999999984842 122.01562499999999 25.374042230042875 27690\n", - "line: 72485 122.02083333333331 0.01979166666664772 122.01979166666665 25.376812504862087 27691\n", - "line: 72486 122.02499999999998 0.023958333333310596 122.02395833333331 25.3795827796813 27692\n", - "line: 72487 122.02916666666664 0.028124999999973473 122.02812499999997 25.3823530545005 27692\n", - "line: 72488 122.03333333333336 0.03229166666669319 122.0322916666667 25.385123329319754 27693\n", - "line: 72489 122.03750000000002 0.03645833333335607 122.03645833333336 25.387893604138952 27694\n", - "line: 72490 122.04166666666669 0.040625000000018945 122.04062500000002 25.390663878958165 27694\n", - "line: 72491 122.04583333333335 0.04479166666668182 122.04479166666668 25.393434153777378 27695\n", - "line: 72492 122.05000000000001 0.0489583333333447 122.04895833333335 25.396204428596576 27696\n", - "line: 72493 122.05416666666667 0.053125000000007576 122.05312500000001 25.39897470341579 27696\n", - "line: 72494 122.05833333333334 0.05729166666667045 122.05729166666667 25.401744978235 27697\n", - "line: 72495 122.0625 0.06145833333333333 122.06145833333333 25.404515253054214 27698\n", - "line: 72496 122.06666666666666 0.06562499999999621 122.065625 25.407285527873412 27698\n", - "line: 72497 122.07083333333333 0.06979166666665909 122.06979166666666 25.410055802692625 27699\n", - "line: 72498 122.07499999999999 0.07395833333332197 122.07395833333332 25.412826077511838 27700\n", - "line: 72499 122.07916666666665 0.07812499999998485 122.07812499999999 25.415596352331036 27700\n", - "line: 72500 122.08333333333331 0.08229166666664772 122.08229166666665 25.41836662715025 27701\n", - "line: 72501 122.08749999999998 0.0864583333333106 122.08645833333331 25.42113690196946 27702\n", - "line: 72502 122.09166666666664 0.09062499999997348 122.09062499999997 25.42390717678866 27702\n", - "line: 72503 122.09583333333336 0.0947916666666932 122.0947916666667 25.426677451607915 27703\n", - "line: 72504 122.10000000000002 0.09895833333335607 122.09895833333336 25.429447726427114 27704\n", - "line: 72505 122.10416666666669 0.10312500000001895 122.10312500000002 25.432218001246326 27704\n", - "line: 72506 122.10833333333335 0.10729166666668183 122.10729166666668 25.43498827606554 27705\n", - "line: 72507 122.11250000000001 0.1114583333333447 122.11145833333335 25.43775855088475 27706\n", - "line: 72508 122.11666666666667 0.11562500000000758 122.11562500000001 25.44052882570395 27706\n", - "line: 72509 122.12083333333334 0.11979166666667046 122.11979166666667 25.443299100523163 27707\n", - "line: 72510 122.125 0.12395833333333334 122.12395833333333 25.446069375342375 27708\n", - "line: 72511 122.12916666666666 0.12812499999999621 122.128125 25.448839650161574 27708\n", - "line: 72512 122.13333333333333 0.1322916666666591 122.13229166666666 25.451609924980787 27709\n", - "line: 72513 122.13749999999999 0.13645833333332197 122.13645833333332 25.4543801998 27710\n", - "line: 72514 122.14166666666665 0.14062499999998485 122.14062499999999 25.457150474619198 27710\n", - "line: 72515 122.14583333333331 0.14479166666664772 122.14479166666665 25.45992074943841 27711\n", - "line: 72516 122.14999999999998 0.1489583333333106 122.14895833333331 25.462691024257623 27712\n", - "line: 72517 122.15416666666664 0.15312499999997348 122.15312499999997 25.465461299076836 27712\n", - "line: 72518 122.15833333333336 0.1572916666666932 122.1572916666667 25.468231573896077 27713\n", - "line: 72519 122.16250000000002 0.16145833333335607 122.16145833333336 25.47100184871529 27714\n", - "line: 72520 122.16666666666669 0.16562500000001895 122.16562500000002 25.473772123534488 27714\n", - "line: 72521 122.17083333333335 0.16979166666668183 122.16979166666668 25.4765423983537 27715\n", - "line: 72522 122.17500000000001 0.1739583333333447 122.17395833333335 25.479312673172913 27716\n", - "line: 72523 122.17916666666667 0.17812500000000758 122.17812500000001 25.48208294799211 27716\n", - "line: 72524 122.18333333333334 0.18229166666667046 122.18229166666667 25.484853222811324 27717\n", - "line: 72525 122.1875 0.18645833333333334 122.18645833333333 25.487623497630537 27718\n", - "line: 72526 122.19166666666666 0.19062499999999621 122.190625 25.490393772449735 27718\n", - "line: 72527 122.19583333333333 0.1947916666666591 122.19479166666666 25.493164047268948 27719\n", - "line: 72528 122.19999999999999 0.19895833333332197 122.19895833333332 25.49593432208816 27720\n", - "line: 72529 122.20416666666665 0.20312499999998485 122.20312499999999 25.498704596907373 27720\n", - "line: 72530 122.20833333333331 0.20729166666664772 122.20729166666665 25.501474871726572 27721\n", - "line: 72531 122.21249999999998 0.2114583333333106 122.21145833333331 25.504245146545784 27722\n", - "line: 72532 122.21666666666664 0.21562499999997348 122.21562499999997 25.507015421364997 27722\n", - "line: 72533 122.22083333333336 0.2197916666666932 122.2197916666667 25.509785696184238 27723\n", - "line: 72534 122.22500000000002 0.22395833333335607 122.22395833333336 25.51255597100345 27724\n", - "line: 72535 122.22916666666669 0.22812500000001895 122.22812500000002 25.51532624582265 27724\n", - "line: 72536 122.23333333333335 0.23229166666668183 122.23229166666668 25.518096520641862 27725\n", - "line: 72537 122.23750000000001 0.2364583333333447 122.23645833333335 25.520866795461075 27726\n", - "line: 72538 122.24166666666667 0.24062500000000758 122.24062500000001 25.523637070280287 27726\n", - "line: 72539 122.24583333333334 0.24479166666667046 122.24479166666667 25.526407345099486 27727\n", - "line: 72540 122.25 0.24895833333333334 122.24895833333333 25.5291776199187 27728\n", - "line: 72541 122.25416666666666 0.2531249999999962 122.253125 25.53194789473791 27728\n", - "line: 72542 122.25833333333333 0.2572916666666591 122.25729166666666 25.53471816955711 27729\n", - "line: 72543 122.26249999999999 0.26145833333332197 122.26145833333332 25.537488444376322 27729\n", - "line: 72544 122.26666666666665 0.26562499999998485 122.26562499999999 25.540258719195535 27730\n", - "line: 72545 122.27083333333331 0.2697916666666477 122.26979166666665 25.543028994014733 27731\n", - "line: 72546 122.27499999999998 0.2739583333333106 122.27395833333331 25.545799268833946 27731\n", - "line: 72547 122.27916666666664 0.2781249999999735 122.27812499999997 25.54856954365316 27732\n", - "line: 72548 122.28333333333336 0.2822916666666932 122.2822916666667 25.5513398184724 27733\n", - "line: 72549 122.28750000000002 0.2864583333333561 122.28645833333336 25.554110093291612 27733\n", - "line: 72550 122.29166666666669 0.29062500000001895 122.29062500000002 25.556880368110825 27734\n", - "line: 72551 122.29583333333335 0.29479166666668183 122.29479166666668 25.559650642930023 27735\n", - "line: 72552 122.30000000000001 0.2989583333333447 122.29895833333335 25.562420917749236 27735\n", - "line: 72553 122.30416666666667 0.3031250000000076 122.30312500000001 25.56519119256845 27736\n", - "line: 72554 122.30833333333334 0.30729166666667046 122.30729166666667 25.567961467387647 27737\n", - "line: 72555 122.3125 0.31145833333333334 122.31145833333333 25.57073174220686 27737\n", - "line: 72556 122.31666666666666 0.3156249999999962 122.315625 25.573502017026073 27738\n", - "line: 72557 122.32083333333333 0.3197916666666591 122.31979166666666 25.57627229184527 27739\n", - "line: 72558 122.32499999999999 0.32395833333332197 122.32395833333332 25.579042566664484 27739\n", - "line: 72559 122.32916666666665 0.32812499999998485 122.32812499999999 25.581812841483696 27740\n", - "line: 72560 122.33333333333331 0.3322916666666477 122.33229166666665 25.58458311630291 27741\n", - "line: 72561 122.33749999999998 0.3364583333333106 122.33645833333331 25.587353391122107 27741\n", - "line: 72562 122.34166666666664 0.3406249999999735 122.34062499999997 25.59012366594132 27742\n", - "line: 72563 122.34583333333336 0.3447916666666932 122.3447916666667 25.59289394076056 27743\n", - "line: 72564 122.35000000000002 0.3489583333333561 122.34895833333336 25.595664215579774 27743\n", - "line: 72565 122.35416666666669 0.35312500000001895 122.35312500000002 25.598434490398986 27744\n", - "line: 72566 122.35833333333335 0.35729166666668183 122.35729166666668 25.601204765218185 27745\n", - "line: 72567 122.36250000000001 0.3614583333333447 122.36145833333335 25.603975040037398 27745\n", - "line: 72568 122.36666666666667 0.3656250000000076 122.36562500000001 25.60674531485661 27746\n", - "line: 72569 122.37083333333334 0.36979166666667046 122.36979166666667 25.60951558967581 27747\n", - "line: 72570 122.375 0.37395833333333334 122.37395833333333 25.61228586449502 27747\n", - "line: 72571 122.37916666666666 0.3781249999999962 122.378125 25.615056139314234 27748\n", - "line: 72572 122.38333333333333 0.3822916666666591 122.38229166666666 25.617826414133447 27749\n", - "line: 72573 122.38749999999999 0.38645833333332197 122.38645833333332 25.620596688952645 27749\n", - "line: 72574 122.39166666666665 0.39062499999998485 122.39062499999999 25.623366963771858 27750\n", - "line: 72575 122.39583333333331 0.3947916666666477 122.39479166666665 25.62613723859107 27751\n", - "line: 72576 122.39999999999998 0.3989583333333106 122.39895833333331 25.62890751341027 27751\n", - "line: 72577 122.40416666666664 0.4031249999999735 122.40312499999997 25.63167778822948 27752\n", - "line: 72578 122.40833333333336 0.4072916666666932 122.4072916666667 25.634448063048723 27753\n", - "line: 72579 122.41250000000002 0.4114583333333561 122.41145833333336 25.637218337867935 27753\n", - "line: 72580 122.41666666666669 0.41562500000001895 122.41562500000002 25.639988612687148 27754\n", - "line: 72581 122.42083333333335 0.41979166666668183 122.41979166666668 25.642758887506346 27755\n", - "line: 72582 122.42500000000001 0.4239583333333447 122.42395833333335 25.64552916232556 27755\n", - "line: 72583 122.42916666666667 0.4281250000000076 122.42812500000001 25.64829943714477 27756\n", - "line: 72584 122.43333333333334 0.43229166666667046 122.43229166666667 25.651069711963984 27757\n", - "line: 72585 122.4375 0.43645833333333334 122.43645833333333 25.653839986783183 27757\n", - "line: 72586 122.44166666666666 0.4406249999999962 122.440625 25.656610261602395 27758\n", - "line: 72587 122.44583333333333 0.4447916666666591 122.44479166666666 25.659380536421608 27759\n", - "line: 72588 122.44999999999999 0.44895833333332197 122.44895833333332 25.662150811240807 27759\n", - "line: 72589 122.45416666666665 0.45312499999998485 122.45312499999999 25.66492108606002 27760\n", - "line: 72590 122.45833333333331 0.4572916666666477 122.45729166666665 25.667691360879232 27761\n", - "line: 72591 122.46249999999998 0.4614583333333106 122.46145833333331 25.67046163569843 27761\n", - "line: 72592 122.46666666666664 0.4656249999999735 122.46562499999997 25.673231910517643 27762\n", - "line: 72593 122.47083333333336 0.4697916666666932 122.4697916666667 25.6760021853369 27763\n", - "line: 72594 122.47500000000002 0.4739583333333561 122.47395833333336 25.678772460156097 27763\n", - "line: 72595 122.47916666666669 0.47812500000001895 122.47812500000002 25.68154273497531 27764\n", - "line: 72596 122.48333333333335 0.48229166666668183 122.48229166666668 25.684313009794522 27765\n", - "line: 72597 122.48750000000001 0.4864583333333447 122.48645833333335 25.68708328461372 27765\n", - "line: 72598 122.49166666666667 0.4906250000000076 122.49062500000001 25.689853559432933 27766\n", - "line: 72599 122.49583333333334 0.49479166666667046 122.49479166666667 25.692623834252146 27767\n", - "line: 72600 122.5 0.49895833333333334 122.49895833333333 25.695394109071344 27767\n", - "line: 72601 122.50416666666666 0.5031249999999962 122.503125 25.698164383890557 27768\n", - "line: 72602 122.50833333333333 0.507291666666659 122.50729166666666 25.70093465870977 27769\n", - "line: 72603 122.51249999999999 0.5114583333333219 122.51145833333332 25.703704933528982 27769\n", - "line: 72604 122.51666666666665 0.5156249999999848 122.51562499999999 25.70647520834818 27770\n", - "line: 72605 122.52083333333331 0.5197916666666477 122.51979166666665 25.709245483167393 27771\n", - "line: 72606 122.52499999999998 0.5239583333333105 122.52395833333331 25.712015757986606 27771\n", - "line: 72607 122.52916666666664 0.5281249999999734 122.52812499999997 25.714786032805804 27772\n", - "line: 72608 122.53333333333336 0.5322916666666931 122.5322916666667 25.71755630762506 27773\n", - "line: 72609 122.53750000000002 0.536458333333356 122.53645833333336 25.720326582444258 27773\n", - "line: 72610 122.54166666666669 0.5406250000000189 122.54062500000002 25.72309685726347 27774\n", - "line: 72611 122.54583333333335 0.5447916666666818 122.54479166666668 25.725867132082683 27775\n", - "line: 72612 122.55000000000001 0.5489583333333447 122.54895833333335 25.728637406901882 27775\n", - "line: 72613 122.55416666666667 0.5531250000000075 122.55312500000001 25.731407681721095 27776\n", - "line: 72614 122.55833333333334 0.5572916666666704 122.55729166666667 25.734177956540307 27777\n", - "line: 72615 122.5625 0.5614583333333333 122.56145833333333 25.73694823135952 27777\n", - "line: 72616 122.56666666666666 0.5656249999999962 122.565625 25.73971850617872 27778\n", - "line: 72617 122.57083333333333 0.569791666666659 122.56979166666666 25.74248878099793 27779\n", - "line: 72618 122.57499999999999 0.5739583333333219 122.57395833333332 25.745259055817144 27779\n", - "line: 72619 122.57916666666665 0.5781249999999848 122.57812499999999 25.748029330636342 27780\n", - "line: 72620 122.58333333333331 0.5822916666666477 122.58229166666665 25.750799605455555 27781\n", - "line: 72621 122.58749999999998 0.5864583333333105 122.58645833333331 25.753569880274767 27781\n", - "line: 72622 122.59166666666664 0.5906249999999734 122.59062499999997 25.756340155093966 27782\n", - "line: 72623 122.59583333333336 0.5947916666666931 122.5947916666667 25.75911042991322 27783\n", - "line: 72624 122.60000000000002 0.598958333333356 122.59895833333336 25.76188070473242 27783\n", - "line: 72625 122.60416666666669 0.6031250000000189 122.60312500000002 25.764650979551632 27784\n", - "line: 72626 122.60833333333335 0.6072916666666818 122.60729166666668 25.767421254370845 27785\n", - "line: 72627 122.61250000000001 0.6114583333333447 122.61145833333335 25.770191529190058 27785\n", - "line: 72628 122.61666666666667 0.6156250000000075 122.61562500000001 25.772961804009256 27786\n", - "line: 72629 122.62083333333334 0.6197916666666704 122.61979166666667 25.77573207882847 27787\n", - "line: 72630 122.625 0.6239583333333333 122.62395833333333 25.77850235364768 27787\n", - "line: 72631 122.62916666666666 0.6281249999999962 122.628125 25.78127262846688 27788\n", - "line: 72632 122.63333333333333 0.632291666666659 122.63229166666666 25.784042903286092 27789\n", - "line: 72633 122.63749999999999 0.6364583333333219 122.63645833333332 25.786813178105305 27789\n", - "line: 72634 122.64166666666665 0.6406249999999848 122.64062499999999 25.789583452924504 27790\n", - "line: 72635 122.64583333333331 0.6447916666666477 122.64479166666665 25.792353727743716 27791\n", - "line: 72636 122.64999999999998 0.6489583333333105 122.64895833333331 25.79512400256293 27791\n", - "line: 72637 122.65416666666664 0.6531249999999734 122.65312499999997 25.79789427738214 27792\n", - "line: 72638 122.65833333333336 0.6572916666666931 122.6572916666667 25.800664552201383 27793\n", - "line: 72639 122.66250000000002 0.661458333333356 122.66145833333336 25.803434827020595 27793\n", - "line: 72640 122.66666666666669 0.6656250000000189 122.66562500000002 25.806205101839794 27794\n", - "line: 72641 122.67083333333335 0.6697916666666818 122.66979166666668 25.808975376659006 27795\n", - "line: 72642 122.67500000000001 0.6739583333333447 122.67395833333335 25.81174565147822 27795\n", - "line: 72643 122.67916666666667 0.6781250000000075 122.67812500000001 25.814515926297418 27796\n", - "line: 72644 122.68333333333334 0.6822916666666704 122.68229166666667 25.81728620111663 27797\n", - "line: 72645 122.6875 0.6864583333333333 122.68645833333333 25.820056475935843 27797\n", - "line: 72646 122.69166666666666 0.6906249999999962 122.690625 25.82282675075504 27798\n", - "line: 72647 122.69583333333333 0.694791666666659 122.69479166666666 25.825597025574254 27799\n", - "line: 72648 122.69999999999999 0.6989583333333219 122.69895833333332 25.828367300393467 27799\n", - "line: 72649 122.70416666666665 0.7031249999999848 122.70312499999999 25.83113757521268 27800\n", - "line: 72650 122.70833333333331 0.7072916666666477 122.70729166666665 25.833907850031878 27801\n", - "line: 72651 122.71249999999998 0.7114583333333105 122.71145833333331 25.83667812485109 27801\n", - "line: 72652 122.71666666666664 0.7156249999999734 122.71562499999997 25.839448399670303 27802\n", - "line: 72653 122.72083333333336 0.7197916666666931 122.7197916666667 25.842218674489544 27803\n", - "line: 72654 122.72500000000002 0.723958333333356 122.72395833333336 25.844988949308757 27803\n", - "line: 72655 122.72916666666669 0.7281250000000189 122.72812500000002 25.847759224127955 27804\n", - "line: 72656 122.73333333333335 0.7322916666666818 122.73229166666668 25.850529498947168 27805\n", - "line: 72657 122.73750000000001 0.7364583333333447 122.73645833333335 25.85329977376638 27805\n", - "line: 72658 122.74166666666667 0.7406250000000075 122.74062500000001 25.856070048585593 27806\n", - "line: 72659 122.74583333333334 0.7447916666666704 122.74479166666667 25.85884032340479 27807\n", - "line: 72660 122.75 0.7489583333333333 122.74895833333333 25.861610598224004 27807\n", - "line: 72661 122.75416666666666 0.7531249999999962 122.753125 25.864380873043217 27808\n", - "line: 72662 122.75833333333333 0.757291666666659 122.75729166666666 25.867151147862415 27809\n", - "line: 72663 122.76249999999999 0.7614583333333219 122.76145833333332 25.869921422681628 27809\n", - "line: 72664 122.76666666666665 0.7656249999999848 122.76562499999999 25.87269169750084 27810\n", - "line: 72665 122.77083333333331 0.7697916666666477 122.76979166666665 25.87546197232004 27811\n", - "line: 72666 122.77499999999998 0.7739583333333105 122.77395833333331 25.878232247139252 27811\n", - "line: 72667 122.77916666666664 0.7781249999999734 122.77812499999997 25.881002521958465 27812\n", - "line: 72668 122.78333333333336 0.7822916666666931 122.7822916666667 25.883772796777706 27813\n", - "line: 72669 122.78750000000002 0.786458333333356 122.78645833333336 25.88654307159692 27813\n", - "line: 72670 122.79166666666669 0.7906250000000189 122.79062500000002 25.88931334641613 27814\n", - "line: 72671 122.79583333333335 0.7947916666666818 122.79479166666668 25.89208362123533 27815\n", - "line: 72672 122.80000000000001 0.7989583333333447 122.79895833333335 25.894853896054542 27815\n", - "line: 72673 122.80416666666667 0.8031250000000075 122.80312500000001 25.897624170873755 27816\n", - "line: 72674 122.80833333333334 0.8072916666666704 122.80729166666667 25.900394445692953 27817\n", - "line: 72675 122.8125 0.8114583333333333 122.81145833333333 25.903164720512166 27817\n", - "line: 72676 122.81666666666666 0.8156249999999962 122.815625 25.90593499533138 27818\n", - "line: 72677 122.82083333333333 0.819791666666659 122.81979166666666 25.908705270150577 27819\n", - "line: 72678 122.82499999999999 0.8239583333333219 122.82395833333332 25.91147554496979 27819\n", - "line: 72679 122.82916666666665 0.8281249999999848 122.82812499999999 25.914245819789002 27820\n", - "line: 72680 122.83333333333331 0.8322916666666477 122.83229166666665 25.917016094608215 27821\n", - "line: 72681 122.83749999999998 0.8364583333333105 122.83645833333331 25.919786369427413 27821\n", - "line: 72682 122.84166666666664 0.8406249999999734 122.84062499999997 25.922556644246626 27822\n", - "line: 72683 122.84583333333336 0.8447916666666931 122.8447916666667 25.925326919065867 27823\n", - "line: 72684 122.85000000000002 0.848958333333356 122.84895833333336 25.92809719388508 27823\n", - "line: 72685 122.85416666666669 0.8531250000000189 122.85312500000002 25.930867468704292 27824\n", - "line: 72686 122.85833333333335 0.8572916666666818 122.85729166666668 25.93363774352349 27825\n", - "line: 72687 122.86250000000001 0.8614583333333447 122.86145833333335 25.936408018342703 27825\n", - "line: 72688 122.86666666666667 0.8656250000000075 122.86562500000001 25.939178293161916 27826\n", - "line: 72689 122.87083333333334 0.8697916666666704 122.86979166666667 25.941948567981115 27827\n", - "line: 72690 122.875 0.8739583333333333 122.87395833333333 25.944718842800327 27827\n", - "line: 72691 122.87916666666666 0.8781249999999962 122.878125 25.94748911761954 27828\n", - "line: 72692 122.88333333333333 0.882291666666659 122.88229166666666 25.950259392438753 27829\n", - "line: 72693 122.88749999999999 0.8864583333333219 122.88645833333332 25.95302966725795 27829\n", - "line: 72694 122.89166666666665 0.8906249999999848 122.89062499999999 25.955799942077164 27830\n", - "line: 72695 122.89583333333331 0.8947916666666477 122.89479166666665 25.958570216896376 27831\n", - "line: 72696 122.89999999999998 0.8989583333333105 122.89895833333331 25.961340491715575 27831\n", - "line: 72697 122.90416666666664 0.9031249999999734 122.90312499999997 25.964110766534787 27832\n", - "line: 72698 122.90833333333336 0.9072916666666931 122.9072916666667 25.96688104135403 27833\n", - "line: 72699 122.91250000000002 0.911458333333356 122.91145833333336 25.96965131617324 27833\n", - "line: 72700 122.91666666666669 0.9156250000000189 122.91562500000002 25.972421590992454 27834\n", - "line: 72701 122.92083333333335 0.9197916666666818 122.91979166666668 25.975191865811652 27835\n", - "line: 72702 122.92500000000001 0.9239583333333447 122.92395833333335 25.977962140630865 27835\n", - "line: 72703 122.92916666666667 0.9281250000000075 122.92812500000001 25.980732415450078 27836\n", - "line: 72704 122.93333333333334 0.9322916666666704 122.93229166666667 25.98350269026929 27837\n", - "line: 72705 122.9375 0.9364583333333333 122.93645833333333 25.98627296508849 27837\n", - "line: 72706 122.94166666666666 0.9406249999999962 122.940625 25.9890432399077 27838\n", - "line: 72707 122.94583333333333 0.944791666666659 122.94479166666666 25.991813514726914 27839\n", - "line: 72708 122.94999999999999 0.9489583333333219 122.94895833333332 25.994583789546112 27839\n", - "line: 72709 122.95416666666665 0.9531249999999848 122.95312499999999 25.997354064365325 27840\n", - "line: 72710 122.95833333333331 0.9572916666666477 122.95729166666665 26.000124339184538 27841\n", - "line: 72711 122.96249999999998 0.9614583333333105 122.96145833333331 26.002894614003736 27841\n", - "line: 72712 122.96666666666664 0.9656249999999734 122.96562499999997 26.00566488882295 27842\n", - "line: 72713 122.97083333333336 0.9697916666666931 122.9697916666667 26.008435163642204 27843\n", - "line: 72714 122.97500000000002 0.973958333333356 122.97395833333336 26.011205438461403 27843\n", - "line: 72715 122.97916666666669 0.9781250000000189 122.97812500000002 26.013975713280615 27844\n", - "line: 72716 122.98333333333335 0.9822916666666818 122.98229166666668 26.016745988099828 27845\n", - "line: 72717 122.98750000000001 0.9864583333333447 122.98645833333335 26.019516262919026 27845\n", - "line: 72718 122.99166666666667 0.9906250000000075 122.99062500000001 26.02228653773824 27846\n", - "line: 72719 122.99583333333334 0.9947916666666704 122.99479166666667 26.02505681255745 27847\n", - "line: 72720 123.0 -0.0010416666666666667 122.99895833333333 26.02782708737665 27847\n", - "line: 72721 123.00416666666666 0.0031249999999962107 123.003125 26.030597362195863 27848\n", - "line: 72722 123.00833333333333 0.007291666666659088 123.00729166666666 26.033367637015076 27849\n", - "line: 72723 123.01249999999999 0.011458333333321965 123.01145833333332 26.036137911834274 27849\n", - "line: 72724 123.01666666666665 0.015624999999984842 123.01562499999999 26.038908186653487 27850\n", - "line: 72725 123.02083333333331 0.01979166666664772 123.01979166666665 26.0416784614727 27851\n", - "line: 72726 123.02499999999998 0.023958333333310596 123.02395833333331 26.044448736291912 27851\n", - "line: 72727 123.02916666666664 0.028124999999973473 123.02812499999997 26.04721901111111 27852\n", - "line: 72728 123.03333333333336 0.03229166666669319 123.0322916666667 26.049989285930366 27852\n", - "line: 72729 123.03750000000002 0.03645833333335607 123.03645833333336 26.052759560749564 27853\n", - "Exe time: 0.20121383666992188 sec\n", + "line: 72372 121.55000000000001 0.5489583333333447 121.54895833333335 25.06377145029127 27615\n", + "line: 72373 121.55416666666667 0.5531250000000075 121.55312500000001 25.066541725110483 27615\n", + "line: 72374 121.55833333333334 0.5572916666666704 121.55729166666667 25.069311999929695 27616\n", + "line: 72375 121.5625 0.5614583333333333 121.56145833333333 25.072082274748908 27617\n", + "line: 72376 121.56666666666666 0.5656249999999962 121.565625 25.074852549568106 27617\n", + "line: 72377 121.57083333333333 0.569791666666659 121.56979166666666 25.07762282438732 27618\n", + "line: 72378 121.57499999999999 0.5739583333333219 121.57395833333332 25.080393099206532 27619\n", + "line: 72379 121.57916666666665 0.5781249999999848 121.57812499999999 25.08316337402573 27619\n", + "line: 72380 121.58333333333331 0.5822916666666477 121.58229166666665 25.085933648844943 27620\n", + "line: 72381 121.58749999999998 0.5864583333333105 121.58645833333331 25.088703923664156 27621\n", + "line: 72382 121.59166666666664 0.5906249999999734 121.59062499999997 25.091474198483354 27621\n", + "line: 72383 121.59583333333336 0.5947916666666931 121.5947916666667 25.09424447330261 27622\n", + "line: 72384 121.60000000000002 0.598958333333356 121.59895833333336 25.097014748121808 27623\n", + "line: 72385 121.60416666666669 0.6031250000000189 121.60312500000002 25.09978502294102 27623\n", + "line: 72386 121.60833333333335 0.6072916666666818 121.60729166666668 25.102555297760233 27624\n", + "line: 72387 121.61250000000001 0.6114583333333447 121.61145833333335 25.105325572579446 27625\n", + "line: 72388 121.61666666666667 0.6156250000000075 121.61562500000001 25.108095847398644 27625\n", + "line: 72389 121.62083333333334 0.6197916666666704 121.61979166666667 25.110866122217857 27626\n", + "line: 72390 121.625 0.6239583333333333 121.62395833333333 25.11363639703707 27627\n", + "line: 72391 121.62916666666666 0.6281249999999962 121.628125 25.116406671856268 27627\n", + "line: 72392 121.63333333333333 0.632291666666659 121.63229166666666 25.11917694667548 27628\n", + "line: 72393 121.63749999999999 0.6364583333333219 121.63645833333332 25.121947221494693 27629\n", + "line: 72394 121.64166666666665 0.6406249999999848 121.64062499999999 25.12471749631389 27629\n", + "line: 72395 121.64583333333331 0.6447916666666477 121.64479166666665 25.127487771133104 27630\n", + "line: 72396 121.64999999999998 0.6489583333333105 121.64895833333331 25.130258045952317 27631\n", + "line: 72397 121.65416666666664 0.6531249999999734 121.65312499999997 25.13302832077153 27631\n", + "line: 72398 121.65833333333336 0.6572916666666931 121.6572916666667 25.13579859559077 27632\n", + "line: 72399 121.66250000000002 0.661458333333356 121.66145833333336 25.138568870409983 27633\n", + "line: 72400 121.66666666666669 0.6656250000000189 121.66562500000002 25.141339145229182 27633\n", + "line: 72401 121.67083333333335 0.6697916666666818 121.66979166666668 25.144109420048395 27634\n", + "line: 72402 121.67500000000001 0.6739583333333447 121.67395833333335 25.146879694867607 27635\n", + "line: 72403 121.67916666666667 0.6781250000000075 121.67812500000001 25.149649969686806 27635\n", + "line: 72404 121.68333333333334 0.6822916666666704 121.68229166666667 25.15242024450602 27636\n", + "line: 72405 121.6875 0.6864583333333333 121.68645833333333 25.15519051932523 27637\n", + "line: 72406 121.69166666666666 0.6906249999999962 121.690625 25.15796079414443 27637\n", + "line: 72407 121.69583333333333 0.694791666666659 121.69479166666666 25.160731068963642 27638\n", + "line: 72408 121.69999999999999 0.6989583333333219 121.69895833333332 25.163501343782855 27639\n", + "line: 72409 121.70416666666665 0.7031249999999848 121.70312499999999 25.166271618602067 27639\n", + "line: 72410 121.70833333333331 0.7072916666666477 121.70729166666665 25.169041893421266 27640\n", + "line: 72411 121.71249999999998 0.7114583333333105 121.71145833333331 25.17181216824048 27641\n", + "line: 72412 121.71666666666664 0.7156249999999734 121.71562499999997 25.17458244305969 27641\n", + "line: 72413 121.72083333333336 0.7197916666666931 121.7197916666667 25.177352717878932 27642\n", + "line: 72414 121.72500000000002 0.723958333333356 121.72395833333336 25.180122992698145 27643\n", + "line: 72415 121.72916666666669 0.7281250000000189 121.72812500000002 25.182893267517343 27643\n", + "line: 72416 121.73333333333335 0.7322916666666818 121.73229166666668 25.185663542336556 27644\n", + "line: 72417 121.73750000000001 0.7364583333333447 121.73645833333335 25.18843381715577 27645\n", + "line: 72418 121.74166666666667 0.7406250000000075 121.74062500000001 25.19120409197498 27645\n", + "line: 72419 121.74583333333334 0.7447916666666704 121.74479166666667 25.19397436679418 27646\n", + "line: 72420 121.75 0.7489583333333333 121.74895833333333 25.196744641613392 27647\n", + "line: 72421 121.75416666666666 0.7531249999999962 121.753125 25.199514916432605 27647\n", + "line: 72422 121.75833333333333 0.757291666666659 121.75729166666666 25.202285191251804 27648\n", + "line: 72423 121.76249999999999 0.7614583333333219 121.76145833333332 25.205055466071016 27649\n", + "line: 72424 121.76666666666665 0.7656249999999848 121.76562499999999 25.20782574089023 27649\n", + "line: 72425 121.77083333333331 0.7697916666666477 121.76979166666665 25.210596015709427 27650\n", + "line: 72426 121.77499999999998 0.7739583333333105 121.77395833333331 25.21336629052864 27651\n", + "line: 72427 121.77916666666664 0.7781249999999734 121.77812499999997 25.216136565347853 27651\n", + "line: 72428 121.78333333333336 0.7822916666666931 121.7822916666667 25.218906840167094 27652\n", + "line: 72429 121.78750000000002 0.786458333333356 121.78645833333336 25.221677114986306 27653\n", + "line: 72430 121.79166666666669 0.7906250000000189 121.79062500000002 25.22444738980552 27653\n", + "line: 72431 121.79583333333335 0.7947916666666818 121.79479166666668 25.227217664624717 27654\n", + "line: 72432 121.80000000000001 0.7989583333333447 121.79895833333335 25.22998793944393 27655\n", + "line: 72433 121.80416666666667 0.8031250000000075 121.80312500000001 25.232758214263143 27655\n", + "line: 72434 121.80833333333334 0.8072916666666704 121.80729166666667 25.23552848908234 27656\n", + "line: 72435 121.8125 0.8114583333333333 121.81145833333333 25.238298763901554 27657\n", + "line: 72436 121.81666666666666 0.8156249999999962 121.815625 25.241069038720767 27657\n", + "line: 72437 121.82083333333333 0.819791666666659 121.81979166666666 25.243839313539965 27658\n", + "line: 72438 121.82499999999999 0.8239583333333219 121.82395833333332 25.246609588359178 27659\n", + "line: 72439 121.82916666666665 0.8281249999999848 121.82812499999999 25.24937986317839 27659\n", + "line: 72440 121.83333333333331 0.8322916666666477 121.83229166666665 25.252150137997603 27660\n", + "line: 72441 121.83749999999998 0.8364583333333105 121.83645833333331 25.2549204128168 27661\n", + "line: 72442 121.84166666666664 0.8406249999999734 121.84062499999997 25.257690687636014 27661\n", + "line: 72443 121.84583333333336 0.8447916666666931 121.8447916666667 25.260460962455255 27662\n", + "line: 72444 121.85000000000002 0.848958333333356 121.84895833333336 25.263231237274468 27663\n", + "line: 72445 121.85416666666669 0.8531250000000189 121.85312500000002 25.26600151209368 27663\n", + "line: 72446 121.85833333333335 0.8572916666666818 121.85729166666668 25.26877178691288 27664\n", + "line: 72447 121.86250000000001 0.8614583333333447 121.86145833333335 25.27154206173209 27665\n", + "line: 72448 121.86666666666667 0.8656250000000075 121.86562500000001 25.274312336551304 27665\n", + "line: 72449 121.87083333333334 0.8697916666666704 121.86979166666667 25.277082611370503 27666\n", + "line: 72450 121.875 0.8739583333333333 121.87395833333333 25.279852886189715 27667\n", + "line: 72451 121.87916666666666 0.8781249999999962 121.878125 25.282623161008928 27667\n", + "line: 72452 121.88333333333333 0.882291666666659 121.88229166666666 25.28539343582814 27668\n", + "line: 72453 121.88749999999999 0.8864583333333219 121.88645833333332 25.28816371064734 27669\n", + "line: 72454 121.89166666666665 0.8906249999999848 121.89062499999999 25.290933985466552 27669\n", + "line: 72455 121.89583333333331 0.8947916666666477 121.89479166666665 25.293704260285764 27670\n", + "line: 72456 121.89999999999998 0.8989583333333105 121.89895833333331 25.296474535104963 27671\n", + "line: 72457 121.90416666666664 0.9031249999999734 121.90312499999997 25.299244809924176 27671\n", + "line: 72458 121.90833333333336 0.9072916666666931 121.9072916666667 25.302015084743417 27672\n", + "line: 72459 121.91250000000002 0.911458333333356 121.91145833333336 25.30478535956263 27673\n", + "line: 72460 121.91666666666669 0.9156250000000189 121.91562500000002 25.307555634381842 27673\n", + "line: 72461 121.92083333333335 0.9197916666666818 121.91979166666668 25.310325909201055 27674\n", + "line: 72462 121.92500000000001 0.9239583333333447 121.92395833333335 25.313096184020253 27675\n", + "line: 72463 121.92916666666667 0.9281250000000075 121.92812500000001 25.315866458839466 27675\n", + "line: 72464 121.93333333333334 0.9322916666666704 121.93229166666667 25.31863673365868 27676\n", + "line: 72465 121.9375 0.9364583333333333 121.93645833333333 25.321407008477877 27677\n", + "line: 72466 121.94166666666666 0.9406249999999962 121.940625 25.32417728329709 27677\n", + "line: 72467 121.94583333333333 0.944791666666659 121.94479166666666 25.326947558116302 27678\n", + "line: 72468 121.94999999999999 0.9489583333333219 121.94895833333332 25.3297178329355 27679\n", + "line: 72469 121.95416666666665 0.9531249999999848 121.95312499999999 25.332488107754713 27679\n", + "line: 72470 121.95833333333331 0.9572916666666477 121.95729166666665 25.335258382573926 27680\n", + "line: 72471 121.96249999999998 0.9614583333333105 121.96145833333331 25.338028657393124 27681\n", + "line: 72472 121.96666666666664 0.9656249999999734 121.96562499999997 25.340798932212337 27681\n", + "line: 72473 121.97083333333336 0.9697916666666931 121.9697916666667 25.343569207031592 27682\n", + "line: 72474 121.97500000000002 0.973958333333356 121.97395833333336 25.34633948185079 27683\n", + "line: 72475 121.97916666666669 0.9781250000000189 121.97812500000002 25.349109756670003 27683\n", + "line: 72476 121.98333333333335 0.9822916666666818 121.98229166666668 25.351880031489216 27684\n", + "line: 72477 121.98750000000001 0.9864583333333447 121.98645833333335 25.354650306308415 27685\n", + "line: 72478 121.99166666666667 0.9906250000000075 121.99062500000001 25.357420581127627 27685\n", + "line: 72479 121.99583333333334 0.9947916666666704 121.99479166666667 25.36019085594684 27686\n", + "line: 72480 122.0 -0.0010416666666666667 121.99895833333333 25.36296113076604 27687\n", + "line: 72481 122.00416666666666 0.0031249999999962107 122.003125 25.36573140558525 27687\n", + "line: 72482 122.00833333333333 0.007291666666659088 122.00729166666666 25.368501680404464 27688\n", + "line: 72483 122.01249999999999 0.011458333333321965 122.01145833333332 25.371271955223676 27689\n", + "line: 72484 122.01666666666665 0.015624999999984842 122.01562499999999 25.374042230042875 27689\n", + "line: 72485 122.02083333333331 0.01979166666664772 122.01979166666665 25.376812504862087 27690\n", + "line: 72486 122.02499999999998 0.023958333333310596 122.02395833333331 25.3795827796813 27691\n", + "line: 72487 122.02916666666664 0.028124999999973473 122.02812499999997 25.3823530545005 27691\n", + "line: 72488 122.03333333333336 0.03229166666669319 122.0322916666667 25.385123329319754 27692\n", + "line: 72489 122.03750000000002 0.03645833333335607 122.03645833333336 25.387893604138952 27693\n", + "line: 72490 122.04166666666669 0.040625000000018945 122.04062500000002 25.390663878958165 27693\n", + "line: 72491 122.04583333333335 0.04479166666668182 122.04479166666668 25.393434153777378 27694\n", + "line: 72492 122.05000000000001 0.0489583333333447 122.04895833333335 25.396204428596576 27695\n", + "line: 72493 122.05416666666667 0.053125000000007576 122.05312500000001 25.39897470341579 27695\n", + "line: 72494 122.05833333333334 0.05729166666667045 122.05729166666667 25.401744978235 27696\n", + "line: 72495 122.0625 0.06145833333333333 122.06145833333333 25.404515253054214 27697\n", + "line: 72496 122.06666666666666 0.06562499999999621 122.065625 25.407285527873412 27697\n", + "line: 72497 122.07083333333333 0.06979166666665909 122.06979166666666 25.410055802692625 27698\n", + "line: 72498 122.07499999999999 0.07395833333332197 122.07395833333332 25.412826077511838 27699\n", + "line: 72499 122.07916666666665 0.07812499999998485 122.07812499999999 25.415596352331036 27699\n", + "line: 72500 122.08333333333331 0.08229166666664772 122.08229166666665 25.41836662715025 27700\n", + "line: 72501 122.08749999999998 0.0864583333333106 122.08645833333331 25.42113690196946 27701\n", + "line: 72502 122.09166666666664 0.09062499999997348 122.09062499999997 25.42390717678866 27701\n", + "line: 72503 122.09583333333336 0.0947916666666932 122.0947916666667 25.426677451607915 27702\n", + "line: 72504 122.10000000000002 0.09895833333335607 122.09895833333336 25.429447726427114 27703\n", + "line: 72505 122.10416666666669 0.10312500000001895 122.10312500000002 25.432218001246326 27703\n", + "line: 72506 122.10833333333335 0.10729166666668183 122.10729166666668 25.43498827606554 27704\n", + "line: 72507 122.11250000000001 0.1114583333333447 122.11145833333335 25.43775855088475 27705\n", + "line: 72508 122.11666666666667 0.11562500000000758 122.11562500000001 25.44052882570395 27705\n", + "line: 72509 122.12083333333334 0.11979166666667046 122.11979166666667 25.443299100523163 27706\n", + "line: 72510 122.125 0.12395833333333334 122.12395833333333 25.446069375342375 27707\n", + "line: 72511 122.12916666666666 0.12812499999999621 122.128125 25.448839650161574 27707\n", + "line: 72512 122.13333333333333 0.1322916666666591 122.13229166666666 25.451609924980787 27708\n", + "line: 72513 122.13749999999999 0.13645833333332197 122.13645833333332 25.4543801998 27709\n", + "line: 72514 122.14166666666665 0.14062499999998485 122.14062499999999 25.457150474619198 27709\n", + "line: 72515 122.14583333333331 0.14479166666664772 122.14479166666665 25.45992074943841 27710\n", + "line: 72516 122.14999999999998 0.1489583333333106 122.14895833333331 25.462691024257623 27711\n", + "line: 72517 122.15416666666664 0.15312499999997348 122.15312499999997 25.465461299076836 27711\n", + "line: 72518 122.15833333333336 0.1572916666666932 122.1572916666667 25.468231573896077 27712\n", + "line: 72519 122.16250000000002 0.16145833333335607 122.16145833333336 25.47100184871529 27713\n", + "line: 72520 122.16666666666669 0.16562500000001895 122.16562500000002 25.473772123534488 27713\n", + "line: 72521 122.17083333333335 0.16979166666668183 122.16979166666668 25.4765423983537 27714\n", + "line: 72522 122.17500000000001 0.1739583333333447 122.17395833333335 25.479312673172913 27715\n", + "line: 72523 122.17916666666667 0.17812500000000758 122.17812500000001 25.48208294799211 27715\n", + "line: 72524 122.18333333333334 0.18229166666667046 122.18229166666667 25.484853222811324 27716\n", + "line: 72525 122.1875 0.18645833333333334 122.18645833333333 25.487623497630537 27717\n", + "line: 72526 122.19166666666666 0.19062499999999621 122.190625 25.490393772449735 27717\n", + "line: 72527 122.19583333333333 0.1947916666666591 122.19479166666666 25.493164047268948 27718\n", + "line: 72528 122.19999999999999 0.19895833333332197 122.19895833333332 25.49593432208816 27719\n", + "line: 72529 122.20416666666665 0.20312499999998485 122.20312499999999 25.498704596907373 27719\n", + "line: 72530 122.20833333333331 0.20729166666664772 122.20729166666665 25.501474871726572 27720\n", + "line: 72531 122.21249999999998 0.2114583333333106 122.21145833333331 25.504245146545784 27721\n", + "line: 72532 122.21666666666664 0.21562499999997348 122.21562499999997 25.507015421364997 27721\n", + "line: 72533 122.22083333333336 0.2197916666666932 122.2197916666667 25.509785696184238 27722\n", + "line: 72534 122.22500000000002 0.22395833333335607 122.22395833333336 25.51255597100345 27723\n", + "line: 72535 122.22916666666669 0.22812500000001895 122.22812500000002 25.51532624582265 27723\n", + "line: 72536 122.23333333333335 0.23229166666668183 122.23229166666668 25.518096520641862 27724\n", + "line: 72537 122.23750000000001 0.2364583333333447 122.23645833333335 25.520866795461075 27725\n", + "line: 72538 122.24166666666667 0.24062500000000758 122.24062500000001 25.523637070280287 27725\n", + "line: 72539 122.24583333333334 0.24479166666667046 122.24479166666667 25.526407345099486 27726\n", + "line: 72540 122.25 0.24895833333333334 122.24895833333333 25.5291776199187 27727\n", + "line: 72541 122.25416666666666 0.2531249999999962 122.253125 25.53194789473791 27727\n", + "line: 72542 122.25833333333333 0.2572916666666591 122.25729166666666 25.53471816955711 27728\n", + "line: 72543 122.26249999999999 0.26145833333332197 122.26145833333332 25.537488444376322 27728\n", + "line: 72544 122.26666666666665 0.26562499999998485 122.26562499999999 25.540258719195535 27729\n", + "line: 72545 122.27083333333331 0.2697916666666477 122.26979166666665 25.543028994014733 27730\n", + "line: 72546 122.27499999999998 0.2739583333333106 122.27395833333331 25.545799268833946 27730\n", + "line: 72547 122.27916666666664 0.2781249999999735 122.27812499999997 25.54856954365316 27731\n", + "line: 72548 122.28333333333336 0.2822916666666932 122.2822916666667 25.5513398184724 27732\n", + "line: 72549 122.28750000000002 0.2864583333333561 122.28645833333336 25.554110093291612 27732\n", + "line: 72550 122.29166666666669 0.29062500000001895 122.29062500000002 25.556880368110825 27733\n", + "line: 72551 122.29583333333335 0.29479166666668183 122.29479166666668 25.559650642930023 27734\n", + "line: 72552 122.30000000000001 0.2989583333333447 122.29895833333335 25.562420917749236 27734\n", + "line: 72553 122.30416666666667 0.3031250000000076 122.30312500000001 25.56519119256845 27735\n", + "line: 72554 122.30833333333334 0.30729166666667046 122.30729166666667 25.567961467387647 27736\n", + "line: 72555 122.3125 0.31145833333333334 122.31145833333333 25.57073174220686 27736\n", + "line: 72556 122.31666666666666 0.3156249999999962 122.315625 25.573502017026073 27737\n", + "line: 72557 122.32083333333333 0.3197916666666591 122.31979166666666 25.57627229184527 27738\n", + "line: 72558 122.32499999999999 0.32395833333332197 122.32395833333332 25.579042566664484 27738\n", + "line: 72559 122.32916666666665 0.32812499999998485 122.32812499999999 25.581812841483696 27739\n", + "line: 72560 122.33333333333331 0.3322916666666477 122.33229166666665 25.58458311630291 27740\n", + "line: 72561 122.33749999999998 0.3364583333333106 122.33645833333331 25.587353391122107 27740\n", + "line: 72562 122.34166666666664 0.3406249999999735 122.34062499999997 25.59012366594132 27741\n", + "line: 72563 122.34583333333336 0.3447916666666932 122.3447916666667 25.59289394076056 27742\n", + "line: 72564 122.35000000000002 0.3489583333333561 122.34895833333336 25.595664215579774 27742\n", + "line: 72565 122.35416666666669 0.35312500000001895 122.35312500000002 25.598434490398986 27743\n", + "line: 72566 122.35833333333335 0.35729166666668183 122.35729166666668 25.601204765218185 27744\n", + "line: 72567 122.36250000000001 0.3614583333333447 122.36145833333335 25.603975040037398 27744\n", + "line: 72568 122.36666666666667 0.3656250000000076 122.36562500000001 25.60674531485661 27745\n", + "line: 72569 122.37083333333334 0.36979166666667046 122.36979166666667 25.60951558967581 27746\n", + "line: 72570 122.375 0.37395833333333334 122.37395833333333 25.61228586449502 27746\n", + "line: 72571 122.37916666666666 0.3781249999999962 122.378125 25.615056139314234 27747\n", + "line: 72572 122.38333333333333 0.3822916666666591 122.38229166666666 25.617826414133447 27748\n", + "line: 72573 122.38749999999999 0.38645833333332197 122.38645833333332 25.620596688952645 27748\n", + "line: 72574 122.39166666666665 0.39062499999998485 122.39062499999999 25.623366963771858 27749\n", + "line: 72575 122.39583333333331 0.3947916666666477 122.39479166666665 25.62613723859107 27750\n", + "line: 72576 122.39999999999998 0.3989583333333106 122.39895833333331 25.62890751341027 27750\n", + "line: 72577 122.40416666666664 0.4031249999999735 122.40312499999997 25.63167778822948 27751\n", + "line: 72578 122.40833333333336 0.4072916666666932 122.4072916666667 25.634448063048723 27752\n", + "line: 72579 122.41250000000002 0.4114583333333561 122.41145833333336 25.637218337867935 27752\n", + "line: 72580 122.41666666666669 0.41562500000001895 122.41562500000002 25.639988612687148 27753\n", + "line: 72581 122.42083333333335 0.41979166666668183 122.41979166666668 25.642758887506346 27754\n", + "line: 72582 122.42500000000001 0.4239583333333447 122.42395833333335 25.64552916232556 27754\n", + "line: 72583 122.42916666666667 0.4281250000000076 122.42812500000001 25.64829943714477 27755\n", + "line: 72584 122.43333333333334 0.43229166666667046 122.43229166666667 25.651069711963984 27756\n", + "line: 72585 122.4375 0.43645833333333334 122.43645833333333 25.653839986783183 27756\n", + "line: 72586 122.44166666666666 0.4406249999999962 122.440625 25.656610261602395 27757\n", + "line: 72587 122.44583333333333 0.4447916666666591 122.44479166666666 25.659380536421608 27758\n", + "line: 72588 122.44999999999999 0.44895833333332197 122.44895833333332 25.662150811240807 27758\n", + "line: 72589 122.45416666666665 0.45312499999998485 122.45312499999999 25.66492108606002 27759\n", + "line: 72590 122.45833333333331 0.4572916666666477 122.45729166666665 25.667691360879232 27760\n", + "line: 72591 122.46249999999998 0.4614583333333106 122.46145833333331 25.67046163569843 27760\n", + "line: 72592 122.46666666666664 0.4656249999999735 122.46562499999997 25.673231910517643 27761\n", + "line: 72593 122.47083333333336 0.4697916666666932 122.4697916666667 25.6760021853369 27762\n", + "line: 72594 122.47500000000002 0.4739583333333561 122.47395833333336 25.678772460156097 27762\n", + "line: 72595 122.47916666666669 0.47812500000001895 122.47812500000002 25.68154273497531 27763\n", + "line: 72596 122.48333333333335 0.48229166666668183 122.48229166666668 25.684313009794522 27764\n", + "line: 72597 122.48750000000001 0.4864583333333447 122.48645833333335 25.68708328461372 27764\n", + "line: 72598 122.49166666666667 0.4906250000000076 122.49062500000001 25.689853559432933 27765\n", + "line: 72599 122.49583333333334 0.49479166666667046 122.49479166666667 25.692623834252146 27766\n", + "line: 72600 122.5 0.49895833333333334 122.49895833333333 25.695394109071344 27766\n", + "line: 72601 122.50416666666666 0.5031249999999962 122.503125 25.698164383890557 27767\n", + "line: 72602 122.50833333333333 0.507291666666659 122.50729166666666 25.70093465870977 27768\n", + "line: 72603 122.51249999999999 0.5114583333333219 122.51145833333332 25.703704933528982 27768\n", + "line: 72604 122.51666666666665 0.5156249999999848 122.51562499999999 25.70647520834818 27769\n", + "line: 72605 122.52083333333331 0.5197916666666477 122.51979166666665 25.709245483167393 27770\n", + "line: 72606 122.52499999999998 0.5239583333333105 122.52395833333331 25.712015757986606 27770\n", + "line: 72607 122.52916666666664 0.5281249999999734 122.52812499999997 25.714786032805804 27771\n", + "line: 72608 122.53333333333336 0.5322916666666931 122.5322916666667 25.71755630762506 27772\n", + "line: 72609 122.53750000000002 0.536458333333356 122.53645833333336 25.720326582444258 27772\n", + "line: 72610 122.54166666666669 0.5406250000000189 122.54062500000002 25.72309685726347 27773\n", + "line: 72611 122.54583333333335 0.5447916666666818 122.54479166666668 25.725867132082683 27774\n", + "line: 72612 122.55000000000001 0.5489583333333447 122.54895833333335 25.728637406901882 27774\n", + "line: 72613 122.55416666666667 0.5531250000000075 122.55312500000001 25.731407681721095 27775\n", + "line: 72614 122.55833333333334 0.5572916666666704 122.55729166666667 25.734177956540307 27776\n", + "line: 72615 122.5625 0.5614583333333333 122.56145833333333 25.73694823135952 27776\n", + "line: 72616 122.56666666666666 0.5656249999999962 122.565625 25.73971850617872 27777\n", + "line: 72617 122.57083333333333 0.569791666666659 122.56979166666666 25.74248878099793 27778\n", + "line: 72618 122.57499999999999 0.5739583333333219 122.57395833333332 25.745259055817144 27778\n", + "line: 72619 122.57916666666665 0.5781249999999848 122.57812499999999 25.748029330636342 27779\n", + "line: 72620 122.58333333333331 0.5822916666666477 122.58229166666665 25.750799605455555 27780\n", + "line: 72621 122.58749999999998 0.5864583333333105 122.58645833333331 25.753569880274767 27780\n", + "line: 72622 122.59166666666664 0.5906249999999734 122.59062499999997 25.756340155093966 27781\n", + "line: 72623 122.59583333333336 0.5947916666666931 122.5947916666667 25.75911042991322 27782\n", + "line: 72624 122.60000000000002 0.598958333333356 122.59895833333336 25.76188070473242 27782\n", + "line: 72625 122.60416666666669 0.6031250000000189 122.60312500000002 25.764650979551632 27783\n", + "line: 72626 122.60833333333335 0.6072916666666818 122.60729166666668 25.767421254370845 27784\n", + "line: 72627 122.61250000000001 0.6114583333333447 122.61145833333335 25.770191529190058 27784\n", + "line: 72628 122.61666666666667 0.6156250000000075 122.61562500000001 25.772961804009256 27785\n", + "line: 72629 122.62083333333334 0.6197916666666704 122.61979166666667 25.77573207882847 27786\n", + "line: 72630 122.625 0.6239583333333333 122.62395833333333 25.77850235364768 27786\n", + "line: 72631 122.62916666666666 0.6281249999999962 122.628125 25.78127262846688 27787\n", + "line: 72632 122.63333333333333 0.632291666666659 122.63229166666666 25.784042903286092 27788\n", + "line: 72633 122.63749999999999 0.6364583333333219 122.63645833333332 25.786813178105305 27788\n", + "line: 72634 122.64166666666665 0.6406249999999848 122.64062499999999 25.789583452924504 27789\n", + "line: 72635 122.64583333333331 0.6447916666666477 122.64479166666665 25.792353727743716 27790\n", + "line: 72636 122.64999999999998 0.6489583333333105 122.64895833333331 25.79512400256293 27790\n", + "line: 72637 122.65416666666664 0.6531249999999734 122.65312499999997 25.79789427738214 27791\n", + "line: 72638 122.65833333333336 0.6572916666666931 122.6572916666667 25.800664552201383 27792\n", + "line: 72639 122.66250000000002 0.661458333333356 122.66145833333336 25.803434827020595 27792\n", + "line: 72640 122.66666666666669 0.6656250000000189 122.66562500000002 25.806205101839794 27793\n", + "line: 72641 122.67083333333335 0.6697916666666818 122.66979166666668 25.808975376659006 27794\n", + "line: 72642 122.67500000000001 0.6739583333333447 122.67395833333335 25.81174565147822 27794\n", + "line: 72643 122.67916666666667 0.6781250000000075 122.67812500000001 25.814515926297418 27795\n", + "line: 72644 122.68333333333334 0.6822916666666704 122.68229166666667 25.81728620111663 27796\n", + "line: 72645 122.6875 0.6864583333333333 122.68645833333333 25.820056475935843 27796\n", + "line: 72646 122.69166666666666 0.6906249999999962 122.690625 25.82282675075504 27797\n", + "line: 72647 122.69583333333333 0.694791666666659 122.69479166666666 25.825597025574254 27798\n", + "line: 72648 122.69999999999999 0.6989583333333219 122.69895833333332 25.828367300393467 27798\n", + "line: 72649 122.70416666666665 0.7031249999999848 122.70312499999999 25.83113757521268 27799\n", + "line: 72650 122.70833333333331 0.7072916666666477 122.70729166666665 25.833907850031878 27800\n", + "line: 72651 122.71249999999998 0.7114583333333105 122.71145833333331 25.83667812485109 27800\n", + "line: 72652 122.71666666666664 0.7156249999999734 122.71562499999997 25.839448399670303 27801\n", + "line: 72653 122.72083333333336 0.7197916666666931 122.7197916666667 25.842218674489544 27802\n", + "line: 72654 122.72500000000002 0.723958333333356 122.72395833333336 25.844988949308757 27802\n", + "line: 72655 122.72916666666669 0.7281250000000189 122.72812500000002 25.847759224127955 27803\n", + "line: 72656 122.73333333333335 0.7322916666666818 122.73229166666668 25.850529498947168 27804\n", + "line: 72657 122.73750000000001 0.7364583333333447 122.73645833333335 25.85329977376638 27804\n", + "line: 72658 122.74166666666667 0.7406250000000075 122.74062500000001 25.856070048585593 27805\n", + "line: 72659 122.74583333333334 0.7447916666666704 122.74479166666667 25.85884032340479 27806\n", + "line: 72660 122.75 0.7489583333333333 122.74895833333333 25.861610598224004 27806\n", + "line: 72661 122.75416666666666 0.7531249999999962 122.753125 25.864380873043217 27807\n", + "line: 72662 122.75833333333333 0.757291666666659 122.75729166666666 25.867151147862415 27808\n", + "line: 72663 122.76249999999999 0.7614583333333219 122.76145833333332 25.869921422681628 27808\n", + "line: 72664 122.76666666666665 0.7656249999999848 122.76562499999999 25.87269169750084 27809\n", + "line: 72665 122.77083333333331 0.7697916666666477 122.76979166666665 25.87546197232004 27810\n", + "line: 72666 122.77499999999998 0.7739583333333105 122.77395833333331 25.878232247139252 27810\n", + "line: 72667 122.77916666666664 0.7781249999999734 122.77812499999997 25.881002521958465 27811\n", + "line: 72668 122.78333333333336 0.7822916666666931 122.7822916666667 25.883772796777706 27812\n", + "line: 72669 122.78750000000002 0.786458333333356 122.78645833333336 25.88654307159692 27812\n", + "line: 72670 122.79166666666669 0.7906250000000189 122.79062500000002 25.88931334641613 27813\n", + "line: 72671 122.79583333333335 0.7947916666666818 122.79479166666668 25.89208362123533 27814\n", + "line: 72672 122.80000000000001 0.7989583333333447 122.79895833333335 25.894853896054542 27814\n", + "line: 72673 122.80416666666667 0.8031250000000075 122.80312500000001 25.897624170873755 27815\n", + "line: 72674 122.80833333333334 0.8072916666666704 122.80729166666667 25.900394445692953 27816\n", + "line: 72675 122.8125 0.8114583333333333 122.81145833333333 25.903164720512166 27816\n", + "line: 72676 122.81666666666666 0.8156249999999962 122.815625 25.90593499533138 27817\n", + "line: 72677 122.82083333333333 0.819791666666659 122.81979166666666 25.908705270150577 27818\n", + "line: 72678 122.82499999999999 0.8239583333333219 122.82395833333332 25.91147554496979 27818\n", + "line: 72679 122.82916666666665 0.8281249999999848 122.82812499999999 25.914245819789002 27819\n", + "line: 72680 122.83333333333331 0.8322916666666477 122.83229166666665 25.917016094608215 27820\n", + "line: 72681 122.83749999999998 0.8364583333333105 122.83645833333331 25.919786369427413 27820\n", + "line: 72682 122.84166666666664 0.8406249999999734 122.84062499999997 25.922556644246626 27821\n", + "line: 72683 122.84583333333336 0.8447916666666931 122.8447916666667 25.925326919065867 27822\n", + "line: 72684 122.85000000000002 0.848958333333356 122.84895833333336 25.92809719388508 27822\n", + "line: 72685 122.85416666666669 0.8531250000000189 122.85312500000002 25.930867468704292 27823\n", + "line: 72686 122.85833333333335 0.8572916666666818 122.85729166666668 25.93363774352349 27824\n", + "line: 72687 122.86250000000001 0.8614583333333447 122.86145833333335 25.936408018342703 27824\n", + "line: 72688 122.86666666666667 0.8656250000000075 122.86562500000001 25.939178293161916 27825\n", + "line: 72689 122.87083333333334 0.8697916666666704 122.86979166666667 25.941948567981115 27826\n", + "line: 72690 122.875 0.8739583333333333 122.87395833333333 25.944718842800327 27826\n", + "line: 72691 122.87916666666666 0.8781249999999962 122.878125 25.94748911761954 27827\n", + "line: 72692 122.88333333333333 0.882291666666659 122.88229166666666 25.950259392438753 27828\n", + "line: 72693 122.88749999999999 0.8864583333333219 122.88645833333332 25.95302966725795 27828\n", + "line: 72694 122.89166666666665 0.8906249999999848 122.89062499999999 25.955799942077164 27829\n", + "line: 72695 122.89583333333331 0.8947916666666477 122.89479166666665 25.958570216896376 27830\n", + "line: 72696 122.89999999999998 0.8989583333333105 122.89895833333331 25.961340491715575 27830\n", + "line: 72697 122.90416666666664 0.9031249999999734 122.90312499999997 25.964110766534787 27831\n", + "line: 72698 122.90833333333336 0.9072916666666931 122.9072916666667 25.96688104135403 27832\n", + "line: 72699 122.91250000000002 0.911458333333356 122.91145833333336 25.96965131617324 27832\n", + "line: 72700 122.91666666666669 0.9156250000000189 122.91562500000002 25.972421590992454 27833\n", + "line: 72701 122.92083333333335 0.9197916666666818 122.91979166666668 25.975191865811652 27834\n", + "line: 72702 122.92500000000001 0.9239583333333447 122.92395833333335 25.977962140630865 27834\n", + "line: 72703 122.92916666666667 0.9281250000000075 122.92812500000001 25.980732415450078 27835\n", + "line: 72704 122.93333333333334 0.9322916666666704 122.93229166666667 25.98350269026929 27836\n", + "line: 72705 122.9375 0.9364583333333333 122.93645833333333 25.98627296508849 27836\n", + "line: 72706 122.94166666666666 0.9406249999999962 122.940625 25.9890432399077 27837\n", + "line: 72707 122.94583333333333 0.944791666666659 122.94479166666666 25.991813514726914 27838\n", + "line: 72708 122.94999999999999 0.9489583333333219 122.94895833333332 25.994583789546112 27838\n", + "line: 72709 122.95416666666665 0.9531249999999848 122.95312499999999 25.997354064365325 27839\n", + "line: 72710 122.95833333333331 0.9572916666666477 122.95729166666665 26.000124339184538 27840\n", + "line: 72711 122.96249999999998 0.9614583333333105 122.96145833333331 26.002894614003736 27840\n", + "line: 72712 122.96666666666664 0.9656249999999734 122.96562499999997 26.00566488882295 27841\n", + "line: 72713 122.97083333333336 0.9697916666666931 122.9697916666667 26.008435163642204 27842\n", + "line: 72714 122.97500000000002 0.973958333333356 122.97395833333336 26.011205438461403 27842\n", + "line: 72715 122.97916666666669 0.9781250000000189 122.97812500000002 26.013975713280615 27843\n", + "line: 72716 122.98333333333335 0.9822916666666818 122.98229166666668 26.016745988099828 27844\n", + "line: 72717 122.98750000000001 0.9864583333333447 122.98645833333335 26.019516262919026 27844\n", + "line: 72718 122.99166666666667 0.9906250000000075 122.99062500000001 26.02228653773824 27845\n", + "line: 72719 122.99583333333334 0.9947916666666704 122.99479166666667 26.02505681255745 27846\n", + "line: 72720 123.0 -0.0010416666666666667 122.99895833333333 26.02782708737665 27846\n", + "line: 72721 123.00416666666666 0.0031249999999962107 123.003125 26.030597362195863 27847\n", + "line: 72722 123.00833333333333 0.007291666666659088 123.00729166666666 26.033367637015076 27848\n", + "line: 72723 123.01249999999999 0.011458333333321965 123.01145833333332 26.036137911834274 27848\n", + "line: 72724 123.01666666666665 0.015624999999984842 123.01562499999999 26.038908186653487 27849\n", + "line: 72725 123.02083333333331 0.01979166666664772 123.01979166666665 26.0416784614727 27850\n", + "line: 72726 123.02499999999998 0.023958333333310596 123.02395833333331 26.044448736291912 27850\n", + "line: 72727 123.02916666666664 0.028124999999973473 123.02812499999997 26.04721901111111 27851\n", + "line: 72728 123.03333333333336 0.03229166666669319 123.0322916666667 26.049989285930366 27851\n", + "line: 72729 123.03750000000002 0.03645833333335607 123.03645833333336 26.052759560749564 27852\n", + "Exe time: 0.13093948364257812 sec\n", "[[ 0 0]\n", " [ 0 1]\n", " [ 0 2]\n", @@ -1049,369 +1002,371 @@ " [ 0 3]\n", " [ 0 3]\n", " [ 0 4]\n", - " [ 1 5]\n", - " [ 2 6]\n", + " [ 0 5]\n", + " [ 1 6]\n", " [ 2 7]\n", - " [ 3 8]\n", - " [ 4 9]\n", + " [ 2 8]\n", + " [ 3 9]\n", " [ 4 10]\n", - " [ 5 11]\n", - " [ 6 12]\n", + " [ 4 11]\n", + " [ 5 12]\n", " [ 6 13]\n", - " [ 7 14]\n", - " [ 8 15]\n", + " [ 6 14]\n", + " [ 7 15]\n", " [ 8 16]\n", - " [ 9 17]\n", - " [ 10 18]\n", + " [ 8 17]\n", + " [ 9 18]\n", " [ 10 19]\n", - " [ 11 20]\n", - " [ 12 21]\n", + " [ 10 20]\n", + " [ 11 21]\n", " [ 12 22]\n", - " [ 13 23]\n", - " [ 14 24]\n", + " [ 12 23]\n", + " [ 13 24]\n", " [ 14 25]\n", - " [ 15 26]\n", - " [ 16 27]\n", + " [ 14 26]\n", + " [ 15 27]\n", " [ 16 28]\n", - " [ 17 29]\n", - " [ 18 30]\n", + " [ 16 29]\n", + " [ 17 30]\n", " [ 18 31]\n", - " [ 19 32]\n", - " [ 20 33]\n", + " [ 18 32]\n", + " [ 19 33]\n", " [ 20 34]\n", - " [ 21 35]\n", - " [ 22 36]\n", + " [ 20 35]\n", + " [ 21 36]\n", " [ 22 37]\n", - " [ 23 38]\n", - " [ 24 39]\n", + " [ 22 38]\n", + " [ 23 39]\n", " [ 24 40]\n", - " [ 25 41]\n", - " [ 26 42]\n", + " [ 24 41]\n", + " [ 25 42]\n", " [ 26 43]\n", - " [ 27 44]\n", - " [ 28 45]\n", + " [ 26 44]\n", + " [ 27 45]\n", " [ 28 46]\n", - " [ 29 47]\n", - " [ 30 48]\n", + " [ 28 47]\n", + " [ 29 48]\n", " [ 30 49]\n", - " [ 31 50]\n", - " [ 32 51]\n", + " [ 30 50]\n", + " [ 31 51]\n", " [ 32 52]\n", - " [ 33 53]\n", - " [ 34 54]\n", + " [ 32 53]\n", + " [ 33 54]\n", " [ 34 55]\n", - " [ 35 56]\n", - " [ 36 57]\n", + " [ 34 56]\n", + " [ 35 57]\n", " [ 36 58]\n", - " [ 37 59]\n", - " [ 38 60]\n", + " [ 36 59]\n", + " [ 37 60]\n", " [ 38 61]\n", - " [ 39 62]\n", - " [ 40 63]\n", + " [ 38 62]\n", + " [ 39 63]\n", " [ 40 64]\n", - " [ 41 65]\n", - " [ 42 66]\n", + " [ 40 65]\n", + " [ 41 66]\n", " [ 42 67]\n", - " [ 43 68]\n", - " [ 44 69]\n", + " [ 42 68]\n", + " [ 43 69]\n", " [ 44 70]\n", - " [ 45 71]\n", - " [ 46 72]\n", + " [ 44 71]\n", + " [ 45 72]\n", " [ 46 73]\n", - " [ 47 74]\n", - " [ 48 75]\n", + " [ 46 74]\n", + " [ 47 75]\n", " [ 48 76]\n", - " [ 49 77]\n", - " [ 50 78]\n", + " [ 48 77]\n", + " [ 49 78]\n", " [ 50 79]\n", - " [ 51 80]\n", - " [ 52 81]\n", + " [ 50 80]\n", + " [ 51 81]\n", " [ 52 82]\n", - " [ 53 83]\n", - " [ 54 84]\n", + " [ 52 83]\n", + " [ 53 84]\n", " [ 54 85]\n", - " [ 55 86]\n", - " [ 56 87]\n", + " [ 54 86]\n", + " [ 55 87]\n", " [ 56 88]\n", - " [ 57 89]\n", - " [ 58 90]\n", + " [ 56 89]\n", + " [ 57 90]\n", " [ 58 91]\n", - " [ 59 92]\n", - " [ 60 93]\n", + " [ 58 92]\n", + " [ 59 93]\n", " [ 60 94]\n", - " [ 61 95]\n", - " [ 62 96]\n", + " [ 60 95]\n", + " [ 61 96]\n", " [ 62 97]\n", - " [ 63 98]\n", - " [ 64 99]\n", + " [ 62 98]\n", + " [ 63 99]\n", " [ 64 100]\n", - " [ 65 101]\n", - " [ 66 102]\n", + " [ 64 101]\n", + " [ 65 102]\n", " [ 66 103]\n", - " [ 67 104]\n", - " [ 68 105]\n", + " [ 66 104]\n", + " [ 67 105]\n", " [ 68 106]\n", - " [ 69 107]\n", - " [ 70 108]\n", + " [ 68 107]\n", + " [ 69 108]\n", " [ 70 109]\n", - " [ 71 110]\n", - " [ 72 111]\n", + " [ 70 110]\n", + " [ 71 111]\n", " [ 72 112]\n", - " [ 73 113]\n", - " [ 74 114]\n", + " [ 72 113]\n", + " [ 73 114]\n", " [ 74 115]\n", - " [ 75 116]\n", - " [ 76 117]\n", + " [ 74 116]\n", + " [ 75 117]\n", " [ 76 118]\n", - " [ 77 119]\n", - " [ 78 120]\n", + " [ 76 119]\n", + " [ 77 120]\n", " [ 78 121]\n", - " [ 79 122]\n", - " [ 80 123]\n", + " [ 78 122]\n", + " [ 79 123]\n", " [ 80 124]\n", - " [ 81 125]\n", - " [ 82 126]\n", + " [ 80 125]\n", + " [ 81 126]\n", " [ 82 127]\n", - " [ 83 128]\n", - " [ 84 129]\n", + " [ 82 128]\n", + " [ 83 129]\n", " [ 84 130]\n", - " [ 85 131]\n", - " [ 86 132]\n", + " [ 84 131]\n", + " [ 85 132]\n", " [ 86 133]\n", - " [ 87 134]\n", - " [ 88 135]\n", + " [ 86 134]\n", + " [ 87 135]\n", " [ 88 136]\n", - " [ 89 137]\n", - " [ 90 138]\n", + " [ 88 137]\n", + " [ 89 138]\n", " [ 90 139]\n", - " [ 91 140]\n", - " [ 92 141]\n", + " [ 90 140]\n", + " [ 91 141]\n", " [ 92 142]\n", - " [ 93 143]\n", - " [ 94 144]\n", + " [ 92 143]\n", + " [ 93 144]\n", " [ 94 145]\n", - " [ 95 146]\n", - " [ 96 147]\n", + " [ 94 146]\n", + " [ 95 147]\n", " [ 96 148]\n", - " [ 97 149]\n", - " [ 98 150]\n", + " [ 96 149]\n", + " [ 97 150]\n", " [ 98 151]\n", - " [ 99 152]\n", - " [100 153]\n", + " [ 98 152]\n", + " [ 99 153]\n", " [100 154]\n", - " [101 155]\n", - " [102 156]\n", + " [100 155]\n", + " [101 156]\n", " [102 157]\n", - " [103 158]\n", - " [104 159]\n", + " [102 158]\n", + " [103 159]\n", " [104 160]\n", - " [105 161]\n", - " [106 162]\n", + " [104 161]\n", + " [105 162]\n", " [106 163]\n", - " [107 164]\n", - " [108 165]\n", + " [106 164]\n", + " [107 165]\n", " [108 166]\n", - " [109 167]\n", - " [110 168]\n", + " [108 167]\n", + " [109 168]\n", " [110 169]\n", - " [111 170]\n", - " [112 171]\n", + " [110 170]\n", + " [111 171]\n", " [112 172]\n", - " [113 173]\n", + " [112 173]\n", " [113 174]\n", - " [114 175]\n", - " [115 176]\n", + " [113 175]\n", + " [114 176]\n", " [115 177]\n", - " [116 178]\n", - " [117 179]\n", + " [115 178]\n", + " [116 179]\n", " [117 180]\n", - " [118 181]\n", - " [119 182]\n", + " [117 181]\n", + " [118 182]\n", " [119 183]\n", - " [120 184]\n", - " [121 185]\n", + " [119 184]\n", + " [120 185]\n", " [121 186]\n", - " [122 187]\n", - " [123 188]\n", + " [121 187]\n", + " [122 188]\n", " [123 189]\n", - " [124 190]\n", - " [125 191]\n", + " [123 190]\n", + " [124 191]\n", " [125 192]\n", - " [126 193]\n", - " [127 194]\n", + " [125 193]\n", + " [126 194]\n", " [127 195]\n", - " [128 196]\n", - " [129 197]\n", + " [127 196]\n", + " [128 197]\n", " [129 198]\n", - " [130 199]\n", - " [131 200]\n", + " [129 199]\n", + " [130 200]\n", " [131 201]\n", - " [132 202]\n", - " [133 203]\n", + " [131 202]\n", + " [132 203]\n", " [133 204]\n", - " [134 205]\n", - " [135 206]\n", + " [133 205]\n", + " [134 206]\n", " [135 207]\n", - " [136 208]\n", - " [137 209]\n", + " [135 208]\n", + " [136 209]\n", " [137 210]\n", - " [138 211]\n", - " [139 212]\n", + " [137 211]\n", + " [138 212]\n", " [139 213]\n", - " [140 214]\n", - " [141 215]\n", + " [139 214]\n", + " [140 215]\n", " [141 216]\n", - " [142 217]\n", - " [143 218]\n", + " [141 217]\n", + " [142 218]\n", " [143 219]\n", - " [144 220]\n", - " [145 221]\n", + " [143 220]\n", + " [144 221]\n", " [145 222]\n", - " [146 223]\n", - " [147 224]\n", + " [145 223]\n", + " [146 224]\n", " [147 225]\n", - " [148 226]\n", - " [149 227]\n", + " [147 226]\n", + " [148 227]\n", " [149 228]\n", - " [150 229]\n", - " [151 230]\n", + " [149 229]\n", + " [150 230]\n", " [151 231]\n", - " [152 232]\n", - " [153 233]\n", + " [151 232]\n", + " [152 233]\n", " [153 234]\n", - " [154 235]\n", - " [155 236]\n", + " [153 235]\n", + " [154 236]\n", " [155 237]\n", - " [156 238]\n", - " [157 239]\n", + " [155 238]\n", + " [156 239]\n", " [157 240]\n", - " [158 241]\n", - " [159 242]\n", + " [157 241]\n", + " [158 242]\n", " [159 243]\n", - " [160 244]\n", - " [161 245]\n", + " [159 244]\n", + " [160 245]\n", " [161 246]\n", - " [162 247]\n", - " [163 248]\n", + " [161 247]\n", + " [162 248]\n", " [163 249]\n", - " [164 250]\n", - " [165 251]\n", + " [163 250]\n", + " [164 251]\n", " [165 252]\n", - " [166 253]\n", - " [167 254]\n", + " [165 253]\n", + " [166 254]\n", " [167 255]\n", - " [168 256]\n", - " [169 257]\n", + " [167 256]\n", + " [168 257]\n", " [169 258]\n", - " [170 259]\n", - " [171 260]\n", + " [169 259]\n", + " [170 260]\n", " [171 261]\n", - " [172 262]\n", - " [173 263]\n", + " [171 262]\n", + " [172 263]\n", " [173 264]\n", - " [174 265]\n", - " [175 266]\n", + " [173 265]\n", + " [174 266]\n", " [175 267]\n", - " [176 268]\n", - " [177 269]\n", + " [175 268]\n", + " [176 269]\n", " [177 270]\n", - " [178 271]\n", - " [179 272]\n", + " [177 271]\n", + " [178 272]\n", " [179 273]\n", - " [180 274]\n", - " [181 275]\n", + " [179 274]\n", + " [180 275]\n", " [181 276]\n", - " [182 277]\n", - " [183 278]\n", + " [181 277]\n", + " [182 278]\n", " [183 279]\n", - " [184 280]\n", - " [185 281]\n", + " [183 280]\n", + " [184 281]\n", " [185 282]\n", - " [186 283]\n", - " [187 284]\n", + " [185 283]\n", + " [186 284]\n", " [187 285]\n", - " [188 286]\n", - " [189 287]\n", + " [187 286]\n", + " [188 287]\n", " [189 288]\n", - " [190 289]\n", - " [191 290]\n", + " [189 289]\n", + " [190 290]\n", " [191 291]\n", - " [192 292]\n", - " [193 293]\n", + " [191 292]\n", + " [192 293]\n", " [193 294]\n", - " [194 295]\n", - " [195 296]\n", + " [193 295]\n", + " [194 296]\n", " [195 297]\n", - " [196 298]\n", - " [197 299]\n", + " [195 298]\n", + " [196 299]\n", " [197 300]\n", - " [198 301]\n", - " [199 302]\n", + " [197 301]\n", + " [198 302]\n", " [199 303]\n", - " [200 304]\n", - " [201 305]\n", + " [199 304]\n", + " [200 305]\n", " [201 306]\n", - " [202 307]\n", - " [203 308]\n", + " [201 307]\n", + " [202 308]\n", " [203 309]\n", - " [204 310]\n", - " [205 311]\n", + " [203 310]\n", + " [204 311]\n", " [205 312]\n", - " [206 313]\n", - " [207 314]\n", + " [205 313]\n", + " [206 314]\n", " [207 315]\n", - " [208 316]\n", - " [209 317]\n", + " [207 316]\n", + " [208 317]\n", " [209 318]\n", - " [210 319]\n", - " [211 320]\n", + " [209 319]\n", + " [210 320]\n", " [211 321]\n", - " [212 322]\n", - " [213 323]\n", + " [211 322]\n", + " [212 323]\n", " [213 324]\n", - " [214 325]\n", - " [215 326]\n", + " [213 325]\n", + " [214 326]\n", " [215 327]\n", - " [216 328]\n", - " [217 329]\n", + " [215 328]\n", + " [216 329]\n", " [217 330]\n", - " [218 331]\n", - " [219 332]\n", + " [217 331]\n", + " [218 332]\n", " [219 333]\n", - " [220 334]\n", - " [221 335]\n", + " [219 334]\n", + " [220 335]\n", " [221 336]\n", - " [222 337]\n", - " [223 338]\n", + " [221 337]\n", + " [222 338]\n", " [223 339]\n", - " [224 340]\n", - " [225 341]\n", + " [223 340]\n", + " [224 341]\n", " [225 342]\n", - " [226 343]\n", - " [227 344]\n", + " [225 343]\n", + " [226 344]\n", " [227 345]\n", - " [228 346]\n", - " [229 347]\n", + " [227 346]\n", + " [228 347]\n", " [229 348]\n", - " [230 349]\n", - " [231 350]\n", + " [229 349]\n", + " [230 350]\n", " [231 351]\n", - " [232 352]\n", - " [233 353]\n", + " [231 352]\n", + " [232 353]\n", " [233 354]\n", - " [234 355]\n", - " [235 356]\n", + " [233 355]\n", + " [234 356]\n", " [235 357]\n", - " [236 358]\n", + " [235 358]\n", " [236 359]\n", - " [237 360]\n", + " [236 360]\n", + " [237 361]\n", " [238 361]]\n", "[[121.5345976 25.06380626]\n", + " [121.53645833 25.06392703]\n", " [121.540625 25.06419745]\n", " [121.54479167 25.06446788]\n", - " [121.54895833 25.06473831]\n", " [121.54984717 25.06479599]\n", " [121.54980816 25.06433647]\n", + " [121.54895833 25.06377145]\n", " [121.553125 25.06654173]\n", " [121.55729167 25.069312 ]\n", " [121.56145833 25.07208227]\n", @@ -1770,67 +1725,67 @@ " [123.03229167 26.04998929]\n", " [123.03645833 26.05275956]\n", " [123.04052582 26.05546389]]\n", - "[0. 0.60969336 0.42147202 0.4214711 0.08990819 0.05105464\n", - " 0.41433103 0.52048315 0.52047558 0.52046801 0.52046044 0.52045287\n", - " 0.52044529 0.52043772 0.52043014 0.52042257 0.52041499 0.52040742\n", - " 0.52039984 0.52039226 0.52038468 0.5203771 0.52036952 0.52036194\n", - " 0.52035436 0.52034678 0.5203392 0.52033161 0.52032403 0.52031644\n", - " 0.52030886 0.52030127 0.52029368 0.5202861 0.52027851 0.52027092\n", - " 0.52026333 0.52025574 0.52024814 0.52024055 0.52023296 0.52022537\n", - " 0.52021777 0.52021018 0.52020258 0.52019498 0.52018739 0.52017979\n", - " 0.52017219 0.52016459 0.52015699 0.52014939 0.52014179 0.52013418\n", - " 0.52012658 0.52011898 0.52011137 0.52010377 0.52009616 0.52008855\n", - " 0.52008095 0.52007334 0.52006573 0.52005812 0.52005051 0.5200429\n", - " 0.52003528 0.52002767 0.52002006 0.52001244 0.52000483 0.51999721\n", - " 0.5199896 0.51998198 0.51997436 0.51996674 0.51995913 0.51995151\n", - " 0.51994389 0.51993626 0.51992864 0.51992102 0.5199134 0.51990577\n", - " 0.51989815 0.51989052 0.51988289 0.51987527 0.51986764 0.51986001\n", - " 0.51985238 0.51984475 0.51983712 0.51982949 0.51982186 0.51981422\n", - " 0.51980659 0.51979896 0.51979132 0.51978369 0.51977605 0.51976841\n", - " 0.51976077 0.51975314 0.5197455 0.51973786 0.51973022 0.51972257\n", - " 0.51971493 0.51970729 0.51969965 0.519692 0.51968436 0.51967671\n", - " 0.51966906 0.51966142 0.51965377 0.51964612 0.51963847 0.51963082\n", - " 0.51962317 0.51961552 0.51960786 0.51960021 0.51959256 0.5195849\n", - " 0.51957725 0.51956959 0.51956194 0.51955428 0.51954662 0.51953896\n", - " 0.5195313 0.51952364 0.51951598 0.51950832 0.51950066 0.51949299\n", - " 0.51948533 0.51947766 0.51947 0.51946233 0.51945467 0.519447\n", - " 0.51943933 0.51943166 0.51942399 0.51941632 0.51940865 0.51940098\n", - " 0.51939331 0.51938563 0.51937796 0.51937029 0.51936261 0.51935493\n", - " 0.51934726 0.51933958 0.5193319 0.51932422 0.51931654 0.51930886\n", - " 0.51930118 0.5192935 0.51928582 0.51927813 0.51927045 0.51926276\n", - " 0.51925508 0.51924739 0.51923971 0.51923202 0.51922433 0.51921664\n", - " 0.51920895 0.51920126 0.51919357 0.51918588 0.51917819 0.51917049\n", - " 0.5191628 0.5191551 0.51914741 0.51913971 0.51913201 0.51912432\n", - " 0.51911662 0.51910892 0.51910122 0.51909352 0.51908582 0.51907812\n", - " 0.51907041 0.51906271 0.51905501 0.5190473 0.5190396 0.51903189\n", - " 0.51902418 0.51901647 0.51900877 0.51900106 0.51899335 0.51898564\n", - " 0.51897792 0.51897021 0.5189625 0.51895479 0.51894707 0.51893936\n", - " 0.51893164 0.51892393 0.51891621 0.51890849 0.51890077 0.51889305\n", - " 0.51888533 0.51887761 0.51886989 0.51886217 0.51885445 0.51884672\n", - " 0.518839 0.51883127 0.51882355 0.51881582 0.51880809 0.51880037\n", - " 0.51879264 0.51878491 0.51877718 0.51876945 0.51876172 0.51875399\n", - " 0.51874625 0.51873852 0.51873078 0.51872305 0.51871531 0.51870758\n", - " 0.51869984 0.5186921 0.51868436 0.51867663 0.51866889 0.51866114\n", - " 0.5186534 0.51864566 0.51863792 0.51863017 0.51862243 0.51861469\n", - " 0.51860694 0.51859919 0.51859145 0.5185837 0.51857595 0.5185682\n", - " 0.51856045 0.5185527 0.51854495 0.5185372 0.51852944 0.51852169\n", - " 0.51851394 0.51850618 0.51849842 0.51849067 0.51848291 0.51847515\n", - " 0.51846739 0.51845964 0.51845188 0.51844411 0.51843635 0.51842859\n", - " 0.51842083 0.51841307 0.5184053 0.51839754 0.51838977 0.518382\n", - " 0.51837424 0.51836647 0.5183587 0.51835093 0.51834316 0.51833539\n", - " 0.51832762 0.51831985 0.51831207 0.5183043 0.51829653 0.51828875\n", - " 0.51828098 0.5182732 0.51826542 0.51825764 0.51824987 0.51824209\n", - " 0.51823431 0.51822653 0.51821874 0.51821096 0.51820318 0.5181954\n", - " 0.51818761 0.51817983 0.51817204 0.51816425 0.51815647 0.51814868\n", - " 0.51814089 0.5181331 0.51812531 0.51811752 0.51810973 0.51810194\n", - " 0.51809414 0.51808635 0.51807856 0.51807076 0.51806297 0.51805517\n", - " 0.51804737 0.51803957 0.51803178 0.51802398 0.51801618 0.51800838\n", - " 0.51800057 0.51799277 0.51798497 0.51797717 0.51796936 0.51796156\n", - " 0.51795375 0.51794594 0.51793814 0.51793033 0.51792252 0.51791471\n", - " 0.5179069 0.51789909 0.51789128 0.51788347 0.51787566 0.51786784\n", - " 0.51786003 0.51785221 0.5178444 0.51783658 0.51782876 0.51782095\n", - " 0.51781313 0.51780531 0.51779749 0.51778967 0.51778185 0.51777402\n", - " 0.5177662 0.51775838 0.51775055 0.50541871]\n" + "[0. 0.18822043 0.42147294 0.42147202 0.51137929 0.05105464\n", + " 0.10615969 0.52049072 0.52048315 0.52047558 0.52046801 0.52046044\n", + " 0.52045287 0.52044529 0.52043772 0.52043014 0.52042257 0.52041499\n", + " 0.52040742 0.52039984 0.52039226 0.52038468 0.5203771 0.52036952\n", + " 0.52036194 0.52035436 0.52034678 0.5203392 0.52033161 0.52032403\n", + " 0.52031644 0.52030886 0.52030127 0.52029368 0.5202861 0.52027851\n", + " 0.52027092 0.52026333 0.52025574 0.52024814 0.52024055 0.52023296\n", + " 0.52022537 0.52021777 0.52021018 0.52020258 0.52019498 0.52018739\n", + " 0.52017979 0.52017219 0.52016459 0.52015699 0.52014939 0.52014179\n", + " 0.52013418 0.52012658 0.52011898 0.52011137 0.52010377 0.52009616\n", + " 0.52008855 0.52008095 0.52007334 0.52006573 0.52005812 0.52005051\n", + " 0.5200429 0.52003528 0.52002767 0.52002006 0.52001244 0.52000483\n", + " 0.51999721 0.5199896 0.51998198 0.51997436 0.51996674 0.51995913\n", + " 0.51995151 0.51994389 0.51993626 0.51992864 0.51992102 0.5199134\n", + " 0.51990577 0.51989815 0.51989052 0.51988289 0.51987527 0.51986764\n", + " 0.51986001 0.51985238 0.51984475 0.51983712 0.51982949 0.51982186\n", + " 0.51981422 0.51980659 0.51979896 0.51979132 0.51978369 0.51977605\n", + " 0.51976841 0.51976077 0.51975314 0.5197455 0.51973786 0.51973022\n", + " 0.51972257 0.51971493 0.51970729 0.51969965 0.519692 0.51968436\n", + " 0.51967671 0.51966906 0.51966142 0.51965377 0.51964612 0.51963847\n", + " 0.51963082 0.51962317 0.51961552 0.51960786 0.51960021 0.51959256\n", + " 0.5195849 0.51957725 0.51956959 0.51956194 0.51955428 0.51954662\n", + " 0.51953896 0.5195313 0.51952364 0.51951598 0.51950832 0.51950066\n", + " 0.51949299 0.51948533 0.51947766 0.51947 0.51946233 0.51945467\n", + " 0.519447 0.51943933 0.51943166 0.51942399 0.51941632 0.51940865\n", + " 0.51940098 0.51939331 0.51938563 0.51937796 0.51937029 0.51936261\n", + " 0.51935493 0.51934726 0.51933958 0.5193319 0.51932422 0.51931654\n", + " 0.51930886 0.51930118 0.5192935 0.51928582 0.51927813 0.51927045\n", + " 0.51926276 0.51925508 0.51924739 0.51923971 0.51923202 0.51922433\n", + " 0.51921664 0.51920895 0.51920126 0.51919357 0.51918588 0.51917819\n", + " 0.51917049 0.5191628 0.5191551 0.51914741 0.51913971 0.51913201\n", + " 0.51912432 0.51911662 0.51910892 0.51910122 0.51909352 0.51908582\n", + " 0.51907812 0.51907041 0.51906271 0.51905501 0.5190473 0.5190396\n", + " 0.51903189 0.51902418 0.51901647 0.51900877 0.51900106 0.51899335\n", + " 0.51898564 0.51897792 0.51897021 0.5189625 0.51895479 0.51894707\n", + " 0.51893936 0.51893164 0.51892393 0.51891621 0.51890849 0.51890077\n", + " 0.51889305 0.51888533 0.51887761 0.51886989 0.51886217 0.51885445\n", + " 0.51884672 0.518839 0.51883127 0.51882355 0.51881582 0.51880809\n", + " 0.51880037 0.51879264 0.51878491 0.51877718 0.51876945 0.51876172\n", + " 0.51875399 0.51874625 0.51873852 0.51873078 0.51872305 0.51871531\n", + " 0.51870758 0.51869984 0.5186921 0.51868436 0.51867663 0.51866889\n", + " 0.51866114 0.5186534 0.51864566 0.51863792 0.51863017 0.51862243\n", + " 0.51861469 0.51860694 0.51859919 0.51859145 0.5185837 0.51857595\n", + " 0.5185682 0.51856045 0.5185527 0.51854495 0.5185372 0.51852944\n", + " 0.51852169 0.51851394 0.51850618 0.51849842 0.51849067 0.51848291\n", + " 0.51847515 0.51846739 0.51845964 0.51845188 0.51844411 0.51843635\n", + " 0.51842859 0.51842083 0.51841307 0.5184053 0.51839754 0.51838977\n", + " 0.518382 0.51837424 0.51836647 0.5183587 0.51835093 0.51834316\n", + " 0.51833539 0.51832762 0.51831985 0.51831207 0.5183043 0.51829653\n", + " 0.51828875 0.51828098 0.5182732 0.51826542 0.51825764 0.51824987\n", + " 0.51824209 0.51823431 0.51822653 0.51821874 0.51821096 0.51820318\n", + " 0.5181954 0.51818761 0.51817983 0.51817204 0.51816425 0.51815647\n", + " 0.51814868 0.51814089 0.5181331 0.51812531 0.51811752 0.51810973\n", + " 0.51810194 0.51809414 0.51808635 0.51807856 0.51807076 0.51806297\n", + " 0.51805517 0.51804737 0.51803957 0.51803178 0.51802398 0.51801618\n", + " 0.51800838 0.51800057 0.51799277 0.51798497 0.51797717 0.51796936\n", + " 0.51796156 0.51795375 0.51794594 0.51793814 0.51793033 0.51792252\n", + " 0.51791471 0.5179069 0.51789909 0.51789128 0.51788347 0.51787566\n", + " 0.51786784 0.51786003 0.51785221 0.5178444 0.51783658 0.51782876\n", + " 0.51782095 0.51781313 0.51780531 0.51779749 0.51778967 0.51778185\n", + " 0.51777402 0.5177662 0.51775838 0.51775055 0.50541871]\n" ] } ], @@ -1991,42 +1946,43 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(239, 362)\n", - "(array([ 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 4, 4,\n", - " 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 12, 12, 13,\n", - " 14, 14, 15, 16, 16, 17, 18, 18, 19, 20, 20, 21, 22,\n", - " 22, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29, 30, 30,\n", - " 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 38, 38, 39,\n", - " 40, 40, 41, 42, 42, 43, 44, 44, 45, 46, 46, 47, 48,\n", - " 48, 49, 50, 50, 51, 52, 52, 53, 54, 54, 55, 56, 56,\n", - " 57, 58, 58, 59, 60, 60, 61, 62, 62, 63, 64, 64, 65,\n", - " 66, 66, 67, 68, 68, 69, 70, 70, 71, 72, 72, 73, 74,\n", - " 74, 75, 76, 76, 77, 78, 78, 79, 80, 80, 81, 82, 82,\n", - " 83, 84, 84, 85, 86, 86, 87, 88, 88, 89, 90, 90, 91,\n", - " 92, 92, 93, 94, 94, 95, 96, 96, 97, 98, 98, 99, 100,\n", - " 100, 101, 102, 102, 103, 104, 104, 105, 106, 106, 107, 108, 108,\n", - " 109, 110, 110, 111, 112, 112, 113, 113, 114, 115, 115, 116, 117,\n", - " 117, 118, 119, 119, 120, 121, 121, 122, 123, 123, 124, 125, 125,\n", - " 126, 127, 127, 128, 129, 129, 130, 131, 131, 132, 133, 133, 134,\n", - " 135, 135, 136, 137, 137, 138, 139, 139, 140, 141, 141, 142, 143,\n", - " 143, 144, 145, 145, 146, 147, 147, 148, 149, 149, 150, 151, 151,\n", - " 152, 153, 153, 154, 155, 155, 156, 157, 157, 158, 159, 159, 160,\n", - " 161, 161, 162, 163, 163, 164, 165, 165, 166, 167, 167, 168, 169,\n", - " 169, 170, 171, 171, 172, 173, 173, 174, 175, 175, 176, 177, 177,\n", - " 178, 179, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185, 186,\n", - " 187, 187, 188, 189, 189, 190, 191, 191, 192, 193, 193, 194, 195,\n", - " 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, 202, 203, 203,\n", - " 204, 205, 205, 206, 207, 207, 208, 209, 209, 210, 211, 211, 212,\n", - " 213, 213, 214, 215, 215, 216, 217, 217, 218, 219, 219, 220, 221,\n", - " 221, 222, 223, 223, 224, 225, 225, 226, 227, 227, 228, 229, 229,\n", - " 230, 231, 231, 232, 233, 233, 234, 235, 235, 236, 236, 237, 238]), array([ 0, 1, 2, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10,\n", + "(240, 363)\n", + "(array([ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 4,\n", + " 4, 5, 6, 6, 7, 8, 8, 9, 10, 10, 11, 12, 12,\n", + " 13, 14, 14, 15, 16, 16, 17, 18, 18, 19, 20, 20, 21,\n", + " 22, 22, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29, 30,\n", + " 30, 31, 32, 32, 33, 34, 34, 35, 36, 36, 37, 38, 38,\n", + " 39, 40, 40, 41, 42, 42, 43, 44, 44, 45, 46, 46, 47,\n", + " 48, 48, 49, 50, 50, 51, 52, 52, 53, 54, 54, 55, 56,\n", + " 56, 57, 58, 58, 59, 60, 60, 61, 62, 62, 63, 64, 64,\n", + " 65, 66, 66, 67, 68, 68, 69, 70, 70, 71, 72, 72, 73,\n", + " 74, 74, 75, 76, 76, 77, 78, 78, 79, 80, 80, 81, 82,\n", + " 82, 83, 84, 84, 85, 86, 86, 87, 88, 88, 89, 90, 90,\n", + " 91, 92, 92, 93, 94, 94, 95, 96, 96, 97, 98, 98, 99,\n", + " 100, 100, 101, 102, 102, 103, 104, 104, 105, 106, 106, 107, 108,\n", + " 108, 109, 110, 110, 111, 112, 112, 113, 113, 114, 115, 115, 116,\n", + " 117, 117, 118, 119, 119, 120, 121, 121, 122, 123, 123, 124, 125,\n", + " 125, 126, 127, 127, 128, 129, 129, 130, 131, 131, 132, 133, 133,\n", + " 134, 135, 135, 136, 137, 137, 138, 139, 139, 140, 141, 141, 142,\n", + " 143, 143, 144, 145, 145, 146, 147, 147, 148, 149, 149, 150, 151,\n", + " 151, 152, 153, 153, 154, 155, 155, 156, 157, 157, 158, 159, 159,\n", + " 160, 161, 161, 162, 163, 163, 164, 165, 165, 166, 167, 167, 168,\n", + " 169, 169, 170, 171, 171, 172, 173, 173, 174, 175, 175, 176, 177,\n", + " 177, 178, 179, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185,\n", + " 186, 187, 187, 188, 189, 189, 190, 191, 191, 192, 193, 193, 194,\n", + " 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, 202, 203,\n", + " 203, 204, 205, 205, 206, 207, 207, 208, 209, 209, 210, 211, 211,\n", + " 212, 213, 213, 214, 215, 215, 216, 217, 217, 218, 219, 219, 220,\n", + " 221, 221, 222, 223, 223, 224, 225, 225, 226, 227, 227, 228, 229,\n", + " 229, 230, 231, 231, 232, 233, 233, 234, 235, 235, 236, 236, 237,\n", + " 238]), array([ 0, 1, 2, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10,\n", " 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n", " 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\n", " 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,\n", @@ -2053,34 +2009,36 @@ " 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,\n", " 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,\n", " 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,\n", - " 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361]))\n", - "Get index of points, time: 0.018686294555664062 sec\n", - "[ 7 7 5 3 3 3 3 2 7 7 13 31 38 51\n", - " 116 124 171 285 213 217 227 154 172 188 126 247 277 269\n", - " 216 203 184 214 171 181 225 279 280 214 116 86 144 135\n", - " 13 -19 -35 -39 -43 -39 -42 -53 -62 -57 -61 -66 -65 -87\n", - " -87 -89 -90 -90 -98 -99 -96 -97 -98 -104 -111 -121 -117 -115\n", - " -114 -125 -136 -155 -157 -162 -151 -142 -139 -134 -137 -141 -155 -153\n", - " -154 -157 -157 -155 -161 -164 -165 -165 -160 -159 -157 -157 -155 -159\n", - " -165 -165 -173 -179 -179 -182 -190 -194 -200 -211 -211 -213 -214 -214\n", - " -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199\n", - " -199 -199 -199 -199 -199 -199 -199 -198 -197 -197 -196 -195 -194 -194\n", - " -194 -194 -194 -194 -195 -196 -198 -200 -201 -200 -203 -204 -205 -206\n", - " -208 -206 -207 -205 -202 -203 -200 -196 -198 -200 -199 -205 -211 -208\n", - " -213 -216 -215 -216 -215 -210 -209 -201 -198 -191 -186 -186 -182 -184\n", - " -186 -187 -187 -187 -187 -187 -189 -185 -186 -186 -181 -176 -176 -171\n", - " -166 -166 -163 -163 -165 -163 -161 -161 -158 -155 -156 -152 -153 -153\n", - " -151 -149 -151 -152 -151 -151 -153 -158 -164 -160 -154 -154 -150 -122\n", - " -125 -142 -144 -144 -139 -135 -136 -134 -132 -132 -131 -132 -133 -132\n", - " -130 -131 -124 -129 -126 -128 -129 -129 -127 -125 -125 -123 -121 -121\n", - " -119 -119 -120 -121 -124 -116 -115 -121 -121 -115 -115 -115 -115 -115\n", - " -115 -115 -115 -115 -115 -116 -117 -117 -116 -116 -116 -116 -116 -115\n", - " -116 -116 -115 -114 -114 -113 -112 -112 -112 -113 -113 -112 -110 -110\n", - " -110 -109 -109 -109 -110 -110 -110 -110 -111 -111 -112 -112 -113 -113\n", - " -114 -115 -115 -115 -115 -115 -115 -114 -113 -113 -112 -111 -110 -110\n", - " -109 -109 -108 -108 -108 -107 -104 -104 -103 -102 -101 -100 -100 -100\n", - " -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 -100\n", - " -100 -99 -100 -100 -100 -100 -100 -98 -101 -101 -102 -102 -102 -102]\n" + " 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,\n", + " 361]))\n", + "Get index of points, time: 62.418522119522095 sec\n", + "[ 10 11 10 5 5 5 7 5 5 3 1 12 18 20\n", + " 46 68 73 101 220 153 171 158 107 111 158 108 184 222\n", + " 267 188 199 181 198 187 148 184 253 256 217 157 76 99\n", + " 109 38 -7 -13 -20 -42 -46 -47 -51 -52 -49 -55 -60 -59\n", + " -66 -81 -81 -89 -93 -98 -126 -104 -93 -95 -105 -121 -127 -119\n", + " -117 -111 -112 -108 -113 -148 -135 -138 -136 -133 -133 -136 -140 -147\n", + " -154 -153 -157 -158 -158 -156 -153 -154 -153 -154 -155 -155 -155 -156\n", + " -159 -162 -163 -168 -172 -173 -178 -179 -183 -187 -198 -198 -204 -205\n", + " -202 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199 -199\n", + " -199 -199 -199 -199 -199 -199 -199 -199 -198 -197 -197 -196 -196 -195\n", + " -194 -193 -194 -194 -194 -195 -196 -198 -200 -202 -201 -204 -206 -207\n", + " -209 -209 -208 -210 -209 -207 -208 -206 -201 -203 -201 -201 -207 -215\n", + " -212 -218 -219 -220 -221 -216 -215 -213 -207 -204 -197 -190 -190 -186\n", + " -185 -187 -190 -192 -192 -192 -192 -194 -191 -187 -187 -185 -181 -180\n", + " -176 -171 -171 -167 -164 -166 -167 -166 -166 -164 -161 -162 -159 -154\n", + " -154 -154 -153 -156 -157 -157 -157 -159 -159 -167 -171 -168 -168 -162\n", + " -156 -161 -135 -139 -140 -145 -142 -143 -138 -135 -135 -134 -133 -134\n", + " -134 -131 -133 -133 -129 -130 -131 -129 -129 -129 -128 -128 -127 -125\n", + " -125 -124 -122 -120 -119 -118 -118 -117 -115 -116 -116 -116 -116 -116\n", + " -116 -116 -116 -116 -116 -116 -116 -117 -118 -117 -117 -117 -117 -117\n", + " -117 -115 -116 -116 -116 -116 -116 -114 -114 -113 -113 -113 -113 -112\n", + " -112 -111 -110 -110 -109 -110 -109 -110 -112 -110 -111 -111 -111 -112\n", + " -113 -114 -114 -115 -115 -115 -115 -115 -114 -113 -113 -113 -112 -111\n", + " -110 -109 -109 -109 -108 -108 -107 -106 -106 -104 -103 -103 -101 -100\n", + " -100 -100 -100 -100 -100 -97 -100 -100 -100 -100 -100 -100 -100 -100\n", + " -99 -100 -100 -100 -100 -100 -100 -100 -100 -99 -99 -101 -101 -101\n", + " -102]\n" ] } ], @@ -2131,56 +2089,48 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Pandas time: 0.001234292984008789 sec\n", + "Pandas time: 0.01806473731994629 sec\n", " longitude latitude z\n", - "0 121.534598 25.063806 7\n", - "1 121.540625 25.064197 7\n", - "2 121.544792 25.064468 5\n", - "3 121.548958 25.064738 3\n", - "4 121.549847 25.064796 3\n", + "0 121.534598 25.063806 10\n", + "1 121.536458 25.063927 11\n", + "2 121.540625 25.064197 10\n", + "3 121.544792 25.064468 5\n", + "4 121.549847 25.064796 5\n", ".. ... ... ...\n", - "359 123.023958 26.044449 -101\n", - "360 123.028125 26.047219 -102\n", - "361 123.032292 26.049989 -102\n", - "362 123.036458 26.052760 -102\n", - "363 123.040526 26.055464 -102\n", + "360 123.023958 26.044449 -99\n", + "361 123.028125 26.047219 -101\n", + "362 123.032292 26.049989 -101\n", + "363 123.036458 26.052760 -101\n", + "364 123.040526 26.055464 -102\n", "\n", - "[364 rows x 3 columns]\n", - "Polars time: 0.0002620220184326172 sec\n", - "shape: (364, 3)\n", + "[365 rows x 3 columns]\n", + "Polars time: 0.10485339164733887 sec\n", + "shape: (365, 3)\n", "┌────────────┬───────────┬──────┐\n", "│ longitude ┆ latitude ┆ z │\n", "│ --- ┆ --- ┆ --- │\n", "│ f64 ┆ f64 ┆ i64 │\n", "╞════════════╪═══════════╪══════╡\n", - "│ 121.534598 ┆ 25.063806 ┆ 7 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", - "│ 121.540625 ┆ 25.064197 ┆ 7 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", + "│ 121.534598 ┆ 25.063806 ┆ 10 │\n", + "│ 121.536458 ┆ 25.063927 ┆ 11 │\n", + "│ 121.540625 ┆ 25.064197 ┆ 10 │\n", "│ 121.544792 ┆ 25.064468 ┆ 5 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", - "│ 121.548958 ┆ 25.064738 ┆ 3 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", "│ ... ┆ ... ┆ ... │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", - "│ 123.028125 ┆ 26.047219 ┆ -102 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", - "│ 123.032292 ┆ 26.049989 ┆ -102 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", - "│ 123.036458 ┆ 26.05276 ┆ -102 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤\n", + "│ 123.028125 ┆ 26.047219 ┆ -101 │\n", + "│ 123.032292 ┆ 26.049989 ┆ -101 │\n", + "│ 123.036458 ┆ 26.05276 ┆ -101 │\n", "│ 123.040526 ┆ 26.055464 ┆ -102 │\n", "└────────────┴───────────┴──────┘\n", - "Output Pandas time: 0.002108335494995117 sec\n", - "Output Polars time: 0.0013206005096435547 sec\n", - "\n" + "Output Pandas time: 0.004413604736328125 sec\n", + "Output Polars time: 0.04501008987426758 sec\n", + "\n" ] } ], diff --git a/zprofile02_crosszero.ipynb b/dev/zprofile02_crosszero.ipynb similarity index 100% rename from zprofile02_crosszero.ipynb rename to dev/zprofile02_crosszero.ipynb diff --git a/gebco_app.py b/gebco_app.py index c3f0fa1..e3ef689 100644 --- a/gebco_app.py +++ b/gebco_app.py @@ -10,6 +10,7 @@ from fastapi.responses import JSONResponse from fastapi.openapi.docs import get_swagger_ui_html from fastapi.openapi.utils import get_openapi +from contextlib import asynccontextmanager from typing import Optional #, Union #from pydantic import BaseModel, ValidationError, HttpUrl, validator import requests #, httpx @@ -17,7 +18,7 @@ # import orjson # from loggerConfig import logger # from models import zprofSchema -from xmeridian import * +from src.xmeridian import * import dask from multiprocessing.pool import Pool @@ -31,7 +32,8 @@ def generate_custom_openapi(): title="ODB API for GEBCO Bathymetry", version="1.0.0", description="Z-profile (and distances) between longitude/latitude points with 15-arcsec resolutions.\n" + - "Data source: GEBCO Compilation Group (2022) GEBCO_2022 Grid (doi:10.5285/e0f0bb80-ab44-2739-e053-6c86abc0289c)", + #"Data source: GEBCO Compilation Group (2022) GEBCO_2022 Grid (doi:10.5285/e0f0bb80-ab44-2739-e053-6c86abc0289c)", + "Data source: GEBCO Compilation Group (2023) GEBCO 2023 Grid (doi:10.5285/f98b053b-0cbc-6c23-e053-6c86abc0af7b)", routes=app.routes, ) openapi_schema["servers"] = [ @@ -42,7 +44,26 @@ def generate_custom_openapi(): app.openapi_schema = openapi_schema return app.openapi_schema -app = FastAPI(docs_url=None) + +# @app.on_event("startup") +# async def startup(): +@asynccontextmanager +async def lifespan(app: FastAPI): + + #if 'ds' in kwargs: + # ds = kwargs['ds'] + #else: + global ds + # logger.info + ds = xr.open_zarr( + #'data/GEBCO_2022_sub_ice_topo.zarr', chunks='auto', group='gebco', + 'data/GEBCO_2023_sub_ice_topo.zarr', chunks='auto', + decode_cf=False, decode_times=False) + yield + ds.close() + + +app = FastAPI(docs_url=None, lifespan=lifespan) @app.get("/gebco/openapi.json", include_in_schema=False) async def custom_openapi(): @@ -66,17 +87,6 @@ async def custom_swagger_ui_html(): subsetFlag = True -@app.on_event("startup") -async def startup(): - #if 'ds' in kwargs: - # ds = kwargs['ds'] - #else: - global ds - # logger.info - ds = xr.open_zarr( - 'GEBCO_2022_sub_ice_topo.zarr', chunks='auto', group='gebco', - decode_cf=False, decode_times=False) - # @app.on_event("shutdown") # def release_dataset(): # global ds diff --git a/read_gebco_raw01.ipynb b/read_gebco_raw01.ipynb deleted file mode 100644 index b523534..0000000 --- a/read_gebco_raw01.ipynb +++ /dev/null @@ -1,1917 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Exe time: 0.004761219024658203 sec\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (lon: 86400, lat: 43200)\n",
-       "Coordinates:\n",
-       "  * lon        (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n",
-       "  * lat        (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n",
-       "Data variables:\n",
-       "    crs        |S1 ...\n",
-       "    elevation  (lat, lon) int16 dask.array<chunksize=(43200, 86400), meta=np.ndarray>\n",
-       "Attributes: (12/36)\n",
-       "    title:                           The GEBCO_2022 Grid - a continuous terra...\n",
-       "    summary:                         The GEBCO_2022 Grid is a continuous, glo...\n",
-       "    keywords:                        BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n",
-       "    Conventions:                     CF-1.6, ACDD-1.3\n",
-       "    id:                              DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    naming_authority:                https://dx.doi.org\n",
-       "    ...                              ...\n",
-       "    geospatial_vertical_units:       meters\n",
-       "    geospatial_vertical_resolution:  1.0\n",
-       "    geospatial_vertical_positive:    up\n",
-       "    identifier_product_doi:          DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    references:                      DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    node_offset:                     1.0
" - ], - "text/plain": [ - "\n", - "Dimensions: (lon: 86400, lat: 43200)\n", - "Coordinates:\n", - " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", - " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", - "Data variables:\n", - " crs |S1 ...\n", - " elevation (lat, lon) int16 dask.array\n", - "Attributes: (12/36)\n", - " title: The GEBCO_2022 Grid - a continuous terra...\n", - " summary: The GEBCO_2022 Grid is a continuous, glo...\n", - " keywords: BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n", - " Conventions: CF-1.6, ACDD-1.3\n", - " id: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " naming_authority: https://dx.doi.org\n", - " ... ...\n", - " geospatial_vertical_units: meters\n", - " geospatial_vertical_resolution: 1.0\n", - " geospatial_vertical_positive: up\n", - " identifier_product_doi: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " node_offset: 1.0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import xarray as xr\n", - "import time\n", - "st = time.time()\n", - "#xr.open_mfdataset('~/R/gebco/*.nc', parallel=True)\n", - "ds = xr.open_mfdataset(\n", - " 'GEBCO_2022_sub_ice_topo.nc', chunks={0: 60, 1: 60}, \n", - " decode_cf=False, decode_times=False) #.load()\n", - "et = time.time()\n", - "print('Exe time: ', et-st, 'sec')\n", - "ds" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "112\n" - ] - }, - { - "data": { - "text/plain": [ - "6.9522857666015625" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(sys.getsizeof(ds))\n", - "ds['elevation'].nbytes/(1024 ** 3)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "larger-chunk read time: 0.0073223114013671875 sec\n", - "112\n", - "smaller-chunk read time: 0.0045816898345947266 sec\n", - "112\n" - ] - }, - { - "data": { - "text/plain": [ - "6.9522857666015625" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "st = time.time()\n", - "#larger chunk size\n", - "ds2 = xr.open_mfdataset(\n", - " 'GEBCO_2022_sub_ice_topo.nc', chunks={0: 120, 1: 120}, \n", - " decode_cf=False, decode_times=False) #.load()\n", - "et = time.time()\n", - "print('larger-chunk read time: ', et-st, 'sec')\n", - "print(sys.getsizeof(ds2))\n", - "ds2['elevation'].nbytes/(1024 ** 3)\n", - "\n", - "st = time.time()\n", - "#smaller chunk size\n", - "ds3 = xr.open_mfdataset(\n", - " 'GEBCO_2022_sub_ice_topo.nc', chunks={0: 30, 1: 30}, \n", - " decode_cf=False, decode_times=False) #.load()\n", - "et = time.time()\n", - "print('smaller-chunk read time: ', et-st, 'sec')\n", - "print(sys.getsizeof(ds2))\n", - "ds2['elevation'].nbytes/(1024 ** 3)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-3949\n", - "-4278\n", - "-4819\n", - "-4766\n", - "-3729\n", - "-3714\n", - "-3739\n", - "-3677\n", - "-3813\n" - ] - } - ], - "source": [ - "print(ds.sel(lat=23.326173, lon=123.978125, method='nearest')['elevation'].values)\n", - "print(ds.sel(lat=23.317670, lon=123.973958, method='nearest')['elevation'].values)\n", - "print(ds.sel(lat=21.336378, lon=123.003125, method='nearest')['elevation'].values)\n", - "print(ds.sel(lat=21.33, lon=123.0, method='nearest')['elevation'].values)\n", - "print(ds[\"elevation\"].values[27200,72956]) #this is correct value (got depth = -3729)\n", - "print(ds[\"elevation\"].values[27200,72957])\n", - "print(ds[\"elevation\"].values[27200,72955])\n", - "print(ds[\"elevation\"].values[27201,72956])\n", - "print(ds[\"elevation\"].values[27199,72956]) #But we got -3813, this is: after subset got a latitude offset 1? why (in zprofile01.ipynb correct it)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Slicing time for chunk-60: 0.0011551380157470703 sec\n", - "Slicing time for larger chunk: 0.0008370876312255859 sec\n", - "Exe time for smaller chunk: 0.000701904296875 sec\n" - ] - } - ], - "source": [ - "#The following try different subsetting and index methods\n", - "st = time.time()\n", - "ds_s1 = ds.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", - "ds_s1.close() #try if it can close\n", - "et = time.time()\n", - "print('Slicing time for chunk-60: ', et-st, 'sec')\n", - "\n", - "st = time.time()\n", - "ds_s2 = ds2.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", - "ds_s2.close() #try if it can close\n", - "et = time.time()\n", - "print('Slicing time for larger chunk: ', et-st, 'sec')\n", - "\n", - "st = time.time()\n", - "ds_s3 = ds3.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", - "ds_s3.close() #try if it can close\n", - "et = time.time()\n", - "print('Exe time for smaller chunk: ', et-st, 'sec')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.1062154769897461" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ds_s1['elevation'].nbytes/(1024 ** 3)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (lon: 7200, lat: 7920)\n",
-       "Coordinates:\n",
-       "  * lon        (lon) float64 105.0 105.0 105.0 105.0 ... 135.0 135.0 135.0 135.0\n",
-       "  * lat        (lat) float64 2.002 2.006 2.01 2.015 ... 34.99 34.99 34.99 35.0\n",
-       "Data variables:\n",
-       "    crs        |S1 ...\n",
-       "    elevation  (lat, lon) int16 dask.array<chunksize=(7920, 7200), meta=np.ndarray>\n",
-       "Attributes: (12/36)\n",
-       "    title:                           The GEBCO_2022 Grid - a continuous terra...\n",
-       "    summary:                         The GEBCO_2022 Grid is a continuous, glo...\n",
-       "    keywords:                        BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n",
-       "    Conventions:                     CF-1.6, ACDD-1.3\n",
-       "    id:                              DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    naming_authority:                https://dx.doi.org\n",
-       "    ...                              ...\n",
-       "    geospatial_vertical_units:       meters\n",
-       "    geospatial_vertical_resolution:  1.0\n",
-       "    geospatial_vertical_positive:    up\n",
-       "    identifier_product_doi:          DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    references:                      DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    node_offset:                     1.0
" - ], - "text/plain": [ - "\n", - "Dimensions: (lon: 7200, lat: 7920)\n", - "Coordinates:\n", - " * lon (lon) float64 105.0 105.0 105.0 105.0 ... 135.0 135.0 135.0 135.0\n", - " * lat (lat) float64 2.002 2.006 2.01 2.015 ... 34.99 34.99 34.99 35.0\n", - "Data variables:\n", - " crs |S1 ...\n", - " elevation (lat, lon) int16 dask.array\n", - "Attributes: (12/36)\n", - " title: The GEBCO_2022 Grid - a continuous terra...\n", - " summary: The GEBCO_2022 Grid is a continuous, glo...\n", - " keywords: BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n", - " Conventions: CF-1.6, ACDD-1.3\n", - " id: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " naming_authority: https://dx.doi.org\n", - " ... ...\n", - " geospatial_vertical_units: meters\n", - " geospatial_vertical_resolution: 1.0\n", - " geospatial_vertical_positive: up\n", - " identifier_product_doi: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " node_offset: 1.0" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#da1 = getattr(ds_s1, 'elevation')\n", - "#da1\n", - "#https://www.programcreek.com/python/example/123571/xarray.decode_cf\n", - "#da1.attrs['_Unsigned']='false'\n", - "ds_s1\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#da1" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'ds_s1' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_1649730/530195383.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mst\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mst1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mds_s1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlon\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mslice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1010\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlat\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mslice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2010\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mxt1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mst1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'elevation'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0met\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Exe time: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0met\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'sec'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'ds_s1' is not defined" - ] - } - ], - "source": [ - "st = time.time()\n", - "st1 = ds_s1.isel(lon=slice(1000, 1010), lat=slice(2000, 2010))\n", - "xt1 = st1['elevation'].values\n", - "et = time.time()\n", - "print('Exe time: ', et-st, 'sec')\n", - "print(xt1)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(10, 10)\n", - "3.1 Get index of point by two subsetting time: 0.0030269622802734375 sec\n", - "[[3 4]\n", - " [1 2]]\n", - "(array([3, 1]), array([4, 2]))\n", - "\n", - "Dimensions: (lon: 10, lat: 10)\n", - "Coordinates:\n", - " * lon (lon) float64 109.2 109.2 109.2 109.2 ... 109.2 109.2 109.2 109.2\n", - " * lat (lat) float64 10.34 10.34 10.34 10.35 ... 10.36 10.36 10.37 10.37\n", - "Data variables:\n", - " crs |S1 ...\n", - " elevation (lat, lon) int16 dask.array\n", - "Attributes: (12/36)\n", - " title: The GEBCO_2022 Grid - a continuous terra...\n", - " summary: The GEBCO_2022 Grid is a continuous, glo...\n", - " keywords: BATHYMETRY/SEAFLOOR TOPOGRAPHY, DIGITAL ...\n", - " Conventions: CF-1.6, ACDD-1.3\n", - " id: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " naming_authority: https://dx.doi.org\n", - " ... ...\n", - " geospatial_vertical_units: meters\n", - " geospatial_vertical_resolution: 1.0\n", - " geospatial_vertical_positive: up\n", - " identifier_product_doi: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " node_offset: 1.0\n", - "3.2 Get index of point by numpy ix_ time: 0.003170490264892578 sec\n", - "[-117, -119]\n", - "[-117 -119]\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "print(st1[\"elevation\"].shape)\n", - "st = time.time()\n", - "pt1 = [st1[\"elevation\"].values[3,4], st1[\"elevation\"].values[1,2]]\n", - "et = time.time()\n", - "print('3.1 Get index of point by two subsetting time: ', et-st, 'sec')\n", - "\n", - "st = time.time()\n", - "#pt2 = st1[\"elevation\"].values[np.ix_([3,4],[1,2])]\n", - "idx_arr = np.array([[3,4],[1,2]])\n", - "print(idx_arr)\n", - "print(tuple(idx_arr.T))\n", - "#https://stackoverflow.com/questions/43034563/numpy-array-of-multiple-indices-replace-with-a-different-matrix\n", - "pt2=st1['elevation'].values[tuple(idx_arr.T)]\n", - "et = time.time()\n", - "print('3.2 Get index of point by numpy ix_ time: ', et-st, 'sec')\n", - "print(pt1)\n", - "print(pt2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#slow\n", - "x = xr.DataArray([-45,-44.95833,-44,-43.95822], dims=['longitude'])\n", - "y = xr.DataArray([35,35.004167,36,36.004168], dims=['latitude'])\n", - "st = time.time()\n", - "#ds_s2 = ds.sel(lon=x, lat=y, method='nearest') \n", - "et = time.time()\n", - "#print('Exe time: ', et-st, 'sec')\n", - "#print(ds_s2) \n", - "#print(ds_s2['elevation'].values)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#https://stackoverflow.com/questions/58706834/angled-slice-in-xarray\n", - "startLat = 35.0\n", - "startLon = -45.0\n", - "endLat = 36.0\n", - "endLon = -43.0\n", - "n = 3600/15 #15 arc-second\n", - "# not work, need another dimension to project\n", - "#x = xr.DataArray(np.linspace(startLon,endLon,n), dims='z')\n", - "#y = xr.DataArray(np.linspace(startLat,endLat,n), dims='z')\n", - "#st = time.time()\n", - "#ds_s3 = ds.interp(lon=x, lat=y, method='linear')\n", - "#et = time.time()\n", - "#print('Exe time: ', et-st, 'sec')\n", - "#print(ds_s3) \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import orjson\n", - "import json\n", - "st = time.time()\n", - "jt1 = orjson.dumps(xt1.tolist(), option=orjson.OPT_NAIVE_UTC | orjson.OPT_SERIALIZE_NUMPY)\n", - "et = time.time()\n", - "print('4.1 Convert JSON by orjson time: ', et-st, 'sec')\n", - "st = time.time()\n", - "jt2 = json.dumps(xt1.tolist())\n", - "et = time.time()\n", - "print('4.2 Convert JSON by json.dump time: ', et-st, 'sec')\n", - "\n", - "print(jt1)\n", - "print(jt2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ds.close()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import zarr\n", - "import dask" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#compressor = zarr.Blosc(cname='zstd', clevel=3, shuffle=2)\n", - "dask.config.set(scheduler='single-threaded')\n", - "#da = getattr(ds, 'elevation')\n", - "#https://www.programcreek.com/python/example/123571/xarray.decode_cf\n", - "#da.attrs['_Unsigned']='false'\n", - "ds\n", - "ds.to_zarr('GEBCO_2022_sub_ice_topo.zarr', mode='w',\n", - " #encoding={\"elevation\": {\"_Unsigned\": \"false\"}},\n", - " group='gebco') ##compute=False, , encoding={'gebbco': {'compressor': compressor}})\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Exe time: 0.004856586456298828 sec\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (lat: 43200, lon: 86400)\n",
-       "Coordinates:\n",
-       "  * lat        (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n",
-       "  * lon        (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n",
-       "Data variables:\n",
-       "    crs        |S1 ...\n",
-       "    elevation  (lat, lon) int16 dask.array<chunksize=(675, 2700), meta=np.ndarray>\n",
-       "Attributes: (12/36)\n",
-       "    Conventions:                     CF-1.6, ACDD-1.3\n",
-       "    comment:                         The data in the GEBCO_2022 Grid should n...\n",
-       "    creator_email:                   gdacc@seabed2030.org\n",
-       "    creator_name:                    GEBCO through the Nippon Foundation-GEBC...\n",
-       "    creator_type:                    International organisation\n",
-       "    creator_url:                     https://www.gebco.net\n",
-       "    ...                              ...\n",
-       "    node_offset:                     1.0\n",
-       "    project:                         Nippon Foundation - GEBCO Seabed2030 Pro...\n",
-       "    references:                      DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n",
-       "    source:                          The GEBCO_2022 Grid is the latest global...\n",
-       "    summary:                         The GEBCO_2022 Grid is a continuous, glo...\n",
-       "    title:                           The GEBCO_2022 Grid - a continuous terra...
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 43200, lon: 86400)\n", - "Coordinates:\n", - " * lat (lat) float64 -90.0 -89.99 -89.99 -89.99 ... 89.99 89.99 90.0\n", - " * lon (lon) float64 -180.0 -180.0 -180.0 -180.0 ... 180.0 180.0 180.0\n", - "Data variables:\n", - " crs |S1 ...\n", - " elevation (lat, lon) int16 dask.array\n", - "Attributes: (12/36)\n", - " Conventions: CF-1.6, ACDD-1.3\n", - " comment: The data in the GEBCO_2022 Grid should n...\n", - " creator_email: gdacc@seabed2030.org\n", - " creator_name: GEBCO through the Nippon Foundation-GEBC...\n", - " creator_type: International organisation\n", - " creator_url: https://www.gebco.net\n", - " ... ...\n", - " node_offset: 1.0\n", - " project: Nippon Foundation - GEBCO Seabed2030 Pro...\n", - " references: DOI: 10.5285/e0f0bb80-ab44-2739-e053-6c8...\n", - " source: The GEBCO_2022 Grid is the latest global...\n", - " summary: The GEBCO_2022 Grid is a continuous, glo...\n", - " title: The GEBCO_2022 Grid - a continuous terra..." - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "st = time.time()\n", - "dz = xr.open_zarr(\n", - " 'GEBCO_2022_sub_ice_topo.zarr', chunks='auto', \n", - " group='gebco', decode_cf=False, decode_times=False)\n", - "\n", - "et = time.time()\n", - "print('Exe time: ', et-st, 'sec')\n", - "dz" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(sys.getsizeof(dz))\n", - "dz['elevation'].nbytes/(1024 ** 3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "st = time.time()\n", - "dz_s1 = dz.sel(lon=slice(105, 135), lat=slice(2, 35)) \n", - "dz_s1.close() #try if it can close\n", - "zt1 = dz_s1.isel(lon=slice(1000, 1010), lat=slice(2000, 2010))\n", - "xz1 = zt1['elevation'].values\n", - "et = time.time()\n", - "print('Exe time: ', et-st, 'sec')\n", - "print(xz1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "st = time.time()\n", - "jz1 = orjson.dumps(xz1.tolist(), option=orjson.OPT_NAIVE_UTC | orjson.OPT_SERIALIZE_NUMPY)\n", - "et = time.time()\n", - "print('4.1z Convert JSON by orjson time: ', et-st, 'sec')\n", - "print(jz1)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.8.10 ('py39')", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.10" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "e4b16f993b66de7f38f135ed21ea7c985362ee20cd8e4dede1c122c7165d5297" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/requirements.txt b/requirements.txt index 4f258a1..dc48194 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,11 @@ -dask==2023.8.0 -fastapi==0.101.0 -geopy==2.3.0 +dask==2023.11.0 +fastapi==0.104.1 +geopy==2.4.1 gunicorn==21.2.0 -numpy==1.25.2 -polars==0.18.13 +numpy==1.26.2 +polars==0.19.17 Requests==2.31.0 -uvicorn==0.23.2 -xarray==2023.07.0 -zarr==2.16.0 +setuptools==68.2.2 +uvicorn==0.24.0.post1 +xarray==2023.11.0 +zarr==2.16.1 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..b658385 --- /dev/null +++ b/setup.py @@ -0,0 +1,4 @@ +from setuptools import setup, find_packages + +setup(name='src', version='1.0', packages=find_packages()) + diff --git a/src.egg-info/PKG-INFO b/src.egg-info/PKG-INFO new file mode 100644 index 0000000..fb2b9c6 --- /dev/null +++ b/src.egg-info/PKG-INFO @@ -0,0 +1,3 @@ +Metadata-Version: 2.1 +Name: src +Version: 1.0 diff --git a/src.egg-info/SOURCES.txt b/src.egg-info/SOURCES.txt new file mode 100644 index 0000000..385458e --- /dev/null +++ b/src.egg-info/SOURCES.txt @@ -0,0 +1,19 @@ +.gitignore +README.md +change_log.md +gebco_app.py +requirements.txt +setup.py +conf/ecosystem.config.js +conf/gebco_v1.json +conf/simu.sh +simu/Hidy_zseg_123E98_23N33_123_21N33.csv +simu/gebco_xy_123E98_23N33_123_21N33.csv +simu/gebco_z_123E98_23N33_123_21N33.csv +simu/gebco_zseg_123E98_23N33_123_21N33.csv +src/__init__.py +src/xmeridian.py +src.egg-info/PKG-INFO +src.egg-info/SOURCES.txt +src.egg-info/dependency_links.txt +src.egg-info/top_level.txt \ No newline at end of file diff --git a/src.egg-info/dependency_links.txt b/src.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src.egg-info/top_level.txt b/src.egg-info/top_level.txt new file mode 100644 index 0000000..85de9cf --- /dev/null +++ b/src.egg-info/top_level.txt @@ -0,0 +1 @@ +src diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xmeridian.py b/src/xmeridian.py similarity index 100% rename from xmeridian.py rename to src/xmeridian.py