diff --git a/MANIFEST.in b/MANIFEST.in index f3155af7..77251361 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ include LICENSE include README.md +recursive-exclude data * recursive-exclude * __pycache__ recursive-exclude * *.py[co] diff --git a/README.md b/README.md index c3cdcb60..811cd722 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,15 @@ The following projects cover related needs and served as inspiration for this pr ## How to contribute ### Setup -* Clone the repository and install the package in editable mode (including all `dev` dependencies): +* We recommend you install `movement` inside a [conda](https://docs.conda.io/en/latest/) environment. +Assuming you have `conda` installed, the following will create and activate an environment containing Python 3 as well as the required `pytables` library. You can call your environment whatever you like, we've used `movement-env`. + + ```sh + conda create -n movement-env -c conda-forge python=3.11 pytables + conda activate movement-env + ``` + +* Next clone the repository and install the package in editable mode (including all `dev` dependencies): ```bash git clone https://github.com/neuroinformatics-unit/movement diff --git a/data/DLC_sample_poses.csv b/data/DLC_sample_poses.csv new file mode 100644 index 00000000..7e8fb495 --- /dev/null +++ b/data/DLC_sample_poses.csv @@ -0,0 +1,1088 @@ +scorer,DLC_resnet50_WASPNov22shuffle1_95500,DLC_resnet50_WASPNov22shuffle1_95500,DLC_resnet50_WASPNov22shuffle1_95500,DLC_resnet50_WASPNov22shuffle1_95500,DLC_resnet50_WASPNov22shuffle1_95500,DLC_resnet50_WASPNov22shuffle1_95500 +bodyparts,head,head,head,stinger,stinger,stinger +coords,x,y,likelihood,x,y,likelihood +0,1086.237548828125,421.5012512207031,0.053050994873046875,1083.8658447265625,421.3041687011719,0.07366322726011276 +1,1086.0203857421875,421.5442810058594,0.03531652316451073,1083.3699951171875,421.45770263671875,0.03293059021234512 +2,1085.544677734375,421.8074035644531,0.017067069187760353,1082.94970703125,421.609619140625,0.010222077369689941 +3,1085.08447265625,422.58984375,0.23821969330310822,1081.6279296875,425.6838073730469,0.1728968620300293 +4,1085.192626953125,422.4882507324219,0.5022801756858826,1078.615478515625,427.20806884765625,0.269351065158844 +5,1084.9334716796875,422.5357666015625,0.5104254484176636,1077.9530029296875,426.9003601074219,0.28384947776794434 +6,1084.84814453125,422.7807922363281,0.8350903391838074,1077.07373046875,427.3033752441406,0.8024886846542358 +7,1084.2120361328125,423.7139587402344,0.6615277528762817,1076.2950439453125,426.7967224121094,0.6214450597763062 +8,1084.3070068359375,423.6493225097656,0.4611266255378723,1076.3564453125,426.4219665527344,0.35097160935401917 +9,1084.46728515625,424.6977233886719,0.9340851902961731,1075.7523193359375,428.5489501953125,0.9421424865722656 +10,1085.0128173828125,425.521240234375,0.975777268409729,1075.16455078125,429.6994934082031,0.9839091897010803 +11,1085.0347900390625,425.53460693359375,0.9766359329223633,1075.2091064453125,429.8205261230469,0.9834348559379578 +12,1084.6300048828125,426.09576416015625,0.9774735569953918,1075.1356201171875,429.4978942871094,0.9827540516853333 +13,1084.9300537109375,425.7405090332031,0.972945511341095,1075.3758544921875,429.460693359375,0.9840747714042664 +14,1085.1416015625,425.75762939453125,0.9710979461669922,1075.5780029296875,429.6273193359375,0.9858472347259521 +15,1084.8338623046875,425.8417663574219,0.9728531241416931,1075.5767822265625,429.59185791015625,0.9836921691894531 +16,1084.539306640625,425.6861267089844,0.973813533782959,1075.220703125,429.7728576660156,0.9817728400230408 +17,1084.57470703125,426.08282470703125,0.9748584628105164,1075.11279296875,429.8365783691406,0.9834221601486206 +18,1084.6632080078125,426.35614013671875,0.9765671491622925,1075.235107421875,430.1249694824219,0.9835384488105774 +19,1084.462646484375,426.79522705078125,0.9812992811203003,1076.52783203125,429.4551696777344,0.9855273962020874 +20,1084.6339111328125,426.8895263671875,0.9843194484710693,1076.14208984375,429.8697814941406,0.9906448125839233 +21,1084.7904052734375,426.5370178222656,0.9828882813453674,1076.1944580078125,430.7028503417969,0.9933038949966431 +22,1084.313720703125,426.79229736328125,0.9838804006576538,1075.662841796875,431.9263916015625,0.9919217228889465 +23,1084.5,427.01629638671875,0.9799029231071472,1075.8587646484375,432.2616882324219,0.9903691411018372 +24,1084.7520751953125,426.5051574707031,0.9799334406852722,1075.1319580078125,432.0789489746094,0.9897667169570923 +25,1084.894775390625,426.37030029296875,0.974779486656189,1075.2838134765625,432.3627014160156,0.9901769161224365 +26,1084.7886962890625,426.8404235839844,0.9830775260925293,1075.11572265625,432.9985046386719,0.9921466112136841 +27,1084.6102294921875,426.7858581542969,0.9801913499832153,1074.9117431640625,433.1622314453125,0.9900913238525391 +28,1084.864501953125,427.04193115234375,0.9708962440490723,1075.0772705078125,433.0895690917969,0.9833455681800842 +29,1084.94580078125,426.9053649902344,0.9628797173500061,1074.917724609375,433.2705078125,0.981351375579834 +30,1084.925048828125,427.0067138671875,0.92949378490448,1074.9178466796875,433.0345153808594,0.9691171050071716 +31,1084.84912109375,426.8511047363281,0.9624608755111694,1074.299072265625,433.0960693359375,0.9822250604629517 +32,1085.1817626953125,426.2645263671875,0.9560194611549377,1074.7586669921875,432.7253723144531,0.9838274121284485 +33,1084.9180908203125,426.2203063964844,0.9632176756858826,1074.7125244140625,432.7007141113281,0.9852500557899475 +34,1085.09521484375,426.55645751953125,0.9142519235610962,1074.5989990234375,432.623779296875,0.96462082862854 +35,1084.958251953125,426.6463623046875,0.9494043588638306,1074.431396484375,433.0580139160156,0.9812891483306885 +36,1085.249755859375,426.6672668457031,0.9625566601753235,1074.9053955078125,433.28167724609375,0.9862492084503174 +37,1085.1539306640625,426.81982421875,0.9485073685646057,1075.074951171875,433.0851135253906,0.9804021716117859 +38,1085.01171875,426.7129821777344,0.9542881846427917,1075.275146484375,432.71405029296875,0.9787158966064453 +39,1085.1524658203125,426.9264831542969,0.923825740814209,1075.3951416015625,432.6260070800781,0.9694352149963379 +40,1085.0628662109375,426.74615478515625,0.8217874765396118,1075.6805419921875,432.3414306640625,0.9276413321495056 +41,1084.6905517578125,426.9821472167969,0.8130871653556824,1075.510498046875,432.860595703125,0.9233839511871338 +42,1084.7999267578125,426.91363525390625,0.7291008830070496,1075.3743896484375,432.3535461425781,0.8753265738487244 +43,1084.9698486328125,426.8220520019531,0.7477142214775085,1075.3985595703125,432.4842834472656,0.8996687531471252 +44,1084.764404296875,426.8224792480469,0.8968480229377747,1075.4334716796875,432.8965148925781,0.9595481157302856 +45,1084.96533203125,426.51739501953125,0.8127304315567017,1075.2847900390625,433.1034240722656,0.9440074563026428 +46,1084.88525390625,426.3428955078125,0.9191868305206299,1075.2037353515625,433.45294189453125,0.9727879762649536 +47,1084.9520263671875,426.9099426269531,0.9007665514945984,1074.6068115234375,434.2321472167969,0.9638791680335999 +48,1084.5697021484375,427.1667175292969,0.9284270405769348,1073.140625,434.71051025390625,0.9683602452278137 +49,1084.4334716796875,427.5157165527344,0.9445694088935852,1072.9686279296875,435.29522705078125,0.9743146896362305 +50,1084.3231201171875,428.41815185546875,0.9316866397857666,1071.627685546875,436.7895812988281,0.9598857164382935 +51,1084.4202880859375,428.4503479003906,0.8904033899307251,1071.597412109375,436.74285888671875,0.9188083410263062 +52,1083.9542236328125,428.5194396972656,0.9633031487464905,1071.3453369140625,437.0277099609375,0.9608842134475708 +53,1084.2945556640625,428.41448974609375,0.9435369968414307,1071.4765625,436.9731750488281,0.9623072743415833 +54,1084.4110107421875,428.53466796875,0.9663830399513245,1071.445068359375,437.1981201171875,0.9744366407394409 +55,1084.1246337890625,428.7353820800781,0.9672921299934387,1071.3380126953125,437.3138122558594,0.9726571440696716 +56,1084.0482177734375,428.7098388671875,0.9595615863800049,1070.9886474609375,437.4819030761719,0.9759218096733093 +57,1083.96044921875,428.76861572265625,0.9160628914833069,1070.9676513671875,437.4626770019531,0.9608284831047058 +58,1083.902099609375,428.79278564453125,0.9020162224769592,1070.734619140625,437.296142578125,0.9539929032325745 +59,1083.6854248046875,428.7670593261719,0.9117920994758606,1070.891357421875,437.33990478515625,0.962134838104248 +60,1083.9779052734375,429.2411804199219,0.9596395492553711,1070.8214111328125,437.64971923828125,0.9751667976379395 +61,1083.935302734375,429.12750244140625,0.9554613828659058,1070.65234375,437.1637878417969,0.9532340168952942 +62,1083.6832275390625,428.9803161621094,0.9339918494224548,1070.7857666015625,437.18603515625,0.9278908967971802 +63,1083.799072265625,429.0201416015625,0.9301973581314087,1070.94677734375,437.1724853515625,0.9231975078582764 +64,1083.7503662109375,428.6881408691406,0.9614695310592651,1070.6744384765625,437.3698425292969,0.9669368863105774 +65,1083.42626953125,428.5180969238281,0.9690808653831482,1070.16943359375,437.4096374511719,0.9857708215713501 +66,1083.2982177734375,428.19122314453125,0.9457184076309204,1069.1724853515625,436.95391845703125,0.97080397605896 +67,1082.9014892578125,427.7301330566406,0.9370066523551941,1068.205810546875,436.4058532714844,0.9460819959640503 +68,1083.06982421875,428.16253662109375,0.8746163249015808,1067.4525146484375,436.760498046875,0.9194235801696777 +69,1083.0675048828125,428.5323486328125,0.8260170221328735,1066.9285888671875,436.8211975097656,0.911249577999115 +70,1082.9967041015625,428.2753601074219,0.8876346945762634,1066.848388671875,436.7598876953125,0.9455780982971191 +71,1083.022705078125,428.4712219238281,0.8329655528068542,1066.544677734375,436.8504333496094,0.9115133881568909 +72,1083.163818359375,428.3595886230469,0.9503312110900879,1066.4986572265625,436.50030517578125,0.9832258820533752 +73,1083.214111328125,428.49737548828125,0.8240234851837158,1066.623779296875,436.5705261230469,0.9297904968261719 +74,1082.9708251953125,428.4020690917969,0.9009565711021423,1066.775146484375,436.56231689453125,0.955457329750061 +75,1082.96044921875,428.42266845703125,0.946831226348877,1066.9158935546875,436.42669677734375,0.9772090911865234 +76,1082.8017578125,428.39678955078125,0.9530600905418396,1066.8760986328125,436.6421203613281,0.9828047752380371 +77,1082.8382568359375,428.3577575683594,0.9356794357299805,1066.6474609375,436.6070556640625,0.9743104577064514 +78,1082.9100341796875,428.3826599121094,0.9677546620368958,1066.399658203125,436.4945373535156,0.9844853281974792 +79,1082.366455078125,428.4424743652344,0.9679570198059082,1065.4901123046875,436.24700927734375,0.9752112627029419 +80,1082.2479248046875,428.6733703613281,0.945756733417511,1066.6253662109375,435.4059143066406,0.9701736569404602 +81,1081.686279296875,428.9677429199219,0.5309246182441711,1065.1737060546875,435.5830383300781,0.8790526390075684 +82,1079.7979736328125,432.3399658203125,0.6141153573989868,1064.3509521484375,435.94952392578125,0.9243452548980713 +83,1079.6416015625,432.57708740234375,0.7977835536003113,1064.1810302734375,436.16876220703125,0.9631986618041992 +84,1079.33056640625,432.78662109375,0.4770858585834503,1063.2623291015625,436.09759521484375,0.8480647802352905 +85,1079.2882080078125,432.6557922363281,0.4171438217163086,1063.3585205078125,436.2341613769531,0.8408806324005127 +86,1079.4530029296875,432.7713623046875,0.7453551292419434,1063.4581298828125,436.55303955078125,0.9633652567863464 +87,1079.415771484375,432.7316589355469,0.5025327801704407,1063.6983642578125,436.4360656738281,0.9105950593948364 +88,1078.627685546875,433.42120361328125,0.18140177428722382,1063.810791015625,436.49542236328125,0.7187298536300659 +89,1078.7265625,433.2732849121094,0.44974204897880554,1064.019775390625,436.3712158203125,0.8393087387084961 +90,1078.4478759765625,433.5773010253906,0.31026971340179443,1063.8975830078125,436.498779296875,0.8155679106712341 +91,1079.064697265625,433.4115295410156,0.4710785448551178,1064.020263671875,436.6609191894531,0.8764079213142395 +92,1078.7698974609375,433.4412841796875,0.22677910327911377,1064.072021484375,436.693359375,0.7637830972671509 +93,1078.930419921875,433.32000732421875,0.34294167160987854,1063.9609375,436.6662902832031,0.8461163640022278 +94,1078.7822265625,433.5332946777344,0.09372881799936295,1064.2398681640625,436.37164306640625,0.539252758026123 +95,1078.735595703125,433.61383056640625,0.052742138504981995,1063.9234619140625,436.3516845703125,0.3779267966747284 +96,1079.8956298828125,432.95068359375,0.7275013327598572,1065.2125244140625,437.0974426269531,0.9233513474464417 +97,1079.95654296875,432.8766174316406,0.6281338334083557,1065.382568359375,437.266357421875,0.875554621219635 +98,1079.132568359375,432.3684387207031,0.7985124588012695,1064.9190673828125,438.1741027832031,0.9553971886634827 +99,1078.604248046875,432.3497619628906,0.8932393789291382,1064.5499267578125,438.6793212890625,0.9631342887878418 +100,1078.374267578125,432.69769287109375,0.9000094532966614,1064.4512939453125,438.7754211425781,0.9652159810066223 +101,1078.1014404296875,432.8067932128906,0.8001104593276978,1064.19873046875,438.7772216796875,0.9304372072219849 +102,1078.0047607421875,432.792724609375,0.8158900737762451,1064.14501953125,438.712646484375,0.9471168518066406 +103,1077.3936767578125,432.98565673828125,0.7333263754844666,1063.427734375,438.9239807128906,0.9342913031578064 +104,1077.3377685546875,433.0158996582031,0.755055844783783,1063.4224853515625,438.9962158203125,0.9296483993530273 +105,1077.1156005859375,433.1528625488281,0.7707586288452148,1063.512939453125,438.7123718261719,0.9094710946083069 +106,1077.0579833984375,432.8633117675781,0.9406372904777527,1063.134765625,438.9044494628906,0.9701383113861084 +107,1077.2459716796875,432.8414306640625,0.928360641002655,1063.1829833984375,438.8087158203125,0.9664734601974487 +108,1077.9705810546875,432.3718566894531,0.9807279109954834,1062.874267578125,438.5185241699219,0.9881932735443115 +109,1077.65087890625,432.6192321777344,0.9575155377388,1063.2867431640625,438.41253662109375,0.9758291244506836 +110,1078.0390625,432.4831848144531,0.9635270237922668,1063.44140625,438.3819885253906,0.9761933088302612 +111,1077.917236328125,432.61163330078125,0.9689093232154846,1063.26318359375,438.41558837890625,0.9761927723884583 +112,1077.16064453125,433.2193603515625,0.7028216123580933,1063.0584716796875,438.4628601074219,0.8113042712211609 +113,1077.1075439453125,433.202880859375,0.6284626722335815,1062.8389892578125,438.41583251953125,0.788621723651886 +114,1076.4185791015625,433.7590026855469,0.11699417978525162,1060.913330078125,437.8392639160156,0.50455641746521 +115,1076.953125,433.4950866699219,0.3414519131183624,1062.8087158203125,438.101806640625,0.6907851696014404 +116,1077.1448974609375,433.47216796875,0.5256701111793518,1063.1842041015625,438.2760314941406,0.8124318718910217 +117,1077.22802734375,433.4484558105469,0.5321105718612671,1063.376953125,438.2651672363281,0.7820273637771606 +118,1076.9334716796875,433.5890808105469,0.24094879627227783,1062.9991455078125,438.18450927734375,0.547606348991394 +119,1076.7510986328125,433.3562927246094,0.8295148015022278,1062.4788818359375,438.0946350097656,0.8957556486129761 +120,1076.695068359375,433.0993347167969,0.11208385974168777,1062.1513671875,435.6999816894531,0.3032602369785309 +121,1076.3880615234375,432.7554626464844,0.3284185528755188,1062.096435546875,435.627197265625,0.4733271598815918 +122,1075.4317626953125,432.9260559082031,0.3873395323753357,1061.0264892578125,436.0191650390625,0.5448701977729797 +123,1074.744140625,433.19281005859375,0.18013258278369904,1060.0926513671875,436.0723571777344,0.41486772894859314 +124,1074.324951171875,433.4687805175781,0.33937954902648926,1059.6951904296875,436.4263610839844,0.6191980838775635 +125,1074.4542236328125,433.1567687988281,0.5513134598731995,1059.6229248046875,436.5628662109375,0.7251892685890198 +126,1074.475830078125,433.07598876953125,0.643059492111206,1059.6590576171875,436.7166442871094,0.7751457691192627 +127,1074.7171630859375,432.86279296875,0.7706202268600464,1059.714599609375,436.753662109375,0.8724433183670044 +128,1074.4039306640625,433.0693054199219,0.7076880931854248,1059.2894287109375,436.902099609375,0.850001335144043 +129,1074.3516845703125,432.9541320800781,0.6938257813453674,1059.327880859375,436.6802673339844,0.8460071086883545 +130,1074.3345947265625,432.841064453125,0.7300453186035156,1059.1416015625,436.820068359375,0.868391752243042 +131,1074.156494140625,433.1357116699219,0.5153183937072754,1059.1651611328125,436.60528564453125,0.8095243573188782 +132,1074.720458984375,433.2690124511719,0.6133818626403809,1060.357177734375,436.3788146972656,0.7976348400115967 +133,1074.5634765625,433.2723693847656,0.6925176382064819,1060.132568359375,436.5272521972656,0.8278785347938538 +134,1074.427001953125,433.4128112792969,0.7507044672966003,1059.7850341796875,436.7760314941406,0.8637506365776062 +135,1074.4735107421875,433.4562683105469,0.5905331373214722,1060.196533203125,436.4107360839844,0.7300816178321838 +136,1074.6746826171875,433.3893127441406,0.7981483340263367,1060.0631103515625,436.6023254394531,0.8675196170806885 +137,1074.681396484375,433.256103515625,0.8204959034919739,1059.808837890625,436.7223815917969,0.8871024250984192 +138,1074.6585693359375,432.7850036621094,0.876181423664093,1059.6014404296875,436.8205261230469,0.9361075162887573 +139,1074.356201171875,432.8655700683594,0.7935028076171875,1059.1246337890625,436.6204833984375,0.9300280809402466 +140,1074.2005615234375,432.649658203125,0.8108254075050354,1058.7008056640625,436.6016845703125,0.9341639876365662 +141,1073.53759765625,434.1044616699219,0.5527951717376709,1057.9952392578125,436.8528137207031,0.85150545835495 +142,1073.626953125,433.3565673828125,0.8997312784194946,1058.170166015625,437.19976806640625,0.9371758103370667 +143,1072.862060546875,434.1451416015625,0.8559530377388,1057.335205078125,437.6351623535156,0.8954988718032837 +144,1072.530029296875,434.3678283691406,0.9408847093582153,1055.0482177734375,439.6027526855469,0.9375002384185791 +145,1072.297607421875,434.5304260253906,0.9391252398490906,1055.185302734375,439.4085693359375,0.9228521585464478 +146,1072.4288330078125,434.2749938964844,0.9747936129570007,1055.123779296875,439.13311767578125,0.9625558257102966 +147,1072.678466796875,433.92926025390625,0.9853183627128601,1055.2698974609375,439.24365234375,0.9787599444389343 +148,1072.37841796875,434.147705078125,0.9516932368278503,1055.4117431640625,439.0135192871094,0.9708876609802246 +149,1072.6993408203125,433.7925720214844,0.9772096872329712,1055.205322265625,439.1983947753906,0.9826567769050598 +150,1072.3963623046875,433.8509521484375,0.9838107824325562,1054.645263671875,439.3589172363281,0.9849653244018555 +151,1072.4521484375,433.9948425292969,0.9723442792892456,1055.405517578125,439.17535400390625,0.9741311073303223 +152,1072.7886962890625,434.10833740234375,0.9584375619888306,1055.4822998046875,439.1616516113281,0.969987690448761 +153,1072.5399169921875,434.2414245605469,0.9486261010169983,1055.3753662109375,439.2115173339844,0.9624037742614746 +154,1072.658935546875,434.2398681640625,0.9471611976623535,1055.532958984375,439.18902587890625,0.962893009185791 +155,1072.5762939453125,434.62542724609375,0.8849256634712219,1057.1795654296875,438.4365234375,0.9329233765602112 +156,1072.437255859375,434.66949462890625,0.9326980113983154,1057.29443359375,438.6612243652344,0.9496625065803528 +157,1072.1448974609375,434.71630859375,0.9573397636413574,1056.9539794921875,438.7551574707031,0.9496898055076599 +158,1072.20654296875,434.79638671875,0.9354636073112488,1057.17236328125,438.62518310546875,0.9473060965538025 +159,1072.5455322265625,434.863525390625,0.9232767820358276,1057.2706298828125,438.7986145019531,0.9320208430290222 +160,1072.6556396484375,434.92083740234375,0.8659365177154541,1057.667236328125,438.5557861328125,0.9013197422027588 +161,1072.2568359375,435.2618713378906,0.8210211396217346,1057.5897216796875,438.5806579589844,0.8731111288070679 +162,1072.2640380859375,435.2799072265625,0.8882685899734497,1057.3995361328125,438.9261779785156,0.8970744013786316 +163,1073.1676025390625,434.69287109375,0.9428443908691406,1057.3822021484375,439.0528259277344,0.9592545032501221 +164,1072.8604736328125,435.2516784667969,0.8272172808647156,1057.4722900390625,438.923828125,0.8946126699447632 +165,1073.019775390625,435.3017578125,0.8425010442733765,1057.6312255859375,439.0666809082031,0.9088688492774963 +166,1072.92041015625,434.6306457519531,0.8600366711616516,1058.0447998046875,438.9393615722656,0.9093603491783142 +167,1073.103759765625,435.75689697265625,0.5482645630836487,1058.5023193359375,438.4747009277344,0.792152464389801 +168,1072.4862060546875,436.235595703125,0.2635978162288666,1057.3974609375,438.7958679199219,0.6331045031547546 +169,1072.7843017578125,436.3302001953125,0.18500308692455292,1057.7752685546875,439.0841064453125,0.612075924873352 +170,1072.891357421875,436.5340576171875,0.6240948438644409,1057.691650390625,440.43890380859375,0.9276695251464844 +171,1072.70068359375,436.763671875,0.5289265513420105,1058.024169921875,440.49676513671875,0.9114861488342285 +172,1072.96630859375,435.1829833984375,0.6343265175819397,1058.287109375,440.738525390625,0.9369947910308838 +173,1072.63427734375,437.083984375,0.5036149024963379,1058.313720703125,441.07342529296875,0.9226399660110474 +174,1072.6712646484375,437.06201171875,0.5377476811408997,1058.453125,441.4743957519531,0.9217941761016846 +175,1072.86572265625,436.8728942871094,0.710240364074707,1058.4620361328125,441.529052734375,0.9541988372802734 +176,1072.7435302734375,435.4772033691406,0.7647289037704468,1058.171142578125,441.739013671875,0.9586763381958008 +177,1072.8031005859375,435.4748229980469,0.7841647267341614,1058.38916015625,441.7301025390625,0.9618314504623413 +178,1072.949462890625,435.50323486328125,0.8273220658302307,1058.3656005859375,441.7117919921875,0.966866672039032 +179,1073.1007080078125,435.55322265625,0.8957536816596985,1058.9578857421875,441.2055969238281,0.9731217622756958 +180,1073.1900634765625,435.7715759277344,0.9100726246833801,1058.9471435546875,441.0310974121094,0.9718623757362366 +181,1073.4818115234375,435.791015625,0.9684569835662842,1058.9610595703125,441.1010437011719,0.9827259182929993 +182,1073.3582763671875,435.78302001953125,0.9577464461326599,1058.7432861328125,441.12158203125,0.982037365436554 +183,1073.4222412109375,435.5971984863281,0.9477744698524475,1058.909423828125,440.90557861328125,0.9786044955253601 +184,1073.5711669921875,435.3901062011719,0.8888384699821472,1058.8804931640625,440.9884948730469,0.9612335562705994 +185,1073.6083984375,435.3521728515625,0.8696838617324829,1058.778076171875,440.88714599609375,0.9557716846466064 +186,1073.6240234375,435.3084411621094,0.7918397188186646,1058.5635986328125,440.9589538574219,0.934929609298706 +187,1073.566650390625,435.2221374511719,0.8806102275848389,1058.62548828125,441.04864501953125,0.9551644921302795 +188,1073.559814453125,435.19952392578125,0.8372067213058472,1058.3387451171875,441.0148010253906,0.9500635862350464 +189,1073.0511474609375,435.3293151855469,0.8528505563735962,1057.9051513671875,441.0541687011719,0.9564135074615479 +190,1072.9246826171875,435.3047180175781,0.8756765127182007,1057.0306396484375,440.54644775390625,0.9564788937568665 +191,1072.9886474609375,436.3167724609375,0.9453182816505432,1056.6341552734375,440.12249755859375,0.9646474719047546 +192,1071.97705078125,436.34454345703125,0.9852578043937683,1056.119873046875,440.11199951171875,0.9776092767715454 +193,1071.8717041015625,436.44659423828125,0.991111159324646,1056.0694580078125,440.3264465332031,0.9796656370162964 +194,1071.32666015625,436.6965026855469,0.9799907207489014,1055.8006591796875,440.3663635253906,0.9634049534797668 +195,1071.6270751953125,436.6341247558594,0.9883354902267456,1055.9224853515625,440.5223388671875,0.975450873374939 +196,1071.6517333984375,436.51788330078125,0.9901286959648132,1055.868408203125,440.5575256347656,0.9763205051422119 +197,1071.669677734375,436.3940124511719,0.9921712279319763,1056.15869140625,440.4168395996094,0.97994065284729 +198,1071.7430419921875,436.19219970703125,0.9942499399185181,1056.0665283203125,440.4233093261719,0.9856227040290833 +199,1071.537353515625,436.211669921875,0.9954025149345398,1055.974853515625,440.4339294433594,0.987743079662323 +200,1071.36865234375,436.25244140625,0.995011568069458,1055.9833984375,440.4335021972656,0.9860542416572571 +201,1071.11572265625,436.1336364746094,0.9917455315589905,1055.58984375,440.5332946777344,0.9781759977340698 +202,1070.9586181640625,436.1613464355469,0.9963228106498718,1055.7764892578125,440.5997314453125,0.9871318340301514 +203,1071.5672607421875,435.8264465332031,0.9978690147399902,1055.3409423828125,440.5075378417969,0.9892020225524902 +204,1069.786376953125,437.5237121582031,0.989369809627533,1054.674560546875,440.7281188964844,0.9510596990585327 +205,1070.2386474609375,437.0295715332031,0.9976224899291992,1054.088134765625,441.0099182128906,0.977286159992218 +206,1069.5950927734375,438.0084228515625,0.9940115213394165,1052.0689697265625,442.124267578125,0.9696698784828186 +207,1069.0194091796875,438.29962158203125,0.9930779933929443,1051.005615234375,443.2893371582031,0.9651072025299072 +208,1068.7379150390625,438.4140319824219,0.9921839833259583,1050.7972412109375,443.5070495605469,0.9553387761116028 +209,1068.320068359375,438.535888671875,0.9937719702720642,1049.241943359375,443.7483825683594,0.9784684777259827 +210,1068.263916015625,438.7225036621094,0.9915948510169983,1049.2432861328125,443.7724914550781,0.9701945781707764 +211,1068.522705078125,438.3008728027344,0.9966000914573669,1049.257080078125,443.6600646972656,0.9823707342147827 +212,1067.967529296875,438.6245422363281,0.9935880303382874,1048.9791259765625,443.74945068359375,0.9836665987968445 +213,1068.0570068359375,438.5876159667969,0.9935990571975708,1049.107177734375,443.81268310546875,0.98359215259552 +214,1067.947265625,438.383056640625,0.9959325790405273,1049.183349609375,443.8384094238281,0.9870057106018066 +215,1067.911865234375,438.3943176269531,0.9956589937210083,1049.2213134765625,443.8768005371094,0.9840953350067139 +216,1067.5809326171875,437.7594909667969,0.9983487725257874,1049.45947265625,443.6322021484375,0.9858695864677429 +217,1067.747802734375,437.9650573730469,0.9978637099266052,1049.3271484375,443.6864013671875,0.9853335618972778 +218,1067.961669921875,437.7380065917969,0.9985494017601013,1049.4725341796875,443.6160583496094,0.9862743020057678 +219,1067.9364013671875,437.7599182128906,0.9986483454704285,1049.525390625,443.562255859375,0.986368715763092 +220,1067.99072265625,437.7190856933594,0.9988797307014465,1049.6737060546875,443.42645263671875,0.9853681921958923 +221,1067.9488525390625,437.806640625,0.9986836910247803,1049.62353515625,443.2593688964844,0.981890082359314 +222,1068.004150390625,437.7314758300781,0.9990100860595703,1049.542236328125,443.3399658203125,0.9829039573669434 +223,1067.51708984375,437.4466247558594,0.9992247819900513,1048.556884765625,443.9110107421875,0.9939056038856506 +224,1066.883056640625,437.0813903808594,0.9994602203369141,1047.9493408203125,443.89013671875,0.9960349202156067 +225,1066.3427734375,436.7572937011719,0.9994296431541443,1047.660400390625,443.791259765625,0.9967495203018188 +226,1066.015625,436.7140197753906,0.9994308948516846,1047.3336181640625,443.66064453125,0.9972206354141235 +227,1065.8038330078125,436.64593505859375,0.9994187951087952,1047.0633544921875,443.8892822265625,0.997723400592804 +228,1065.8426513671875,436.9771728515625,0.9987205862998962,1047.3670654296875,443.86578369140625,0.9964364171028137 +229,1065.7137451171875,437.08392333984375,0.9988171458244324,1047.42138671875,443.7090759277344,0.9963135719299316 +230,1065.7216796875,437.1669616699219,0.9988884329795837,1047.386962890625,443.77923583984375,0.9964677095413208 +231,1065.7972412109375,437.27972412109375,0.9987179636955261,1047.2779541015625,443.8148193359375,0.996477484703064 +232,1065.7451171875,437.3053283691406,0.9987898468971252,1047.4478759765625,443.7869567871094,0.9964357614517212 +233,1065.707275390625,437.0863037109375,0.9990109205245972,1047.4210205078125,443.8328857421875,0.9968202114105225 +234,1065.2027587890625,437.5221862792969,0.998485803604126,1047.2313232421875,444.0031433105469,0.9967232942581177 +235,1065.5362548828125,437.2608947753906,0.998847246170044,1047.3885498046875,444.060546875,0.9967654347419739 +236,1065.5233154296875,437.0998840332031,0.9989389181137085,1047.2855224609375,444.1070251464844,0.9974786639213562 +237,1065.725830078125,437.2508850097656,0.999056875705719,1047.237060546875,444.2228698730469,0.997612714767456 +238,1065.93505859375,437.2138366699219,0.9993448853492737,1047.168212890625,444.3762512207031,0.9974484443664551 +239,1065.993896484375,437.43756103515625,0.9991145133972168,1047.4708251953125,444.17340087890625,0.9965411424636841 +240,1065.429931640625,437.1496887207031,0.9991224408149719,1047.322509765625,444.3346252441406,0.9972785115242004 +241,1065.2821044921875,437.2597961425781,0.9990407824516296,1047.34716796875,444.2365417480469,0.9973730444908142 +242,1065.457275390625,437.1315002441406,0.9992035627365112,1047.62744140625,444.3633728027344,0.9974361658096313 +243,1064.8529052734375,437.2779235839844,0.999183714389801,1047.544677734375,444.76708984375,0.9979655742645264 +244,1064.80126953125,437.6929626464844,0.9987263679504395,1047.7713623046875,445.30792236328125,0.996816098690033 +245,1063.9461669921875,438.2669982910156,0.9985443353652954,1047.3343505859375,445.67578125,0.9965951442718506 +246,1062.867431640625,438.8036193847656,0.9982349276542664,1047.11865234375,445.95318603515625,0.9951809644699097 +247,1062.2567138671875,439.0432434082031,0.9987488985061646,1045.6033935546875,446.0810241699219,0.9977606534957886 +248,1060.948486328125,439.60614013671875,0.998497724533081,1044.4033203125,446.503173828125,0.9984492659568787 +249,1060.4951171875,440.0827941894531,0.9985966682434082,1043.7618408203125,446.9569396972656,0.9988871812820435 +250,1060.0999755859375,440.11041259765625,0.9983779191970825,1043.828125,447.1282043457031,0.998765766620636 +251,1060.0726318359375,440.249755859375,0.9984922409057617,1043.84814453125,446.957275390625,0.9988620281219482 +252,1061.26904296875,440.1809997558594,0.997979998588562,1043.646240234375,447.49346923828125,0.9985648393630981 +253,1061.1033935546875,440.38330078125,0.9979327321052551,1043.67431640625,447.46954345703125,0.9984553456306458 +254,1061.0516357421875,440.4934997558594,0.9978928565979004,1043.7928466796875,447.2674560546875,0.9984611868858337 +255,1061.1375732421875,440.4985656738281,0.9979752898216248,1043.6903076171875,447.2377014160156,0.9985637068748474 +256,1061.292236328125,440.4411315917969,0.9978844523429871,1043.7674560546875,447.3104248046875,0.9987589120864868 +257,1061.1875,440.2809143066406,0.997965931892395,1043.8126220703125,447.34979248046875,0.9989684224128723 +258,1061.3216552734375,440.386962890625,0.9977768659591675,1044.083740234375,447.1794738769531,0.9988096952438354 +259,1061.134765625,440.5833740234375,0.9977254271507263,1044.3271484375,447.11505126953125,0.9983023405075073 +260,1061.10595703125,440.8722229003906,0.9978705048561096,1044.36767578125,447.0207214355469,0.998214840888977 +261,1061.333740234375,440.896484375,0.9979910850524902,1043.9349365234375,447.06036376953125,0.9978401064872742 +262,1060.5211181640625,440.7956848144531,0.9986010193824768,1043.0313720703125,447.4967956542969,0.9983313083648682 +263,1059.4578857421875,440.9154968261719,0.9989270567893982,1042.605712890625,447.22991943359375,0.9987252354621887 +264,1058.9866943359375,440.8811340332031,0.9987343549728394,1041.9068603515625,447.11590576171875,0.9969209432601929 +265,1057.5870361328125,440.6916198730469,0.9985446333885193,1040.458740234375,447.7698059082031,0.9964976906776428 +266,1056.5306396484375,440.4263000488281,0.997844934463501,1036.8414306640625,448.8017272949219,0.9974159002304077 +267,1056.43701171875,440.30914306640625,0.9982157945632935,1036.632080078125,448.96954345703125,0.9980717301368713 +268,1056.13720703125,440.1583251953125,0.9979361891746521,1036.4146728515625,449.02886962890625,0.9985331892967224 +269,1056.1031494140625,439.88287353515625,0.9973854422569275,1036.59716796875,449.0863037109375,0.998266875743866 +270,1056.405517578125,440.12188720703125,0.9976169466972351,1036.6722412109375,449.3280334472656,0.9984327554702759 +271,1056.230712890625,440.3331604003906,0.9975136518478394,1036.481201171875,449.61334228515625,0.9983469843864441 +272,1056.1727294921875,440.3529968261719,0.9978556632995605,1036.941162109375,449.5373229980469,0.9981183409690857 +273,1056.4627685546875,440.5412292480469,0.9975529313087463,1037.516357421875,449.4273376464844,0.997610330581665 +274,1056.3951416015625,440.5166931152344,0.9974880218505859,1037.607666015625,449.619140625,0.9981486201286316 +275,1056.6002197265625,440.6898193359375,0.9969865083694458,1037.9368896484375,449.61749267578125,0.9976030588150024 +276,1056.484130859375,440.82861328125,0.9964789152145386,1036.9716796875,449.8579406738281,0.9977417588233948 +277,1056.7354736328125,440.92095947265625,0.996059238910675,1037.2777099609375,449.81622314453125,0.9973063468933105 +278,1056.965087890625,440.996337890625,0.9967512488365173,1037.634765625,449.7687072753906,0.9974714517593384 +279,1056.7864990234375,440.8848571777344,0.9968749284744263,1037.1285400390625,449.7028503417969,0.997072696685791 +280,1056.76171875,440.8635559082031,0.9965411424636841,1037.0787353515625,449.78656005859375,0.9971833229064941 +281,1056.725341796875,440.8337707519531,0.9965952634811401,1037.176513671875,449.9521179199219,0.9974636435508728 +282,1056.743408203125,440.844482421875,0.9963259696960449,1036.9508056640625,449.9564514160156,0.9966363310813904 +283,1056.0576171875,440.93182373046875,0.995271623134613,1036.52294921875,450.45562744140625,0.9962644577026367 +284,1055.0751953125,441.46807861328125,0.9942678809165955,1036.066650390625,450.91864013671875,0.9963794946670532 +285,1053.293701171875,441.9412841796875,0.9945757389068604,1034.9036865234375,451.3976135253906,0.997371256351471 +286,1051.8702392578125,442.17572021484375,0.9956767559051514,1033.714599609375,451.8304138183594,0.9963279366493225 +287,1050.576904296875,442.3549499511719,0.997003972530365,1033.1829833984375,452.19500732421875,0.9981171488761902 +288,1049.40185546875,442.6982116699219,0.9968913197517395,1032.09423828125,452.8290710449219,0.9992740154266357 +289,1049.2069091796875,442.6703796386719,0.9969241619110107,1031.6617431640625,452.83551025390625,0.999322772026062 +290,1049.319091796875,442.5928649902344,0.9968432188034058,1032.1173095703125,452.819580078125,0.9991499781608582 +291,1049.4034423828125,442.5613098144531,0.9968750476837158,1032.4022216796875,452.62359619140625,0.9989998936653137 +292,1049.630859375,442.6147766113281,0.9965310096740723,1033.0096435546875,452.6926574707031,0.9984905123710632 +293,1050.208251953125,442.8040771484375,0.9963245987892151,1033.0975341796875,452.2285461425781,0.9986482858657837 +294,1050.1502685546875,442.8511047363281,0.996430516242981,1033.022216796875,452.5115051269531,0.9984312057495117 +295,1050.0311279296875,442.87176513671875,0.9967085719108582,1032.781982421875,452.6494445800781,0.998710036277771 +296,1050.0953369140625,442.79718017578125,0.9968047142028809,1032.5989990234375,452.6276550292969,0.9988426566123962 +297,1050.0750732421875,442.8143615722656,0.9971248507499695,1032.474853515625,452.72412109375,0.9988988637924194 +298,1049.14794921875,442.9758605957031,0.9970677495002747,1032.0333251953125,452.97259521484375,0.9990422129631042 +299,1048.885009765625,444.61993408203125,0.9976626634597778,1031.092529296875,453.24285888671875,0.999010443687439 +300,1047.193603515625,445.2694396972656,0.9990023970603943,1030.024658203125,454.0552673339844,0.999224841594696 +301,1046.622802734375,445.59423828125,0.9992678761482239,1029.4864501953125,454.5337829589844,0.9992111325263977 +302,1046.0689697265625,446.0730285644531,0.999298632144928,1028.9718017578125,454.44781494140625,0.9991249442100525 +303,1045.8218994140625,446.0372619628906,0.9993696808815002,1028.614990234375,454.8580322265625,0.9987583160400391 +304,1043.577880859375,446.81768798828125,0.9993257522583008,1027.742919921875,455.4090576171875,0.9979092478752136 +305,1043.1146240234375,446.9281005859375,0.9993159770965576,1027.378662109375,455.5008850097656,0.9974457621574402 +306,1042.4119873046875,447.2179870605469,0.9990112781524658,1027.613037109375,455.25347900390625,0.9965218305587769 +307,1041.7625732421875,446.97174072265625,0.99884033203125,1026.5643310546875,455.6405334472656,0.996285617351532 +308,1041.26416015625,447.25750732421875,0.9987322688102722,1026.501708984375,456.24957275390625,0.996538519859314 +309,1041.6199951171875,447.3948974609375,0.9991087913513184,1026.6951904296875,456.30712890625,0.9968991875648499 +310,1041.9376220703125,447.6310729980469,0.9992873072624207,1026.9195556640625,456.62884521484375,0.9965729117393494 +311,1041.73046875,447.65301513671875,0.9994328022003174,1026.2447509765625,457.4833984375,0.9979956746101379 +312,1042.2744140625,447.84930419921875,0.9989112019538879,1026.8170166015625,457.048828125,0.9960390329360962 +313,1042.5147705078125,448.0830993652344,0.9990785121917725,1027.1544189453125,457.0159912109375,0.9957617521286011 +314,1042.3416748046875,448.1173095703125,0.998909592628479,1027.3465576171875,457.1172180175781,0.9957647919654846 +315,1042.765625,448.2643127441406,0.9989458918571472,1027.2454833984375,457.5498046875,0.9961963295936584 +316,1043.287109375,448.5511779785156,0.9989640116691589,1027.7545166015625,457.26055908203125,0.9949893355369568 +317,1043.3787841796875,448.6860656738281,0.9988337755203247,1027.8399658203125,457.2940368652344,0.9945365786552429 +318,1043.1424560546875,448.4486083984375,0.9991084933280945,1027.884765625,457.43841552734375,0.996574878692627 +319,1043.1220703125,448.3478088378906,0.9994303584098816,1027.83642578125,457.2984924316406,0.9973836541175842 +320,1043.13671875,448.59771728515625,0.9995529055595398,1026.937744140625,457.07025146484375,0.9973584413528442 +321,1042.9359130859375,448.5929260253906,0.9995837807655334,1026.5333251953125,456.6288146972656,0.9972668290138245 +322,1042.0460205078125,448.45977783203125,0.9995678067207336,1025.724853515625,456.657470703125,0.9976556301116943 +323,1041.3056640625,448.322021484375,0.9995861053466797,1025.6715087890625,456.78009033203125,0.9976701140403748 +324,1041.0701904296875,448.1297302246094,0.9987232685089111,1026.0467529296875,456.5842590332031,0.9962779879570007 +325,1040.85986328125,448.1361999511719,0.9988632798194885,1026.035400390625,456.734130859375,0.9966098070144653 +326,1040.84423828125,448.2870788574219,0.9986109733581543,1025.9619140625,456.9065246582031,0.9958696365356445 +327,1040.76220703125,448.1827087402344,0.998681366443634,1026.007568359375,456.8722839355469,0.9962899684906006 +328,1041.4356689453125,448.27789306640625,0.9989928603172302,1026.0787353515625,456.81463623046875,0.9962838292121887 +329,1041.1668701171875,448.05682373046875,0.9990838766098022,1026.0518798828125,457.1696472167969,0.9969050288200378 +330,1041.03857421875,448.32012939453125,0.9990244507789612,1026.05126953125,457.1793212890625,0.9963970184326172 +331,1041.154052734375,448.4303283691406,0.9987737536430359,1026.275634765625,456.80865478515625,0.9954261779785156 +332,1041.3809814453125,448.357421875,0.9990864396095276,1026.24609375,456.6228332519531,0.9957282543182373 +333,1041.3685302734375,448.3382263183594,0.9992713332176208,1026.284912109375,456.7843322753906,0.996742308139801 +334,1041.4373779296875,448.27435302734375,0.9993903636932373,1026.256103515625,456.7559509277344,0.9969547390937805 +335,1041.4310302734375,448.255615234375,0.9993759393692017,1026.2694091796875,456.66796875,0.9970207810401917 +336,1041.0335693359375,448.5448303222656,0.999290406703949,1025.9747314453125,456.7838134765625,0.9967383742332458 +337,1041.094482421875,448.33746337890625,0.9994651675224304,1025.8681640625,457.005859375,0.9974952936172485 +338,1041.2275390625,448.2320251464844,0.9994477033615112,1025.951171875,457.0233459472656,0.997535765171051 +339,1041.0299072265625,448.31903076171875,0.9994599223136902,1025.749755859375,457.05047607421875,0.997552216053009 +340,1040.8988037109375,448.2184753417969,0.9993248581886292,1026.159423828125,456.8147888183594,0.9972884058952332 +341,1040.9176025390625,448.16595458984375,0.9994403719902039,1026.0791015625,456.8500061035156,0.9976876378059387 +342,1041.159912109375,448.14361572265625,0.9994410276412964,1026.19189453125,456.8752746582031,0.9976696968078613 +343,1041.14453125,448.00115966796875,0.9994322061538696,1026.2130126953125,456.75860595703125,0.9977408647537231 +344,1041.2413330078125,448.2239685058594,0.9993270039558411,1026.1025390625,456.98162841796875,0.9973210692405701 +345,1041.581787109375,448.35205078125,0.9993886351585388,1026.1424560546875,456.92730712890625,0.9976089000701904 +346,1041.7913818359375,448.2232360839844,0.9994828104972839,1026.36865234375,457.02935791015625,0.9977429509162903 +347,1041.6453857421875,448.3812255859375,0.9994908571243286,1026.393310546875,457.22210693359375,0.997736930847168 +348,1041.6617431640625,448.2315673828125,0.9992727041244507,1026.395751953125,457.2399597167969,0.9974229335784912 +349,1041.57177734375,448.3868713378906,0.9992353916168213,1026.2652587890625,457.2645568847656,0.9972637295722961 +350,1041.5672607421875,448.2496032714844,0.9993288516998291,1026.2098388671875,457.29058837890625,0.9975075125694275 +351,1041.5950927734375,448.2824401855469,0.9993001818656921,1026.7615966796875,456.91375732421875,0.9973549246788025 +352,1041.7677001953125,448.2696228027344,0.9992325901985168,1027.1715087890625,456.85589599609375,0.9970163702964783 +353,1041.0621337890625,448.2738342285156,0.9990575313568115,1026.8038330078125,457.5594787597656,0.9974454045295715 +354,1040.728759765625,448.5091857910156,0.9989893436431885,1026.9124755859375,458.02703857421875,0.9975866675376892 +355,1040.146240234375,448.1984558105469,0.9988487958908081,1026.6412353515625,458.58349609375,0.9981465339660645 +356,1040.2569580078125,448.390380859375,0.9990766644477844,1026.3114013671875,458.9599304199219,0.9981091022491455 +357,1040.3135986328125,448.2760314941406,0.9992707371711731,1026.335205078125,458.976806640625,0.9982982873916626 +358,1040.114990234375,448.1885070800781,0.9991886019706726,1026.3427734375,459.0848693847656,0.9983519911766052 +359,1040.2342529296875,448.1377868652344,0.9993399381637573,1026.41748046875,459.0513000488281,0.9985946416854858 +360,1039.7911376953125,448.40716552734375,0.9995093941688538,1025.8643798828125,459.8179931640625,0.9988722801208496 +361,1039.9600830078125,448.5002136230469,0.9994990825653076,1026.213623046875,459.8285827636719,0.9986512064933777 +362,1040.1943359375,448.2406311035156,0.9994563460350037,1026.361572265625,459.3962097167969,0.998730480670929 +363,1040.2403564453125,448.268798828125,0.9995444416999817,1026.405029296875,459.6507873535156,0.9987761974334717 +364,1040.2802734375,448.2979431152344,0.9994412660598755,1026.6104736328125,459.30194091796875,0.9987350106239319 +365,1040.0955810546875,448.4454040527344,0.9994849562644958,1026.31884765625,459.6036376953125,0.9987269043922424 +366,1040.199462890625,448.27398681640625,0.9994403719902039,1026.8970947265625,459.29522705078125,0.9986088871955872 +367,1040.1717529296875,448.5585632324219,0.9993380308151245,1026.75341796875,459.2163391113281,0.998508095741272 +368,1040.165771484375,448.45294189453125,0.9992904663085938,1026.618408203125,459.220703125,0.9985532164573669 +369,1040.2108154296875,448.27435302734375,0.9993460178375244,1026.7315673828125,459.27813720703125,0.9986162781715393 +370,1040.1522216796875,448.3428955078125,0.9992929697036743,1026.6866455078125,459.49957275390625,0.9985570907592773 +371,1039.572021484375,448.60076904296875,0.999158501625061,1026.222412109375,459.93096923828125,0.9985671639442444 +372,1040.0399169921875,448.4940185546875,0.9994053244590759,1026.0556640625,459.3517150878906,0.9987501502037048 +373,1039.627197265625,449.03057861328125,0.9995782375335693,1025.2904052734375,459.726806640625,0.9986513257026672 +374,1039.4400634765625,450.089111328125,0.9994893670082092,1025.2611083984375,459.6595153808594,0.998232364654541 +375,1039.1728515625,451.19964599609375,0.9993353486061096,1024.76220703125,459.8981628417969,0.9976986050605774 +376,1038.2501220703125,451.11175537109375,0.9995220899581909,1023.8882446289062,460.4320373535156,0.9964922070503235 +377,1037.4046630859375,451.5487060546875,0.9994001388549805,1023.4279174804688,460.3023376464844,0.993783175945282 +378,1037.0111083984375,452.16241455078125,0.9993270635604858,1023.2310180664062,460.4655456542969,0.992546558380127 +379,1037.2406005859375,451.90130615234375,0.9994343519210815,1023.5662231445312,460.8635559082031,0.99392169713974 +380,1037.38427734375,451.840087890625,0.9994710087776184,1023.9205932617188,460.8094482421875,0.9949725270271301 +381,1037.3927001953125,452.1026916503906,0.9993804097175598,1023.8857421875,460.9557189941406,0.994229793548584 +382,1037.489990234375,452.59600830078125,0.9991955161094666,1023.81689453125,461.21759033203125,0.993089497089386 +383,1037.67138671875,452.5010681152344,0.999464213848114,1023.4075317382812,461.63018798828125,0.9943205714225769 +384,1038.0609130859375,452.4356384277344,0.9996047019958496,1023.307861328125,461.6051330566406,0.9955042600631714 +385,1037.8521728515625,452.6815490722656,0.9995176196098328,1023.2506103515625,461.5780029296875,0.9945822358131409 +386,1038.098876953125,452.7662353515625,0.999411940574646,1023.5499877929688,461.53448486328125,0.9946193099021912 +387,1037.9498291015625,452.8283996582031,0.9994338750839233,1023.4603271484375,461.57379150390625,0.9945396780967712 +388,1038.0513916015625,452.9285583496094,0.9993790984153748,1023.6302490234375,461.6700134277344,0.9948086738586426 +389,1037.72705078125,453.01953125,0.9992209076881409,1023.576171875,461.6701965332031,0.99323970079422 +390,1036.812255859375,453.25982666015625,0.9993571043014526,1020.0589599609375,463.2931823730469,0.9932034015655518 +391,1035.6165771484375,453.5600280761719,0.9992467761039734,1018.7774658203125,463.97833251953125,0.9929729104042053 +392,1034.6131591796875,453.62890625,0.9993048906326294,1017.2326049804688,464.3649597167969,0.9931097030639648 +393,1033.79443359375,454.16937255859375,0.9988220930099487,1017.5117797851562,465.2507629394531,0.9954363703727722 +394,1033.2589111328125,454.0780334472656,0.9989380240440369,1017.0223388671875,465.1753234863281,0.9971460103988647 +395,1032.8634033203125,454.2696533203125,0.9985153675079346,1016.6279907226562,464.96234130859375,0.9970409274101257 +396,1033.38916015625,453.8502502441406,0.9988610744476318,1016.8549194335938,464.9535217285156,0.9968035221099854 +397,1033.547607421875,454.13690185546875,0.9987698197364807,1017.221435546875,465.3338928222656,0.9966338872909546 +398,1033.7666015625,454.6350402832031,0.9985824823379517,1017.1697998046875,466.0791320800781,0.9963843822479248 +399,1033.789794921875,454.662353515625,0.9983146786689758,1017.7071533203125,466.3345642089844,0.9933693408966064 +400,1033.8270263671875,455.240234375,0.9975647926330566,1017.2359008789062,467.12213134765625,0.9915137887001038 +401,1034.1739501953125,454.83642578125,0.9984854459762573,1017.6454467773438,467.1504211425781,0.993084728717804 +402,1034.4381103515625,455.207275390625,0.9982635378837585,1017.1638793945312,466.30975341796875,0.9925132393836975 +403,1034.4437255859375,456.15179443359375,0.997647225856781,1017.4910888671875,467.5827941894531,0.9932488799095154 +404,1033.5185546875,457.1196594238281,0.9948614239692688,1017.0285034179688,468.6846923828125,0.989630401134491 +405,1033.3367919921875,458.24700927734375,0.9922068119049072,1016.0624389648438,470.082275390625,0.9921078681945801 +406,1033.3492431640625,457.58477783203125,0.9955739974975586,1015.1578979492188,470.5567321777344,0.9974648356437683 +407,1032.64306640625,458.8887023925781,0.9944265484809875,1014.5868530273438,471.0777587890625,0.9949941635131836 +408,1030.86474609375,460.7872314453125,0.9809291958808899,1014.3278198242188,471.4649963378906,0.9833263158798218 +409,1029.0308837890625,461.3936462402344,0.9515947103500366,1012.6331787109375,471.9315490722656,0.9581848978996277 +410,1027.93017578125,461.69091796875,0.8421710133552551,1012.0540771484375,472.1224365234375,0.9258805513381958 +411,1027.04345703125,462.2083740234375,0.9121211767196655,1011.8106689453125,472.8726806640625,0.9789226651191711 +412,1026.927978515625,462.3433837890625,0.9687780141830444,1011.8223876953125,473.2991027832031,0.9913175106048584 +413,1027.3848876953125,462.31658935546875,0.981340229511261,1012.1867065429688,473.8905029296875,0.9917936325073242 +414,1027.474853515625,462.7328186035156,0.9825263023376465,1012.0203857421875,474.02435302734375,0.9945076704025269 +415,1027.4366455078125,462.7164306640625,0.9879145622253418,1012.087646484375,474.1363525390625,0.995887041091919 +416,1027.5865478515625,462.84600830078125,0.9835586547851562,1012.5370483398438,474.1735534667969,0.9932869672775269 +417,1026.189208984375,462.2707214355469,0.9801481366157532,1012.471923828125,474.5376281738281,0.9913946986198425 +418,1026.19189453125,462.4075927734375,0.9854791164398193,1012.4761352539062,474.5587463378906,0.9941402673721313 +419,1025.2880859375,462.9549865722656,0.9830173850059509,1011.5062255859375,474.44720458984375,0.9959763884544373 +420,1025.1112060546875,462.8746643066406,0.9578647017478943,1010.719482421875,473.9969177246094,0.9907957911491394 +421,1024.7733154296875,462.7493896484375,0.9657394289970398,1009.61669921875,473.7967834472656,0.9905169010162354 +422,1023.4796752929688,464.2251281738281,0.9619176387786865,1009.3291625976562,473.7967834472656,0.989332377910614 +423,1022.6716918945312,464.2954406738281,0.9560402035713196,1009.18212890625,474.2263488769531,0.986764132976532 +424,1021.4586181640625,465.4794921875,0.9511764645576477,1008.8892822265625,476.293212890625,0.9836390018463135 +425,1021.1973876953125,466.671875,0.9756154417991638,1008.7008056640625,477.4808654785156,0.988714337348938 +426,1021.9041748046875,466.9067687988281,0.9878027439117432,1009.0845947265625,477.11236572265625,0.9937281012535095 +427,1022.0534057617188,466.8846130371094,0.996667206287384,1009.0399169921875,477.03424072265625,0.9973407983779907 +428,1022.24609375,467.0699157714844,0.9969342947006226,1008.9778442382812,477.36553955078125,0.9970802068710327 +429,1022.3143920898438,467.3451843261719,0.9920291900634766,1008.6019287109375,477.2290954589844,0.9935053586959839 +430,1022.5105590820312,467.1412658691406,0.9960373640060425,1009.0838012695312,477.0915222167969,0.9970943927764893 +431,1022.638671875,467.1418762207031,0.9955012798309326,1009.1279296875,476.7053527832031,0.9966737031936646 +432,1023.0196533203125,467.2861328125,0.9968595504760742,1009.1862182617188,477.23651123046875,0.9969485998153687 +433,1022.92431640625,467.5788269042969,0.9951086640357971,1009.0637817382812,477.4327087402344,0.9956361055374146 +434,1022.7511596679688,467.5444641113281,0.9969643950462341,1008.8692626953125,477.6941833496094,0.9966312646865845 +435,1023.1057739257812,467.15740966796875,0.9980384707450867,1008.6900024414062,478.00634765625,0.997782826423645 +436,1023.205078125,466.9435729980469,0.9985243082046509,1008.7098388671875,477.81396484375,0.9980431199073792 +437,1023.1888427734375,467.16156005859375,0.9986902475357056,1008.5946655273438,477.8855895996094,0.9982044100761414 +438,1022.9462890625,467.375732421875,0.9985498785972595,1008.5714111328125,478.1025085449219,0.9977410435676575 +439,1022.0892944335938,468.300048828125,0.9976517558097839,1008.4847412109375,478.26373291015625,0.9958091378211975 +440,1021.1614379882812,468.5869140625,0.9983652234077454,1008.3301391601562,478.47674560546875,0.9950529932975769 +441,1020.4425048828125,468.9473571777344,0.9972628951072693,1008.4732055664062,478.61309814453125,0.9910884499549866 +442,1020.0094604492188,469.4792175292969,0.9895073771476746,1008.0809936523438,479.34454345703125,0.9693044424057007 +443,1020.31494140625,469.7354431152344,0.9788202047348022,1008.2914428710938,479.30914306640625,0.9546483755111694 +444,1020.4046630859375,468.9327392578125,0.9966984987258911,1008.5040893554688,479.0036926269531,0.9887517094612122 +445,1020.4756469726562,469.15478515625,0.9950602054595947,1008.360107421875,479.3300476074219,0.9858149886131287 +446,1020.5234375,469.0310363769531,0.9969481229782104,1008.383544921875,479.1167297363281,0.9913725852966309 +447,1020.159912109375,469.10540771484375,0.9958575963973999,1008.6734008789062,478.7752380371094,0.9877063632011414 +448,1020.5694580078125,469.4552001953125,0.9847187399864197,1009.3300170898438,478.365234375,0.9736674427986145 +449,1021.2223510742188,468.9924011230469,0.9889594316482544,1009.9857177734375,477.74249267578125,0.9833677411079407 +450,1021.6790771484375,469.693603515625,0.980239987373352,1010.37548828125,478.0816345214844,0.9710801243782043 +451,1022.171875,469.7185974121094,0.9879052042961121,1010.571044921875,478.4853210449219,0.9874370098114014 +452,1021.7505493164062,470.3209533691406,0.9860448241233826,1009.8848266601562,479.74090576171875,0.9814765453338623 +453,1021.1426391601562,471.0547180175781,0.9151220321655273,1008.7394409179688,480.5246887207031,0.8755166530609131 +454,1020.5505981445312,471.21514892578125,0.695620596408844,1006.5623779296875,479.4406433105469,0.7383437752723694 +455,1019.8409423828125,471.387451171875,0.5403197407722473,1006.31298828125,479.6741943359375,0.6059437394142151 +456,1019.4173583984375,471.92974853515625,0.4359395205974579,1005.5345458984375,479.5315856933594,0.4171851873397827 +457,1018.548828125,472.75848388671875,0.21735088527202606,1004.86181640625,480.9972229003906,0.5324164628982544 +458,1016.7003173828125,473.0223693847656,0.026573050767183304,1004.9217529296875,481.4745788574219,0.18943281471729279 +459,1016.245361328125,473.5311584472656,0.016057835891842842,1004.8609008789062,481.3228759765625,0.059315670281648636 +460,1016.4352416992188,473.8891906738281,0.006723141763359308,1004.932861328125,481.4289855957031,0.0258330050855875 +461,1018.587646484375,473.9525451660156,0.021814629435539246,1005.2794799804688,481.64764404296875,0.08380220830440521 +462,1018.7980346679688,474.21246337890625,0.035681482404470444,1005.660400390625,481.484130859375,0.11687259376049042 +463,1018.752685546875,474.294189453125,0.03228868916630745,1005.8639526367188,481.5968322753906,0.09614188224077225 +464,1018.888427734375,474.53900146484375,0.026942886412143707,1006.0798950195312,481.814208984375,0.10360640287399292 +465,1018.8847045898438,474.52337646484375,0.028737016022205353,1005.9607543945312,481.846923828125,0.10067012906074524 +466,1019.4934692382812,474.5721435546875,0.04805116355419159,1006.1302490234375,482.11767578125,0.1662377119064331 +467,1019.116455078125,474.4126281738281,0.15247054398059845,1006.6505737304688,482.5028991699219,0.4473282992839813 +468,1019.2587890625,475.2297058105469,0.015574110671877861,1006.5083618164062,483.3416442871094,0.07419323921203613 +469,1019.3373413085938,475.2156677246094,0.018782638013362885,1006.822509765625,483.45538330078125,0.1276446133852005 +470,1019.2432861328125,475.0227966308594,0.018491173163056374,1007.2061157226562,483.000732421875,0.10442431271076202 +471,1019.466796875,475.2318115234375,0.0045727938413619995,1006.7617797851562,482.705322265625,0.04515775293111801 +472,1018.8692626953125,474.5757751464844,0.019421175122261047,1007.4259643554688,482.41448974609375,0.11083433777093887 +473,1017.3220825195312,475.3577575683594,0.20336267352104187,1007.2709350585938,482.9114074707031,0.38636982440948486 +474,1016.669921875,476.05767822265625,0.31253311038017273,1006.9100341796875,483.6143493652344,0.32707053422927856 +475,1017.03271484375,475.1400146484375,0.6095165610313416,1007.551025390625,483.3195495605469,0.5330544114112854 +476,1017.5205078125,475.36822509765625,0.441885769367218,1008.2821044921875,483.0921630859375,0.43880635499954224 +477,1018.0951538085938,475.1122741699219,0.3907963037490845,1008.7330932617188,482.7323303222656,0.3228883445262909 +478,1019.0498657226562,475.5190124511719,0.338590532541275,1009.839599609375,482.8023986816406,0.3529084622859955 +479,1019.8643798828125,476.0928649902344,0.27215376496315,1010.270751953125,483.3368835449219,0.36260443925857544 +480,1021.0101318359375,476.4093017578125,0.7576985955238342,1011.0013427734375,484.0826416015625,0.865774393081665 +481,1021.3994140625,476.419189453125,0.7548549771308899,1011.7535400390625,484.0971984863281,0.8721281290054321 +482,1021.46875,476.77923583984375,0.8357161283493042,1012.1384887695312,484.3830871582031,0.9082403779029846 +483,1021.9251708984375,476.76483154296875,0.7924416065216064,1012.29052734375,484.595703125,0.9126889109611511 +484,1022.139892578125,476.37237548828125,0.8782457709312439,1012.4276733398438,484.9134521484375,0.9476713538169861 +485,1022.4259643554688,476.462158203125,0.8368207216262817,1012.8406982421875,484.4704284667969,0.9492977857589722 +486,1022.441650390625,476.6131591796875,0.7946293950080872,1012.7950439453125,484.6861572265625,0.936005175113678 +487,1022.4874877929688,476.7312927246094,0.8021368384361267,1012.9478759765625,484.6138000488281,0.932555615901947 +488,1022.5040283203125,476.73358154296875,0.8488382697105408,1013.1683349609375,484.8232727050781,0.9370537996292114 +489,1022.8803100585938,476.6575927734375,0.8353338837623596,1012.9964599609375,484.2922668457031,0.9478020668029785 +490,1022.8714599609375,476.4927978515625,0.87599116563797,1012.9181518554688,484.0564270019531,0.9650264978408813 +491,1022.5684204101562,476.05828857421875,0.8612785935401917,1012.55615234375,483.8951416015625,0.9610558748245239 +492,1022.242431640625,476.8448791503906,0.654114842414856,1012.41259765625,483.5867004394531,0.841708242893219 +493,1022.115478515625,476.52630615234375,0.660351574420929,1012.2817993164062,483.2869873046875,0.8474310040473938 +494,1021.652099609375,476.2297668457031,0.7935367226600647,1011.2703857421875,483.25439453125,0.9082335233688354 +495,1020.7953491210938,476.8219909667969,0.781449019908905,1010.618408203125,482.3787841796875,0.8340943455696106 +496,1020.6336059570312,476.132568359375,0.8835691213607788,1010.432373046875,482.4377136230469,0.8948885798454285 +497,1019.9620361328125,476.4363708496094,0.7100207805633545,1009.9369506835938,482.63311767578125,0.6604409217834473 +498,1019.7592163085938,476.68115234375,0.7393797636032104,1008.3260498046875,483.2169189453125,0.6477468013763428 +499,1019.7617797851562,476.5069274902344,0.8043400049209595,1008.2074584960938,483.12078857421875,0.7022834420204163 +500,1019.6163330078125,476.4362487792969,0.8473413586616516,1008.0299072265625,483.2223205566406,0.7731339335441589 +501,1019.6354370117188,476.4236145019531,0.8250716328620911,1007.5560302734375,483.1590881347656,0.7496744394302368 +502,1019.6430053710938,476.4836730957031,0.73921138048172,1007.3352661132812,483.3518981933594,0.6657888889312744 +503,1019.500244140625,476.5801696777344,0.757182240486145,1007.10546875,483.5152282714844,0.7258349657058716 +504,1019.9971923828125,476.90325927734375,0.8273009657859802,1007.6056518554688,483.29193115234375,0.7444605827331543 +505,1019.865234375,476.8428649902344,0.8884950876235962,1007.8185424804688,483.39013671875,0.825097382068634 +506,1019.7638549804688,476.7781066894531,0.9430883526802063,1007.866943359375,483.5091552734375,0.9020147323608398 +507,1019.6637573242188,476.6381530761719,0.9259135127067566,1007.9381713867188,483.4843444824219,0.881140410900116 +508,1019.83056640625,476.5957946777344,0.9236090779304504,1007.8543090820312,483.38836669921875,0.8512091636657715 +509,1019.8328247070312,476.6339416503906,0.9258524775505066,1007.1635131835938,483.5119323730469,0.8815995454788208 +510,1019.54833984375,476.55810546875,0.8910446763038635,1007.2276611328125,483.4287109375,0.8325442671775818 +511,1019.60400390625,477.0149230957031,0.6412045359611511,1007.1517944335938,483.3439025878906,0.6582220792770386 +512,1019.3536376953125,476.9336242675781,0.8096390962600708,1007.3451538085938,483.46197509765625,0.8092411756515503 +513,1019.5635986328125,476.89935302734375,0.792963445186615,1008.1190185546875,483.31658935546875,0.7377936840057373 +514,1019.5582885742188,476.76019287109375,0.7874783277511597,1007.6683349609375,483.26593017578125,0.795613169670105 +515,1019.5525512695312,476.66864013671875,0.8473328351974487,1007.2107543945312,482.9413146972656,0.8475691676139832 +516,1019.2850341796875,476.6711730957031,0.7439324259757996,1006.3688354492188,482.885986328125,0.6554036736488342 +517,1019.356201171875,476.7104797363281,0.7959200739860535,1006.4688720703125,482.9458312988281,0.6736323237419128 +518,1019.1141967773438,476.6995849609375,0.8896088600158691,1006.8756103515625,483.2975769042969,0.8016126751899719 +519,1019.4442749023438,477.3162841796875,0.7410054206848145,1006.7874755859375,483.67376708984375,0.6806396245956421 +520,1019.3517456054688,477.1907653808594,0.8456360101699829,1007.2681274414062,483.6353759765625,0.7841836810112 +521,1019.1663818359375,477.2711486816406,0.8957366347312927,1007.1572875976562,483.7773742675781,0.8875677585601807 +522,1019.2171630859375,477.2027893066406,0.9217020869255066,1007.4371337890625,483.5592041015625,0.8988807201385498 +523,1019.1697998046875,477.1775207519531,0.9250029921531677,1007.2271728515625,483.40216064453125,0.8785719275474548 +524,1019.0206909179688,477.5824890136719,0.8880779147148132,1006.7550659179688,483.5979309082031,0.8415113091468811 +525,1018.2689819335938,478.0406799316406,0.8101311922073364,1005.773193359375,483.900634765625,0.8015186190605164 +526,1017.8468627929688,478.7911682128906,0.6026829481124878,1005.6644287109375,484.6519470214844,0.5971091389656067 +527,1017.5858764648438,479.1170654296875,0.6124444603919983,1005.6874389648438,485.2318420410156,0.6902877688407898 +528,1015.9571533203125,480.4620361328125,0.3932657241821289,1005.1813354492188,484.7174987792969,0.6042690873146057 +529,1016.1148071289062,480.986328125,0.31995877623558044,1004.8115844726562,484.91180419921875,0.5082292556762695 +530,1015.9327392578125,480.32598876953125,0.2536032497882843,1004.3436279296875,484.79449462890625,0.45011624693870544 +531,1015.7245483398438,480.1543884277344,0.5530687570571899,1004.4204711914062,485.2630615234375,0.5821936726570129 +532,1015.671630859375,480.8363952636719,0.6170677542686462,1004.2808227539062,485.5788269042969,0.6328801512718201 +533,1015.7100830078125,480.98162841796875,0.7272109985351562,1004.4705200195312,485.85369873046875,0.6778850555419922 +534,1015.4871215820312,480.931640625,0.7933913469314575,1004.7883911132812,485.7477111816406,0.718254804611206 +535,1015.8250122070312,480.99530029296875,0.8657909035682678,1005.5287475585938,485.7430725097656,0.8288120627403259 +536,1016.5206298828125,481.21478271484375,0.5867848992347717,1005.6942138671875,485.4162902832031,0.6473687291145325 +537,1016.572998046875,481.32537841796875,0.3715588450431824,1005.6658325195312,485.2427978515625,0.46192511916160583 +538,1016.7100830078125,481.4684143066406,0.5008964538574219,1005.1703491210938,485.92413330078125,0.5468301177024841 +539,1016.4981689453125,481.4797058105469,0.6627647876739502,1005.4789428710938,486.12445068359375,0.7094604969024658 +540,1016.86669921875,481.4610290527344,0.6423870325088501,1005.2424926757812,485.96368408203125,0.6086146235466003 +541,1016.439208984375,481.6551818847656,0.6236780285835266,1005.155029296875,485.56097412109375,0.6028823256492615 +542,1016.4842529296875,481.77093505859375,0.3053353428840637,1004.579833984375,485.54437255859375,0.3291376531124115 +543,1016.1430053710938,482.0516052246094,0.13592129945755005,1004.4196166992188,485.1609802246094,0.1884327530860901 +544,1016.3126831054688,482.42578125,0.28110483288764954,1004.1929931640625,485.21728515625,0.33940252661705017 +545,1016.3579711914062,482.5506591796875,0.20253707468509674,1003.466552734375,484.83642578125,0.2179027497768402 +546,1016.6589965820312,482.16259765625,0.3175044655799866,1003.578369140625,484.5948181152344,0.4244407117366791 +547,1016.6752319335938,482.0614318847656,0.46088653802871704,1003.575927734375,484.6331787109375,0.5578287839889526 +548,1016.5608520507812,481.9309387207031,0.31998518109321594,1003.778564453125,484.5782470703125,0.33192089200019836 +549,1016.5235595703125,482.00592041015625,0.2519042491912842,1004.6555786132812,484.3066101074219,0.3633296489715576 +550,1016.3704833984375,482.0434265136719,0.40067049860954285,1005.4031372070312,484.5260925292969,0.6131011843681335 +551,1016.0423583984375,482.1078796386719,0.41751837730407715,1005.5247192382812,484.7848205566406,0.5922847390174866 +552,1016.3095092773438,482.42071533203125,0.6336548328399658,1005.1325073242188,484.99853515625,0.7688465118408203 +553,1016.2206420898438,482.8865661621094,0.5368712544441223,1004.8262939453125,485.14569091796875,0.6949632167816162 +554,1014.542236328125,483.8878173828125,0.43379777669906616,1004.066650390625,485.8085021972656,0.4680747389793396 +555,1013.2548828125,484.847900390625,0.5199938416481018,1003.11083984375,485.80645751953125,0.33893516659736633 +556,1012.85302734375,484.9455261230469,0.30717945098876953,1002.3660888671875,485.0844421386719,0.11315242201089859 +557,1012.5780639648438,484.3292236328125,0.011482714675366879,1001.3787841796875,483.4601135253906,0.003247407963499427 +558,1008.8311157226562,484.2242126464844,0.015659259632229805,995.0960693359375,480.81488037109375,0.011709828861057758 +559,1008.5607299804688,484.62030029296875,0.0838044211268425,986.7933349609375,481.57684326171875,0.09620596468448639 +560,1008.3375854492188,484.991455078125,0.06963319331407547,993.9968872070312,481.3866271972656,0.04635036364197731 +561,1008.4385375976562,485.31634521484375,0.17984212934970856,987.045654296875,481.66973876953125,0.09712880104780197 +562,1007.288818359375,485.14263916015625,0.30269989371299744,985.8059692382812,481.643798828125,0.12356636673212051 +563,1006.6857299804688,484.8943176269531,0.028746917843818665,993.5411987304688,481.9884033203125,0.005560203455388546 +564,1006.014892578125,485.1959228515625,0.004504228476434946,994.0580444335938,482.1782531738281,0.0008772713481448591 +565,1005.0120849609375,485.48614501953125,0.003096614498645067,930.9906616210938,682.7142333984375,0.0010953590972349048 +566,1004.8648681640625,485.31207275390625,0.007007377687841654,994.608154296875,481.907958984375,0.001401615096256137 +567,1003.62841796875,484.8953552246094,0.011283264495432377,993.52734375,481.767578125,0.002339765429496765 +568,1002.5841064453125,484.52020263671875,0.007774600759148598,988.1220703125,482.6153564453125,0.0012911397498100996 +569,998.75732421875,484.752197265625,0.02771618403494358,983.2515258789062,481.6085205078125,0.004831333179026842 +570,996.3590087890625,484.2795715332031,0.17591062188148499,979.1954345703125,481.6720275878906,0.023280074819922447 +571,990.903076171875,483.625,0.22307522594928741,968.2900390625,484.33953857421875,0.8218907713890076 +572,985.9845581054688,485.1813659667969,0.7121008634567261,966.496826171875,484.6419677734375,0.9865151643753052 +573,985.8653564453125,486.0804138183594,0.8992142677307129,965.0293579101562,486.2320556640625,0.9940508604049683 +574,983.3820190429688,487.21624755859375,0.9941678643226624,962.8018188476562,486.86492919921875,0.9980838894844055 +575,974.8817749023438,486.1571350097656,0.9965697526931763,956.382568359375,485.2084045410156,0.997392475605011 +576,969.2568969726562,487.1214904785156,0.9902973175048828,953.4842529296875,483.1300964355469,0.9991989731788635 +577,961.9356079101562,487.3060607910156,0.9906502366065979,950.4241333007812,485.4408874511719,0.9984254837036133 +578,946.3080444335938,484.77734375,0.9698711037635803,951.8623657226562,493.3998107910156,0.9648795127868652 +579,934.2613525390625,485.3480224609375,0.9878783226013184,944.9192504882812,496.6765441894531,0.9963133335113525 +580,927.918212890625,485.743408203125,0.9931551218032837,936.766845703125,496.2518310546875,0.963932454586029 +581,920.7389526367188,484.64190673828125,0.37027332186698914,919.1060791015625,484.16607666015625,0.3396017253398895 +582,911.9518432617188,485.4956359863281,0.44198548793792725,906.2050170898438,481.5140686035156,0.2764924168586731 +583,895.801513671875,481.5408630371094,0.02918352745473385,1119.229736328125,399.3039855957031,0.019782409071922302 +584,887.8377075195312,483.3003845214844,0.8454253077507019,888.2307739257812,484.46026611328125,0.7172557711601257 +585,875.5874633789062,479.4298400878906,0.9882549047470093,886.1505126953125,494.6094970703125,0.9967492818832397 +586,867.2228393554688,480.1075744628906,0.9912484288215637,875.9806518554688,494.4112548828125,0.9894252419471741 +587,856.0174560546875,478.0452575683594,0.9867358207702637,866.6024780273438,489.96087646484375,0.9959324598312378 +588,841.6065063476562,474.8662414550781,0.9962849617004395,855.9227905273438,487.5163269042969,0.9958126544952393 +589,829.6022338867188,473.3065490722656,0.9947176575660706,846.2516479492188,484.5191345214844,0.9989320039749146 +590,816.958740234375,469.5167236328125,0.998941957950592,835.21484375,480.9952087402344,0.9994322657585144 +591,803.9701538085938,465.5408020019531,0.9984077215194702,822.3407592773438,476.0622253417969,0.9957326650619507 +592,793.3175048828125,462.5162658691406,0.992372989654541,809.1343994140625,472.66387939453125,0.9910483956336975 +593,780.6284790039062,461.1365661621094,0.9868786931037903,798.6533813476562,469.0559997558594,0.9966550469398499 +594,768.1915893554688,458.1048278808594,0.9910308122634888,786.0875854492188,465.8031005859375,0.997992992401123 +595,753.0529174804688,452.016845703125,0.9937694668769836,770.45263671875,459.9671936035156,0.9935308694839478 +596,739.0238037109375,448.7159118652344,0.9924463033676147,756.0807495117188,456.1679992675781,0.9948518872261047 +597,724.1813354492188,442.1958312988281,0.9921063184738159,741.686767578125,451.9381103515625,0.9954513907432556 +598,708.4842529296875,436.9660339355469,0.9947955012321472,725.9551391601562,446.3924865722656,0.9885817766189575 +599,694.228271484375,431.2854309082031,0.9956002831459045,710.7449340820312,440.2615966796875,0.9930574297904968 +600,677.8501586914062,424.49432373046875,0.995498538017273,696.1641845703125,434.36224365234375,0.9932652115821838 +601,661.6251220703125,417.1654968261719,0.9983201026916504,681.36279296875,425.73370361328125,0.983299970626831 +602,647.3703002929688,410.14813232421875,0.9968387484550476,665.7623901367188,419.9836730957031,0.9935342073440552 +603,628.9799194335938,401.93939208984375,0.998673141002655,648.5647583007812,410.0963134765625,0.9927492141723633 +604,614.5567016601562,394.24481201171875,0.9957020282745361,632.7131958007812,404.0265808105469,0.9959937930107117 +605,595.1764526367188,386.29052734375,0.9984575510025024,614.4859008789062,393.06634521484375,0.9921985268592834 +606,578.9761962890625,377.71368408203125,0.9974351525306702,597.0444946289062,387.04248046875,0.9981788992881775 +607,560.6177978515625,369.81121826171875,0.9987297654151917,579.5010986328125,377.55303955078125,0.9963586926460266 +608,543.5220336914062,362.57623291015625,0.9967827200889587,562.6985473632812,371.99298095703125,0.9989668726921082 +609,523.7567749023438,352.956787109375,0.9980668425559998,543.9432983398438,361.88128662109375,0.997093677520752 +610,510.0135803222656,343.260498046875,0.9980620741844177,529.2357788085938,355.6785888671875,0.9990565776824951 +611,492.5684814453125,333.6382141113281,0.9970274567604065,511.226318359375,345.79058837890625,0.9970214366912842 +612,475.5072937011719,323.1287841796875,0.9992606043815613,495.0415954589844,337.3177490234375,0.9991539120674133 +613,458.91326904296875,311.2594299316406,0.997897207736969,475.9505310058594,325.7564697265625,0.9968302845954895 +614,441.7233581542969,299.73858642578125,0.9951639771461487,458.4145202636719,312.720458984375,0.9936031699180603 +615,424.1080322265625,285.3894958496094,0.9973745942115784,443.0794982910156,300.04620361328125,0.9903260469436646 +616,407.6752014160156,273.2672424316406,0.9982694983482361,425.5363464355469,286.34246826171875,0.9947485327720642 +617,390.5823059082031,259.2410888671875,0.9987992644309998,409.1373291015625,271.8631896972656,0.9967552423477173 +618,373.2972106933594,246.5645751953125,0.9985552430152893,391.9114990234375,258.0093994140625,0.9978362917900085 +619,355.54644775390625,232.11398315429688,0.9983116388320923,373.8995056152344,243.72828674316406,0.9989439249038696 +620,337.6152038574219,217.6451416015625,0.9984166026115417,357.85809326171875,229.68560791015625,0.9988651871681213 +621,320.7119445800781,206.03160095214844,0.9986517429351807,339.8958435058594,215.92678833007812,0.9978969693183899 +622,305.2626953125,192.73240661621094,0.9977311491966248,323.555419921875,201.35508728027344,0.9935948848724365 +623,286.6300964355469,182.67385864257812,0.9921431541442871,304.5849914550781,190.2991943359375,0.9740715026855469 +624,272.6520690917969,171.00216674804688,0.11961860209703445,285.9713134765625,174.83538818359375,0.21918675303459167 +625,250.84652709960938,157.57061767578125,0.8888314366340637,266.162109375,163.69410705566406,0.5641309022903442 +626,233.211181640625,145.58233642578125,0.9057193994522095,246.9571075439453,151.68258666992188,0.7153010964393616 +627,213.18914794921875,134.15660095214844,0.997440755367279,231.8850555419922,141.8227996826172,0.9865220189094543 +628,200.13670349121094,122.74596405029297,0.9963501691818237,217.6006622314453,131.41148376464844,0.9937122464179993 +629,198.1997833251953,112.1224594116211,0.9582525491714478,205.07546997070312,122.39102172851562,0.918826699256897 +630,195.99961853027344,102.76837921142578,0.9834305644035339,205.09132385253906,113.17552185058594,0.9666101336479187 +631,199.17945861816406,97.72688293457031,0.9899397492408752,210.56346130371094,104.3892593383789,0.9822283983230591 +632,202.79275512695312,94.81965637207031,0.9939718246459961,214.66064453125,104.85621643066406,0.9901783466339111 +633,204.69338989257812,94.90432739257812,0.9969183802604675,215.01014709472656,107.55342102050781,0.9910781383514404 +634,203.8846893310547,94.38560485839844,0.9954652190208435,213.3623046875,110.22181701660156,0.9976035952568054 +635,204.70310974121094,95.61923217773438,0.9770604968070984,212.58111572265625,111.57176971435547,0.9777862429618835 +636,204.4779052734375,95.37984466552734,0.9817419648170471,212.35464477539062,110.28771209716797,0.9784260988235474 +637,203.91514587402344,94.3386459350586,0.9838038086891174,211.29689025878906,111.7173843383789,0.9864515662193298 +638,203.4803466796875,94.80197143554688,0.9626041650772095,210.5163116455078,110.63633728027344,0.9731878042221069 +639,204.1294403076172,96.15625762939453,0.9186182618141174,210.07484436035156,109.69148254394531,0.9280402660369873 +640,203.64309692382812,95.19124603271484,0.9555120468139648,210.462890625,112.25563049316406,0.9750539660453796 +641,203.19073486328125,94.59712219238281,0.9700188636779785,210.67440795898438,112.25183868408203,0.9858883023262024 +642,202.78466796875,93.83976745605469,0.9775784015655518,210.64801025390625,112.6673583984375,0.9919964075088501 +643,202.95169067382812,94.3103256225586,0.9804322123527527,210.59390258789062,112.66242218017578,0.9932011961936951 +644,203.29220581054688,95.61042785644531,0.9484602212905884,210.5074462890625,112.70120239257812,0.9824425578117371 +645,202.79356384277344,94.17293548583984,0.9748150706291199,210.42660522460938,112.90104675292969,0.9952571988105774 +646,202.9719696044922,94.10877990722656,0.9764948487281799,210.47976684570312,113.06964874267578,0.9944133758544922 +647,203.15029907226562,94.31016540527344,0.975629448890686,210.737548828125,112.96247100830078,0.9912335276603699 +648,203.49781799316406,94.82299041748047,0.9551474452018738,210.84918212890625,112.4928970336914,0.9755765795707703 +649,203.54052734375,94.8144302368164,0.9583861231803894,210.84722900390625,112.39707946777344,0.9712479710578918 +650,203.39144897460938,95.67864227294922,0.9551011323928833,210.6441192626953,111.99790954589844,0.9693374633789062 +651,202.19439697265625,95.24363708496094,0.9747059941291809,209.46041870117188,112.36502075195312,0.9905164837837219 +652,201.56053161621094,95.14098358154297,0.9852814674377441,209.65487670898438,112.1634750366211,0.9950091242790222 +653,200.7526092529297,95.00975036621094,0.9813536405563354,208.9099578857422,111.73168182373047,0.9949311017990112 +654,199.00375366210938,96.69127655029297,0.9755905270576477,207.29852294921875,110.4544448852539,0.9813552498817444 +655,198.99974060058594,97.75106811523438,0.9157569408416748,206.95321655273438,108.16443634033203,0.8844984769821167 +656,198.9978790283203,97.56619262695312,0.9185718894004822,206.19583129882812,105.16287231445312,0.8765420317649841 +657,198.1162567138672,96.45259094238281,0.9734894633293152,206.51394653320312,107.88542938232422,0.923518717288971 +658,197.93405151367188,96.43628692626953,0.9757439494132996,206.42233276367188,107.90791320800781,0.927893877029419 +659,197.98619079589844,96.416015625,0.9770336747169495,206.2742919921875,108.32223510742188,0.9331674575805664 +660,198.4188690185547,95.92396545410156,0.9808699488639832,206.50192260742188,108.96272277832031,0.9410799145698547 +661,198.5511474609375,96.12694549560547,0.9793798327445984,206.60128784179688,108.9577865600586,0.9393635988235474 +662,198.68016052246094,97.26444244384766,0.9530507922172546,206.82106018066406,108.56378173828125,0.9038078784942627 +663,198.71017456054688,97.49114990234375,0.9516453146934509,206.611083984375,108.91121673583984,0.9234105348587036 +664,198.3963623046875,97.21337127685547,0.9814415574073792,206.31503295898438,108.97399139404297,0.9576566219329834 +665,197.80943298339844,98.98029327392578,0.9638015627861023,206.07240295410156,108.62272644042969,0.9247415065765381 +666,196.887939453125,99.8487319946289,0.9552800059318542,205.9426727294922,107.51510620117188,0.931013286113739 +667,196.06944274902344,100.72574615478516,0.9515613317489624,205.9462127685547,106.54569244384766,0.913745105266571 +668,195.4186248779297,101.1676025390625,0.954923689365387,206.07533264160156,105.63731384277344,0.9016072154045105 +669,194.58018493652344,102.17742919921875,0.9539243578910828,206.00323486328125,105.39157104492188,0.8917129635810852 +670,194.45384216308594,103.05603790283203,0.9487038850784302,206.13763427734375,105.89153289794922,0.8964881300926208 +671,193.8060760498047,103.71295928955078,0.9525688290596008,206.3553009033203,105.635009765625,0.9027805924415588 +672,192.51800537109375,103.84960174560547,0.965874433517456,206.47769165039062,105.51502227783203,0.9156575202941895 +673,192.65145874023438,103.85972595214844,0.953065812587738,206.3205108642578,105.65730285644531,0.916233241558075 +674,192.92385864257812,104.26383972167969,0.9510419368743896,206.4015655517578,105.72926330566406,0.9093770980834961 +675,192.43939208984375,104.40035247802734,0.9543002843856812,206.5767822265625,105.66485595703125,0.916996955871582 +676,192.77081298828125,104.40821838378906,0.9524359107017517,206.49835205078125,105.71012115478516,0.9185130000114441 +677,192.8723602294922,104.29095458984375,0.9425629377365112,206.44639587402344,105.63292694091797,0.9076492786407471 +678,192.77285766601562,104.05162048339844,0.9373369216918945,206.16851806640625,105.43099975585938,0.9126868844032288 +679,193.71075439453125,103.56964111328125,0.865494430065155,204.68057250976562,106.1221694946289,0.8530288934707642 +680,196.3390655517578,102.68663787841797,0.7500461935997009,199.70773315429688,108.86318969726562,0.7860988974571228 +681,196.2090606689453,102.25819396972656,0.7455389499664307,198.7110595703125,109.12435150146484,0.7343650460243225 +682,195.6288299560547,102.94697570800781,0.737188458442688,198.64817810058594,109.38622283935547,0.7293962836265564 +683,195.8706512451172,103.0565185546875,0.7495235204696655,198.0728302001953,109.53433227539062,0.7799420952796936 +684,194.8077392578125,103.566162109375,0.7424200773239136,198.82498168945312,108.68502807617188,0.7903608083724976 +685,195.1563262939453,103.43681335449219,0.8117138743400574,198.46072387695312,109.37210083007812,0.8398527503013611 +686,193.7033233642578,107.6209487915039,0.8720591068267822,201.80230712890625,104.63152313232422,0.8261339068412781 +687,192.91546630859375,108.205810546875,0.9297777414321899,203.1883087158203,104.3082504272461,0.9351333379745483 +688,194.99032592773438,107.1793212890625,0.8737326860427856,197.88424682617188,111.19677734375,0.91074138879776 +689,197.42373657226562,102.5103988647461,0.986384928226471,195.05201721191406,115.45973205566406,0.995833158493042 +690,193.6317596435547,112.75077819824219,0.9191718697547913,199.46240234375,109.66806030273438,0.8606123328208923 +691,198.33987426757812,107.73230743408203,0.838799238204956,197.68128967285156,117.5240249633789,0.9431792497634888 +692,199.98727416992188,108.47735595703125,0.7545106410980225,199.53001403808594,120.04403686523438,0.8633624911308289 +693,198.91184997558594,112.4092025756836,0.8811608552932739,200.13038635253906,124.99635314941406,0.9273848533630371 +694,202.58172607421875,120.99913024902344,0.7577008605003357,205.01242065429688,117.9398422241211,0.9104852676391602 +695,205.38380432128906,129.74876403808594,0.9912459850311279,209.53497314453125,116.21693420410156,0.9971491098403931 +696,209.40911865234375,133.32339477539062,0.9938066005706787,212.28855895996094,118.43551635742188,0.9958751797676086 +697,214.28140258789062,135.91055297851562,0.9551094174385071,216.1258544921875,125.92047119140625,0.9837861061096191 +698,217.8125,144.01287841796875,0.9985917806625366,223.22239685058594,128.57513427734375,0.9977449178695679 +699,220.06085205078125,148.00099182128906,0.9991489052772522,227.89158630371094,131.24977111816406,0.999781608581543 +700,224.53591918945312,149.81932067871094,0.9955782890319824,232.4995880126953,137.82554626464844,0.9907759428024292 +701,227.1927947998047,155.11245727539062,0.9904147982597351,235.18258666992188,143.43894958496094,0.9813753962516785 +702,229.86830139160156,162.3179473876953,0.9984347820281982,241.27499389648438,146.81394958496094,0.9985243082046509 +703,231.2436981201172,165.4625244140625,0.9981815218925476,244.34088134765625,151.89315795898438,0.9990401268005371 +704,234.0596923828125,170.4380645751953,0.9950137734413147,245.93267822265625,157.19676208496094,0.999122679233551 +705,234.19842529296875,175.40594482421875,0.9987595081329346,247.0509490966797,160.3375244140625,0.9989485740661621 +706,234.94271850585938,179.40879821777344,0.9988822937011719,249.08160400390625,166.31533813476562,0.9984977841377258 +707,235.52969360351562,182.9429168701172,0.9957922101020813,250.72080993652344,170.10023498535156,0.9918898940086365 +708,236.56130981445312,187.75912475585938,0.9915153384208679,248.7559814453125,174.7592010498047,0.9870482087135315 +709,234.8783721923828,193.5015411376953,0.9988626837730408,248.2498321533203,180.42782592773438,0.9957152009010315 +710,233.64407348632812,199.57936096191406,0.997712254524231,248.9943084716797,183.9496307373047,0.9990389943122864 +711,234.51792907714844,203.318603515625,0.9924899339675903,248.1749267578125,187.826904296875,0.9984802007675171 +712,236.17864990234375,204.3003692626953,0.9586191177368164,243.37863159179688,193.9022979736328,0.9641945362091064 +713,228.11390686035156,213.4517364501953,0.9957854747772217,242.166259765625,198.3091278076172,0.99650639295578 +714,226.8873291015625,217.04037475585938,0.9625213146209717,237.59495544433594,203.79110717773438,0.9232039451599121 +715,219.69764709472656,227.58407592773438,0.9980204105377197,232.75843811035156,210.267333984375,0.9978353381156921 +716,215.71559143066406,229.9197235107422,0.9702649712562561,228.5713348388672,217.58151245117188,0.9909644722938538 +717,209.3710479736328,240.5478973388672,0.9969099164009094,222.52122497558594,222.38613891601562,0.9898324608802795 +718,203.93943786621094,247.2863311767578,0.9973089098930359,216.51388549804688,229.9275665283203,0.9998536109924316 +719,196.04542541503906,258.7114562988281,0.9994056224822998,208.19418334960938,238.3899688720703,0.9991663694381714 +720,191.80479431152344,267.1434020996094,0.9994412064552307,201.6105499267578,246.28636169433594,0.9998855590820312 +721,187.75027465820312,277.3471374511719,0.9998191595077515,193.70626831054688,255.50830078125,0.9998989701271057 +722,183.2503204345703,286.84979248046875,0.999864399433136,188.07313537597656,263.9237060546875,0.9995198845863342 +723,180.52635192871094,296.0511779785156,0.9999236464500427,183.2651824951172,273.0179443359375,0.9999566078186035 +724,179.1591796875,307.90203857421875,0.9999645948410034,178.57000732421875,284.40191650390625,0.9998642206192017 +725,178.1249542236328,318.60992431640625,0.9998745322227478,176.92025756835938,295.3797302246094,0.9997885227203369 +726,178.68801879882812,328.82293701171875,0.9998528957366943,176.1896209716797,306.67144775390625,0.9999392628669739 +727,178.55641174316406,341.1391906738281,0.9999522566795349,176.09092712402344,318.1207580566406,0.9998071789741516 +728,180.2109832763672,352.412841796875,0.9998922944068909,177.3258514404297,331.7643737792969,0.9995833039283752 +729,180.76776123046875,362.5936279296875,0.9995226860046387,178.67758178710938,342.73260498046875,0.9997611045837402 +730,183.4922637939453,373.81072998046875,0.9930768609046936,179.66795349121094,353.89910888671875,0.9997396469116211 +731,184.10324096679688,381.4186096191406,0.9120608568191528,183.8229522705078,368.8191833496094,0.9838747382164001 +732,186.8421630859375,379.9286193847656,0.5446425676345825,185.81158447265625,395.6651611328125,0.5203120112419128 +733,186.67665100097656,393.2940673828125,0.24309733510017395,188.26121520996094,404.85052490234375,0.5372809767723083 +734,191.95050048828125,410.6866149902344,0.5500784516334534,195.2333984375,419.1624755859375,0.8934261798858643 +735,191.93020629882812,419.3485107421875,0.9631444811820984,197.8734893798828,431.51177978515625,0.8804729580879211 +736,194.4246826171875,429.3967590332031,0.9813817143440247,200.65908813476562,444.1205749511719,0.9759767651557922 +737,195.74554443359375,437.6092224121094,0.9956564903259277,205.9178466796875,453.9266052246094,0.9923360347747803 +738,204.7164306640625,447.02435302734375,0.9856436252593994,212.06411743164062,463.7872314453125,0.9772177934646606 +739,208.55860900878906,460.5813903808594,0.9892991781234741,217.19461059570312,476.1408996582031,0.9596381783485413 +740,212.51080322265625,469.6512145996094,0.9917597770690918,223.51869201660156,483.8193359375,0.9492488503456116 +741,221.66128540039062,481.1513366699219,0.9766207337379456,227.07522583007812,492.1756591796875,0.49170681834220886 +742,229.86270141601562,494.9435729980469,0.44907957315444946,238.0901336669922,505.11029052734375,0.10391434282064438 +743,237.65591430664062,508.21478271484375,0.06051347777247429,244.3154296875,516.0091552734375,0.10141061246395111 +744,247.385986328125,517.3885498046875,0.005223402753472328,250.93569946289062,529.1395874023438,0.11680947989225388 +745,256.6441650390625,535.89208984375,0.451669305562973,257.57379150390625,536.75927734375,0.11671502888202667 +746,261.2989807128906,542.652587890625,0.9709101915359497,268.232421875,553.7208862304688,0.9223312735557556 +747,267.43548583984375,553.1912231445312,0.9898492097854614,277.4670715332031,565.922607421875,0.9972894191741943 +748,275.6085205078125,563.9149169921875,0.9985836744308472,288.3854675292969,577.1636352539062,0.9986053705215454 +749,285.19708251953125,574.6888427734375,0.994934618473053,297.0507507324219,587.310546875,0.9824295043945312 +750,293.3118591308594,584.9550170898438,0.9989064931869507,307.8990478515625,597.1903076171875,0.9992539286613464 +751,302.2153015136719,595.5172119140625,0.9993484020233154,321.7381896972656,606.6022338867188,0.9989926815032959 +752,316.7889709472656,605.743408203125,0.9934911131858826,334.48828125,614.9622192382812,0.992199718952179 +753,328.07958984375,613.5079345703125,0.9987969398498535,345.8861999511719,624.18603515625,0.9968184232711792 +754,343.1669006347656,623.2413330078125,0.9981847405433655,361.7074890136719,633.217529296875,0.9894765019416809 +755,357.58184814453125,632.1616821289062,0.998257040977478,376.6159362792969,642.8093872070312,0.996880829334259 +756,373.28375244140625,641.2046508789062,0.9984307289123535,390.7885437011719,651.8768310546875,0.9913681745529175 +757,391.0205993652344,651.2059936523438,0.9970995187759399,407.4693908691406,662.728271484375,0.9960728287696838 +758,405.6009521484375,662.0953369140625,0.9976939558982849,424.15948486328125,672.7124633789062,0.9965364336967468 +759,421.67919921875,672.4449462890625,0.9964653849601746,438.3339538574219,681.87841796875,0.992110550403595 +760,439.06842041015625,682.8368530273438,0.9972565770149231,455.5457458496094,693.9599609375,0.9969651699066162 +761,454.71942138671875,694.5463256835938,0.9978924989700317,473.1042175292969,705.5139770507812,0.9966521263122559 +762,472.5163879394531,704.934326171875,0.9965230226516724,488.544189453125,715.7626342773438,0.9886522889137268 +763,490.7557678222656,717.800048828125,0.9884434342384338,504.34136962890625,728.5294189453125,0.986135721206665 +764,508.7662048339844,728.9577026367188,0.9937166571617126,523.10107421875,740.5816040039062,0.9937828183174133 +765,527.7946166992188,741.8803100585938,0.9963141083717346,543.4024047851562,752.1116943359375,0.9941567778587341 +766,550.7939453125,756.232666015625,0.9729104042053223,550.2911376953125,755.7640380859375,0.9299630522727966 +767,573.6007080078125,768.5093383789062,0.9846268892288208,558.8101806640625,762.3658447265625,0.9348949790000916 +768,590.9487915039062,779.1057739257812,0.9616086483001709,581.854736328125,774.4600219726562,0.986991286277771 +769,598.5869140625,785.141357421875,0.9895473718643188,614.0119018554688,793.1641235351562,0.9874879717826843 +770,610.8574829101562,794.091064453125,0.9955264925956726,628.3316040039062,803.0104370117188,0.9976329803466797 +771,632.8973388671875,806.4683837890625,0.8125746846199036,646.6112060546875,813.6487426757812,0.9611960053443909 +772,655.6709594726562,818.7199096679688,0.46464505791664124,663.3318481445312,825.9689331054688,0.5732054710388184 +773,670.968505859375,828.673095703125,0.9573522806167603,684.5908203125,837.9644775390625,0.9584360718727112 +774,687.3555908203125,836.3499145507812,0.9960095882415771,704.1077270507812,848.2941284179688,0.9944693446159363 +775,701.9436645507812,846.1943359375,0.9920546412467957,719.4246826171875,856.6215209960938,0.9898836016654968 +776,717.8063354492188,856.1001586914062,0.9962457418441772,737.7867431640625,868.60546875,0.9990225434303284 +777,733.832763671875,864.6610717773438,0.9979137778282166,752.5900268554688,876.6277465820312,0.9951726794242859 +778,753.886962890625,874.957275390625,0.997865617275238,770.4986572265625,888.340576171875,0.998447597026825 +779,770.3206176757812,885.3143920898438,0.9987971186637878,788.1416015625,897.017822265625,0.9990279078483582 +780,789.7654418945312,895.47314453125,0.9950311183929443,803.8624877929688,905.260498046875,0.9960988759994507 +781,805.2681274414062,904.5928344726562,0.9960947632789612,820.9950561523438,915.869873046875,0.998923659324646 +782,821.3385009765625,913.9016723632812,0.9980421662330627,838.13037109375,924.7796630859375,0.9947822093963623 +783,838.6959228515625,922.889892578125,0.9983863234519958,855.4456787109375,935.3103637695312,0.9975469708442688 +784,855.1118774414062,932.6538696289062,0.9988403916358948,871.6631469726562,945.9974975585938,0.9967034459114075 +785,873.4904174804688,940.60498046875,0.9967382550239563,889.9793701171875,954.7658081054688,0.9887505769729614 +786,889.8653564453125,948.59912109375,0.9979583621025085,906.8984985351562,964.2045288085938,0.9983388185501099 +787,908.9027709960938,956.8905029296875,0.9945318698883057,925.4656982421875,973.0563354492188,0.9917770624160767 +788,926.5547485351562,967.9829711914062,0.9958959221839905,945.1734619140625,982.21875,0.9959955215454102 +789,944.440673828125,975.8380126953125,0.9954466223716736,961.8550415039062,990.5693359375,0.9834416508674622 +790,965.701171875,985.9244384765625,0.9664177298545837,981.0690307617188,997.2727661132812,0.9330088496208191 +791,987.0010986328125,997.1663818359375,0.7885552644729614,987.0529174804688,993.6362915039062,0.7395795583724976 +792,1016.9915771484375,1011.724365234375,0.9906080365180969,999.1869506835938,998.8828735351562,0.9906149506568909 +793,1032.063232421875,1017.696533203125,0.9658699631690979,1018.6329956054688,1007.218017578125,0.9932164549827576 +794,1052.677978515625,1028.7403564453125,0.9857195615768433,1034.9727783203125,1016.3362426757812,0.9210597276687622 +795,1064.1727294921875,1036.2928466796875,0.984981119632721,1052.8377685546875,1021.3471069335938,0.9904011487960815 +796,1062.0220947265625,1036.47021484375,0.9386613965034485,1063.4361572265625,1020.93212890625,0.9922407269477844 +797,1060.8546142578125,1035.7738037109375,0.9818128943443298,1057.459228515625,1023.1213989257812,0.9878678321838379 +798,1059.0936279296875,1035.16162109375,0.9917322993278503,1054.9307861328125,1021.575439453125,0.9890591502189636 +799,1059.082763671875,1034.3878173828125,0.9962650537490845,1054.9434814453125,1020.0286254882812,0.9916699528694153 +800,1059.5997314453125,1033.8018798828125,0.9963912963867188,1056.0546875,1019.2518310546875,0.994622528553009 +801,1059.95166015625,1033.678466796875,0.9931654334068298,1057.177490234375,1019.2689208984375,0.9945334196090698 +802,1060.131591796875,1034.142578125,0.9884691834449768,1058.472412109375,1019.73779296875,0.9946407675743103 +803,1059.6273193359375,1034.756591796875,0.9838390946388245,1059.3309326171875,1020.0258178710938,0.9940322637557983 +804,1059.6387939453125,1035.540283203125,0.9825371503829956,1059.7821044921875,1020.3131103515625,0.9927283525466919 +805,1059.7882080078125,1035.1275634765625,0.9842568039894104,1058.86083984375,1020.7449951171875,0.9927077889442444 +806,1059.3465576171875,1035.0728759765625,0.9848992228507996,1058.49462890625,1020.9827880859375,0.9922962784767151 +807,1059.6021728515625,1035.212646484375,0.9850450158119202,1058.3436279296875,1021.1979370117188,0.9924885034561157 +808,1059.5257568359375,1035.1260986328125,0.983644962310791,1058.2528076171875,1021.24755859375,0.991424024105072 +809,1059.62841796875,1035.0130615234375,0.9826234579086304,1058.229248046875,1021.239501953125,0.991184413433075 +810,1060.656494140625,1035.169921875,0.9839657545089722,1058.405029296875,1021.7808837890625,0.99244225025177 +811,1061.1282958984375,1035.15966796875,0.9813094139099121,1058.6759033203125,1022.5296020507812,0.9931241273880005 +812,1060.9151611328125,1035.5975341796875,0.9737256169319153,1058.5560302734375,1022.9230346679688,0.9912934303283691 +813,1060.791259765625,1036.176025390625,0.9727890491485596,1058.3790283203125,1024.024169921875,0.9894791841506958 +814,1062.7049560546875,1039.3699951171875,0.982719361782074,1057.3150634765625,1023.9865112304688,0.989123523235321 +815,1063.37890625,1039.653564453125,0.9817712306976318,1056.9085693359375,1024.172119140625,0.9862087368965149 +816,1062.8275146484375,1039.4267578125,0.9766057729721069,1056.711181640625,1023.3499755859375,0.9827752709388733 +817,1060.6595458984375,1036.815185546875,0.9756385684013367,1056.846435546875,1023.7914428710938,0.9859289526939392 +818,1061.478515625,1039.81005859375,0.9860957860946655,1056.3424072265625,1023.2982788085938,0.9866422414779663 +819,1059.74658203125,1037.5360107421875,0.9856946468353271,1055.60302734375,1023.6864624023438,0.9875662922859192 +820,1059.421142578125,1036.4326171875,0.987053394317627,1055.521728515625,1023.2135009765625,0.9881613850593567 +821,1058.9190673828125,1035.6900634765625,0.9901179075241089,1055.0675048828125,1022.3406372070312,0.989555299282074 +822,1058.3662109375,1035.7884521484375,0.9926708936691284,1054.7919921875,1021.836181640625,0.9915532469749451 +823,1058.7572021484375,1035.962890625,0.9925665855407715,1054.86474609375,1022.0946044921875,0.9919398427009583 +824,1058.9296875,1035.9560546875,0.9916050434112549,1055.2833251953125,1022.5562133789062,0.9904178977012634 +825,1059.0133056640625,1036.0859375,0.9932423233985901,1054.88818359375,1022.6651000976562,0.992023229598999 +826,1059.1961669921875,1036.2921142578125,0.9940642714500427,1054.7564697265625,1022.6517333984375,0.9926649332046509 +827,1059.0230712890625,1036.5133056640625,0.9931998252868652,1054.5528564453125,1022.721435546875,0.9928063154220581 +828,1059.3109130859375,1036.5743408203125,0.9917789697647095,1054.530517578125,1023.6007690429688,0.9921268820762634 +829,1059.9188232421875,1037.2032470703125,0.9898897409439087,1054.282958984375,1023.6464233398438,0.9915438294410706 +830,1060.3812255859375,1037.5673828125,0.9867321848869324,1054.1104736328125,1024.2686767578125,0.9923382997512817 +831,1060.5706787109375,1037.4361572265625,0.9895346164703369,1053.6480712890625,1023.7872924804688,0.9919102787971497 +832,1060.3861083984375,1037.2620849609375,0.9904696345329285,1053.51220703125,1023.1481323242188,0.9911342263221741 +833,1060.406982421875,1036.64013671875,0.991473376750946,1053.5345458984375,1023.7171020507812,0.9913788437843323 +834,1059.5765380859375,1036.1253662109375,0.9886763691902161,1054.193359375,1024.2330322265625,0.990018367767334 +835,1059.4921875,1036.1336669921875,0.9814550876617432,1054.46630859375,1024.2889404296875,0.9881933927536011 +836,1059.244873046875,1036.294189453125,0.9628311395645142,1054.9813232421875,1025.1361083984375,0.9844262003898621 +837,1058.9593505859375,1036.0262451171875,0.9676399230957031,1054.3873291015625,1024.809814453125,0.9872778058052063 +838,1059.2598876953125,1035.7713623046875,0.976535975933075,1053.9146728515625,1024.3966064453125,0.9881015419960022 +839,1058.5230712890625,1035.3978271484375,0.9651402831077576,1053.84716796875,1024.3941650390625,0.9864956140518188 +840,1057.1046142578125,1035.1915283203125,0.913381040096283,1054.1385498046875,1024.357421875,0.9813078045845032 +841,1055.316650390625,1035.0697021484375,0.8597848415374756,1054.0181884765625,1024.88525390625,0.9797943234443665 +842,1054.2607421875,1034.887451171875,0.8906280994415283,1054.1871337890625,1024.7701416015625,0.9753128290176392 +843,1054.0986328125,1034.6527099609375,0.8919223546981812,1053.98388671875,1024.6905517578125,0.975021481513977 +844,1054.13134765625,1034.7490234375,0.8709900975227356,1053.8385009765625,1024.969482421875,0.9739614129066467 +845,1054.1282958984375,1034.8076171875,0.9011487364768982,1053.9342041015625,1024.4061279296875,0.9769805073738098 +846,1053.98876953125,1034.7095947265625,0.8978963494300842,1053.863037109375,1024.6124267578125,0.9771469235420227 +847,1053.9716796875,1034.6424560546875,0.8920820951461792,1053.868896484375,1024.57275390625,0.9761583209037781 +848,1054.0206298828125,1034.8875732421875,0.9057035446166992,1053.9544677734375,1024.2032470703125,0.978082001209259 +849,1054.2144775390625,1034.8743896484375,0.9074704051017761,1054.1845703125,1024.1094970703125,0.9760656356811523 +850,1054.1451416015625,1034.8665771484375,0.8814907670021057,1053.98876953125,1024.73828125,0.977869987487793 +851,1054.137451171875,1035.036376953125,0.8897002339363098,1054.304443359375,1024.875732421875,0.9726106524467468 +852,1054.84814453125,1035.387451171875,0.8198009133338928,1054.0614013671875,1026.30322265625,0.9771158695220947 +853,1056.205810546875,1035.8017578125,0.8192569017410278,1053.8095703125,1026.660888671875,0.9790480136871338 +854,1055.9210205078125,1036.087646484375,0.8034767508506775,1054.4346923828125,1026.181640625,0.9824315309524536 +855,1056.495849609375,1035.8125,0.8247594237327576,1054.358154296875,1026.180419921875,0.9820424318313599 +856,1056.6083984375,1035.946533203125,0.8018432855606079,1054.3389892578125,1026.5245361328125,0.9788188338279724 +857,1056.49951171875,1036.0186767578125,0.7969556450843811,1054.13623046875,1026.5877685546875,0.9807962775230408 +858,1056.5509033203125,1035.964599609375,0.8029109835624695,1054.144775390625,1026.59912109375,0.979930579662323 +859,1056.6854248046875,1036.1842041015625,0.8206838369369507,1053.9659423828125,1026.565673828125,0.9835857152938843 +860,1056.6920166015625,1036.11181640625,0.8205177783966064,1053.9171142578125,1026.5452880859375,0.9830227494239807 +861,1056.93603515625,1036.0701904296875,0.833240270614624,1053.836669921875,1026.4674072265625,0.9824761748313904 +862,1057.1201171875,1035.85009765625,0.8180490136146545,1054.0772705078125,1026.5533447265625,0.9807981252670288 +863,1058.0302734375,1036.256103515625,0.8402861952781677,1054.2294921875,1027.2254638671875,0.9786966443061829 +864,1058.21435546875,1036.484619140625,0.8406945466995239,1054.18212890625,1028.2288818359375,0.9742665886878967 +865,1058.3013916015625,1036.5062255859375,0.8272400498390198,1054.1949462890625,1028.6446533203125,0.9726706147193909 +866,1058.4837646484375,1036.73876953125,0.8551956415176392,1054.0655517578125,1028.371337890625,0.9767100214958191 +867,1058.75537109375,1036.484619140625,0.857421875,1053.990966796875,1028.2598876953125,0.9755082726478577 +868,1058.1971435546875,1036.13037109375,0.8310955166816711,1054.0360107421875,1028.0653076171875,0.9740268588066101 +869,1058.0948486328125,1035.906494140625,0.822968602180481,1053.9971923828125,1028.3458251953125,0.9718869924545288 +870,1058.154541015625,1036.4351806640625,0.8193515539169312,1053.993408203125,1028.2073974609375,0.976190447807312 +871,1058.0220947265625,1036.7071533203125,0.792509138584137,1054.31396484375,1028.2523193359375,0.9755687117576599 +872,1058.5653076171875,1036.7967529296875,0.808079183101654,1054.2288818359375,1028.552978515625,0.9749518632888794 +873,1058.8240966796875,1036.58984375,0.8358331918716431,1054.1202392578125,1028.4420166015625,0.9730762243270874 +874,1059.2391357421875,1036.8978271484375,0.884688675403595,1053.8309326171875,1028.3397216796875,0.9774963855743408 +875,1058.69873046875,1036.81494140625,0.8527324795722961,1054.0118408203125,1028.1741943359375,0.9761433601379395 +876,1057.62548828125,1036.7398681640625,0.7859537601470947,1054.26416015625,1027.7275390625,0.9772745966911316 +877,1056.193115234375,1038.12109375,0.7358546853065491,1054.670654296875,1027.2315673828125,0.9794476628303528 +878,1055.8380126953125,1037.8397216796875,0.6848158836364746,1054.4580078125,1028.087158203125,0.9705407023429871 +879,1055.3291015625,1037.8944091796875,0.6768741011619568,1053.7855224609375,1028.2137451171875,0.9719653129577637 +880,1054.5489501953125,1037.6279296875,0.64736008644104,1052.8968505859375,1028.50830078125,0.9660980701446533 +881,1054.469970703125,1035.927001953125,0.5797082781791687,1052.260498046875,1029.2032470703125,0.9537736177444458 +882,1054.143310546875,1038.4283447265625,0.7672226428985596,1053.256591796875,1028.0794677734375,0.9699141383171082 +883,1054.05029296875,1037.8953857421875,0.7290835976600647,1053.4720458984375,1027.73046875,0.9735366702079773 +884,1053.2506103515625,1038.085205078125,0.7995192408561707,1053.8616943359375,1026.9327392578125,0.9729681015014648 +885,1051.4423828125,1036.9808349609375,0.8469613790512085,1054.3074951171875,1025.7899169921875,0.9716981053352356 +886,1051.4302978515625,1036.232421875,0.8701136708259583,1054.5474853515625,1025.367431640625,0.9562757611274719 +887,1052.2620849609375,1034.1329345703125,0.7266260385513306,1053.680908203125,1026.3359375,0.9105389714241028 +888,1053.5838623046875,1029.4805908203125,0.8696239590644836,1048.6307373046875,1030.095458984375,0.9304019808769226 +889,1054.2076416015625,1028.2581787109375,0.9461113214492798,1046.50634765625,1030.8385009765625,0.9748520255088806 +890,1054.5428466796875,1026.8665771484375,0.9858102202415466,1044.57373046875,1031.3343505859375,0.9910467267036438 +891,1053.44384765625,1026.0516357421875,0.982649028301239,1044.27978515625,1030.8348388671875,0.9891868829727173 +892,1053.199951171875,1025.4276123046875,0.9872761368751526,1043.279541015625,1031.3067626953125,0.9882153272628784 +893,1053.050048828125,1025.284423828125,0.9881670475006104,1042.8900146484375,1031.5821533203125,0.9847410917282104 +894,1053.1263427734375,1025.1806640625,0.989489734172821,1042.8787841796875,1031.700927734375,0.9855431318283081 +895,1053.1719970703125,1025.1307373046875,0.9907758831977844,1042.8487548828125,1031.650390625,0.9864112138748169 +896,1053.22265625,1024.9619140625,0.9905301332473755,1042.8992919921875,1031.8392333984375,0.9863475561141968 +897,1053.3631591796875,1025.0201416015625,0.9904223084449768,1042.966796875,1031.622314453125,0.9879989624023438 +898,1053.5074462890625,1025.005615234375,0.9906055331230164,1043.185302734375,1031.515380859375,0.988993763923645 +899,1053.3660888671875,1025.4600830078125,0.9890046119689941,1043.4471435546875,1031.138671875,0.9893795251846313 +900,1053.410400390625,1025.420166015625,0.986756443977356,1043.478271484375,1031.0997314453125,0.9902635812759399 +901,1053.884033203125,1025.120849609375,0.9924872517585754,1043.0595703125,1031.3460693359375,0.9935570359230042 +902,1053.271728515625,1025.669677734375,0.9936689734458923,1042.402587890625,1032.123291015625,0.9892145991325378 +903,1052.706787109375,1026.5238037109375,0.9968748092651367,1041.2255859375,1032.043701171875,0.9904618263244629 +904,1052.9483642578125,1026.8587646484375,0.9975821375846863,1040.105712890625,1032.0648193359375,0.988376796245575 +905,1052.9217529296875,1027.3126220703125,0.9974237680435181,1039.58251953125,1032.2265625,0.9854166507720947 +906,1052.1627197265625,1027.2696533203125,0.998522162437439,1036.0748291015625,1032.1766357421875,0.9859030842781067 +907,1051.01708984375,1027.3624267578125,0.9985527396202087,1035.0546875,1032.265869140625,0.9859873056411743 +908,1050.5889892578125,1027.9910888671875,0.9984376430511475,1034.3382568359375,1032.1094970703125,0.9875167012214661 +909,1050.5462646484375,1028.0791015625,0.9980103373527527,1034.3668212890625,1031.908935546875,0.9875870943069458 +910,1050.5999755859375,1028.2479248046875,0.9977914094924927,1034.3125,1031.9490966796875,0.9863972663879395 +911,1050.724365234375,1028.0491943359375,0.9980370402336121,1034.2611083984375,1032.1007080078125,0.9881961345672607 +912,1050.6627197265625,1027.784423828125,0.9985318779945374,1034.316650390625,1032.3218994140625,0.9884263873100281 +913,1050.7667236328125,1027.9022216796875,0.9985840916633606,1034.228515625,1032.3621826171875,0.9895862340927124 +914,1050.90869140625,1028.00048828125,0.9986268877983093,1033.723876953125,1032.2589111328125,0.9899376034736633 +915,1050.367431640625,1028.675537109375,0.9985584616661072,1033.5301513671875,1030.9559326171875,0.9897975921630859 +916,1049.1734619140625,1029.5032958984375,0.9988359808921814,1030.827880859375,1030.0087890625,0.9986304044723511 +917,1048.801513671875,1029.930419921875,0.9989857077598572,1029.509033203125,1029.15771484375,0.9994624853134155 +918,1047.88671875,1029.96875,0.9989331960678101,1028.177734375,1028.798095703125,0.9993796944618225 +919,1046.9698486328125,1030.0001220703125,0.9988342523574829,1027.17138671875,1028.284423828125,0.9991123080253601 +920,1045.144775390625,1029.7359619140625,0.9989723563194275,1026.29443359375,1028.426513671875,0.998887836933136 +921,1044.4903564453125,1030.1097412109375,0.9990301728248596,1025.2696533203125,1029.011474609375,0.9991489052772522 +922,1043.23095703125,1029.86865234375,0.9994170069694519,1024.3712158203125,1029.57666015625,0.9989491701126099 +923,1042.5194091796875,1029.774169921875,0.9994048476219177,1023.8927612304688,1029.9195556640625,0.9983089566230774 +924,1042.017578125,1029.7672119140625,0.999019205570221,1024.25390625,1029.965576171875,0.9979036450386047 +925,1042.060791015625,1029.7640380859375,0.9991042017936707,1024.099365234375,1029.855224609375,0.9977774024009705 +926,1042.1748046875,1029.923095703125,0.9991247653961182,1024.0396728515625,1029.7332763671875,0.997911810874939 +927,1042.154541015625,1029.814697265625,0.9992160201072693,1023.8860473632812,1029.7305908203125,0.9979522824287415 +928,1042.03857421875,1029.7982177734375,0.9992148280143738,1023.5820922851562,1029.9404296875,0.9976397752761841 +929,1041.6490478515625,1029.7376708984375,0.9992563724517822,1023.0042114257812,1030.09765625,0.9964570999145508 +930,1040.7510986328125,1029.715087890625,0.9988149404525757,1019.326904296875,1030.621337890625,0.9956287741661072 +931,1039.4766845703125,1030.502197265625,0.9959145784378052,1018.2915649414062,1029.19873046875,0.9955718517303467 +932,1037.07373046875,1031.4559326171875,0.993389368057251,1015.6537475585938,1028.85546875,0.9985582232475281 +933,1035.76318359375,1032.6842041015625,0.9914703369140625,1013.8881225585938,1028.37060546875,0.9994732141494751 +934,1033.533203125,1032.2076416015625,0.9935632348060608,1012.9423828125,1028.1676025390625,0.999467134475708 +935,1032.9117431640625,1032.359130859375,0.9948815703392029,1012.0794067382812,1028.9691162109375,0.9991641640663147 +936,1031.1170654296875,1032.1695556640625,0.9977769255638123,1010.9617309570312,1029.9051513671875,0.9986132979393005 +937,1030.0621337890625,1032.273681640625,0.998544454574585,1010.3068237304688,1030.68603515625,0.9976093173027039 +938,1029.0814208984375,1031.540283203125,0.9992078542709351,1008.4522094726562,1031.135009765625,0.9938281774520874 +939,1027.2750244140625,1030.311767578125,0.9995325207710266,1007.0325317382812,1030.61962890625,0.9927530884742737 +940,1026.2120361328125,1029.9896240234375,0.9995686411857605,1003.681396484375,1030.654541015625,0.9932177066802979 +941,1025.2701416015625,1029.8824462890625,0.9993466734886169,1002.81640625,1030.1258544921875,0.9938883781433105 +942,1024.6610107421875,1030.013427734375,0.9989485740661621,1002.3095703125,1029.872802734375,0.9925443530082703 +943,1024.2041015625,1030.2757568359375,0.9981401562690735,1002.3533325195312,1030.294921875,0.98997563123703 +944,1024.407958984375,1030.430419921875,0.9982159733772278,1002.1683349609375,1029.9576416015625,0.9917115569114685 +945,1024.0863037109375,1030.118408203125,0.9983276128768921,1002.1535034179688,1029.918701171875,0.9924734234809875 +946,1023.7863159179688,1030.1417236328125,0.9981055855751038,1001.984130859375,1029.7293701171875,0.9930318593978882 +947,1023.6817016601562,1030.168212890625,0.9981664419174194,1001.9862060546875,1029.7606201171875,0.9929360747337341 +948,1023.7217407226562,1030.0765380859375,0.9983649849891663,1001.84326171875,1029.7000732421875,0.9938150644302368 +949,1023.5368041992188,1029.9140625,0.9984763860702515,1001.8784790039062,1029.5869140625,0.9940530061721802 +950,1023.071533203125,1029.7164306640625,0.9979857802391052,1000.8053588867188,1029.71435546875,0.9964463710784912 +951,1021.9501342773438,1029.9315185546875,0.9984934329986572,998.7062377929688,1029.6722412109375,0.9988111257553101 +952,1019.7347412109375,1030.2144775390625,0.9984622597694397,996.672119140625,1029.392333984375,0.9988848567008972 +953,1018.607177734375,1030.4354248046875,0.9978747367858887,995.0652465820312,1028.14208984375,0.9989440441131592 +954,1016.306640625,1030.269775390625,0.9984851479530334,993.7621459960938,1027.234375,0.9969401955604553 +955,1015.3024291992188,1030.025634765625,0.998860776424408,989.613037109375,1028.15625,0.9915434718132019 +956,1013.9658813476562,1029.8255615234375,0.9994078278541565,988.2338256835938,1028.591796875,0.9937822818756104 +957,1013.1098022460938,1029.78515625,0.9995273351669312,987.4459228515625,1029.25732421875,0.9935229420661926 +958,1012.7359008789062,1030.2158203125,0.9994670152664185,986.8943481445312,1029.259033203125,0.9925270676612854 +959,1012.6337890625,1030.4239501953125,0.9993094801902771,986.8875732421875,1029.2760009765625,0.9920993447303772 +960,1012.233642578125,1030.5872802734375,0.9990156292915344,986.9760131835938,1029.1763916015625,0.9917976260185242 +961,1012.3187255859375,1030.5545654296875,0.9991623163223267,987.11865234375,1029.064453125,0.9932098984718323 +962,1012.365478515625,1030.50830078125,0.9992873668670654,987.1634521484375,1028.9703369140625,0.9923426508903503 +963,1012.4035034179688,1030.52587890625,0.9993031024932861,987.0263061523438,1029.0615234375,0.9924691915512085 +964,1012.52587890625,1030.3968505859375,0.9993981719017029,987.4329223632812,1029.175048828125,0.9931550025939941 +965,1012.4968872070312,1030.268310546875,0.9994527101516724,986.925537109375,1029.3712158203125,0.9932705163955688 +966,1012.349365234375,1030.3377685546875,0.9993395209312439,986.820068359375,1029.345947265625,0.9920809268951416 +967,1011.755615234375,1030.201416015625,0.9992448091506958,986.1790161132812,1029.4588623046875,0.9879720211029053 +968,1010.013916015625,1029.8812255859375,0.9987512230873108,984.7950439453125,1028.7615966796875,0.9962912797927856 +969,1008.4979858398438,1030.5933837890625,0.996598482131958,983.3560180664062,1028.252197265625,0.9985072016716003 +970,1007.872314453125,1031.2313232421875,0.991987407207489,982.89453125,1028.377685546875,0.9983581900596619 +971,1007.6408081054688,1030.720947265625,0.9923679828643799,982.7470703125,1028.333251953125,0.9981953501701355 +972,1006.7325439453125,1030.7701416015625,0.9922994375228882,982.4786376953125,1028.14306640625,0.9983958601951599 +973,1007.033203125,1030.698974609375,0.9927278161048889,982.5994873046875,1028.08642578125,0.9986253976821899 +974,1006.8346557617188,1030.5750732421875,0.9939715266227722,982.4405517578125,1028.133056640625,0.9987825751304626 +975,1006.6224975585938,1030.3887939453125,0.9953804612159729,982.4380493164062,1028.0435791015625,0.9990217685699463 +976,1006.6300659179688,1030.525146484375,0.9948118925094604,982.384521484375,1028.0587158203125,0.999018669128418 +977,1006.5252685546875,1030.4718017578125,0.9948058724403381,982.37109375,1027.8043212890625,0.9991112947463989 +978,1006.5531616210938,1030.6629638671875,0.993919312953949,982.61865234375,1027.927490234375,0.9989203810691833 +979,1005.0418090820312,1030.5423583984375,0.9952941536903381,981.1709594726562,1028.011474609375,0.9990757703781128 +980,1003.217041015625,1030.540771484375,0.9950293302536011,979.6683959960938,1027.60205078125,0.9991324543952942 +981,1001.3240966796875,1030.77294921875,0.9963822364807129,978.5234375,1027.553466796875,0.998748242855072 +982,999.8281860351562,1031.048828125,0.9985641241073608,977.4374389648438,1027.8331298828125,0.9987167716026306 +983,998.9527587890625,1031.2562255859375,0.9981969594955444,976.069580078125,1027.9541015625,0.9969711899757385 +984,998.232177734375,1031.16357421875,0.9983356595039368,976.0304565429688,1028.120849609375,0.9957867860794067 +985,998.0874633789062,1030.7275390625,0.9984350800514221,975.765380859375,1027.8909912109375,0.9954307079315186 +986,998.1992797851562,1030.7354736328125,0.9982413649559021,975.3714599609375,1027.5357666015625,0.9937058687210083 +987,998.2235107421875,1030.62451171875,0.9982395172119141,972.8204956054688,1027.9920654296875,0.9931749701499939 +988,998.3513793945312,1030.6051025390625,0.9982901215553284,972.9488525390625,1028.239990234375,0.9942241907119751 +989,998.4849243164062,1030.47021484375,0.9984270334243774,972.6622314453125,1028.3206787109375,0.9950743317604065 +990,998.261474609375,1030.395751953125,0.9985759258270264,972.3182983398438,1028.209228515625,0.9949668645858765 +991,998.0744018554688,1030.2489013671875,0.9987608790397644,971.8162841796875,1027.90576171875,0.9955638647079468 +992,998.1185913085938,1030.3291015625,0.9985949397087097,971.9725341796875,1027.9239501953125,0.9957435131072998 +993,998.155029296875,1030.3275146484375,0.998565673828125,971.9934692382812,1027.9962158203125,0.9957722425460815 +994,998.20751953125,1030.3983154296875,0.9984436631202698,972.1002807617188,1028.24072265625,0.994422972202301 +995,998.2451171875,1030.5093994140625,0.9983798265457153,972.3997802734375,1028.191162109375,0.9927650094032288 +996,997.492431640625,1030.4088134765625,0.9975487589836121,970.9480590820312,1027.89013671875,0.987460196018219 +997,995.530517578125,1030.4132080078125,0.9979046583175659,969.8223266601562,1028.21826171875,0.9914616346359253 +998,993.138427734375,1030.5106201171875,0.9976392984390259,968.24169921875,1028.5714111328125,0.9974084496498108 +999,991.471923828125,1031.20654296875,0.9932492971420288,967.061767578125,1028.4638671875,0.9986185431480408 +1000,990.531982421875,1031.527587890625,0.9884462952613831,965.4873657226562,1028.200927734375,0.9987953305244446 +1001,988.1754150390625,1032.0245361328125,0.9906236529350281,963.4484252929688,1028.1993408203125,0.9988995790481567 +1002,985.109130859375,1030.888671875,0.9983311295509338,961.506103515625,1028.0892333984375,0.9987923502922058 +1003,982.7015380859375,1030.18017578125,0.9992358684539795,959.2107543945312,1028.400390625,0.9961637854576111 +1004,981.2227783203125,1029.9833984375,0.9988773465156555,955.0275268554688,1028.677490234375,0.9920791983604431 +1005,980.388916015625,1029.7969970703125,0.9991939663887024,953.7901611328125,1028.0228271484375,0.991925835609436 +1006,980.0525512695312,1029.8223876953125,0.9988325834274292,954.5560913085938,1027.4259033203125,0.9911430478096008 +1007,979.6688232421875,1029.3492431640625,0.9992120862007141,954.4834594726562,1026.8984375,0.9926989078521729 +1008,979.636962890625,1029.53076171875,0.9990361928939819,953.8917236328125,1026.524169921875,0.9933061599731445 +1009,979.853271484375,1029.531005859375,0.999125063419342,954.0494995117188,1026.57666015625,0.9943601489067078 +1010,979.9327392578125,1029.4827880859375,0.999302089214325,954.2099609375,1026.46826171875,0.9961441159248352 +1011,979.702880859375,1029.1033935546875,0.999346911907196,953.8612060546875,1026.23779296875,0.9960811734199524 +1012,979.675048828125,1029.2025146484375,0.9993267059326172,954.10791015625,1026.40869140625,0.9953218698501587 +1013,979.6976318359375,1029.191162109375,0.9993239045143127,953.9759521484375,1026.142578125,0.9961926341056824 +1014,979.6174926757812,1029.18701171875,0.9992890357971191,954.23388671875,1026.1873779296875,0.9952716827392578 +1015,979.6046142578125,1029.1087646484375,0.9993390440940857,954.21142578125,1026.0927734375,0.9953267574310303 +1016,979.5374145507812,1029.009765625,0.9993742108345032,953.9703979492188,1026.1895751953125,0.9954441785812378 +1017,979.329833984375,1028.87646484375,0.9993405342102051,953.296630859375,1026.3040771484375,0.9968495965003967 +1018,979.6181640625,1029.002197265625,0.9992946982383728,953.682861328125,1026.3135986328125,0.9950388669967651 +1019,979.7611083984375,1029.0196533203125,0.9993973970413208,954.0376586914062,1026.5089111328125,0.9958992004394531 +1020,979.8084106445312,1029.085205078125,0.9992907047271729,954.8295288085938,1026.2506103515625,0.9932522773742676 +1021,979.2171020507812,1029.1551513671875,0.9993923306465149,954.7177124023438,1026.258544921875,0.9946946501731873 +1022,977.263671875,1029.4168701171875,0.998718798160553,952.0062866210938,1026.59228515625,0.9979134202003479 +1023,974.3220825195312,1027.92626953125,0.9975013732910156,949.037353515625,1026.9368896484375,0.9984639883041382 +1024,969.4457397460938,1027.7196044921875,0.998389720916748,945.4017944335938,1025.969970703125,0.9963218569755554 +1025,966.367431640625,1028.1256103515625,0.9993976950645447,940.873046875,1025.4315185546875,0.9954522848129272 +1026,964.099853515625,1027.9056396484375,0.9994296431541443,939.2853393554688,1023.4437866210938,0.995796799659729 +1027,962.16357421875,1027.6304931640625,0.999449610710144,936.6056518554688,1023.5001220703125,0.998816192150116 +1028,959.6050415039062,1027.567626953125,0.9992040991783142,934.3341064453125,1023.741455078125,0.9995313882827759 +1029,957.818359375,1026.451171875,0.9990190863609314,931.2452392578125,1024.478271484375,0.9996204972267151 +1030,954.4862670898438,1027.246337890625,0.9994497299194336,930.5148315429688,1024.8861083984375,0.9995736479759216 +1031,953.7293090820312,1027.6883544921875,0.9996117353439331,929.4569091796875,1024.570556640625,0.9993249177932739 +1032,952.3641357421875,1027.465576171875,0.9996491074562073,929.00439453125,1024.7962646484375,0.9990003108978271 +1033,952.014892578125,1027.4412841796875,0.9996914863586426,928.7998657226562,1025.1275634765625,0.9988642930984497 +1034,951.8861694335938,1027.3482666015625,0.9996777772903442,928.73876953125,1024.877197265625,0.9988623857498169 +1035,951.7899780273438,1027.1929931640625,0.9997103214263916,928.4935302734375,1024.5269775390625,0.998782753944397 +1036,951.6948852539062,1027.2039794921875,0.999796450138092,928.8104248046875,1024.8079833984375,0.9991213083267212 +1037,951.5872802734375,1027.159912109375,0.9998054504394531,928.3866577148438,1024.647705078125,0.9988685250282288 +1038,951.2955322265625,1026.836181640625,0.9998421669006348,927.9830322265625,1024.6380615234375,0.9987073540687561 +1039,951.0098266601562,1026.77685546875,0.9998506307601929,925.1422729492188,1025.060302734375,0.9982741475105286 +1040,950.9529418945312,1026.66845703125,0.9998668432235718,925.299560546875,1024.919921875,0.9988028407096863 +1041,951.041748046875,1026.6883544921875,0.9998595714569092,927.6878051757812,1024.4482421875,0.9989306330680847 +1042,951.1499633789062,1026.7392578125,0.9998611807823181,927.7794799804688,1024.395263671875,0.9989684820175171 +1043,951.18603515625,1026.69482421875,0.9998564720153809,927.7799072265625,1024.47021484375,0.9989106059074402 +1044,950.7259521484375,1026.4749755859375,0.9998701214790344,925.6320190429688,1024.8387451171875,0.9986069798469543 +1045,950.5065307617188,1026.3817138671875,0.9998704791069031,925.5223388671875,1024.965087890625,0.9984813332557678 +1046,949.7111206054688,1026.7266845703125,0.9998565912246704,924.5374755859375,1025.8077392578125,0.997869610786438 +1047,946.96337890625,1026.7674560546875,0.9996452331542969,921.8582763671875,1025.6114501953125,0.9981444478034973 +1048,944.6333618164062,1027.7005615234375,0.9981816411018372,918.9764404296875,1025.2216796875,0.9989217519760132 +1049,941.84619140625,1027.141357421875,0.9970360994338989,915.2021484375,1024.812744140625,0.9990419149398804 +1050,939.730224609375,1026.887451171875,0.9991351962089539,913.2072143554688,1024.36376953125,0.9988265037536621 +1051,937.2825927734375,1026.5645751953125,0.9997057914733887,911.9073486328125,1023.3436889648438,0.9987683892250061 +1052,936.36962890625,1026.3592529296875,0.9998476505279541,911.765380859375,1023.4441528320312,0.9987761378288269 +1053,935.6220092773438,1025.7474365234375,0.9998854398727417,908.956298828125,1023.2793579101562,0.9986510276794434 +1054,934.3719482421875,1025.38720703125,0.999918520450592,907.97607421875,1023.6744384765625,0.9987179636955261 +1055,933.33154296875,1025.657470703125,0.9999161958694458,907.2053833007812,1024.04150390625,0.9981998205184937 +1056,932.5618896484375,1026.071533203125,0.9998844265937805,906.7139282226562,1024.42041015625,0.9982466101646423 +1057,932.8219604492188,1026.2021484375,0.9999003410339355,907.0905151367188,1023.5807495117188,0.9977918863296509 +1058,932.8152465820312,1026.1583251953125,0.9998984932899475,906.31884765625,1023.049560546875,0.9986625909805298 +1059,932.9429321289062,1026.3585205078125,0.9998798966407776,906.0836791992188,1023.4779052734375,0.9986520409584045 +1060,933.1300659179688,1026.3602294921875,0.9998794794082642,906.0823974609375,1023.292724609375,0.9987305402755737 +1061,932.9038696289062,1026.230224609375,0.9998695850372314,905.429443359375,1023.111328125,0.9992660284042358 +1062,932.7959594726562,1026.0736083984375,0.9998732805252075,905.697998046875,1022.857177734375,0.9991632699966431 +1063,932.7012939453125,1026.00146484375,0.9998764991760254,906.0241088867188,1022.4937744140625,0.9991601705551147 +1064,932.71826171875,1025.8221435546875,0.9998698830604553,906.3748779296875,1022.107666015625,0.998869001865387 +1065,932.9371337890625,1025.7220458984375,0.9998880624771118,906.8268432617188,1021.9840087890625,0.9985020160675049 +1066,932.9622192382812,1025.8087158203125,0.9998591542243958,906.5301513671875,1022.2001953125,0.9987456202507019 +1067,932.8155517578125,1025.6988525390625,0.9998746514320374,906.0739135742188,1022.2496948242188,0.9990549087524414 +1068,932.6014404296875,1025.9163818359375,0.9998641610145569,905.6168823242188,1023.287353515625,0.9992423057556152 +1069,931.5132446289062,1025.88427734375,0.9998395442962646,904.1871948242188,1024.0233154296875,0.999411940574646 +1070,930.1748046875,1026.148193359375,0.9994090795516968,902.7449340820312,1024.873779296875,0.9993907809257507 +1071,927.3580932617188,1026.7479248046875,0.9992793202400208,901.5725708007812,1024.8712158203125,0.9994478225708008 +1072,924.9007568359375,1026.9542236328125,0.9982848763465881,899.1290283203125,1023.974609375,0.9989392757415771 +1073,923.3433227539062,1027.346923828125,0.9985492825508118,897.5166015625,1022.7025756835938,0.9973003268241882 +1074,922.123779296875,1026.794189453125,0.9989423155784607,896.5491333007812,1023.0418090820312,0.9975137710571289 +1075,921.8587036132812,1025.7593994140625,0.9993705749511719,896.4736328125,1021.8340454101562,0.9983785152435303 +1076,0.0,0.0,0.0,0.0,0.0,0.0 +1077,0.0,0.0,0.0,0.0,0.0,0.0 +1078,0.0,0.0,0.0,0.0,0.0,0.0 +1079,0.0,0.0,0.0,0.0,0.0,0.0 +1080,0.0,0.0,0.0,0.0,0.0,0.0 +1081,0.0,0.0,0.0,0.0,0.0,0.0 +1082,0.0,0.0,0.0,0.0,0.0,0.0 +1083,0.0,0.0,0.0,0.0,0.0,0.0 +1084,0.0,0.0,0.0,0.0,0.0,0.0 diff --git a/data/DLC_sample_poses.h5 b/data/DLC_sample_poses.h5 new file mode 100644 index 00000000..7ac74f4a Binary files /dev/null and b/data/DLC_sample_poses.h5 differ diff --git a/movement/__init__.py b/movement/__init__.py index 491fc87d..4e64c32d 100644 --- a/movement/__init__.py +++ b/movement/__init__.py @@ -1,7 +1,12 @@ from importlib.metadata import PackageNotFoundError, version +from movement.log_config import configure_logging try: __version__ = version("movement") except PackageNotFoundError: # package is not installed pass + + +# initialize logger upon import +configure_logging() diff --git a/movement/io/__init__.py b/movement/io/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/movement/io/load_poses.py b/movement/io/load_poses.py new file mode 100644 index 00000000..ed1e9bf5 --- /dev/null +++ b/movement/io/load_poses.py @@ -0,0 +1,92 @@ +import logging +from pathlib import Path +from typing import Optional, Union + +import pandas as pd + +from movement.io.validators import DeepLabCutPosesFile + +# get logger +logger = logging.getLogger(__name__) + + +def from_dlc(file_path: Union[Path, str]) -> Optional[pd.DataFrame]: + """Load pose estimation results from a DeepLabCut (DLC) files. + Files must be in .h5 format or .csv format. + + Parameters + ---------- + file_path : pathlib Path or str + Path to the file containing the DLC poses. + + Returns + ------- + pandas DataFrame + DataFrame containing the DLC poses + + Examples + -------- + >>> from movement.io import load_poses + >>> poses = load_poses.from_dlc("path/to/file.h5") + """ + + # Validate the input file path + dlc_poses_file = DeepLabCutPosesFile(file_path=file_path) # type: ignore + file_suffix = dlc_poses_file.file_path.suffix + + # Load the DLC poses + try: + if file_suffix == ".csv": + df = _parse_dlc_csv_to_dataframe(dlc_poses_file.file_path) + else: # file can only be .h5 at this point + df = pd.read_hdf(dlc_poses_file.file_path) + # above line does not necessarily return a DataFrame + df = pd.DataFrame(df) + except (OSError, TypeError, ValueError) as e: + error_msg = ( + f"Could not load poses from {file_path}. " + "Please check that the file is valid and readable." + ) + logger.error(error_msg) + raise OSError from e + logger.info(f"Loaded poses from {file_path}") + return df + + +def _parse_dlc_csv_to_dataframe(file_path: Path) -> pd.DataFrame: + """If poses are loaded from a DeepLabCut.csv file, the resulting DataFrame + lacks the multi-index columns that are present in the .h5 file. This + function parses the csv file to a DataFrame with multi-index columns. + + Parameters + ---------- + file_path : pathlib Path + Path to the file containing the DLC poses, in .csv format. + + Returns + ------- + pandas DataFrame + DataFrame containing the DLC poses, with multi-index columns. + """ + + possible_level_names = ["scorer", "bodyparts", "coords", "individual"] + with open(file_path, "r") as f: + # if line starts with a possible level name, split it into a list + # of strings, and add it to the list of header lines + header_lines = [ + line.strip().split(",") + for line in f.readlines() + if line.split(",")[0] in possible_level_names + ] + + # Form multi-index column names from the header lines + level_names = [line[0] for line in header_lines] + column_tuples = list(zip(*[line[1:] for line in header_lines])) + columns = pd.MultiIndex.from_tuples(column_tuples, names=level_names) + + # Import the DLC poses as a DataFrame + df = pd.read_csv( + file_path, skiprows=len(header_lines), index_col=0, names=columns + ) + df.columns.rename(level_names, inplace=True) + return df diff --git a/movement/io/validators.py b/movement/io/validators.py new file mode 100644 index 00000000..aae5d621 --- /dev/null +++ b/movement/io/validators.py @@ -0,0 +1,43 @@ +import logging +from pathlib import Path + +from pydantic import BaseModel, validator + +# initialize logger +logger = logging.getLogger(__name__) + + +class DeepLabCutPosesFile(BaseModel): + """Pydantic class for validating files containing + pose estimation results from DeepLabCut (DLC). + + Pydantic will enforce the input data type. + This class additionally checks that the file exists + and has a valid suffix. + """ + + file_path: Path + + @validator("file_path", pre=True) # runs before other validators + def convert_to_path(cls, value): + return Path(value) + + @validator("file_path") + def file_must_exist(cls, value): + if not value.is_file(): + error_msg = f"File not found: {value}" + logger.error(error_msg) + raise FileNotFoundError(error_msg) + return value + + @validator("file_path") + def file_must_have_valid_suffix(cls, value): + if value.suffix not in (".h5", ".csv"): + error_msg = ( + "Expected a file with pose estimation results from " + "DeepLabCut, in one of '.h5' or '.csv' formats. " + f"Received a file with suffix '{value.suffix}' instead." + ) + logger.error(error_msg) + raise ValueError(error_msg) + return value diff --git a/movement/log_config.py b/movement/log_config.py new file mode 100644 index 00000000..b788fa65 --- /dev/null +++ b/movement/log_config.py @@ -0,0 +1,61 @@ +import logging +from logging.handlers import RotatingFileHandler +from pathlib import Path + +FORMAT = ( + "%(asctime)s - %(levelname)s - " + "%(processName)s %(filename)s:%(lineno)s - %(message)s" +) + + +def configure_logging( + log_level: int = logging.DEBUG, + logger_name: str = "movement", + log_directory: Path = Path.home() / ".movement", +): + """Configure the logging module. + This function sets up a circular log file with a rotating file handler. + + Parameters + ---------- + log_level : int, optional + The logging level to use. Defaults to logging.INFO. + logger_name : str, optional + The name of the logger to configure. + Defaults to 'movement'. + log_directory : pathlib.Path, optional + The directory to store the log file in. Defaults to + ~/.movement. A different directory can be specified, + for example for testing purposes. + """ + + # Set the log directory and file path + log_directory.mkdir(parents=True, exist_ok=True) + log_file = log_directory / f"{logger_name}.log" + + # If a logger with the given name is already configured + if logger_name in logging.root.manager.loggerDict: + logger = logging.getLogger(logger_name) + handlers = logger.handlers[:] + # If the log file path has changed + if log_file.as_posix() != handlers[0].baseFilename: # type: ignore + # remove the handlers to allow for reconfiguration + for handler in handlers: + logger.removeHandler(handler) + else: + # otherwise, do nothing + return + + logger = logging.getLogger(logger_name) + logger.setLevel(log_level) + + # Create a rotating file handler + max_log_size = 5 * 1024 * 1024 # 5 MB + handler = RotatingFileHandler(log_file, maxBytes=max_log_size) + + # Create a formatter and set it to the handler + formatter = logging.Formatter(FORMAT) + handler.setFormatter(formatter) + + # Add the handler to the logger + logger.addHandler(handler) diff --git a/pyproject.toml b/pyproject.toml index df131420..c53e9b62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,8 +13,8 @@ license = {text = "BSD-3-Clause"} dependencies = [ "numpy", "pandas", - "rich", - "fancylog", + "h5py", + "pydantic", ] classifiers = [ diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..2b56fbae --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,16 @@ +import logging + +import pytest + +from movement.log_config import configure_logging + + +@pytest.fixture(autouse=True) +def setup_logging(tmp_path): + """Set up logging for the test module. + Redirects all logging to a temporary directory.""" + configure_logging( + log_level=logging.DEBUG, + logger_name="movement", + log_directory=(tmp_path / ".movement"), + ) diff --git a/tests/test_unit/test_io.py b/tests/test_unit/test_io.py new file mode 100644 index 00000000..2de93614 --- /dev/null +++ b/tests/test_unit/test_io.py @@ -0,0 +1,95 @@ +import os +from pathlib import Path + +import h5py +import pandas as pd +import pytest +from pandas.testing import assert_frame_equal +from pydantic import ValidationError + +from movement.io import load_poses + + +class TestLoadPoses: + """Test the load_poses module.""" + + @pytest.fixture + def valid_dlc_files(self): + """Return the paths to valid DLC poses files, + in .h5 format. + + Returns + ------- + dict + Dictionary containing the paths. + - h5_path: pathlib Path to a valid .h5 file + - h5_str: path as str to a valid .h5 file + """ + test_data_dir = Path(__file__).parent.parent.parent / "data" + h5_file = test_data_dir / "DLC_sample_poses.h5" + csv_file = test_data_dir / "DLC_sample_poses.csv" + return { + "h5_path": h5_file, + "h5_str": h5_file.as_posix(), + "csv_path": csv_file, + "csv_str": csv_file.as_posix(), + } + + @pytest.fixture + def invalid_files(self, tmp_path): + unreadable_file = tmp_path / "unreadable.h5" + with open(unreadable_file, "w") as f: + f.write("unreadable data") + os.chmod(f.name, 0o000) + + wrong_ext_file = tmp_path / "wrong_extension.txt" + with open(wrong_ext_file, "w") as f: + f.write("") + + h5_file_no_dataframe = tmp_path / "no_dataframe.h5" + with h5py.File(h5_file_no_dataframe, "w") as f: + f.create_dataset("data_in_list", data=[1, 2, 3]) + + nonexistent_file = tmp_path / "nonexistent.h5" + + return { + "unreadable": unreadable_file, + "wrong_ext": wrong_ext_file, + "no_dataframe": h5_file_no_dataframe, + "nonexistent": nonexistent_file, + } + + def test_load_valid_dlc_files(self, valid_dlc_files): + """Test loading valid DLC poses files.""" + for file_type, file_path in valid_dlc_files.items(): + df = load_poses.from_dlc(file_path) + assert isinstance(df, pd.DataFrame) + assert not df.empty + + def test_load_invalid_dlc_files(self, invalid_files): + """Test loading invalid DLC poses files.""" + for file_type, file_path in invalid_files.items(): + if file_type == "nonexistent": + with pytest.raises(FileNotFoundError): + load_poses.from_dlc(file_path) + elif file_type == "wrong_ext": + with pytest.raises(ValueError): + load_poses.from_dlc(file_path) + else: + with pytest.raises(OSError): + load_poses.from_dlc(file_path) + + @pytest.mark.parametrize("file_path", [1, 1.0, True, None, [], {}]) + def test_load_from_dlc_with_incorrect_file_path_types(self, file_path): + """Test loading poses from a file_path with an incorrect type.""" + with pytest.raises(ValidationError): + load_poses.from_dlc(file_path) + + def test_load_from_dlc_csv_or_h5_file_returns_same_df( + self, valid_dlc_files + ): + """Test that loading poses from DLC .csv and .h5 files + return the same DataFrame.""" + df_from_h5 = load_poses.from_dlc(valid_dlc_files["h5_path"]) + df_from_csv = load_poses.from_dlc(valid_dlc_files["csv_path"]) + assert_frame_equal(df_from_h5, df_from_csv) diff --git a/tests/test_unit/test_logging.py b/tests/test_unit/test_logging.py new file mode 100644 index 00000000..6dd4b9ae --- /dev/null +++ b/tests/test_unit/test_logging.py @@ -0,0 +1,23 @@ +import logging + +import pytest + +log_messages = { + "DEBUG": "This is a debug message", + "INFO": "This is an info message", + "WARNING": "This is a warning message", + "ERROR": "This is an error message", +} + + +@pytest.mark.parametrize("level, message", log_messages.items()) +def test_logfile_contains_message(level, message): + """Check if the last line of the logfile contains + the expected message.""" + logger = logging.getLogger("movement") + eval(f"logger.{level.lower()}('{message}')") + log_file = logger.handlers[0].baseFilename + with open(log_file, "r") as f: + last_line = f.readlines()[-1] + assert level in last_line + assert message in last_line diff --git a/tests/test_unit/test_placeholder.py b/tests/test_unit/test_placeholder.py deleted file mode 100644 index 3ada1ee4..00000000 --- a/tests/test_unit/test_placeholder.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_placeholder(): - assert True diff --git a/tox.ini b/tox.ini index 63e29ffc..f86eb66c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,4 +1,5 @@ [tox] +requires = tox-conda envlist = py{38,39,310,311} isolated_build = True @@ -10,6 +11,10 @@ python = 3.11: py311 [testenv] +conda_deps = + pytables +conda_channels = + conda-forge extras = dev commands =