diff --git a/.github/workflows/pd-test-build-deploy.yaml b/.github/workflows/pd-test-build-deploy.yaml index ce28d79e9a5..babebb5a918 100644 --- a/.github/workflows/pd-test-build-deploy.yaml +++ b/.github/workflows/pd-test-build-deploy.yaml @@ -164,7 +164,7 @@ jobs: run: | make -C protocol-designer NODE_ENV=development - name: 'upload github artifact' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: 'pd-artifact' path: protocol-designer/dist @@ -197,7 +197,7 @@ jobs: const { buildComplexEnvVars } = require(`${process.env.GITHUB_WORKSPACE}/.github/workflows/utils.js`) buildComplexEnvVars(core, context) - name: 'download PD build' - uses: 'actions/download-artifact@v3' + uses: 'actions/download-artifact@v4' with: name: pd-artifact path: ./dist diff --git a/abr-testing/Pipfile b/abr-testing/Pipfile index 613ca5203f7..8dd89eb5d9b 100644 --- a/abr-testing/Pipfile +++ b/abr-testing/Pipfile @@ -20,6 +20,7 @@ pandas = "*" pandas-stubs = "*" paramiko = "*" prettier = "*" +pydantic = "==2.9.0" [dev-packages] atomicwrites = "==1.4.1" diff --git a/abr-testing/Pipfile.lock b/abr-testing/Pipfile.lock index a2f82b44925..7793a4e0e4c 100644 --- a/abr-testing/Pipfile.lock +++ b/abr-testing/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f773f4880fa452637eeaf5e1aebee4ca6a1dc34907f588e0c6f71f0f222dc725" + "sha256": "ae4207dab4efffe35a5a0ad2539aa2ee746a3c6c604f54c18ccfcd14d5425537" }, "pipfile-spec": 6, "requires": { @@ -30,85 +30,85 @@ }, "aiohttp": { "hashes": [ - "sha256:012f176945af138abc10c4a48743327a92b4ca9adc7a0e078077cdb5dbab7be0", - "sha256:02c13415b5732fb6ee7ff64583a5e6ed1c57aa68f17d2bda79c04888dfdc2769", - "sha256:03b6002e20938fc6ee0918c81d9e776bebccc84690e2b03ed132331cca065ee5", - "sha256:04814571cb72d65a6899db6099e377ed00710bf2e3eafd2985166f2918beaf59", - "sha256:0580f2e12de2138f34debcd5d88894786453a76e98febaf3e8fe5db62d01c9bf", - "sha256:06a8e2ee1cbac16fe61e51e0b0c269400e781b13bcfc33f5425912391a542985", - "sha256:076bc454a7e6fd646bc82ea7f98296be0b1219b5e3ef8a488afbdd8e81fbac50", - "sha256:0c9527819b29cd2b9f52033e7fb9ff08073df49b4799c89cb5754624ecd98299", - "sha256:0dc49f42422163efb7e6f1df2636fe3db72713f6cd94688e339dbe33fe06d61d", - "sha256:14cdb5a9570be5a04eec2ace174a48ae85833c2aadc86de68f55541f66ce42ab", - "sha256:15fccaf62a4889527539ecb86834084ecf6e9ea70588efde86e8bc775e0e7542", - "sha256:24213ba85a419103e641e55c27dc7ff03536c4873470c2478cce3311ba1eee7b", - "sha256:31d5093d3acd02b31c649d3a69bb072d539d4c7659b87caa4f6d2bcf57c2fa2b", - "sha256:3691ed7726fef54e928fe26344d930c0c8575bc968c3e239c2e1a04bd8cf7838", - "sha256:386fbe79863eb564e9f3615b959e28b222259da0c48fd1be5929ac838bc65683", - "sha256:3bbbfff4c679c64e6e23cb213f57cc2c9165c9a65d63717108a644eb5a7398df", - "sha256:3de34936eb1a647aa919655ff8d38b618e9f6b7f250cc19a57a4bf7fd2062b6d", - "sha256:40d1c7a7f750b5648642586ba7206999650208dbe5afbcc5284bcec6579c9b91", - "sha256:44224d815853962f48fe124748227773acd9686eba6dc102578defd6fc99e8d9", - "sha256:47ad15a65fb41c570cd0ad9a9ff8012489e68176e7207ec7b82a0940dddfd8be", - "sha256:482cafb7dc886bebeb6c9ba7925e03591a62ab34298ee70d3dd47ba966370d2c", - "sha256:49c7dbbc1a559ae14fc48387a115b7d4bbc84b4a2c3b9299c31696953c2a5219", - "sha256:4b2c7ac59c5698a7a8207ba72d9e9c15b0fc484a560be0788b31312c2c5504e4", - "sha256:4cca22a61b7fe45da8fc73c3443150c3608750bbe27641fc7558ec5117b27fdf", - "sha256:4cfce37f31f20800a6a6620ce2cdd6737b82e42e06e6e9bd1b36f546feb3c44f", - "sha256:502a1464ccbc800b4b1995b302efaf426e8763fadf185e933c2931df7db9a199", - "sha256:53bf2097e05c2accc166c142a2090e4c6fd86581bde3fd9b2d3f9e93dda66ac1", - "sha256:593c114a2221444f30749cc5e5f4012488f56bd14de2af44fe23e1e9894a9c60", - "sha256:5d6958671b296febe7f5f859bea581a21c1d05430d1bbdcf2b393599b1cdce77", - "sha256:5ef359ebc6949e3a34c65ce20230fae70920714367c63afd80ea0c2702902ccf", - "sha256:613e5169f8ae77b1933e42e418a95931fb4867b2991fc311430b15901ed67079", - "sha256:61b9bae80ed1f338c42f57c16918853dc51775fb5cb61da70d590de14d8b5fb4", - "sha256:6362cc6c23c08d18ddbf0e8c4d5159b5df74fea1a5278ff4f2c79aed3f4e9f46", - "sha256:65a96e3e03300b41f261bbfd40dfdbf1c301e87eab7cd61c054b1f2e7c89b9e8", - "sha256:65e55ca7debae8faaffee0ebb4b47a51b4075f01e9b641c31e554fd376595c6c", - "sha256:68386d78743e6570f054fe7949d6cb37ef2b672b4d3405ce91fafa996f7d9b4d", - "sha256:68ff6f48b51bd78ea92b31079817aff539f6c8fc80b6b8d6ca347d7c02384e33", - "sha256:6ab29b8a0beb6f8eaf1e5049252cfe74adbaafd39ba91e10f18caeb0e99ffb34", - "sha256:77ae58586930ee6b2b6f696c82cf8e78c8016ec4795c53e36718365f6959dc82", - "sha256:77c4aa15a89847b9891abf97f3d4048f3c2d667e00f8a623c89ad2dccee6771b", - "sha256:78153314f26d5abef3239b4a9af20c229c6f3ecb97d4c1c01b22c4f87669820c", - "sha256:7852bbcb4d0d2f0c4d583f40c3bc750ee033265d80598d0f9cb6f372baa6b836", - "sha256:7e97d622cb083e86f18317282084bc9fbf261801b0192c34fe4b1febd9f7ae69", - "sha256:7f3dc0e330575f5b134918976a645e79adf333c0a1439dcf6899a80776c9ab39", - "sha256:80886dac673ceaef499de2f393fc80bb4481a129e6cb29e624a12e3296cc088f", - "sha256:811f23b3351ca532af598405db1093f018edf81368e689d1b508c57dcc6b6a32", - "sha256:86a5dfcc39309470bd7b68c591d84056d195428d5d2e0b5ccadfbaf25b026ebc", - "sha256:8b3cf2dc0f0690a33f2d2b2cb15db87a65f1c609f53c37e226f84edb08d10f52", - "sha256:8cc5203b817b748adccb07f36390feb730b1bc5f56683445bfe924fc270b8816", - "sha256:909af95a72cedbefe5596f0bdf3055740f96c1a4baa0dd11fd74ca4de0b4e3f1", - "sha256:974d3a2cce5fcfa32f06b13ccc8f20c6ad9c51802bb7f829eae8a1845c4019ec", - "sha256:98283b94cc0e11c73acaf1c9698dea80c830ca476492c0fe2622bd931f34b487", - "sha256:98f5635f7b74bcd4f6f72fcd85bea2154b323a9f05226a80bc7398d0c90763b0", - "sha256:99b7920e7165be5a9e9a3a7f1b680f06f68ff0d0328ff4079e5163990d046767", - "sha256:9bca390cb247dbfaec3c664326e034ef23882c3f3bfa5fbf0b56cad0320aaca5", - "sha256:9e2e576caec5c6a6b93f41626c9c02fc87cd91538b81a3670b2e04452a63def6", - "sha256:9ef405356ba989fb57f84cac66f7b0260772836191ccefbb987f414bcd2979d9", - "sha256:a55d2ad345684e7c3dd2c20d2f9572e9e1d5446d57200ff630e6ede7612e307f", - "sha256:ab7485222db0959a87fbe8125e233b5a6f01f4400785b36e8a7878170d8c3138", - "sha256:b1fc6b45010a8d0ff9e88f9f2418c6fd408c99c211257334aff41597ebece42e", - "sha256:b78f053a7ecfc35f0451d961dacdc671f4bcbc2f58241a7c820e9d82559844cf", - "sha256:b99acd4730ad1b196bfb03ee0803e4adac371ae8efa7e1cbc820200fc5ded109", - "sha256:be2b516f56ea883a3e14dda17059716593526e10fb6303189aaf5503937db408", - "sha256:beb39a6d60a709ae3fb3516a1581777e7e8b76933bb88c8f4420d875bb0267c6", - "sha256:bf3d1a519a324af764a46da4115bdbd566b3c73fb793ffb97f9111dbc684fc4d", - "sha256:c49a76c1038c2dd116fa443eba26bbb8e6c37e924e2513574856de3b6516be99", - "sha256:c5532f0441fc09c119e1dca18fbc0687e64fbeb45aa4d6a87211ceaee50a74c4", - "sha256:c6b9e6d7e41656d78e37ce754813fa44b455c3d0d0dced2a047def7dc5570b74", - "sha256:c87bf31b7fdab94ae3adbe4a48e711bfc5f89d21cf4c197e75561def39e223bc", - "sha256:cbad88a61fa743c5d283ad501b01c153820734118b65aee2bd7dbb735475ce0d", - "sha256:cf14627232dfa8730453752e9cdc210966490992234d77ff90bc8dc0dce361d5", - "sha256:db1d0b28fcb7f1d35600150c3e4b490775251dea70f894bf15c678fdd84eda6a", - "sha256:ddf5f7d877615f6a1e75971bfa5ac88609af3b74796ff3e06879e8422729fd01", - "sha256:e44a9a3c053b90c6f09b1bb4edd880959f5328cf63052503f892c41ea786d99f", - "sha256:efb15a17a12497685304b2d976cb4939e55137df7b09fa53f1b6a023f01fcb4e", - "sha256:fbbaea811a2bba171197b08eea288b9402faa2bab2ba0858eecdd0a4105753a3" + "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f", + "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33", + "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1", + "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665", + "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9", + "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e", + "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350", + "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226", + "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d", + "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a", + "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6", + "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add", + "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e", + "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8", + "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03", + "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e", + "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2", + "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1", + "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c", + "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538", + "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5", + "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e", + "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9", + "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3", + "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438", + "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12", + "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3", + "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853", + "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287", + "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2", + "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9", + "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c", + "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55", + "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c", + "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e", + "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1", + "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c", + "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194", + "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773", + "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e", + "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1", + "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d", + "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600", + "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34", + "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3", + "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8", + "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8", + "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2", + "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff", + "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62", + "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac", + "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef", + "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28", + "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab", + "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104", + "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76", + "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e", + "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d", + "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a", + "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5", + "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745", + "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4", + "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99", + "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43", + "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da", + "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231", + "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd", + "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d", + "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87", + "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886", + "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2", + "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b", + "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d", + "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f", + "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204", + "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e" ], "markers": "python_version >= '3.9'", - "version": "==3.11.10" + "version": "==3.11.11" }, "aionotify": { "hashes": [ @@ -120,11 +120,11 @@ }, "aiosignal": { "hashes": [ - "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", - "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" + "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", + "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" ], - "markers": "python_version >= '3.7'", - "version": "==1.3.1" + "markers": "python_version >= '3.9'", + "version": "==1.3.2" }, "annotated-types": { "hashes": [ @@ -147,16 +147,16 @@ "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3" ], - "markers": "python_version >= '3.8'", + "markers": "python_version < '3.11'", "version": "==5.0.1" }, "attrs": { "hashes": [ - "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", - "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2" + "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", + "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308" ], - "markers": "python_version >= '3.7'", - "version": "==24.2.0" + "markers": "python_version >= '3.8'", + "version": "==24.3.0" }, "bcrypt": { "hashes": [ @@ -199,11 +199,11 @@ }, "certifi": { "hashes": [ - "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], "markers": "python_version >= '3.6'", - "version": "==2024.8.30" + "version": "==2024.12.14" }, "cffi": { "hashes": [ @@ -275,127 +275,114 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "python_version >= '3.8'", + "markers": "platform_python_implementation != 'PyPy'", "version": "==1.17.1" }, "charset-normalizer": { "hashes": [ - "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", - "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", - "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", - "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", - "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", - "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", - "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", - "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", - "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", - "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", - "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", - "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", - "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", - "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", - "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", - "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", - "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", - "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", - "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", - "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", - "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", - "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", - "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", - "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", - "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", - "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", - "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", - "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", - "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", - "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", - "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", - "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", - "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", - "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", - "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", - "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", - "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", - "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", - "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", - "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", - "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", - "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", - "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", - "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", - "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", - "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", - "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", - "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", - "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", - "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", - "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", - "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", - "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", - "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", - "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", - "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", - "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", - "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", - "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", - "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", - "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", - "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", - "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", - "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", - "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", - "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", - "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", - "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", - "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", - "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", - "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", - "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", - "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", - "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", - "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", - "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", - "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", - "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", - "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", - "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", - "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", - "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", - "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", - "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", - "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", - "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", - "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", - "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", - "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", - "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", - "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.4.0" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "cryptography": { "hashes": [ @@ -435,7 +422,7 @@ "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.11'", "version": "==1.2.2" }, "frozenlist": { @@ -546,20 +533,20 @@ }, "google-api-python-client": { "hashes": [ - "sha256:1b420062e03bfcaa1c79e2e00a612d29a6a934151ceb3d272fe150a656dc8f17", - "sha256:a521bbbb2ec0ba9d6f307cdd64ed6e21eeac372d1bd7493a4ab5022941f784ad" + "sha256:0b0231db106324c659bf8b85f390391c00da57a60ebc4271e33def7aac198c75", + "sha256:2ee342d0967ad1cedec43ccd7699671d94bff151e1f06833ea81303f9a6d86fd" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.154.0" + "version": "==2.157.0" }, "google-auth": { "hashes": [ - "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb", - "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1" + "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00", + "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0" ], "markers": "python_version >= '3.7'", - "version": "==2.36.0" + "version": "==2.37.0" }, "google-auth-httplib2": { "hashes": [ @@ -616,19 +603,11 @@ }, "jsonschema": { "hashes": [ - "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", - "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566" + "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d", + "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6" ], - "markers": "python_version >= '3.8'", - "version": "==4.23.0" - }, - "jsonschema-specifications": { - "hashes": [ - "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", - "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf" - ], - "markers": "python_version >= '3.9'", - "version": "==2024.10.1" + "markers": "python_version >= '3.7'", + "version": "==4.17.3" }, "msgpack": { "hashes": [ @@ -689,7 +668,7 @@ "sha256:f9904e24646570539a8950400602d66d2b2c492b9010ea7e965025cb71d0c86d", "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d" ], - "markers": "python_version >= '3.8'", + "markers": "platform_system != 'Windows'", "version": "==1.0.8" }, "multidict": { @@ -829,7 +808,7 @@ "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f" ], - "markers": "python_version >= '3.9'", + "markers": "python_version < '3.11'", "version": "==1.26.4" }, "oauth2client": { @@ -1049,20 +1028,20 @@ }, "protobuf": { "hashes": [ - "sha256:012ce28d862ff417fd629285aca5d9772807f15ceb1a0dbd15b88f58c776c98c", - "sha256:027fbcc48cea65a6b17028510fdd054147057fa78f4772eb547b9274e5219331", - "sha256:1fc55267f086dd4050d18ef839d7bd69300d0d08c2a53ca7df3920cc271a3c34", - "sha256:22c1f539024241ee545cbcb00ee160ad1877975690b16656ff87dde107b5f110", - "sha256:32600ddb9c2a53dedc25b8581ea0f1fd8ea04956373c0c07577ce58d312522e0", - "sha256:50879eb0eb1246e3a5eabbbe566b44b10348939b7cc1b267567e8c3d07213853", - "sha256:5a41deccfa5e745cef5c65a560c76ec0ed8e70908a67cc8f4da5fce588b50d57", - "sha256:683be02ca21a6ffe80db6dd02c0b5b2892322c59ca57fd6c872d652cb80549cb", - "sha256:8ee1461b3af56145aca2800e6a3e2f928108c749ba8feccc6f5dd0062c410c0d", - "sha256:b5ba1d0e4c8a40ae0496d0e2ecfdbb82e1776928a205106d14ad6985a09ec155", - "sha256:d473655e29c0c4bbf8b69e9a8fb54645bc289dead6d753b952e7aa660254ae18" + "sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a", + "sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355", + "sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9", + "sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e", + "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9", + "sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb", + "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e", + "sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e", + "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851", + "sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19", + "sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181" ], "markers": "python_version >= '3.8'", - "version": "==5.29.1" + "version": "==5.29.2" }, "pyasn1": { "hashes": [ @@ -1090,125 +1069,115 @@ }, "pydantic": { "hashes": [ - "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d", - "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9" + "sha256:c7a8a9fdf7d100afa49647eae340e2d23efa382466a8d177efcd1381e9be5598", + "sha256:f66a7073abd93214a20c5f7b32d56843137a7a2e70d02111f3be287035c45370" ], + "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.10.3" + "version": "==2.9.0" }, "pydantic-core": { "hashes": [ - "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9", - "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b", - "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", - "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", - "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", - "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854", - "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", - "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", - "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a", - "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", - "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", - "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", - "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", - "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", - "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", - "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97", - "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", - "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", - "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", - "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4", - "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", - "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131", - "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", - "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd", - "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", - "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", - "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", - "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60", - "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", - "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", - "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", - "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", - "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2", - "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", - "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", - "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", - "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62", - "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", - "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be", - "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067", - "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", - "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f", - "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", - "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840", - "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5", - "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", - "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", - "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", - "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864", - "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e", - "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", - "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", - "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", - "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a", - "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3", - "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", - "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", - "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31", - "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", - "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", - "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", - "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36", - "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", - "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154", - "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", - "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", - "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd", - "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3", - "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", - "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78", - "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", - "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618", - "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", - "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", - "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", - "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c", - "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", - "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", - "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792", - "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", - "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9", - "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", - "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01", - "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", - "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", - "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f", - "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd", - "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", - "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab", - "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", - "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", - "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", - "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", - "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", - "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967", - "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", - "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", - "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", - "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", - "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b" + "sha256:0102e49ac7d2df3379ef8d658d3bc59d3d769b0bdb17da189b75efa861fc07b4", + "sha256:0123655fedacf035ab10c23450163c2f65a4174f2bb034b188240a6cf06bb123", + "sha256:043ef8469f72609c4c3a5e06a07a1f713d53df4d53112c6d49207c0bd3c3bd9b", + "sha256:0448b81c3dfcde439551bb04a9f41d7627f676b12701865c8a2574bcea034437", + "sha256:05b366fb8fe3d8683b11ac35fa08947d7b92be78ec64e3277d03bd7f9b7cda79", + "sha256:07049ec9306ec64e955b2e7c40c8d77dd78ea89adb97a2013d0b6e055c5ee4c5", + "sha256:084414ffe9a85a52940b49631321d636dadf3576c30259607b75516d131fecd0", + "sha256:086c5db95157dc84c63ff9d96ebb8856f47ce113c86b61065a066f8efbe80acf", + "sha256:12625e69b1199e94b0ae1c9a95d000484ce9f0182f9965a26572f054b1537e44", + "sha256:16b25a4a120a2bb7dab51b81e3d9f3cde4f9a4456566c403ed29ac81bf49744f", + "sha256:19f1352fe4b248cae22a89268720fc74e83f008057a652894f08fa931e77dced", + "sha256:1a2ab4f410f4b886de53b6bddf5dd6f337915a29dd9f22f20f3099659536b2f6", + "sha256:1c7b81beaf7c7ebde978377dc53679c6cba0e946426fc7ade54251dfe24a7604", + "sha256:1cf842265a3a820ebc6388b963ead065f5ce8f2068ac4e1c713ef77a67b71f7c", + "sha256:1eb37f7d6a8001c0f86dc8ff2ee8d08291a536d76e49e78cda8587bb54d8b329", + "sha256:23af245b8f2f4ee9e2c99cb3f93d0e22fb5c16df3f2f643f5a8da5caff12a653", + "sha256:257d6a410a0d8aeb50b4283dea39bb79b14303e0fab0f2b9d617701331ed1515", + "sha256:276ae78153a94b664e700ac362587c73b84399bd1145e135287513442e7dfbc7", + "sha256:2b1a195efd347ede8bcf723e932300292eb13a9d2a3c1f84eb8f37cbbc905b7f", + "sha256:329a721253c7e4cbd7aad4a377745fbcc0607f9d72a3cc2102dd40519be75ed2", + "sha256:358331e21a897151e54d58e08d0219acf98ebb14c567267a87e971f3d2a3be59", + "sha256:3649bd3ae6a8ebea7dc381afb7f3c6db237fc7cebd05c8ac36ca8a4187b03b30", + "sha256:3713dc093d5048bfaedbba7a8dbc53e74c44a140d45ede020dc347dda18daf3f", + "sha256:3ef71ec876fcc4d3bbf2ae81961959e8d62f8d74a83d116668409c224012e3af", + "sha256:41ae8537ad371ec018e3c5da0eb3f3e40ee1011eb9be1da7f965357c4623c501", + "sha256:4a801c5e1e13272e0909c520708122496647d1279d252c9e6e07dac216accc41", + "sha256:4c83c64d05ffbbe12d4e8498ab72bdb05bcc1026340a4a597dc647a13c1605ec", + "sha256:4cebb9794f67266d65e7e4cbe5dcf063e29fc7b81c79dc9475bd476d9534150e", + "sha256:5668b3173bb0b2e65020b60d83f5910a7224027232c9f5dc05a71a1deac9f960", + "sha256:56e6a12ec8d7679f41b3750ffa426d22b44ef97be226a9bab00a03365f217b2b", + "sha256:582871902e1902b3c8e9b2c347f32a792a07094110c1bca6c2ea89b90150caac", + "sha256:5c8aa40f6ca803f95b1c1c5aeaee6237b9e879e4dfb46ad713229a63651a95fb", + "sha256:5d813fd871b3d5c3005157622ee102e8908ad6011ec915a18bd8fde673c4360e", + "sha256:5dd0ec5f514ed40e49bf961d49cf1bc2c72e9b50f29a163b2cc9030c6742aa73", + "sha256:5f3cf3721eaf8741cffaf092487f1ca80831202ce91672776b02b875580e174a", + "sha256:6294907eaaccf71c076abdd1c7954e272efa39bb043161b4b8aa1cd76a16ce43", + "sha256:64d094ea1aa97c6ded4748d40886076a931a8bf6f61b6e43e4a1041769c39dd2", + "sha256:6650a7bbe17a2717167e3e23c186849bae5cef35d38949549f1c116031b2b3aa", + "sha256:67b6655311b00581914aba481729971b88bb8bc7996206590700a3ac85e457b8", + "sha256:6b06c5d4e8701ac2ba99a2ef835e4e1b187d41095a9c619c5b185c9068ed2a49", + "sha256:6ce883906810b4c3bd90e0ada1f9e808d9ecf1c5f0b60c6b8831d6100bcc7dd6", + "sha256:6db09153d8438425e98cdc9a289c5fade04a5d2128faff8f227c459da21b9703", + "sha256:6f80fba4af0cb1d2344869d56430e304a51396b70d46b91a55ed4959993c0589", + "sha256:743e5811b0c377eb830150d675b0847a74a44d4ad5ab8845923d5b3a756d8100", + "sha256:753294d42fb072aa1775bfe1a2ba1012427376718fa4c72de52005a3d2a22178", + "sha256:7568f682c06f10f30ef643a1e8eec4afeecdafde5c4af1b574c6df079e96f96c", + "sha256:7706e15cdbf42f8fab1e6425247dfa98f4a6f8c63746c995d6a2017f78e619ae", + "sha256:785e7f517ebb9890813d31cb5d328fa5eda825bb205065cde760b3150e4de1f7", + "sha256:7a05c0240f6c711eb381ac392de987ee974fa9336071fb697768dfdb151345ce", + "sha256:7ce7eaf9a98680b4312b7cebcdd9352531c43db00fca586115845df388f3c465", + "sha256:7ce8e26b86a91e305858e018afc7a6e932f17428b1eaa60154bd1f7ee888b5f8", + "sha256:7d0324a35ab436c9d768753cbc3c47a865a2cbc0757066cb864747baa61f6ece", + "sha256:7e9b24cca4037a561422bf5dc52b38d390fb61f7bfff64053ce1b72f6938e6b2", + "sha256:810ca06cca91de9107718dc83d9ac4d2e86efd6c02cba49a190abcaf33fb0472", + "sha256:820f6ee5c06bc868335e3b6e42d7ef41f50dfb3ea32fbd523ab679d10d8741c0", + "sha256:82764c0bd697159fe9947ad59b6db6d7329e88505c8f98990eb07e84cc0a5d81", + "sha256:8ae65fdfb8a841556b52935dfd4c3f79132dc5253b12c0061b96415208f4d622", + "sha256:8d5b0ff3218858859910295df6953d7bafac3a48d5cd18f4e3ed9999efd2245f", + "sha256:95d6bf449a1ac81de562d65d180af5d8c19672793c81877a2eda8fde5d08f2fd", + "sha256:964c7aa318da542cdcc60d4a648377ffe1a2ef0eb1e996026c7f74507b720a78", + "sha256:96ef39add33ff58cd4c112cbac076726b96b98bb8f1e7f7595288dcfb2f10b57", + "sha256:a6612c2a844043e4d10a8324c54cdff0042c558eef30bd705770793d70b224aa", + "sha256:a8031074a397a5925d06b590121f8339d34a5a74cfe6970f8a1124eb8b83f4ac", + "sha256:aab9e522efff3993a9e98ab14263d4e20211e62da088298089a03056980a3e69", + "sha256:ae579143826c6f05a361d9546446c432a165ecf1c0b720bbfd81152645cb897d", + "sha256:ae90b9e50fe1bd115b24785e962b51130340408156d34d67b5f8f3fa6540938e", + "sha256:b18cf68255a476b927910c6873d9ed00da692bb293c5b10b282bd48a0afe3ae2", + "sha256:b7efb12e5071ad8d5b547487bdad489fbd4a5a35a0fc36a1941517a6ad7f23e0", + "sha256:c4d9f15ffe68bcd3898b0ad7233af01b15c57d91cd1667f8d868e0eacbfe3f87", + "sha256:c53100c8ee5a1e102766abde2158077d8c374bee0639201f11d3032e3555dfbc", + "sha256:c57e493a0faea1e4c38f860d6862ba6832723396c884fbf938ff5e9b224200e2", + "sha256:c8319e0bd6a7b45ad76166cc3d5d6a36c97d0c82a196f478c3ee5346566eebfd", + "sha256:caffda619099cfd4f63d48462f6aadbecee3ad9603b4b88b60cb821c1b258576", + "sha256:cc0c316fba3ce72ac3ab7902a888b9dc4979162d320823679da270c2d9ad0cad", + "sha256:cdd02a08205dc90238669f082747612cb3c82bd2c717adc60f9b9ecadb540f80", + "sha256:d50ac34835c6a4a0d456b5db559b82047403c4317b3bc73b3455fefdbdc54b0a", + "sha256:d6b9dd6aa03c812017411734e496c44fef29b43dba1e3dd1fa7361bbacfc1354", + "sha256:da3131ef2b940b99106f29dfbc30d9505643f766704e14c5d5e504e6a480c35e", + "sha256:da43cbe593e3c87d07108d0ebd73771dc414488f1f91ed2e204b0370b94b37ac", + "sha256:dd59638025160056687d598b054b64a79183f8065eae0d3f5ca523cde9943940", + "sha256:e1895e949f8849bc2757c0dbac28422a04be031204df46a56ab34bcf98507342", + "sha256:e1a79ad49f346aa1a2921f31e8dbbab4d64484823e813a002679eaa46cba39e1", + "sha256:e460475719721d59cd54a350c1f71c797c763212c836bf48585478c5514d2854", + "sha256:e64ffaf8f6e17ca15eb48344d86a7a741454526f3a3fa56bc493ad9d7ec63936", + "sha256:e6e3ccebdbd6e53474b0bb7ab8b88e83c0cfe91484b25e058e581348ee5a01a5", + "sha256:e758d271ed0286d146cf7c04c539a5169a888dd0b57026be621547e756af55bc", + "sha256:f087879f1ffde024dd2788a30d55acd67959dcf6c431e9d3682d1c491a0eb474", + "sha256:f477d26183e94eaafc60b983ab25af2a809a1b48ce4debb57b343f671b7a90b6", + "sha256:fc535cb898ef88333cf317777ecdfe0faac1c2a3187ef7eb061b6f7ecf7e6bae" ], "markers": "python_version >= '3.8'", - "version": "==2.27.1" + "version": "==2.23.2" }, "pydantic-settings": { "hashes": [ - "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87", - "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0" + "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93", + "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd" ], "markers": "python_version >= '3.8'", - "version": "==2.6.1" + "version": "==2.7.1" }, "pynacl": { "hashes": [ @@ -1228,11 +1197,49 @@ }, "pyparsing": { "hashes": [ - "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", - "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c" + "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", + "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a" + ], + "markers": "python_version > '3.0'", + "version": "==3.2.1" + }, + "pyrsistent": { + "hashes": [ + "sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f", + "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", + "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", + "sha256:21cc459636983764e692b9eba7144cdd54fdec23ccdb1e8ba392a63666c60c34", + "sha256:2e14c95c16211d166f59c6611533d0dacce2e25de0f76e4c140fde250997b3ca", + "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", + "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", + "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", + "sha256:4f5c2d012671b7391803263419e31b5c7c21e7c95c8760d7fc35602353dee714", + "sha256:58b8f6366e152092194ae68fefe18b9f0b4f89227dfd86a07770c3d86097aebf", + "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", + "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", + "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", + "sha256:6d270ec9dd33cdb13f4d62c95c1a5a50e6b7cdd86302b494217137f760495b9d", + "sha256:79ed12ba79935adaac1664fd7e0e585a22caa539dfc9b7c7c6d5ebf91fb89054", + "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", + "sha256:8441cf9616d642c475684d6cf2520dd24812e996ba9af15e606df5f6fd9d04a7", + "sha256:881bbea27bbd32d37eb24dd320a5e745a2a5b092a17f6debc1349252fac85423", + "sha256:8c3aba3e01235221e5b229a6c05f585f344734bd1ad42a8ac51493d74722bbce", + "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", + "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", + "sha256:b318ca24db0f0518630e8b6f3831e9cba78f099ed5c1d65ffe3e023003043ba0", + "sha256:c1beb78af5423b879edaf23c5591ff292cf7c33979734c99aa66d5914ead880f", + "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", + "sha256:ca52d1ceae015859d16aded12584c59eb3825f7b50c6cfd621d4231a6cc624ce", + "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", + "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", + "sha256:ef3992833fbd686ee783590639f4b8343a57f1f75de8633749d984dc0eb16c86", + "sha256:f058a615031eea4ef94ead6456f5ec2026c19fb5bd6bfe86e9665c4158cf802f", + "sha256:f5ac696f02b3fc01a710427585c855f65cd9c640e14f52abe52020722bb4906b", + "sha256:f920385a11207dc372a028b3f1e1038bb244b3ec38d448e6d8e43c6b3ba20e98", + "sha256:fed2c3216a605dc9a6ea50c7e84c82906e3684c4e80d2908208f662a6cbf9022" ], - "markers": "python_version >= '3.9'", - "version": "==3.2.0" + "markers": "python_version >= '3.8'", + "version": "==0.20.0" }, "pyserial": { "hashes": [ @@ -1280,14 +1287,6 @@ "markers": "python_full_version >= '3.6.0'", "version": "==1.2.1" }, - "referencing": { - "hashes": [ - "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c", - "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de" - ], - "markers": "python_version >= '3.8'", - "version": "==0.35.1" - }, "requests": { "hashes": [ "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", @@ -1304,115 +1303,6 @@ "markers": "python_version >= '3.4'", "version": "==2.0.0" }, - "rpds-py": { - "hashes": [ - "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518", - "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059", - "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61", - "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5", - "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9", - "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543", - "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2", - "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a", - "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d", - "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56", - "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d", - "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd", - "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b", - "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4", - "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99", - "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d", - "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd", - "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe", - "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1", - "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e", - "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f", - "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3", - "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca", - "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d", - "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e", - "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc", - "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea", - "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38", - "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b", - "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c", - "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff", - "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723", - "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e", - "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493", - "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6", - "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83", - "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091", - "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1", - "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627", - "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1", - "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728", - "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16", - "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c", - "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45", - "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7", - "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a", - "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730", - "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967", - "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25", - "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24", - "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055", - "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d", - "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0", - "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e", - "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7", - "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c", - "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f", - "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd", - "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652", - "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8", - "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11", - "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333", - "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96", - "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64", - "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b", - "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e", - "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c", - "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9", - "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec", - "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb", - "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37", - "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad", - "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9", - "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c", - "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf", - "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4", - "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f", - "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d", - "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09", - "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d", - "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566", - "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74", - "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338", - "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15", - "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c", - "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648", - "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84", - "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3", - "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123", - "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520", - "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831", - "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e", - "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf", - "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b", - "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2", - "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3", - "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130", - "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b", - "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de", - "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5", - "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d", - "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00", - "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e" - ], - "markers": "python_version >= '3.9'", - "version": "==0.22.3" - }, "rsa": { "hashes": [ "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", @@ -1423,11 +1313,11 @@ }, "setuptools": { "hashes": [ - "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", - "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d" + "sha256:84fb203f278ebcf5cd08f97d3fb96d3fbed4b629d500b29ad60d11e00769b183", + "sha256:886ff7b16cd342f1d1defc16fc98c9ce3fde69e087a4e1983d7ab634e5f41f4f" ], "markers": "python_version >= '3.9'", - "version": "==75.6.0" + "version": "==75.7.0" }, "six": { "hashes": [ @@ -1439,12 +1329,12 @@ }, "slack-sdk": { "hashes": [ - "sha256:a5e74c00c99dc844ad93e501ab764a20d86fa8184bbc9432af217496f632c4ee", - "sha256:b8cccadfa3d4005a5e6529f52000d25c583f46173fda8e9136fdd2bc58923ff6" + "sha256:c61f57f310d85be83466db5a98ab6ae3bb2e5587437b54fa0daa8fae6a0feffa", + "sha256:ff61db7012160eed742285ea91f11c72b7a38a6500a7f6c5335662b4bc6b853d" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==3.33.5" + "version": "==3.34.0" }, "slackclient": { "hashes": [ @@ -1472,27 +1362,27 @@ }, "types-httplib2": { "hashes": [ - "sha256:1eda99fea18ec8a1dc1a725ead35b889d0836fec1b11ae6f1fe05440724c1d15", - "sha256:8cd706fc81f0da32789a4373a28df6f39e9d5657d1281db4d2fd22ee29e83661" + "sha256:42b67f16a6b0abb337a1fcea628dcd335e1e75f32cd198a657f41a6f4d507508", + "sha256:b15aed53ae5430b87205b6ac270d6332cb5e28e27151e2ac4848fe417827eb54" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==0.22.0.20240310" + "version": "==0.22.0.20241221" }, "types-pytz": { "hashes": [ - "sha256:3e22df1336c0c6ad1d29163c8fda82736909eb977281cb823c57f8bae07118b7", - "sha256:575dc38f385a922a212bac00a7d6d2e16e141132a3c955078f4a4fd13ed6cb44" + "sha256:06d7cde9613e9f7504766a0554a270c369434b50e00975b3a4a0f6eed0f2c1a9", + "sha256:8fc03195329c43637ed4f593663df721fef919b60a969066e22606edf0b53ad5" ], "markers": "python_version >= '3.8'", - "version": "==2024.2.0.20241003" + "version": "==2024.2.0.20241221" }, "typing-extensions": { "hashes": [ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version >= '3.8'", + "markers": "python_version < '3.13'", "version": "==4.12.2" }, "tzdata": { @@ -1500,7 +1390,7 @@ "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd" ], - "markers": "python_version >= '2'", + "markers": "python_version >= '3.9'", "version": "==2024.2" }, "uritemplate": { @@ -1513,11 +1403,11 @@ }, "urllib3": { "hashes": [ - "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.3" + "markers": "python_version >= '3.9'", + "version": "==2.3.0" }, "wrapt": { "hashes": [ @@ -1689,11 +1579,11 @@ }, "attrs": { "hashes": [ - "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", - "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2" + "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", + "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308" ], - "markers": "python_version >= '3.7'", - "version": "==24.2.0" + "markers": "python_version >= '3.8'", + "version": "==24.3.0" }, "black": { "hashes": [ @@ -1735,130 +1625,117 @@ }, "certifi": { "hashes": [ - "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], "markers": "python_version >= '3.6'", - "version": "==2024.8.30" + "version": "==2024.12.14" }, "charset-normalizer": { "hashes": [ - "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", - "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", - "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", - "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", - "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", - "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", - "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", - "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", - "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", - "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", - "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", - "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", - "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", - "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", - "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", - "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", - "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", - "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", - "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", - "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", - "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", - "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", - "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", - "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", - "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", - "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", - "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", - "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", - "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", - "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", - "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", - "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", - "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", - "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", - "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", - "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", - "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", - "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", - "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", - "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", - "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", - "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", - "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", - "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", - "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", - "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", - "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", - "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", - "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", - "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", - "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", - "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", - "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", - "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", - "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", - "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", - "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", - "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", - "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", - "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", - "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", - "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", - "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", - "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", - "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", - "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", - "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", - "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", - "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", - "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", - "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", - "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", - "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", - "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", - "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", - "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", - "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", - "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", - "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", - "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", - "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", - "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", - "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", - "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", - "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", - "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", - "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", - "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", - "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", - "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", - "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.4.0" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "colorama": { "hashes": [ @@ -1871,71 +1748,71 @@ }, "coverage": { "hashes": [ - "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4", - "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c", - "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f", - "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b", - "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6", - "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae", - "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692", - "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4", - "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4", - "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717", - "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d", - "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198", - "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1", - "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3", - "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb", - "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d", - "sha256:4e12ae8cc979cf83d258acb5e1f1cf2f3f83524d1564a49d20b8bec14b637f08", - "sha256:592ac539812e9b46046620341498caf09ca21023c41c893e1eb9dbda00a70cbf", - "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b", - "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710", - "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c", - "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae", - "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077", - "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00", - "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb", - "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664", - "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014", - "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9", - "sha256:8e3c3e38930cfb729cb8137d7f055e5a473ddaf1217966aa6238c88bd9fd50e6", - "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e", - "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9", - "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa", - "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611", - "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b", - "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a", - "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8", - "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030", - "sha256:a27801adef24cc30871da98a105f77995e13a25a505a0161911f6aafbd66e678", - "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015", - "sha256:adb697c0bd35100dc690de83154627fbab1f4f3c0386df266dded865fc50a902", - "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97", - "sha256:b9389a429e0e5142e69d5bf4a435dd688c14478a19bb901735cdf75e57b13845", - "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419", - "sha256:bb5555cff66c4d3d6213a296b360f9e1a8e323e74e0426b6c10ed7f4d021e464", - "sha256:be57b6d56e49c2739cdf776839a92330e933dd5e5d929966fbbd380c77f060be", - "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9", - "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7", - "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be", - "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1", - "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba", - "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5", - "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073", - "sha256:e28bf44afa2b187cc9f41749138a64435bf340adfcacb5b2290c070ce99839d4", - "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a", - "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a", - "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3", - "sha256:f1592791f8204ae9166de22ba7e6705fa4ebd02936c09436a1bb85aabca3e599", - "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0", - "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b", - "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec", - "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1", - "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3" + "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9", + "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f", + "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273", + "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994", + "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e", + "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50", + "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e", + "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e", + "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c", + "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853", + "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8", + "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8", + "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe", + "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165", + "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb", + "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59", + "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609", + "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18", + "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098", + "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd", + "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3", + "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43", + "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d", + "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359", + "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90", + "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78", + "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a", + "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99", + "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988", + "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2", + "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0", + "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694", + "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377", + "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d", + "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23", + "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312", + "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf", + "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6", + "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b", + "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c", + "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690", + "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a", + "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f", + "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4", + "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25", + "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd", + "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852", + "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0", + "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244", + "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315", + "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078", + "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0", + "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27", + "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132", + "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5", + "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247", + "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022", + "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b", + "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3", + "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18", + "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5", + "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f" ], "markers": "python_version >= '3.9'", - "version": "==7.6.9" + "version": "==7.6.10" }, "flake8": { "hashes": [ @@ -1982,12 +1859,12 @@ }, "google-api-python-client": { "hashes": [ - "sha256:1b420062e03bfcaa1c79e2e00a612d29a6a934151ceb3d272fe150a656dc8f17", - "sha256:a521bbbb2ec0ba9d6f307cdd64ed6e21eeac372d1bd7493a4ab5022941f784ad" + "sha256:0b0231db106324c659bf8b85f390391c00da57a60ebc4271e33def7aac198c75", + "sha256:2ee342d0967ad1cedec43ccd7699671d94bff151e1f06833ea81303f9a6d86fd" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.154.0" + "version": "==2.157.0" }, "google-api-python-client-stubs": { "hashes": [ @@ -2000,11 +1877,11 @@ }, "google-auth": { "hashes": [ - "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb", - "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1" + "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00", + "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0" ], "markers": "python_version >= '3.7'", - "version": "==2.36.0" + "version": "==2.37.0" }, "google-auth-httplib2": { "hashes": [ @@ -2137,20 +2014,20 @@ }, "protobuf": { "hashes": [ - "sha256:012ce28d862ff417fd629285aca5d9772807f15ceb1a0dbd15b88f58c776c98c", - "sha256:027fbcc48cea65a6b17028510fdd054147057fa78f4772eb547b9274e5219331", - "sha256:1fc55267f086dd4050d18ef839d7bd69300d0d08c2a53ca7df3920cc271a3c34", - "sha256:22c1f539024241ee545cbcb00ee160ad1877975690b16656ff87dde107b5f110", - "sha256:32600ddb9c2a53dedc25b8581ea0f1fd8ea04956373c0c07577ce58d312522e0", - "sha256:50879eb0eb1246e3a5eabbbe566b44b10348939b7cc1b267567e8c3d07213853", - "sha256:5a41deccfa5e745cef5c65a560c76ec0ed8e70908a67cc8f4da5fce588b50d57", - "sha256:683be02ca21a6ffe80db6dd02c0b5b2892322c59ca57fd6c872d652cb80549cb", - "sha256:8ee1461b3af56145aca2800e6a3e2f928108c749ba8feccc6f5dd0062c410c0d", - "sha256:b5ba1d0e4c8a40ae0496d0e2ecfdbb82e1776928a205106d14ad6985a09ec155", - "sha256:d473655e29c0c4bbf8b69e9a8fb54645bc289dead6d753b952e7aa660254ae18" + "sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a", + "sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355", + "sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9", + "sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e", + "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9", + "sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb", + "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e", + "sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e", + "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851", + "sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19", + "sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181" ], "markers": "python_version >= '3.8'", - "version": "==5.29.1" + "version": "==5.29.2" }, "py": { "hashes": [ @@ -2202,11 +2079,11 @@ }, "pyparsing": { "hashes": [ - "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", - "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c" + "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", + "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a" ], - "markers": "python_version >= '3.9'", - "version": "==3.2.0" + "markers": "python_version > '3.0'", + "version": "==3.2.1" }, "pytest": { "hashes": [ @@ -2289,12 +2166,12 @@ }, "types-httplib2": { "hashes": [ - "sha256:1eda99fea18ec8a1dc1a725ead35b889d0836fec1b11ae6f1fe05440724c1d15", - "sha256:8cd706fc81f0da32789a4373a28df6f39e9d5657d1281db4d2fd22ee29e83661" + "sha256:42b67f16a6b0abb337a1fcea628dcd335e1e75f32cd198a657f41a6f4d507508", + "sha256:b15aed53ae5430b87205b6ac270d6332cb5e28e27151e2ac4848fe417827eb54" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==0.22.0.20240310" + "version": "==0.22.0.20241221" }, "types-requests": { "hashes": [ @@ -2309,7 +2186,7 @@ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version >= '3.8'", + "markers": "python_version < '3.13'", "version": "==4.12.2" }, "uritemplate": { @@ -2322,11 +2199,11 @@ }, "urllib3": { "hashes": [ - "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.3" + "markers": "python_version >= '3.9'", + "version": "==2.3.0" } } } diff --git a/analyses-snapshot-testing/README.md b/analyses-snapshot-testing/README.md index 03ce1d87518..e38df61b4d5 100644 --- a/analyses-snapshot-testing/README.md +++ b/analyses-snapshot-testing/README.md @@ -86,3 +86,20 @@ You have the option to specify one or many protocols to run the analyses on. Thi ### Updating the snapshots locally - `make snapshot-test-update-local` - this target builds the base image, builds the local code into the base image, then runs the analyses battery against the image you just created, updating the snapshots by passing the `--update-snapshots` flag to the test + +### Add some protocols to the analyses battery + +> The below instructions avoid needing docker and executing snapshot tests locally. + +1. create new protocol file(s) in the [files/protocols](./files/protocols) directory following the naming convention in [files/README.md](./files/README.md) +1. add the protocol(s) to the [protocols.py](./automation/data/protocols.py) +1. `make format` (make sure you have followed setup instructions) +1. commit and push your branch +1. open a PR and add the label `gen-analyses-snapshot-pr` +1. when the snapshot fails because your new protocols don't have snapshots a PR will be created that heals. +1. merge the healing PR if the snapshots are as expected +1. get a review and merge! 🎉 now your protocols are a part of the test + +### Add a protocol with overrides to the analyses battery + +> TODO when we have a more straight forward example diff --git a/analyses-snapshot-testing/automation/data/protocols.py b/analyses-snapshot-testing/automation/data/protocols.py index ada74a736e0..8e19251d49e 100644 --- a/analyses-snapshot-testing/automation/data/protocols.py +++ b/analyses-snapshot-testing/automation/data/protocols.py @@ -708,6 +708,48 @@ class Protocols: file_extension="py", robot="Flex", ) + # analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_trash.py + Flex_X_v2_21_plate_reader_no_trash: Protocol = Protocol( + file_stem="Flex_X_v2_21_plate_reader_no_trash", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate.py + Flex_X_v2_21_plate_reader_wrong_plate: Protocol = Protocol( + file_stem="Flex_X_v2_21_plate_reader_wrong_plate", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate2.py + Flex_X_v2_21_plate_reader_wrong_plate2: Protocol = Protocol( + file_stem="Flex_X_v2_21_plate_reader_wrong_plate2", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_bad_slot.py + Flex_X_v2_21_plate_reader_bad_slot: Protocol = Protocol( + file_stem="Flex_X_v2_21_plate_reader_bad_slot", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_close_lid.py + Flex_X_v2_21_plate_reader_no_close_lid: Protocol = Protocol( + file_stem="Flex_X_v2_21_plate_reader_no_close_lid", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_S_v2_21_tc_lids_happy_path.py + Flex_S_v2_21_tc_lids_happy_path: Protocol = Protocol( + file_stem="Flex_S_v2_21_tc_lids_happy_path", + file_extension="py", + robot="Flex", + ) + # analyses-snapshot-testing/files/protocols/Flex_X_v2_21_tc_lids_wrong_target.py + Flex_X_v2_21_tc_lids_wrong_target: Protocol = Protocol( + file_stem="Flex_X_v2_21_tc_lids_wrong_target", + file_extension="py", + robot="Flex", + ) OT2_X_v2_18_None_None_duplicateRTPVariableName: Protocol = Protocol( file_stem="OT2_X_v2_18_None_None_duplicateRTPVariableName", diff --git a/analyses-snapshot-testing/files/protocols/README.md b/analyses-snapshot-testing/files/README.md similarity index 100% rename from analyses-snapshot-testing/files/protocols/README.md rename to analyses-snapshot-testing/files/README.md diff --git a/analyses-snapshot-testing/files/protocols/Flex_S_v2_21_tc_lids_happy_path.py b/analyses-snapshot-testing/files/protocols/Flex_S_v2_21_tc_lids_happy_path.py new file mode 100644 index 00000000000..41adb0c122d --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_S_v2_21_tc_lids_happy_path.py @@ -0,0 +1,99 @@ +from typing import List, Dict, Any, Optional +from opentrons.protocol_api import ProtocolContext, Labware + +metadata = {"protocolName": "Opentrons Flex Deck Riser with TC Lids Test"} +requirements = {"robotType": "Flex", "apiLevel": "2.21"} + + +""" +Setup: + - 1-5x lids are stacked in deck D2 + - Thermocycler installed + +Run: + - For each lid in the stack (1-5x) + - Move lid in D2 to Thermocycler + - Remove top-most lid + - PAUSE, wait for tester to press continue + - Move lid from Thermocycler to new slot C2 + - Stacked onto any previously placed lids +""" + +LID_STARTING_SLOT = "B2" +LID_ENDING_SLOT = "C2" +LID_COUNT = 3 +LID_DEFINITION = "opentrons_tough_pcr_auto_sealing_lid" +LID_BOTTOM_DEFINITION = "opentrons_tough_pcr_auto_sealing_lid" +DECK_RISER_NAME = "opentrons_flex_deck_riser" +USING_THERMOCYCLER = True + +OFFSET_DECK = { + "pick-up": {"x": 0, "y": 0, "z": 0}, + "drop": {"x": 0, "y": 0, "z": 0}, +} +OFFSET_THERMOCYCLER = { + "pick-up": {"x": 0, "y": 0, "z": 0}, + "drop": {"x": 0, "y": 0, "z": 0}, +} + + +def _move_labware_with_offset_and_pause( + protocol: ProtocolContext, + labware: Labware, + destination: Any, + pick_up_offset: Optional[Dict[str, float]] = None, + drop_offset: Optional[Dict[str, float]] = None, +) -> None: + protocol.move_labware( + labware, + destination, + use_gripper=True, + pick_up_offset=pick_up_offset, + drop_offset=drop_offset, + ) + + +def run(protocol: ProtocolContext): + # SETUP + deck_riser_adapter = protocol.load_adapter(DECK_RISER_NAME, "B2") + + lids: List[Labware] = [deck_riser_adapter.load_labware(LID_BOTTOM_DEFINITION)] + for i in range(LID_COUNT - 1): + lids.append(lids[-1].load_labware(LID_DEFINITION)) + lids.reverse() # NOTE: reversing to more easily loop through lids from top-to-bottom + if USING_THERMOCYCLER: + # TODO: confirm if we need to load 96-well adapter onto Thermocycler + thermocycler = protocol.load_module("thermocyclerModuleV2") + thermocycler.open_lid() + plate_in_cycler = thermocycler.load_labware("armadillo_96_wellplate_200ul_pcr_full_skirt") + else: + plate_in_cycler = None + + # RUN + prev_moved_lid: Optional[Labware] = None + for lid in lids: + + if USING_THERMOCYCLER: + _move_labware_with_offset_and_pause( + protocol, + lid, + plate_in_cycler, + pick_up_offset=OFFSET_DECK["pick-up"], + drop_offset=OFFSET_THERMOCYCLER["drop"], + ) + _move_labware_with_offset_and_pause( + protocol, + lid, + prev_moved_lid if prev_moved_lid else LID_ENDING_SLOT, + pick_up_offset=OFFSET_THERMOCYCLER["pick-up"], + drop_offset=OFFSET_DECK["drop"], + ) + else: + _move_labware_with_offset_and_pause( + protocol, + lid, + prev_moved_lid if prev_moved_lid else LID_ENDING_SLOT, + pick_up_offset=OFFSET_DECK["pick-up"], + drop_offset=OFFSET_DECK["drop"], + ) + prev_moved_lid = lid diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_bad_slot.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_bad_slot.py new file mode 100644 index 00000000000..ad6d96be786 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_bad_slot.py @@ -0,0 +1,22 @@ +from typing import cast +from opentrons import protocol_api +from opentrons.protocol_api.module_contexts import AbsorbanceReaderContext + +from opentrons import protocol_api +from opentrons.protocol_api import SINGLE, ALL + +requirements = {"robotType": "Flex", "apiLevel": "2.21"} +metadata = {"protocolName": "plate_reader bad slot"} + + +def run(protocol: protocol_api.ProtocolContext): + partial_rack = protocol.load_labware(load_name="opentrons_flex_96_tiprack_1000ul", location="D3") + trash = protocol.load_trash_bin("A3") + instrument = protocol.load_instrument(instrument_name="flex_8channel_1000", mount="right") + instrument.configure_nozzle_layout(style=SINGLE, start="H1", tip_racks=[partial_rack]) + + plate_1 = protocol.load_labware("nest_96_wellplate_200ul_flat", "D1") + mod = protocol.load_module("absorbanceReaderV1", "C1") + mod.open_lid() + protocol.move_labware(plate_1, mod, use_gripper=True) + mod.close_lid() diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_close_lid.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_close_lid.py new file mode 100644 index 00000000000..e231b4d0e1f --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_close_lid.py @@ -0,0 +1,88 @@ +from typing import cast +from opentrons import protocol_api +from opentrons.protocol_api.module_contexts import AbsorbanceReaderContext + +# metadata +metadata = { + "protocolName": "Absorbance Reader no close lid", + "author": "Platform Expansion", +} + +requirements = { + "robotType": "Flex", + "apiLevel": "2.21", +} + + +# protocol run function +def run(protocol: protocol_api.ProtocolContext): + mod = cast(AbsorbanceReaderContext, protocol.load_module("absorbanceReaderV1", "D3")) + plate = protocol.load_labware("nest_96_wellplate_200ul_flat", "C2") + tiprack_1000 = protocol.load_labware(load_name="opentrons_flex_96_tiprack_50ul", location="B2") + trash_labware = protocol.load_trash_bin("B3") + instrument = protocol.load_instrument("flex_8channel_50", "right", tip_racks=[tiprack_1000]) + + # pick up tip and perform action + instrument.pick_up_tip(tiprack_1000.wells_by_name()["A1"]) + instrument.aspirate(30, plate.wells_by_name()["A1"]) + instrument.dispense(30, plate.wells_by_name()["B1"]) + instrument.return_tip() + + # Initialize to a single wavelength with reference wavelength + # Issue: Make sure there is no labware here or youll get an error + # mod.close_lid() + mod.initialize("single", [600], 450) + + # NOTE: CANNOT INITIALIZE WITH THE LID OPEN + + # Remove the Plate Reader lid using the Gripper. + mod.open_lid() + protocol.move_labware(plate, mod, use_gripper=True) + mod.close_lid() + + # Take a reading and show the resulting absorbance values. + # Issue: cant read before you initialize or you an get an error + result = mod.read() + msg = f"single: {result}" + protocol.comment(msg=msg) + protocol.pause(msg=msg) + + # Initialize to multiple wavelengths + protocol.pause(msg="Perform Multi Read") + mod.open_lid() + protocol.move_labware(plate, "C2", use_gripper=True) + + mod.close_lid() + + # mod.initialize('multi', [450, 570, 600]) + mod.initialize("multi", [450, 600]) + # Open the lid and move the labware into the reader + mod.open_lid() + protocol.move_labware(plate, mod, use_gripper=True) + + # pick up tip and perform action on labware inside plate reader + instrument.pick_up_tip(tiprack_1000.wells_by_name()["A1"]) + instrument.aspirate(30, plate.wells_by_name()["A1"]) + instrument.dispense(30, plate.wells_by_name()["B1"]) + instrument.return_tip() + + mod.close_lid() + + # Take reading + result = mod.read() + msg = f"multi: {result}" + protocol.comment(msg=msg) + protocol.pause(msg=msg) + + # Take a reading and save to csv + protocol.pause(msg="Perform Read and Save to CSV") + result = mod.read(export_filename="plate_reader_csv.csv") + msg = f"csv: {result}" + protocol.pause(msg=msg) + + # Place the Plate Reader lid back on using the Gripper. + mod.open_lid() + protocol.move_labware(plate, "C2", use_gripper=True) + mod.close_lid() + + mod.read(export_filename="csv_name.csv") diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_trash.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_trash.py new file mode 100644 index 00000000000..8c839a54ff9 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_no_trash.py @@ -0,0 +1,24 @@ +from typing import cast +from opentrons import protocol_api +from opentrons.protocol_api.module_contexts import AbsorbanceReaderContext + +from opentrons import protocol_api +from opentrons.protocol_api import SINGLE, ALL + +requirements = {"robotType": "Flex", "apiLevel": "2.21"} +metadata = {"protocolName": "plate_reader no trash"} + + +def run(protocol: protocol_api.ProtocolContext): + partial_rack = protocol.load_labware(load_name="opentrons_flex_96_tiprack_1000ul", location="D2") + trash = protocol.load_trash_bin("A3") + instrument = protocol.load_instrument(instrument_name="flex_8channel_1000", mount="right") + instrument.configure_nozzle_layout(style=SINGLE, start="H1", tip_racks=[partial_rack]) + + plate_1 = protocol.load_labware("nest_96_wellplate_200ul_flat", "C1") + + mod = protocol.load_module("absorbanceReaderV1", "B3") + + mod.open_lid() + protocol.move_labware(plate_1, mod, use_gripper=True) + protocol.move_labware(plate_1, trash, use_gripper=True) diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate.py new file mode 100644 index 00000000000..bb3811a1631 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate.py @@ -0,0 +1,24 @@ +from typing import cast +from opentrons import protocol_api +from opentrons.protocol_api.module_contexts import AbsorbanceReaderContext + +from opentrons import protocol_api +from opentrons.protocol_api import SINGLE, ALL + +requirements = {"robotType": "Flex", "apiLevel": "2.21"} +metadata = {"protocolName": "plate_reader wrong plate"} + + +def run(protocol: protocol_api.ProtocolContext): + partial_rack = protocol.load_labware(load_name="opentrons_flex_96_tiprack_1000ul", location="D2") + trash = protocol.load_trash_bin("A3") + instrument = protocol.load_instrument(instrument_name="flex_8channel_1000", mount="right") + instrument.configure_nozzle_layout(style=SINGLE, start="H1", tip_racks=[partial_rack]) + + plate_1 = protocol.load_labware("corning_12_wellplate_6.9ml_flat", "C2") + + mod = protocol.load_module("absorbanceReaderV1", "B3") + + mod.open_lid() + protocol.move_labware(plate_1, mod, use_gripper=True) + protocol.move_labware(plate_1, trash, use_gripper=True) diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate2.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate2.py new file mode 100644 index 00000000000..cf6d0aefee9 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_plate_reader_wrong_plate2.py @@ -0,0 +1,24 @@ +from typing import cast +from opentrons import protocol_api +from opentrons.protocol_api.module_contexts import AbsorbanceReaderContext + +from opentrons import protocol_api +from opentrons.protocol_api import SINGLE, ALL + +requirements = {"robotType": "Flex", "apiLevel": "2.21"} +metadata = {"protocolName": "plate_reader wrong plate"} + + +def run(protocol: protocol_api.ProtocolContext): + partial_rack = protocol.load_labware(load_name="opentrons_flex_96_tiprack_1000ul", location="D2") + trash = protocol.load_trash_bin("A3") + instrument = protocol.load_instrument(instrument_name="flex_8channel_1000", mount="right") + instrument.configure_nozzle_layout(style=SINGLE, start="H1", tip_racks=[partial_rack]) + + plate_1 = protocol.load_labware("thermoscientificnunc_96_wellplate_2000ul", "C2") + + mod = protocol.load_module("absorbanceReaderV1", "B3") + + mod.open_lid() + protocol.move_labware(plate_1, mod, use_gripper=True) + protocol.move_labware(plate_1, trash, use_gripper=True) diff --git a/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_tc_lids_wrong_target.py b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_tc_lids_wrong_target.py new file mode 100644 index 00000000000..bf6ca7f7c89 --- /dev/null +++ b/analyses-snapshot-testing/files/protocols/Flex_X_v2_21_tc_lids_wrong_target.py @@ -0,0 +1,26 @@ +from typing import List, Dict, Any, Optional +from opentrons.protocol_api import ProtocolContext, Labware + +metadata = {"Stacking a deep well plate on its adapter "} +requirements = {"robotType": "Flex", "apiLevel": "2.21"} + + +def run(protocol: ProtocolContext): + temp_mod = protocol.load_module(module_name="temperature module gen2", location="D1") + LID_COUNT = 5 + LID_DEFINITION = "opentrons_tough_pcr_auto_sealing_lid" + LID_BOTTOM_DEFINITION = "opentrons_tough_pcr_auto_sealing_lid" + adapter = temp_mod.load_adapter("opentrons_96_deep_well_temp_mod_adapter") + stack = protocol.load_labware("nest_96_wellplate_2ml_deep", "A1") + deck_riser_adapter = protocol.load_adapter("opentrons_flex_deck_riser", "B2") + protocol.move_labware(stack, adapter) + lids = [deck_riser_adapter.load_labware(LID_BOTTOM_DEFINITION, "D2")] + for i in range(LID_COUNT - 1): + lids.append(lids[-1].load_labware(LID_DEFINITION)) + lids.reverse() # NOTE: reversing to more easily loop through lids from top-to-bottom + + protocol.move_labware( + lids[0], + stack, + use_gripper=True, + ) diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[34f32336bc][Flex_X_v2_21_plate_reader_wrong_plate2].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[34f32336bc][Flex_X_v2_21_plate_reader_wrong_plate2].json new file mode 100644 index 00000000000..7f50cfdd654 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[34f32336bc][Flex_X_v2_21_plate_reader_wrong_plate2].json @@ -0,0 +1,2558 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "thermoscientificnunc_96_wellplate_2000ul", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Thermo Scientific", + "brandId": [ + "278743", + "278752" + ], + "links": [ + "https://www.thermofisher.com/order/catalog/product/278743" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.8, + "yDimension": 85.5, + "zDimension": 43.6 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "u" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "Thermo Scientific Nunc 96 Well Plate 2000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "thermoscientificnunc_96_wellplate_2000ul", + "magneticModuleEngageHeight": 6, + "quirks": [] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 74.2, + "z": 2.1 + }, + "A10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 74.2, + "z": 2.1 + }, + "A11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 74.2, + "z": 2.1 + }, + "A12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 74.2, + "z": 2.1 + }, + "A2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 74.2, + "z": 2.1 + }, + "A3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 74.2, + "z": 2.1 + }, + "A4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 74.2, + "z": 2.1 + }, + "A5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 74.2, + "z": 2.1 + }, + "A6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 74.2, + "z": 2.1 + }, + "A7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 74.2, + "z": 2.1 + }, + "A8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 74.2, + "z": 2.1 + }, + "A9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 74.2, + "z": 2.1 + }, + "B1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 65.2, + "z": 2.1 + }, + "B10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 65.2, + "z": 2.1 + }, + "B11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 65.2, + "z": 2.1 + }, + "B12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 65.2, + "z": 2.1 + }, + "B2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 65.2, + "z": 2.1 + }, + "B3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 65.2, + "z": 2.1 + }, + "B4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 65.2, + "z": 2.1 + }, + "B5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 65.2, + "z": 2.1 + }, + "B6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 65.2, + "z": 2.1 + }, + "B7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 65.2, + "z": 2.1 + }, + "B8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 65.2, + "z": 2.1 + }, + "B9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 65.2, + "z": 2.1 + }, + "C1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 56.2, + "z": 2.1 + }, + "C10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 56.2, + "z": 2.1 + }, + "C11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 56.2, + "z": 2.1 + }, + "C12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 56.2, + "z": 2.1 + }, + "C2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 56.2, + "z": 2.1 + }, + "C3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 56.2, + "z": 2.1 + }, + "C4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 56.2, + "z": 2.1 + }, + "C5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 56.2, + "z": 2.1 + }, + "C6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 56.2, + "z": 2.1 + }, + "C7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 56.2, + "z": 2.1 + }, + "C8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 56.2, + "z": 2.1 + }, + "C9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 56.2, + "z": 2.1 + }, + "D1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 47.2, + "z": 2.1 + }, + "D10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 47.2, + "z": 2.1 + }, + "D11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 47.2, + "z": 2.1 + }, + "D12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 47.2, + "z": 2.1 + }, + "D2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 47.2, + "z": 2.1 + }, + "D3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 47.2, + "z": 2.1 + }, + "D4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 47.2, + "z": 2.1 + }, + "D5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 47.2, + "z": 2.1 + }, + "D6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 47.2, + "z": 2.1 + }, + "D7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 47.2, + "z": 2.1 + }, + "D8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 47.2, + "z": 2.1 + }, + "D9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 47.2, + "z": 2.1 + }, + "E1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 38.2, + "z": 2.1 + }, + "E10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 38.2, + "z": 2.1 + }, + "E11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 38.2, + "z": 2.1 + }, + "E12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 38.2, + "z": 2.1 + }, + "E2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 38.2, + "z": 2.1 + }, + "E3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 38.2, + "z": 2.1 + }, + "E4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 38.2, + "z": 2.1 + }, + "E5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 38.2, + "z": 2.1 + }, + "E6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 38.2, + "z": 2.1 + }, + "E7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 38.2, + "z": 2.1 + }, + "E8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 38.2, + "z": 2.1 + }, + "E9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 38.2, + "z": 2.1 + }, + "F1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 29.2, + "z": 2.1 + }, + "F10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 29.2, + "z": 2.1 + }, + "F11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 29.2, + "z": 2.1 + }, + "F12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 29.2, + "z": 2.1 + }, + "F2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 29.2, + "z": 2.1 + }, + "F3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 29.2, + "z": 2.1 + }, + "F4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 29.2, + "z": 2.1 + }, + "F5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 29.2, + "z": 2.1 + }, + "F6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 29.2, + "z": 2.1 + }, + "F7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 29.2, + "z": 2.1 + }, + "F8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 29.2, + "z": 2.1 + }, + "F9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 29.2, + "z": 2.1 + }, + "G1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 20.2, + "z": 2.1 + }, + "G10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 20.2, + "z": 2.1 + }, + "G11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 20.2, + "z": 2.1 + }, + "G12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 20.2, + "z": 2.1 + }, + "G2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 20.2, + "z": 2.1 + }, + "G3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 20.2, + "z": 2.1 + }, + "G4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 20.2, + "z": 2.1 + }, + "G5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 20.2, + "z": 2.1 + }, + "G6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 20.2, + "z": 2.1 + }, + "G7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 20.2, + "z": 2.1 + }, + "G8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 20.2, + "z": 2.1 + }, + "G9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 20.2, + "z": 2.1 + }, + "H1": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 14.3, + "y": 11.2, + "z": 2.1 + }, + "H10": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 95.3, + "y": 11.2, + "z": 2.1 + }, + "H11": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 104.3, + "y": 11.2, + "z": 2.1 + }, + "H12": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 113.3, + "y": 11.2, + "z": 2.1 + }, + "H2": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 23.3, + "y": 11.2, + "z": 2.1 + }, + "H3": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 32.3, + "y": 11.2, + "z": 2.1 + }, + "H4": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 41.3, + "y": 11.2, + "z": 2.1 + }, + "H5": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 50.3, + "y": 11.2, + "z": 2.1 + }, + "H6": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 59.3, + "y": 11.2, + "z": 2.1 + }, + "H7": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 68.3, + "y": 11.2, + "z": 2.1 + }, + "H8": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 77.3, + "y": 11.2, + "z": 2.1 + }, + "H9": { + "depth": 41.5, + "diameter": 8.5, + "shape": "circular", + "totalLiquidVolume": 2000, + "x": 86.3, + "y": 11.2, + "z": 2.1 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd0dee2da1b0019f4d98d523b981fabe", + "notes": [], + "params": { + "location": { + "slotName": "B3" + }, + "model": "absorbanceReaderV1" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 14.4, + "y": 64.93, + "z": 97.8 + }, + "compatibleWith": [], + "dimensions": { + "bareOverallHeight": 18.5, + "lidHeight": 60.0, + "overLabwareHeight": 0.0 + }, + "displayName": "Absorbance Plate Reader Module GEN1", + "gripperOffsets": {}, + "labwareOffset": { + "x": 0.0, + "y": 0.0, + "z": 0.65 + }, + "model": "absorbanceReaderV1", + "moduleType": "absorbanceReaderType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot2_short_trash": {}, + "ot2_standard": {}, + "ot3_standard": {} + } + }, + "model": "absorbanceReaderV1", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "absorbanceReader/openLid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fdcfee21f87b074844138ffaeaa61ee", + "notes": [], + "params": { + "moduleId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "Cannot move 'thermoscientificnunc_96_wellplate_2000ul' into plate reader because the maximum allowed labware height is 16mm.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "LabwareMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "02138c5885d43cc1dbadfd58415510c4", + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], + "params": { + "labwareId": "UUID", + "newLocation": { + "moduleId": "UUID" + }, + "strategy": "usingGripper" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 23]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): LabwareMovementNotAllowedError: Cannot move 'thermoscientificnunc_96_wellplate_2000ul' into plate reader because the maximum allowed labware height is 16mm.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "LabwareMovementNotAllowedError: Cannot move 'thermoscientificnunc_96_wellplate_2000ul' into plate reader because the maximum allowed labware height is 16mm.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot move 'thermoscientificnunc_96_wellplate_2000ul' into plate reader because the maximum allowed labware height is 16mm.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "LabwareMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_21_plate_reader_wrong_plate2.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/thermoscientificnunc_96_wellplate_2000ul/1", + "id": "UUID", + "loadName": "thermoscientificnunc_96_wellplate_2000ul", + "location": { + "slotName": "C2" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": { + "protocolName": "plate_reader wrong plate" + }, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "B3" + }, + "model": "absorbanceReaderV1", + "serialNumber": "UUID" + } + ], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[718c468b7d][Flex_X_v2_21_plate_reader_no_close_lid].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[718c468b7d][Flex_X_v2_21_plate_reader_no_close_lid].json new file mode 100644 index 00000000000..3375ed2fadd --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[718c468b7d][Flex_X_v2_21_plate_reader_no_close_lid].json @@ -0,0 +1,2624 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8511b05ba5565bf0e6dcccd800e2ee23", + "notes": [], + "params": { + "location": { + "slotName": "D3" + }, + "model": "absorbanceReaderV1" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 14.4, + "y": 64.93, + "z": 97.8 + }, + "compatibleWith": [], + "dimensions": { + "bareOverallHeight": 18.5, + "lidHeight": 60.0, + "overLabwareHeight": 0.0 + }, + "displayName": "Absorbance Plate Reader Module GEN1", + "gripperOffsets": {}, + "labwareOffset": { + "x": 0.0, + "y": 0.0, + "z": 0.65 + }, + "model": "absorbanceReaderV1", + "moduleType": "absorbanceReaderType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot2_short_trash": {}, + "ot2_standard": {}, + "ot3_standard": {} + } + }, + "model": "absorbanceReaderV1", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9563ff54d4bfe61c469a7da06e79f42", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_200ul_flat", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "701011" + ], + "links": [ + "https://www.nest-biotech.com/cell-culture-plates/59415537.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.56, + "yDimension": 85.36, + "zDimension": 14.3 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 11.8, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "flat" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 200 µL Flat", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_96_wellplate_200ul_flat" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_flat_bottom_adapter": { + "x": 0, + "y": 0, + "z": 6.7 + }, + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 5.55 + } + }, + "stackingOffsetWithModule": {}, + "version": 2, + "wells": { + "A1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 74.18, + "z": 3.5 + }, + "A10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 74.18, + "z": 3.5 + }, + "A11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 74.18, + "z": 3.5 + }, + "A12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 74.18, + "z": 3.5 + }, + "A2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 74.18, + "z": 3.5 + }, + "A3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 74.18, + "z": 3.5 + }, + "A4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 74.18, + "z": 3.5 + }, + "A5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 74.18, + "z": 3.5 + }, + "A6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 74.18, + "z": 3.5 + }, + "A7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 74.18, + "z": 3.5 + }, + "A8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 74.18, + "z": 3.5 + }, + "A9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 74.18, + "z": 3.5 + }, + "B1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 65.18, + "z": 3.5 + }, + "B10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 65.18, + "z": 3.5 + }, + "B11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 65.18, + "z": 3.5 + }, + "B12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 65.18, + "z": 3.5 + }, + "B2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 65.18, + "z": 3.5 + }, + "B3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 65.18, + "z": 3.5 + }, + "B4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 65.18, + "z": 3.5 + }, + "B5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 65.18, + "z": 3.5 + }, + "B6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 65.18, + "z": 3.5 + }, + "B7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 65.18, + "z": 3.5 + }, + "B8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 65.18, + "z": 3.5 + }, + "B9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 65.18, + "z": 3.5 + }, + "C1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 56.18, + "z": 3.5 + }, + "C10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 56.18, + "z": 3.5 + }, + "C11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 56.18, + "z": 3.5 + }, + "C12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 56.18, + "z": 3.5 + }, + "C2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 56.18, + "z": 3.5 + }, + "C3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 56.18, + "z": 3.5 + }, + "C4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 56.18, + "z": 3.5 + }, + "C5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 56.18, + "z": 3.5 + }, + "C6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 56.18, + "z": 3.5 + }, + "C7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 56.18, + "z": 3.5 + }, + "C8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 56.18, + "z": 3.5 + }, + "C9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 56.18, + "z": 3.5 + }, + "D1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 47.18, + "z": 3.5 + }, + "D10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 47.18, + "z": 3.5 + }, + "D11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 47.18, + "z": 3.5 + }, + "D12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 47.18, + "z": 3.5 + }, + "D2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 47.18, + "z": 3.5 + }, + "D3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 47.18, + "z": 3.5 + }, + "D4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 47.18, + "z": 3.5 + }, + "D5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 47.18, + "z": 3.5 + }, + "D6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 47.18, + "z": 3.5 + }, + "D7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 47.18, + "z": 3.5 + }, + "D8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 47.18, + "z": 3.5 + }, + "D9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 47.18, + "z": 3.5 + }, + "E1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 38.18, + "z": 3.5 + }, + "E10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 38.18, + "z": 3.5 + }, + "E11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 38.18, + "z": 3.5 + }, + "E12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 38.18, + "z": 3.5 + }, + "E2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 38.18, + "z": 3.5 + }, + "E3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 38.18, + "z": 3.5 + }, + "E4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 38.18, + "z": 3.5 + }, + "E5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 38.18, + "z": 3.5 + }, + "E6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 38.18, + "z": 3.5 + }, + "E7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 38.18, + "z": 3.5 + }, + "E8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 38.18, + "z": 3.5 + }, + "E9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 38.18, + "z": 3.5 + }, + "F1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 29.18, + "z": 3.5 + }, + "F10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 29.18, + "z": 3.5 + }, + "F11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 29.18, + "z": 3.5 + }, + "F12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 29.18, + "z": 3.5 + }, + "F2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 29.18, + "z": 3.5 + }, + "F3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 29.18, + "z": 3.5 + }, + "F4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 29.18, + "z": 3.5 + }, + "F5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 29.18, + "z": 3.5 + }, + "F6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 29.18, + "z": 3.5 + }, + "F7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 29.18, + "z": 3.5 + }, + "F8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 29.18, + "z": 3.5 + }, + "F9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 29.18, + "z": 3.5 + }, + "G1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 20.18, + "z": 3.5 + }, + "G10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 20.18, + "z": 3.5 + }, + "G11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 20.18, + "z": 3.5 + }, + "G12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 20.18, + "z": 3.5 + }, + "G2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 20.18, + "z": 3.5 + }, + "G3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 20.18, + "z": 3.5 + }, + "G4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 20.18, + "z": 3.5 + }, + "G5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 20.18, + "z": 3.5 + }, + "G6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 20.18, + "z": 3.5 + }, + "G7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 20.18, + "z": 3.5 + }, + "G8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 20.18, + "z": 3.5 + }, + "G9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 20.18, + "z": 3.5 + }, + "H1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 11.18, + "z": 3.5 + }, + "H10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 11.18, + "z": 3.5 + }, + "H11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 11.18, + "z": 3.5 + }, + "H12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 11.18, + "z": 3.5 + }, + "H2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 11.18, + "z": 3.5 + }, + "H3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 11.18, + "z": 3.5 + }, + "H4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 11.18, + "z": 3.5 + }, + "H5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 11.18, + "z": 3.5 + }, + "H6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 11.18, + "z": 3.5 + }, + "H7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 11.18, + "z": 3.5 + }, + "H8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 11.18, + "z": 3.5 + }, + "H9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 11.18, + "z": 3.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07af6536632377008ed92723cc8c5072", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 50 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_50ul", + "quirks": [], + "tipLength": 57.9, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.58, + "shape": "circular", + "totalLiquidVolume": 50, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07ec09c7938c2a88b56846006440a5ee", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "pickUpTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f064d7d6dd08b138fa904ed610358512", + "notes": [], + "params": { + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "top" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 99.0 + }, + "tipDiameter": 5.58, + "tipLength": 48.62, + "tipVolume": 50.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "aspirate", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "00e4e8cd652f128d3542e0e8ee3e531c", + "notes": [], + "params": { + "flowRate": 35.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 30.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -9.8 + }, + "origin": "top", + "volumeOffset": 0.0 + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.28, + "y": 181.18, + "z": 4.5 + }, + "volume": 30.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dispense", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "f7727e49089030d8d36b4d8af8ff97dc", + "notes": [], + "params": { + "flowRate": 57.0, + "labwareId": "UUID", + "pipetteId": "UUID", + "volume": 30.0, + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": -9.8 + }, + "origin": "top", + "volumeOffset": 0.0 + }, + "wellName": "B1" + }, + "result": { + "position": { + "x": 178.28, + "y": 172.18, + "z": 4.5 + }, + "volume": 30.0 + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "dropTip", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "3f368c52f4738504283097cb6935a781", + "notes": [], + "params": { + "alternateDropLocation": false, + "labwareId": "UUID", + "pipetteId": "UUID", + "wellLocation": { + "offset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "origin": "default" + }, + "wellName": "A1" + }, + "result": { + "position": { + "x": 178.38, + "y": 288.38, + "z": 57.891000000000005 + } + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "CannotPerformModuleAction [line 34]: Error 4000 GENERAL_ERROR (CannotPerformModuleAction): Cannot perform Initialize action on Absorbance Reader without calling `.close_lid()` first.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot perform Initialize action on Absorbance Reader without calling `.close_lid()` first.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "CannotPerformModuleAction", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_21_plate_reader_no_close_lid.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/nest_96_wellplate_200ul_flat/2", + "id": "UUID", + "loadName": "nest_96_wellplate_200ul_flat", + "location": { + "slotName": "C2" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_50ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_50ul", + "location": { + "slotName": "B2" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": { + "author": "Platform Expansion", + "protocolName": "Absorbance Reader no close lid" + }, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "D3" + }, + "model": "absorbanceReaderV1", + "serialNumber": "UUID" + } + ], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p50_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d16d5dbf0][Flex_X_v2_21_tc_lids_wrong_target].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d16d5dbf0][Flex_X_v2_21_tc_lids_wrong_target].json new file mode 100644 index 00000000000..a5d33bd3325 --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d16d5dbf0][Flex_X_v2_21_tc_lids_wrong_target].json @@ -0,0 +1,2041 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8511b05ba5565bf0e6dcccd800e2ee23", + "notes": [], + "params": { + "location": { + "slotName": "D1" + }, + "model": "temperatureModuleV2" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 11.7, + "y": 8.75, + "z": 80.09 + }, + "compatibleWith": [ + "temperatureModuleV1" + ], + "dimensions": { + "bareOverallHeight": 84.0, + "overLabwareHeight": 0.0 + }, + "displayName": "Temperature Module GEN2", + "gripperOffsets": { + "default": { + "dropOffset": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "pickUpOffset": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } + }, + "labwareOffset": { + "x": -1.45, + "y": -0.15, + "z": 80.09 + }, + "model": "temperatureModuleV2", + "moduleType": "temperatureModuleType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot2_short_trash": { + "3": { + "labwareOffset": [ + [ + -1, + -0.15, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + "6": { + "labwareOffset": [ + [ + -1, + -0.15, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + "9": { + "labwareOffset": [ + [ + -1, + -0.15, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + } + }, + "ot2_standard": { + "3": { + "labwareOffset": [ + [ + -1, + -0.3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + "6": { + "labwareOffset": [ + [ + -1, + -0.3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + "9": { + "labwareOffset": [ + [ + -1, + -0.3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + } + }, + "ot3_standard": { + "A1": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "A3": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "B1": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "B3": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "C1": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "C3": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "D1": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + }, + "D3": { + "labwareOffset": [ + [ + -71.09, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0.15, + 1 + ], + [ + 0, + 0, + 1, + 1.45 + ] + ] + } + } + } + }, + "model": "temperatureModuleV2", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b9563ff54d4bfe61c469a7da06e79f42", + "notes": [], + "params": { + "loadName": "opentrons_96_deep_well_temp_mod_adapter", + "location": { + "moduleId": "UUID" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [ + "adapter" + ], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0.125, + "y": 0.25, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.5, + "zDimension": 21.4 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [] + } + ], + "metadata": { + "displayCategory": "adapter", + "displayName": "Opentrons 96 Deep Well Temperature Module Adapter", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_96_deep_well_temp_mod_adapter", + "quirks": [] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": {} + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "07af6536632377008ed92723cc8c5072", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_2ml_deep", + "location": { + "slotName": "A1" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "503001", + "503501" + ], + "links": [ + "https://www.nest-biotech.com/deep-well-plates/59253726.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.6, + "yDimension": 85.3, + "zDimension": 41 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 21.9, + "gripperOffsets": {}, + "groups": [ + { + "brand": { + "brand": "NEST", + "brandId": [] + }, + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Deep Well Plate 2mL", + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Deep Well Plate 2mL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": true, + "isTiprack": false, + "loadName": "nest_96_wellplate_2ml_deep", + "magneticModuleEngageHeight": 6.8, + "quirks": [] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_deep_well_adapter": { + "x": 0, + "y": 0, + "z": 16.3 + }, + "opentrons_96_deep_well_temp_mod_adapter": { + "x": 0, + "y": 0, + "z": 16.1 + } + }, + "stackingOffsetWithModule": { + "magneticBlockV1": { + "x": 0, + "y": 0, + "z": 2.66 + } + }, + "version": 2, + "wells": { + "A1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "A9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 74.15, + "yDimension": 8.2, + "z": 3 + }, + "B1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "B9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 65.15, + "yDimension": 8.2, + "z": 3 + }, + "C1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "C9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 56.15, + "yDimension": 8.2, + "z": 3 + }, + "D1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "D9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 47.15, + "yDimension": 8.2, + "z": 3 + }, + "E1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "E9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 38.15, + "yDimension": 8.2, + "z": 3 + }, + "F1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "F9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 29.15, + "yDimension": 8.2, + "z": 3 + }, + "G1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "G9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 20.15, + "yDimension": 8.2, + "z": 3 + }, + "H1": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 14.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H10": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 95.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H11": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 104.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H12": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 113.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H2": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 23.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H3": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 32.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H4": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 41.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H5": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 50.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H6": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 59.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H7": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 68.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H8": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 77.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + }, + "H9": { + "depth": 38, + "shape": "rectangular", + "totalLiquidVolume": 2000, + "x": 86.3, + "xDimension": 8.2, + "y": 11.15, + "yDimension": 8.2, + "z": 3 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "8eec906a29ce38c4567cc9831a24cd13", + "notes": [], + "params": { + "loadName": "opentrons_flex_deck_riser", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [ + "adapter" + ], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": -6.125, + "y": -6.125, + "z": 0 + }, + "dimensions": { + "xDimension": 140, + "yDimension": 98, + "zDimension": 55 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [] + } + ], + "metadata": { + "displayCategory": "adapter", + "displayName": "Opentrons Flex Deck Riser", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_flex_deck_riser", + "quirks": [] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": {} + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "b96aaea662be1cd49d7d9b93dedfdd76", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "labwareId": "UUID" + }, + "strategy": "manualMoveWithPause" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": { + "args": "('Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "48dfe520259476c2688c469837455156", + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], + "params": { + "displayName": "D2", + "loadName": "opentrons_tough_pcr_auto_sealing_lid", + "location": { + "labwareId": "UUID" + }, + "namespace": "opentrons", + "version": 1 + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 17]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): PythonException: ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PythonException: ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": { + "args": "('Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_21_tc_lids_wrong_target.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_96_deep_well_temp_mod_adapter/1", + "id": "UUID", + "loadName": "opentrons_96_deep_well_temp_mod_adapter", + "location": { + "moduleId": "UUID" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_2ml_deep/2", + "id": "UUID", + "loadName": "nest_96_wellplate_2ml_deep", + "location": { + "labwareId": "UUID" + } + }, + { + "definitionUri": "opentrons/opentrons_flex_deck_riser/1", + "id": "UUID", + "loadName": "opentrons_flex_deck_riser", + "location": { + "slotName": "B2" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": {}, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "D1" + }, + "model": "temperatureModuleV2", + "serialNumber": "UUID" + } + ], + "pipettes": [], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[99c15c6c62][Flex_S_v2_21_tc_lids_happy_path].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[99c15c6c62][Flex_S_v2_21_tc_lids_happy_path].json new file mode 100644 index 00000000000..8644d850edb --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[99c15c6c62][Flex_S_v2_21_tc_lids_happy_path].json @@ -0,0 +1,195 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_deck_riser", + "location": { + "slotName": "B2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [ + "adapter" + ], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": -6.125, + "y": -6.125, + "z": 0 + }, + "dimensions": { + "xDimension": 140, + "yDimension": 98, + "zDimension": 55 + }, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [] + } + ], + "metadata": { + "displayCategory": "adapter", + "displayName": "Opentrons Flex Deck Riser", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "opentrons_flex_deck_riser", + "quirks": [] + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": {}, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": {} + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": { + "args": "('Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "50de88d471ad3910c29207fb6df4502e", + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], + "params": { + "loadName": "opentrons_tough_pcr_auto_sealing_lid", + "location": { + "labwareId": "UUID" + }, + "namespace": "opentrons", + "version": 1 + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 60]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): PythonException: ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PythonException: ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.", + "errorCode": "4000", + "errorInfo": { + "args": "('Labware Lid opentrons_tough_pcr_auto_sealing_lid may not be loaded on parent labware Opentrons Flex Deck Riser.',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_S_v2_21_tc_lids_happy_path.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_deck_riser/1", + "id": "UUID", + "loadName": "opentrons_flex_deck_riser", + "location": { + "slotName": "B2" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": { + "protocolName": "Opentrons Flex Deck Riser with TC Lids Test" + }, + "modules": [], + "pipettes": [], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a5ba8297e3][Flex_X_v2_21_plate_reader_no_trash].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a5ba8297e3][Flex_X_v2_21_plate_reader_no_trash].json new file mode 100644 index 00000000000..f10341a2a2a --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a5ba8297e3][Flex_X_v2_21_plate_reader_no_trash].json @@ -0,0 +1,2541 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_200ul_flat", + "location": { + "slotName": "C1" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "701011" + ], + "links": [ + "https://www.nest-biotech.com/cell-culture-plates/59415537.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.56, + "yDimension": 85.36, + "zDimension": 14.3 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 11.8, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "flat" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 200 µL Flat", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_96_wellplate_200ul_flat" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_flat_bottom_adapter": { + "x": 0, + "y": 0, + "z": 6.7 + }, + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 5.55 + } + }, + "stackingOffsetWithModule": {}, + "version": 2, + "wells": { + "A1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 74.18, + "z": 3.5 + }, + "A10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 74.18, + "z": 3.5 + }, + "A11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 74.18, + "z": 3.5 + }, + "A12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 74.18, + "z": 3.5 + }, + "A2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 74.18, + "z": 3.5 + }, + "A3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 74.18, + "z": 3.5 + }, + "A4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 74.18, + "z": 3.5 + }, + "A5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 74.18, + "z": 3.5 + }, + "A6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 74.18, + "z": 3.5 + }, + "A7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 74.18, + "z": 3.5 + }, + "A8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 74.18, + "z": 3.5 + }, + "A9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 74.18, + "z": 3.5 + }, + "B1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 65.18, + "z": 3.5 + }, + "B10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 65.18, + "z": 3.5 + }, + "B11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 65.18, + "z": 3.5 + }, + "B12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 65.18, + "z": 3.5 + }, + "B2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 65.18, + "z": 3.5 + }, + "B3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 65.18, + "z": 3.5 + }, + "B4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 65.18, + "z": 3.5 + }, + "B5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 65.18, + "z": 3.5 + }, + "B6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 65.18, + "z": 3.5 + }, + "B7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 65.18, + "z": 3.5 + }, + "B8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 65.18, + "z": 3.5 + }, + "B9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 65.18, + "z": 3.5 + }, + "C1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 56.18, + "z": 3.5 + }, + "C10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 56.18, + "z": 3.5 + }, + "C11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 56.18, + "z": 3.5 + }, + "C12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 56.18, + "z": 3.5 + }, + "C2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 56.18, + "z": 3.5 + }, + "C3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 56.18, + "z": 3.5 + }, + "C4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 56.18, + "z": 3.5 + }, + "C5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 56.18, + "z": 3.5 + }, + "C6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 56.18, + "z": 3.5 + }, + "C7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 56.18, + "z": 3.5 + }, + "C8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 56.18, + "z": 3.5 + }, + "C9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 56.18, + "z": 3.5 + }, + "D1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 47.18, + "z": 3.5 + }, + "D10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 47.18, + "z": 3.5 + }, + "D11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 47.18, + "z": 3.5 + }, + "D12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 47.18, + "z": 3.5 + }, + "D2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 47.18, + "z": 3.5 + }, + "D3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 47.18, + "z": 3.5 + }, + "D4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 47.18, + "z": 3.5 + }, + "D5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 47.18, + "z": 3.5 + }, + "D6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 47.18, + "z": 3.5 + }, + "D7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 47.18, + "z": 3.5 + }, + "D8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 47.18, + "z": 3.5 + }, + "D9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 47.18, + "z": 3.5 + }, + "E1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 38.18, + "z": 3.5 + }, + "E10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 38.18, + "z": 3.5 + }, + "E11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 38.18, + "z": 3.5 + }, + "E12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 38.18, + "z": 3.5 + }, + "E2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 38.18, + "z": 3.5 + }, + "E3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 38.18, + "z": 3.5 + }, + "E4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 38.18, + "z": 3.5 + }, + "E5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 38.18, + "z": 3.5 + }, + "E6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 38.18, + "z": 3.5 + }, + "E7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 38.18, + "z": 3.5 + }, + "E8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 38.18, + "z": 3.5 + }, + "E9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 38.18, + "z": 3.5 + }, + "F1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 29.18, + "z": 3.5 + }, + "F10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 29.18, + "z": 3.5 + }, + "F11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 29.18, + "z": 3.5 + }, + "F12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 29.18, + "z": 3.5 + }, + "F2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 29.18, + "z": 3.5 + }, + "F3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 29.18, + "z": 3.5 + }, + "F4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 29.18, + "z": 3.5 + }, + "F5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 29.18, + "z": 3.5 + }, + "F6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 29.18, + "z": 3.5 + }, + "F7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 29.18, + "z": 3.5 + }, + "F8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 29.18, + "z": 3.5 + }, + "F9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 29.18, + "z": 3.5 + }, + "G1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 20.18, + "z": 3.5 + }, + "G10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 20.18, + "z": 3.5 + }, + "G11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 20.18, + "z": 3.5 + }, + "G12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 20.18, + "z": 3.5 + }, + "G2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 20.18, + "z": 3.5 + }, + "G3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 20.18, + "z": 3.5 + }, + "G4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 20.18, + "z": 3.5 + }, + "G5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 20.18, + "z": 3.5 + }, + "G6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 20.18, + "z": 3.5 + }, + "G7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 20.18, + "z": 3.5 + }, + "G8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 20.18, + "z": 3.5 + }, + "G9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 20.18, + "z": 3.5 + }, + "H1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 11.18, + "z": 3.5 + }, + "H10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 11.18, + "z": 3.5 + }, + "H11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 11.18, + "z": 3.5 + }, + "H12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 11.18, + "z": 3.5 + }, + "H2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 11.18, + "z": 3.5 + }, + "H3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 11.18, + "z": 3.5 + }, + "H4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 11.18, + "z": 3.5 + }, + "H5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 11.18, + "z": 3.5 + }, + "H6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 11.18, + "z": 3.5 + }, + "H7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 11.18, + "z": 3.5 + }, + "H8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 11.18, + "z": 3.5 + }, + "H9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 11.18, + "z": 3.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd0dee2da1b0019f4d98d523b981fabe", + "notes": [], + "params": { + "location": { + "slotName": "B3" + }, + "model": "absorbanceReaderV1" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 14.4, + "y": 64.93, + "z": 97.8 + }, + "compatibleWith": [], + "dimensions": { + "bareOverallHeight": 18.5, + "lidHeight": 60.0, + "overLabwareHeight": 0.0 + }, + "displayName": "Absorbance Plate Reader Module GEN1", + "gripperOffsets": {}, + "labwareOffset": { + "x": 0.0, + "y": 0.0, + "z": 0.65 + }, + "model": "absorbanceReaderV1", + "moduleType": "absorbanceReaderType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot2_short_trash": {}, + "ot2_standard": {}, + "ot3_standard": {} + } + }, + "model": "absorbanceReaderV1", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "absorbanceReader/openLid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fdcfee21f87b074844138ffaeaa61ee", + "notes": [], + "params": { + "moduleId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "02138c5885d43cc1dbadfd58415510c4", + "notes": [], + "params": { + "labwareId": "UUID", + "newLocation": { + "moduleId": "UUID" + }, + "strategy": "usingGripper" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "LabwareMovementNotAllowedError [line 24]: Error 4000 GENERAL_ERROR (LabwareMovementNotAllowedError): Can only dispose of tips and Lid-type labware in a Trash Bin. Did you mean to use a Waste Chute?", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Can only dispose of tips and Lid-type labware in a Trash Bin. Did you mean to use a Waste Chute?", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "LabwareMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_21_plate_reader_no_trash.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_200ul_flat/2", + "id": "UUID", + "loadName": "nest_96_wellplate_200ul_flat", + "location": { + "moduleId": "UUID" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": { + "protocolName": "plate_reader no trash" + }, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "B3" + }, + "model": "absorbanceReaderV1", + "serialNumber": "UUID" + } + ], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ba14bd77a8][Flex_X_v2_21_plate_reader_bad_slot].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ba14bd77a8][Flex_X_v2_21_plate_reader_bad_slot].json new file mode 100644 index 00000000000..d9a486fcf9a --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ba14bd77a8][Flex_X_v2_21_plate_reader_bad_slot].json @@ -0,0 +1,2502 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D3" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "nest_96_wellplate_200ul_flat", + "location": { + "slotName": "D1" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "NEST", + "brandId": [ + "701011" + ], + "links": [ + "https://www.nest-biotech.com/cell-culture-plates/59415537.html" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.56, + "yDimension": 85.36, + "zDimension": 14.3 + }, + "gripForce": 15.0, + "gripHeightFromLabwareBottom": 11.8, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "flat" + }, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "NEST 96 Well Plate 200 µL Flat", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "nest_96_wellplate_200ul_flat" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_96_flat_bottom_adapter": { + "x": 0, + "y": 0, + "z": 6.7 + }, + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 5.55 + } + }, + "stackingOffsetWithModule": {}, + "version": 2, + "wells": { + "A1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 74.18, + "z": 3.5 + }, + "A10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 74.18, + "z": 3.5 + }, + "A11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 74.18, + "z": 3.5 + }, + "A12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 74.18, + "z": 3.5 + }, + "A2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 74.18, + "z": 3.5 + }, + "A3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 74.18, + "z": 3.5 + }, + "A4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 74.18, + "z": 3.5 + }, + "A5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 74.18, + "z": 3.5 + }, + "A6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 74.18, + "z": 3.5 + }, + "A7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 74.18, + "z": 3.5 + }, + "A8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 74.18, + "z": 3.5 + }, + "A9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 74.18, + "z": 3.5 + }, + "B1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 65.18, + "z": 3.5 + }, + "B10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 65.18, + "z": 3.5 + }, + "B11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 65.18, + "z": 3.5 + }, + "B12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 65.18, + "z": 3.5 + }, + "B2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 65.18, + "z": 3.5 + }, + "B3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 65.18, + "z": 3.5 + }, + "B4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 65.18, + "z": 3.5 + }, + "B5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 65.18, + "z": 3.5 + }, + "B6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 65.18, + "z": 3.5 + }, + "B7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 65.18, + "z": 3.5 + }, + "B8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 65.18, + "z": 3.5 + }, + "B9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 65.18, + "z": 3.5 + }, + "C1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 56.18, + "z": 3.5 + }, + "C10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 56.18, + "z": 3.5 + }, + "C11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 56.18, + "z": 3.5 + }, + "C12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 56.18, + "z": 3.5 + }, + "C2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 56.18, + "z": 3.5 + }, + "C3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 56.18, + "z": 3.5 + }, + "C4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 56.18, + "z": 3.5 + }, + "C5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 56.18, + "z": 3.5 + }, + "C6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 56.18, + "z": 3.5 + }, + "C7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 56.18, + "z": 3.5 + }, + "C8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 56.18, + "z": 3.5 + }, + "C9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 56.18, + "z": 3.5 + }, + "D1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 47.18, + "z": 3.5 + }, + "D10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 47.18, + "z": 3.5 + }, + "D11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 47.18, + "z": 3.5 + }, + "D12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 47.18, + "z": 3.5 + }, + "D2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 47.18, + "z": 3.5 + }, + "D3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 47.18, + "z": 3.5 + }, + "D4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 47.18, + "z": 3.5 + }, + "D5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 47.18, + "z": 3.5 + }, + "D6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 47.18, + "z": 3.5 + }, + "D7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 47.18, + "z": 3.5 + }, + "D8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 47.18, + "z": 3.5 + }, + "D9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 47.18, + "z": 3.5 + }, + "E1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 38.18, + "z": 3.5 + }, + "E10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 38.18, + "z": 3.5 + }, + "E11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 38.18, + "z": 3.5 + }, + "E12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 38.18, + "z": 3.5 + }, + "E2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 38.18, + "z": 3.5 + }, + "E3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 38.18, + "z": 3.5 + }, + "E4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 38.18, + "z": 3.5 + }, + "E5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 38.18, + "z": 3.5 + }, + "E6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 38.18, + "z": 3.5 + }, + "E7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 38.18, + "z": 3.5 + }, + "E8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 38.18, + "z": 3.5 + }, + "E9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 38.18, + "z": 3.5 + }, + "F1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 29.18, + "z": 3.5 + }, + "F10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 29.18, + "z": 3.5 + }, + "F11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 29.18, + "z": 3.5 + }, + "F12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 29.18, + "z": 3.5 + }, + "F2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 29.18, + "z": 3.5 + }, + "F3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 29.18, + "z": 3.5 + }, + "F4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 29.18, + "z": 3.5 + }, + "F5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 29.18, + "z": 3.5 + }, + "F6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 29.18, + "z": 3.5 + }, + "F7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 29.18, + "z": 3.5 + }, + "F8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 29.18, + "z": 3.5 + }, + "F9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 29.18, + "z": 3.5 + }, + "G1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 20.18, + "z": 3.5 + }, + "G10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 20.18, + "z": 3.5 + }, + "G11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 20.18, + "z": 3.5 + }, + "G12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 20.18, + "z": 3.5 + }, + "G2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 20.18, + "z": 3.5 + }, + "G3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 20.18, + "z": 3.5 + }, + "G4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 20.18, + "z": 3.5 + }, + "G5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 20.18, + "z": 3.5 + }, + "G6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 20.18, + "z": 3.5 + }, + "G7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 20.18, + "z": 3.5 + }, + "G8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 20.18, + "z": 3.5 + }, + "G9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 20.18, + "z": 3.5 + }, + "H1": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 14.28, + "y": 11.18, + "z": 3.5 + }, + "H10": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 95.28, + "y": 11.18, + "z": 3.5 + }, + "H11": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 104.28, + "y": 11.18, + "z": 3.5 + }, + "H12": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 113.28, + "y": 11.18, + "z": 3.5 + }, + "H2": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 23.28, + "y": 11.18, + "z": 3.5 + }, + "H3": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 32.28, + "y": 11.18, + "z": 3.5 + }, + "H4": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 41.28, + "y": 11.18, + "z": 3.5 + }, + "H5": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 50.28, + "y": 11.18, + "z": 3.5 + }, + "H6": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 59.28, + "y": 11.18, + "z": 3.5 + }, + "H7": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 68.28, + "y": 11.18, + "z": 3.5 + }, + "H8": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 77.28, + "y": 11.18, + "z": 3.5 + }, + "H9": { + "depth": 10.8, + "diameter": 6.85, + "shape": "circular", + "totalLiquidVolume": 200, + "x": 86.28, + "y": 11.18, + "z": 3.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "ValueError: A absorbanceReaderType cannot be loaded into slot C1", + "errorCode": "4000", + "errorInfo": { + "args": "('A absorbanceReaderType cannot be loaded into slot C1',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_module.py\", line N, in execute\n self._ensure_module_location(params.location.slotName, module_type)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_module.py\", line N, in _ensure_module_location\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "dd0dee2da1b0019f4d98d523b981fabe", + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], + "params": { + "location": { + "slotName": "C1" + }, + "model": "absorbanceReaderV1" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 19]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): PythonException: ValueError: A absorbanceReaderType cannot be loaded into slot C1", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "PythonException: ValueError: A absorbanceReaderType cannot be loaded into slot C1", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ValueError: A absorbanceReaderType cannot be loaded into slot C1", + "errorCode": "4000", + "errorInfo": { + "args": "('A absorbanceReaderType cannot be loaded into slot C1',)", + "class": "ValueError", + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_module.py\", line N, in execute\n self._ensure_module_location(params.location.slotName, module_type)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_module.py\", line N, in _ensure_module_location\n raise ValueError(\n" + }, + "errorType": "PythonException", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_21_plate_reader_bad_slot.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D3" + } + }, + { + "definitionUri": "opentrons/nest_96_wellplate_200ul_flat/2", + "id": "UUID", + "loadName": "nest_96_wellplate_200ul_flat", + "location": { + "slotName": "D1" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": { + "protocolName": "plate_reader bad slot" + }, + "modules": [], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fd26a20b4c][Flex_X_v2_21_plate_reader_wrong_plate].json b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fd26a20b4c][Flex_X_v2_21_plate_reader_wrong_plate].json new file mode 100644 index 00000000000..39c5598de8b --- /dev/null +++ b/analyses-snapshot-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fd26a20b4c][Flex_X_v2_21_plate_reader_wrong_plate].json @@ -0,0 +1,1625 @@ +{ + "commandAnnotations": [], + "commands": [ + { + "commandType": "home", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "50c7ae73a4e3f7129874f39dfb514803", + "notes": [], + "params": {}, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "73d9d4d55ae8466f3a793ceb70545fa5", + "notes": [], + "params": { + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + }, + "namespace": "opentrons", + "version": 1 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 85.75, + "zDimension": 99 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 23.9, + "gripperOffsets": {}, + "groups": [ + { + "metadata": {}, + "wells": [ + "A1", + "A10", + "A11", + "A12", + "A2", + "A3", + "A4", + "A5", + "A6", + "A7", + "A8", + "A9", + "B1", + "B10", + "B11", + "B12", + "B2", + "B3", + "B4", + "B5", + "B6", + "B7", + "B8", + "B9", + "C1", + "C10", + "C11", + "C12", + "C2", + "C3", + "C4", + "C5", + "C6", + "C7", + "C8", + "C9", + "D1", + "D10", + "D11", + "D12", + "D2", + "D3", + "D4", + "D5", + "D6", + "D7", + "D8", + "D9", + "E1", + "E10", + "E11", + "E12", + "E2", + "E3", + "E4", + "E5", + "E6", + "E7", + "E8", + "E9", + "F1", + "F10", + "F11", + "F12", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "G1", + "G10", + "G11", + "G12", + "G2", + "G3", + "G4", + "G5", + "G6", + "G7", + "G8", + "G9", + "H1", + "H10", + "H11", + "H12", + "H2", + "H3", + "H4", + "H5", + "H6", + "H7", + "H8", + "H9" + ] + } + ], + "metadata": { + "displayCategory": "tipRack", + "displayName": "Opentrons Flex 96 Tip Rack 1000 µL", + "displayVolumeUnits": "µL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1" + ], + [ + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10" + ], + [ + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11" + ], + [ + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ], + [ + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2" + ], + [ + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3" + ], + [ + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4" + ], + [ + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5" + ], + [ + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6" + ], + [ + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7" + ], + [ + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8" + ], + [ + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9" + ] + ], + "parameters": { + "format": "96Standard", + "isMagneticModuleCompatible": false, + "isTiprack": true, + "loadName": "opentrons_flex_96_tiprack_1000ul", + "quirks": [], + "tipLength": 95.6, + "tipOverlap": 10.5 + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 121 + } + }, + "stackingOffsetWithModule": {}, + "version": 1, + "wells": { + "A1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 74.38, + "z": 1.5 + }, + "A10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 74.38, + "z": 1.5 + }, + "A11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 74.38, + "z": 1.5 + }, + "A12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 74.38, + "z": 1.5 + }, + "A2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 74.38, + "z": 1.5 + }, + "A3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 74.38, + "z": 1.5 + }, + "A4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 74.38, + "z": 1.5 + }, + "A5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 74.38, + "z": 1.5 + }, + "A6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 74.38, + "z": 1.5 + }, + "A7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 74.38, + "z": 1.5 + }, + "A8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 74.38, + "z": 1.5 + }, + "A9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 74.38, + "z": 1.5 + }, + "B1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 65.38, + "z": 1.5 + }, + "B10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 65.38, + "z": 1.5 + }, + "B11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 65.38, + "z": 1.5 + }, + "B12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 65.38, + "z": 1.5 + }, + "B2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 65.38, + "z": 1.5 + }, + "B3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 65.38, + "z": 1.5 + }, + "B4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 65.38, + "z": 1.5 + }, + "B5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 65.38, + "z": 1.5 + }, + "B6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 65.38, + "z": 1.5 + }, + "B7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 65.38, + "z": 1.5 + }, + "B8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 65.38, + "z": 1.5 + }, + "B9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 65.38, + "z": 1.5 + }, + "C1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 56.38, + "z": 1.5 + }, + "C10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 56.38, + "z": 1.5 + }, + "C11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 56.38, + "z": 1.5 + }, + "C12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 56.38, + "z": 1.5 + }, + "C2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 56.38, + "z": 1.5 + }, + "C3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 56.38, + "z": 1.5 + }, + "C4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 56.38, + "z": 1.5 + }, + "C5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 56.38, + "z": 1.5 + }, + "C6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 56.38, + "z": 1.5 + }, + "C7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 56.38, + "z": 1.5 + }, + "C8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 56.38, + "z": 1.5 + }, + "C9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 56.38, + "z": 1.5 + }, + "D1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 47.38, + "z": 1.5 + }, + "D10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 47.38, + "z": 1.5 + }, + "D11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 47.38, + "z": 1.5 + }, + "D12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 47.38, + "z": 1.5 + }, + "D2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 47.38, + "z": 1.5 + }, + "D3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 47.38, + "z": 1.5 + }, + "D4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 47.38, + "z": 1.5 + }, + "D5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 47.38, + "z": 1.5 + }, + "D6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 47.38, + "z": 1.5 + }, + "D7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 47.38, + "z": 1.5 + }, + "D8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 47.38, + "z": 1.5 + }, + "D9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 47.38, + "z": 1.5 + }, + "E1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 38.38, + "z": 1.5 + }, + "E10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 38.38, + "z": 1.5 + }, + "E11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 38.38, + "z": 1.5 + }, + "E12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 38.38, + "z": 1.5 + }, + "E2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 38.38, + "z": 1.5 + }, + "E3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 38.38, + "z": 1.5 + }, + "E4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 38.38, + "z": 1.5 + }, + "E5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 38.38, + "z": 1.5 + }, + "E6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 38.38, + "z": 1.5 + }, + "E7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 38.38, + "z": 1.5 + }, + "E8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 38.38, + "z": 1.5 + }, + "E9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 38.38, + "z": 1.5 + }, + "F1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 29.38, + "z": 1.5 + }, + "F10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 29.38, + "z": 1.5 + }, + "F11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 29.38, + "z": 1.5 + }, + "F12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 29.38, + "z": 1.5 + }, + "F2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 29.38, + "z": 1.5 + }, + "F3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 29.38, + "z": 1.5 + }, + "F4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 29.38, + "z": 1.5 + }, + "F5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 29.38, + "z": 1.5 + }, + "F6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 29.38, + "z": 1.5 + }, + "F7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 29.38, + "z": 1.5 + }, + "F8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 29.38, + "z": 1.5 + }, + "F9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 29.38, + "z": 1.5 + }, + "G1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 20.38, + "z": 1.5 + }, + "G10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 20.38, + "z": 1.5 + }, + "G11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 20.38, + "z": 1.5 + }, + "G12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 20.38, + "z": 1.5 + }, + "G2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 20.38, + "z": 1.5 + }, + "G3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 20.38, + "z": 1.5 + }, + "G4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 20.38, + "z": 1.5 + }, + "G5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 20.38, + "z": 1.5 + }, + "G6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 20.38, + "z": 1.5 + }, + "G7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 20.38, + "z": 1.5 + }, + "G8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 20.38, + "z": 1.5 + }, + "G9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 20.38, + "z": 1.5 + }, + "H1": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 14.38, + "y": 11.38, + "z": 1.5 + }, + "H10": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 95.38, + "y": 11.38, + "z": 1.5 + }, + "H11": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 104.38, + "y": 11.38, + "z": 1.5 + }, + "H12": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 113.38, + "y": 11.38, + "z": 1.5 + }, + "H2": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 23.38, + "y": 11.38, + "z": 1.5 + }, + "H3": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 32.38, + "y": 11.38, + "z": 1.5 + }, + "H4": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 41.38, + "y": 11.38, + "z": 1.5 + }, + "H5": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 50.38, + "y": 11.38, + "z": 1.5 + }, + "H6": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 59.38, + "y": 11.38, + "z": 1.5 + }, + "H7": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 68.38, + "y": 11.38, + "z": 1.5 + }, + "H8": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 77.38, + "y": 11.38, + "z": 1.5 + }, + "H9": { + "depth": 97.5, + "diameter": 5.47, + "shape": "circular", + "totalLiquidVolume": 1000, + "x": 86.38, + "y": 11.38, + "z": 1.5 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadPipette", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "bd403a1c851a75b4b68ce34796d713fa", + "notes": [], + "params": { + "liquidPresenceDetection": false, + "mount": "right", + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v3" + }, + "result": { + "pipetteId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "configureNozzleLayout", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "2c37ad797da7df791b57a7843a203e88", + "notes": [], + "params": { + "configurationParams": { + "primaryNozzle": "H1", + "style": "SINGLE" + }, + "pipetteId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "691afd54dfa7982fb89e5f77c763bfd4", + "notes": [], + "params": { + "loadName": "corning_12_wellplate_6.9ml_flat", + "location": { + "slotName": "C2" + }, + "namespace": "opentrons", + "version": 2 + }, + "result": { + "definition": { + "allowedRoles": [], + "brand": { + "brand": "Corning", + "brandId": [ + "3336", + "3512", + "3513" + ], + "links": [ + "https://ecatalog.corning.com/life-sciences/b2c/US/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3513?clear=true" + ] + }, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "dimensions": { + "xDimension": 127.89, + "yDimension": 85.6, + "zDimension": 20.02 + }, + "gripForce": 16.0, + "gripHeightFromLabwareBottom": 18.3, + "gripperOffsets": {}, + "groups": [ + { + "metadata": { + "wellBottomShape": "flat" + }, + "wells": [ + "A1", + "A2", + "A3", + "A4", + "B1", + "B2", + "B3", + "B4", + "C1", + "C2", + "C3", + "C4" + ] + } + ], + "metadata": { + "displayCategory": "wellPlate", + "displayName": "Corning 12 Well Plate 6.9 mL Flat", + "displayVolumeUnits": "mL", + "tags": [] + }, + "namespace": "opentrons", + "ordering": [ + [ + "A1", + "B1", + "C1" + ], + [ + "A2", + "B2", + "C2" + ], + [ + "A3", + "B3", + "C3" + ], + [ + "A4", + "B4", + "C4" + ] + ], + "parameters": { + "format": "irregular", + "isMagneticModuleCompatible": false, + "isTiprack": false, + "loadName": "corning_12_wellplate_6.9ml_flat" + }, + "schemaVersion": 2, + "stackingOffsetWithLabware": { + "opentrons_aluminum_flat_bottom_plate": { + "x": 0, + "y": 0, + "z": 4.5 + } + }, + "stackingOffsetWithModule": {}, + "version": 2, + "wells": { + "A1": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 24.94, + "y": 68.81, + "z": 2.49 + }, + "A2": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 50.95, + "y": 68.81, + "z": 2.49 + }, + "A3": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 76.96, + "y": 68.81, + "z": 2.49 + }, + "A4": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 102.97, + "y": 68.81, + "z": 2.49 + }, + "B1": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 24.94, + "y": 42.8, + "z": 2.49 + }, + "B2": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 50.95, + "y": 42.8, + "z": 2.49 + }, + "B3": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 76.96, + "y": 42.8, + "z": 2.49 + }, + "B4": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 102.97, + "y": 42.8, + "z": 2.49 + }, + "C1": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 24.94, + "y": 16.79, + "z": 2.49 + }, + "C2": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 50.95, + "y": 16.79, + "z": 2.49 + }, + "C3": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 76.96, + "y": 16.79, + "z": 2.49 + }, + "C4": { + "depth": 17.53, + "diameter": 22.73, + "shape": "circular", + "totalLiquidVolume": 6900, + "x": 102.97, + "y": 16.79, + "z": 2.49 + } + } + }, + "labwareId": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "loadModule", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "dd0dee2da1b0019f4d98d523b981fabe", + "notes": [], + "params": { + "location": { + "slotName": "B3" + }, + "model": "absorbanceReaderV1" + }, + "result": { + "definition": { + "calibrationPoint": { + "x": 14.4, + "y": 64.93, + "z": 97.8 + }, + "compatibleWith": [], + "dimensions": { + "bareOverallHeight": 18.5, + "lidHeight": 60.0, + "overLabwareHeight": 0.0 + }, + "displayName": "Absorbance Plate Reader Module GEN1", + "gripperOffsets": {}, + "labwareOffset": { + "x": 0.0, + "y": 0.0, + "z": 0.65 + }, + "model": "absorbanceReaderV1", + "moduleType": "absorbanceReaderType", + "otSharedSchema": "module/schemas/2", + "quirks": [], + "slotTransforms": { + "ot2_short_trash": {}, + "ot2_standard": {}, + "ot3_standard": {} + } + }, + "model": "absorbanceReaderV1", + "moduleId": "UUID", + "serialNumber": "UUID" + }, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "absorbanceReader/openLid", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "id": "UUID", + "key": "0fdcfee21f87b074844138ffaeaa61ee", + "notes": [], + "params": { + "moduleId": "UUID" + }, + "result": {}, + "startedAt": "TIMESTAMP", + "status": "succeeded" + }, + { + "commandType": "moveLabware", + "completedAt": "TIMESTAMP", + "createdAt": "TIMESTAMP", + "error": { + "createdAt": "TIMESTAMP", + "detail": "Cannot move 'corning_12_wellplate_6.9ml_flat' into plate reader because the labware contains 12 wells where 96 wells is expected.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "LabwareMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + }, + "id": "UUID", + "key": "02138c5885d43cc1dbadfd58415510c4", + "notes": [ + { + "longMessage": "Handling this command failure with FAIL_RUN.", + "noteKind": "debugErrorRecovery", + "shortMessage": "Handling this command failure with FAIL_RUN.", + "source": "execution" + } + ], + "params": { + "labwareId": "UUID", + "newLocation": { + "moduleId": "UUID" + }, + "strategy": "usingGripper" + }, + "startedAt": "TIMESTAMP", + "status": "failed" + } + ], + "config": { + "apiVersion": [ + 2, + 21 + ], + "protocolType": "python" + }, + "createdAt": "TIMESTAMP", + "errors": [ + { + "createdAt": "TIMESTAMP", + "detail": "ProtocolCommandFailedError [line 23]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): LabwareMovementNotAllowedError: Cannot move 'corning_12_wellplate_6.9ml_flat' into plate reader because the labware contains 12 wells where 96 wells is expected.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ExceptionInProtocolError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "LabwareMovementNotAllowedError: Cannot move 'corning_12_wellplate_6.9ml_flat' into plate reader because the labware contains 12 wells where 96 wells is expected.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "ProtocolCommandFailedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [ + { + "createdAt": "TIMESTAMP", + "detail": "Cannot move 'corning_12_wellplate_6.9ml_flat' into plate reader because the labware contains 12 wells where 96 wells is expected.", + "errorCode": "4000", + "errorInfo": {}, + "errorType": "LabwareMovementNotAllowedError", + "id": "UUID", + "isDefined": false, + "wrappedErrors": [] + } + ] + } + ] + } + ], + "files": [ + { + "name": "Flex_X_v2_21_plate_reader_wrong_plate.py", + "role": "main" + } + ], + "labware": [ + { + "definitionUri": "opentrons/opentrons_flex_96_tiprack_1000ul/1", + "id": "UUID", + "loadName": "opentrons_flex_96_tiprack_1000ul", + "location": { + "slotName": "D2" + } + }, + { + "definitionUri": "opentrons/corning_12_wellplate_6.9ml_flat/2", + "id": "UUID", + "loadName": "corning_12_wellplate_6.9ml_flat", + "location": { + "slotName": "C2" + } + } + ], + "liquidClasses": [], + "liquids": [], + "metadata": { + "protocolName": "plate_reader wrong plate" + }, + "modules": [ + { + "id": "UUID", + "location": { + "slotName": "B3" + }, + "model": "absorbanceReaderV1", + "serialNumber": "UUID" + } + ], + "pipettes": [ + { + "id": "UUID", + "mount": "right", + "pipetteName": "p1000_multi_flex" + } + ], + "result": "not-ok", + "robotType": "OT-3 Standard", + "runTimeParameters": [] +} diff --git a/api/src/opentrons/drivers/flex_stacker/__init__.py b/api/src/opentrons/drivers/flex_stacker/__init__.py index cd4866c179a..66b4cda546b 100644 --- a/api/src/opentrons/drivers/flex_stacker/__init__.py +++ b/api/src/opentrons/drivers/flex_stacker/__init__.py @@ -1,9 +1,12 @@ -from .abstract import AbstractStackerDriver -from .driver import FlexStackerDriver +from .abstract import AbstractFlexStackerDriver +from .driver import FlexStackerDriver, STACKER_MOTION_CONFIG from .simulator import SimulatingDriver +from . import types as FlexStackerTypes __all__ = [ - "AbstractStackerDriver", + "AbstractFlexStackerDriver", "FlexStackerDriver", "SimulatingDriver", + "FlexStackerTypes", + "STACKER_MOTION_CONFIG", ] diff --git a/api/src/opentrons/drivers/flex_stacker/abstract.py b/api/src/opentrons/drivers/flex_stacker/abstract.py index 5ba3cdcb026..222e6715086 100644 --- a/api/src/opentrons/drivers/flex_stacker/abstract.py +++ b/api/src/opentrons/drivers/flex_stacker/abstract.py @@ -1,6 +1,8 @@ -from typing import Protocol +from typing import List, Protocol from .types import ( + LimitSwitchStatus, + MoveResult, StackerAxis, PlatformStatus, Direction, @@ -10,7 +12,7 @@ ) -class AbstractStackerDriver(Protocol): +class AbstractFlexStackerDriver(Protocol): """Protocol for the Stacker driver.""" async def connect(self) -> None: @@ -25,10 +27,6 @@ async def is_connected(self) -> bool: """Check connection to stacker.""" ... - async def update_firmware(self, firmware_file_path: str) -> None: - """Updates the firmware on the device.""" - ... - async def get_device_info(self) -> StackerInfo: """Get Device Info.""" ... @@ -37,10 +35,26 @@ async def set_serial_number(self, sn: str) -> bool: """Set Serial Number.""" ... + async def enable_motors(self, axis: List[StackerAxis]) -> bool: + """Enables the axis motor if present, disables it otherwise.""" + ... + async def stop_motors(self) -> bool: """Stop all motor movement.""" ... + async def set_run_current(self, axis: StackerAxis, current: float) -> bool: + """Set axis peak run current in amps.""" + ... + + async def set_ihold_current(self, axis: StackerAxis, current: float) -> bool: + """Set axis hold current in amps.""" + ... + + async def get_motion_params(self, axis: StackerAxis) -> MoveParams: + """Get the motion parameters used by the given axis motor.""" + ... + async def get_limit_switch(self, axis: StackerAxis, direction: Direction) -> bool: """Get limit switch status. @@ -48,6 +62,10 @@ async def get_limit_switch(self, axis: StackerAxis, direction: Direction) -> boo """ ... + async def get_limit_switches_status(self) -> LimitSwitchStatus: + """Get limit switch statuses for all axes.""" + ... + async def get_platform_sensor(self, direction: Direction) -> bool: """Get platform sensor status. @@ -68,13 +86,13 @@ async def get_hopper_door_closed(self) -> bool: async def move_in_mm( self, axis: StackerAxis, distance: float, params: MoveParams | None = None - ) -> bool: - """Move axis.""" + ) -> MoveResult: + """Move axis by the given distance in mm.""" ... async def move_to_limit_switch( self, axis: StackerAxis, direction: Direction, params: MoveParams | None = None - ) -> bool: + ) -> MoveResult: """Move until limit switch is triggered.""" ... @@ -87,3 +105,7 @@ async def set_led( ) -> bool: """Set LED color of status bar.""" ... + + async def enter_programming_mode(self) -> None: + """Reboot into programming mode""" + ... diff --git a/api/src/opentrons/drivers/flex_stacker/driver.py b/api/src/opentrons/drivers/flex_stacker/driver.py index 83671023772..366ea08b5f5 100644 --- a/api/src/opentrons/drivers/flex_stacker/driver.py +++ b/api/src/opentrons/drivers/flex_stacker/driver.py @@ -1,13 +1,14 @@ import asyncio import re -from typing import Optional +from typing import List, Optional from opentrons.drivers.command_builder import CommandBuilder from opentrons.drivers.asyncio.communication import AsyncResponseSerialConnection -from .abstract import AbstractStackerDriver +from .abstract import AbstractFlexStackerDriver from .types import ( GCODE, + MoveResult, StackerAxis, PlatformStatus, Direction, @@ -28,7 +29,59 @@ GCODE_ROUNDING_PRECISION = 2 -class FlexStackerDriver(AbstractStackerDriver): +STACKER_MOTION_CONFIG = { + StackerAxis.X: { + "home": MoveParams( + StackerAxis.X, + max_speed=10.0, + acceleration=100.0, + max_speed_discont=40, + current=1.5, + ), + "move": MoveParams( + StackerAxis.X, + max_speed=200.0, + acceleration=1500.0, + max_speed_discont=40, + current=1.0, + ), + }, + StackerAxis.Z: { + "home": MoveParams( + StackerAxis.Z, + max_speed=10.0, + acceleration=100.0, + max_speed_discont=40, + current=1.5, + ), + "move": MoveParams( + StackerAxis.Z, + max_speed=200.0, + acceleration=500.0, + max_speed_discont=40, + current=1.5, + ), + }, + StackerAxis.L: { + "home": MoveParams( + StackerAxis.L, + max_speed=100.0, + acceleration=800.0, + max_speed_discont=40, + current=0.8, + ), + "move": MoveParams( + StackerAxis.L, + max_speed=100.0, + acceleration=800.0, + max_speed_discont=40, + current=0.6, + ), + }, +} + + +class FlexStackerDriver(AbstractFlexStackerDriver): """FLEX Stacker driver.""" @classmethod @@ -76,6 +129,27 @@ def parse_door_closed(cls, response: str) -> bool: raise ValueError(f"Incorrect Response for door closed: {response}") return bool(int(match.group(1))) + @classmethod + def parse_move_params(cls, response: str) -> MoveParams: + """Parse move params.""" + field_names = MoveParams.get_fields() + pattern = r"\s".join( + [ + rf"{f}:(?P<{f}>(\d*\.)?\d+)" if f != "M" else rf"{f}:(?P<{f}>[X,Z,L])" + for f in field_names + ] + ) + _RE = re.compile(f"^{GCODE.GET_MOVE_PARAMS} {pattern}$") + m = _RE.match(response) + if not m: + raise ValueError(f"Incorrect Response for move params: {response}") + return MoveParams( + axis=StackerAxis(m.group("M")), + max_speed=float(m.group("V")), + acceleration=float(m.group("A")), + max_speed_discont=float(m.group("D")), + ) + @classmethod def append_move_params( cls, command: CommandBuilder, params: MoveParams | None @@ -148,6 +222,16 @@ async def set_serial_number(self, sn: str) -> bool: raise ValueError(f"Incorrect Response for set serial number: {resp}") return True + async def enable_motors(self, axis: List[StackerAxis]) -> bool: + """Enables the axis motor if present, disables it otherwise.""" + command = GCODE.ENABLE_MOTORS.build_command() + for a in axis: + command.add_element(a.name) + resp = await self._connection.send_command(command) + if not re.match(rf"^{GCODE.ENABLE_MOTORS}$", resp): + raise ValueError(f"Incorrect Response for enable motors: {resp}") + return True + async def stop_motors(self) -> bool: """Stop all motor movement.""" resp = await self._connection.send_command(GCODE.STOP_MOTORS.build_command()) @@ -155,6 +239,31 @@ async def stop_motors(self) -> bool: raise ValueError(f"Incorrect Response for stop motors: {resp}") return True + async def set_run_current(self, axis: StackerAxis, current: float) -> bool: + """Set axis peak run current in amps.""" + resp = await self._connection.send_command( + GCODE.SET_RUN_CURRENT.build_command().add_float(axis.name, current) + ) + if not re.match(rf"^{GCODE.SET_RUN_CURRENT}$", resp): + raise ValueError(f"Incorrect Response for set run current: {resp}") + return True + + async def set_ihold_current(self, axis: StackerAxis, current: float) -> bool: + """Set axis hold current in amps.""" + resp = await self._connection.send_command( + GCODE.SET_IHOLD_CURRENT.build_command().add_float(axis.name, current) + ) + if not re.match(rf"^{GCODE.SET_IHOLD_CURRENT}$", resp): + raise ValueError(f"Incorrect Response for set ihold current: {resp}") + return True + + async def get_motion_params(self, axis: StackerAxis) -> MoveParams: + """Get the motion parameters used by the given axis motor.""" + response = await self._connection.send_command( + GCODE.GET_MOVE_PARAMS.build_command().add_element(axis.name) + ) + return self.parse_move_params(response) + async def get_limit_switch(self, axis: StackerAxis, direction: Direction) -> bool: """Get limit switch status. @@ -197,8 +306,8 @@ async def get_hopper_door_closed(self) -> bool: async def move_in_mm( self, axis: StackerAxis, distance: float, params: MoveParams | None = None - ) -> bool: - """Move axis.""" + ) -> MoveResult: + """Move axis by the given distance in mm.""" command = self.append_move_params( GCODE.MOVE_TO.build_command().add_float( axis.name, distance, GCODE_ROUNDING_PRECISION @@ -208,11 +317,12 @@ async def move_in_mm( resp = await self._connection.send_command(command) if not re.match(rf"^{GCODE.MOVE_TO}$", resp): raise ValueError(f"Incorrect Response for move to: {resp}") - return True + # TODO: handle STALL_ERROR + return MoveResult.NO_ERROR async def move_to_limit_switch( self, axis: StackerAxis, direction: Direction, params: MoveParams | None = None - ) -> bool: + ) -> MoveResult: """Move until limit switch is triggered.""" command = self.append_move_params( GCODE.MOVE_TO_SWITCH.build_command().add_int(axis.name, direction.value), @@ -221,7 +331,8 @@ async def move_to_limit_switch( resp = await self._connection.send_command(command) if not re.match(rf"^{GCODE.MOVE_TO_SWITCH}$", resp): raise ValueError(f"Incorrect Response for move to switch: {resp}") - return True + # TODO: handle STALL_ERROR + return MoveResult.NO_ERROR async def home_axis(self, axis: StackerAxis, direction: Direction) -> bool: """Home axis.""" @@ -254,7 +365,8 @@ async def set_led( raise ValueError(f"Incorrect Response for set led: {resp}") return True - async def update_firmware(self, firmware_file_path: str) -> None: - """Updates the firmware on the device.""" - # TODO: Implement firmware update - pass + async def enter_programming_mode(self) -> None: + """Reboot into programming mode""" + command = GCODE.ENTER_BOOTLOADER.build_command() + await self._connection.send_dfu_command(command) + await self._connection.close() diff --git a/api/src/opentrons/drivers/flex_stacker/simulator.py b/api/src/opentrons/drivers/flex_stacker/simulator.py index 1e0b59b19de..1ceedabf146 100644 --- a/api/src/opentrons/drivers/flex_stacker/simulator.py +++ b/api/src/opentrons/drivers/flex_stacker/simulator.py @@ -1,9 +1,11 @@ -from typing import Optional +from typing import List, Optional from opentrons.util.async_helpers import ensure_yield -from .abstract import AbstractStackerDriver +from .abstract import AbstractFlexStackerDriver from .types import ( + LEDColor, + MoveResult, StackerAxis, PlatformStatus, Direction, @@ -14,7 +16,7 @@ ) -class SimulatingDriver(AbstractStackerDriver): +class SimulatingDriver(AbstractFlexStackerDriver): """FLEX Stacker driver simulator.""" def __init__(self, serial_number: Optional[str] = None) -> None: @@ -60,11 +62,27 @@ async def set_serial_number(self, sn: str) -> bool: """Set Serial Number.""" return True + async def enable_motors(self, axis: List[StackerAxis]) -> bool: + """Enables the axis motor if present, disables it otherwise.""" + return True + @ensure_yield - async def stop_motor(self) -> bool: - """Stop motor movement.""" + async def stop_motors(self) -> bool: + """Stop all motor movement.""" + return True + + async def set_run_current(self, axis: StackerAxis, current: float) -> bool: + """Set axis peak run current in amps.""" + return True + + async def set_ihold_current(self, axis: StackerAxis, current: float) -> bool: + """Set axis hold current in amps.""" return True + async def get_motion_params(self, axis: StackerAxis) -> MoveParams: + """Get the motion parameters used by the given axis motor.""" + return MoveParams(axis, 1, 1, 1) + @ensure_yield async def get_limit_switch(self, axis: StackerAxis, direction: Direction) -> bool: """Get limit switch status. @@ -78,12 +96,15 @@ async def get_limit_switches_status(self) -> LimitSwitchStatus: """Get limit switch statuses for all axes.""" return self._limit_switch_status - @ensure_yield - async def get_platform_sensor_status(self) -> PlatformStatus: + async def get_platform_sensor(self, direction: Direction) -> bool: """Get platform sensor status. - :return: True if platform is detected, False otherwise + :return: True if platform is present, False otherwise """ + return True + + async def get_platform_status(self) -> PlatformStatus: + """Get platform status.""" return self._platform_sensor_status @ensure_yield @@ -97,13 +118,27 @@ async def get_hopper_door_closed(self) -> bool: @ensure_yield async def move_in_mm( self, axis: StackerAxis, distance: float, params: MoveParams | None = None - ) -> bool: - """Move axis.""" - return True + ) -> MoveResult: + """Move axis by the given distance in mm.""" + return MoveResult.NO_ERROR @ensure_yield async def move_to_limit_switch( self, axis: StackerAxis, direction: Direction, params: MoveParams | None = None - ) -> bool: + ) -> MoveResult: """Move until limit switch is triggered.""" + return MoveResult.NO_ERROR + + async def home_axis(self, axis: StackerAxis, direction: Direction) -> bool: + """Home axis.""" return True + + async def set_led( + self, power: float, color: LEDColor | None = None, external: bool | None = None + ) -> bool: + """Set LED color.""" + return True + + async def enter_programming_mode(self) -> None: + """Reboot into programming mode""" + pass diff --git a/api/src/opentrons/drivers/flex_stacker/types.py b/api/src/opentrons/drivers/flex_stacker/types.py index 4035aaaa755..9f8e8825b93 100644 --- a/api/src/opentrons/drivers/flex_stacker/types.py +++ b/api/src/opentrons/drivers/flex_stacker/types.py @@ -1,6 +1,6 @@ from enum import Enum from dataclasses import dataclass, fields -from typing import List +from typing import List, Dict, Optional from opentrons.drivers.command_builder import CommandBuilder @@ -11,13 +11,17 @@ class GCODE(str, Enum): MOVE_TO_SWITCH = "G5" HOME_AXIS = "G28" STOP_MOTORS = "M0" + ENABLE_MOTORS = "M17" GET_RESET_REASON = "M114" DEVICE_INFO = "M115" GET_LIMIT_SWITCH = "M119" - SET_LED = "M200" + GET_MOVE_PARAMS = "M120" GET_PLATFORM_SENSOR = "M121" GET_DOOR_SWITCH = "M122" + SET_LED = "M200" SET_SERIAL_NUMBER = "M996" + SET_RUN_CURRENT = "M906" + SET_IHOLD_CURRENT = "M907" ENTER_BOOTLOADER = "dfu" def build_command(self) -> CommandBuilder: @@ -45,6 +49,14 @@ class StackerInfo: hw: HardwareRevision sn: str + def to_dict(self) -> Dict[str, str]: + """Build command.""" + return { + "serial": self.sn, + "version": self.fw, + "model": self.hw.value, + } + class StackerAxis(Enum): """Stacker Axis.""" @@ -128,11 +140,33 @@ def get(self, direction: Direction) -> bool: """Get platform status.""" return self.E if direction == Direction.EXTENT else self.R + def to_dict(self) -> Dict[str, bool]: + """Dict of the data.""" + return { + "extent": self.E, + "retract": self.R, + } + @dataclass class MoveParams: """Move Parameters.""" - max_speed: float | None = None - acceleration: float | None = None - max_speed_discont: float | None = None + axis: Optional[StackerAxis] = None + max_speed: Optional[float] = None + acceleration: Optional[float] = None + max_speed_discont: Optional[float] = None + current: Optional[float] = 0 + + @classmethod + def get_fields(cls) -> List[str]: + """Get parsing fields.""" + return ["M", "V", "A", "D"] + + +class MoveResult(str, Enum): + """The result of a move command.""" + + NO_ERROR = "ok" + STALL_ERROR = "stall" + UNKNOWN_ERROR = "unknown" diff --git a/api/src/opentrons/hardware_control/backends/ot3controller.py b/api/src/opentrons/hardware_control/backends/ot3controller.py index 84ffbffd8da..70d895560ee 100644 --- a/api/src/opentrons/hardware_control/backends/ot3controller.py +++ b/api/src/opentrons/hardware_control/backends/ot3controller.py @@ -1397,7 +1397,11 @@ async def clean_up(self) -> None: return if hasattr(self, "_event_watcher"): - if loop.is_running() and self._event_watcher: + if ( + loop.is_running() + and self._event_watcher + and not self._event_watcher.closed + ): self._event_watcher.close() messenger = getattr(self, "_messenger", None) diff --git a/api/src/opentrons/hardware_control/modules/__init__.py b/api/src/opentrons/hardware_control/modules/__init__.py index 67a6c442f39..35ae63eacbe 100644 --- a/api/src/opentrons/hardware_control/modules/__init__.py +++ b/api/src/opentrons/hardware_control/modules/__init__.py @@ -4,6 +4,7 @@ from .thermocycler import Thermocycler from .heater_shaker import HeaterShaker from .absorbance_reader import AbsorbanceReader +from .flex_stacker import FlexStacker from .update import update_firmware from .utils import MODULE_TYPE_BY_NAME, build from .types import ( @@ -19,6 +20,9 @@ MagneticStatus, HeaterShakerStatus, AbsorbanceReaderStatus, + PlatformState, + StackerAxisState, + FlexStackerStatus, SpeedStatus, LiveData, ) @@ -55,4 +59,8 @@ "AbsorbanceReaderStatus", "AbsorbanceReaderDisconnectedError", "ModuleDisconnectedCallback", + "FlexStacker", + "FlexStackerStatus", + "PlatformState", + "StackerAxisState", ] diff --git a/api/src/opentrons/hardware_control/modules/flex_stacker.py b/api/src/opentrons/hardware_control/modules/flex_stacker.py new file mode 100644 index 00000000000..5ded3b391b3 --- /dev/null +++ b/api/src/opentrons/hardware_control/modules/flex_stacker.py @@ -0,0 +1,379 @@ +from __future__ import annotations + +import asyncio +import logging +from typing import Dict, Optional, Mapping + +from opentrons.drivers.flex_stacker.types import ( + Direction, + MoveParams, + MoveResult, + StackerAxis, +) +from opentrons.drivers.rpi_drivers.types import USBPort +from opentrons.drivers.flex_stacker.driver import ( + STACKER_MOTION_CONFIG, + FlexStackerDriver, +) +from opentrons.drivers.flex_stacker.abstract import AbstractFlexStackerDriver +from opentrons.drivers.flex_stacker.simulator import SimulatingDriver +from opentrons.hardware_control.execution_manager import ExecutionManager +from opentrons.hardware_control.poller import Reader, Poller +from opentrons.hardware_control.modules import mod_abc, update +from opentrons.hardware_control.modules.types import ( + FlexStackerStatus, + HopperDoorState, + LatchState, + ModuleDisconnectedCallback, + ModuleType, + PlatformState, + StackerAxisState, + UploadFunction, + LiveData, +) + +log = logging.getLogger(__name__) + +POLL_PERIOD = 1.0 +SIMULATING_POLL_PERIOD = POLL_PERIOD / 20.0 + +DFU_PID = "df11" + +# Distance in mm the latch can travel to open/close +LATCH_TRAVEL = 25.0 + + +class FlexStacker(mod_abc.AbstractModule): + """Hardware control interface for an attached Flex-Stacker module.""" + + MODULE_TYPE = ModuleType.FLEX_STACKER + + @classmethod + async def build( + cls, + port: str, + usb_port: USBPort, + execution_manager: ExecutionManager, + hw_control_loop: asyncio.AbstractEventLoop, + poll_interval_seconds: Optional[float] = None, + simulating: bool = False, + sim_model: Optional[str] = None, + sim_serial_number: Optional[str] = None, + disconnected_callback: ModuleDisconnectedCallback = None, + ) -> "FlexStacker": + """ + Build a FlexStacker + + Args: + port: The port to connect to + usb_port: USB Port + execution_manager: Execution manager. + hw_control_loop: The event loop running in the hardware control thread. + poll_interval_seconds: Poll interval override. + simulating: whether to build a simulating driver + loop: Loop + sim_model: The model name used by simulator + disconnected_callback: Callback to inform the module controller that the device was disconnected + + Returns: + FlexStacker instance + """ + driver: AbstractFlexStackerDriver + if not simulating: + driver = await FlexStackerDriver.create(port=port, loop=hw_control_loop) + poll_interval_seconds = poll_interval_seconds or POLL_PERIOD + else: + driver = SimulatingDriver(serial_number=sim_serial_number) + poll_interval_seconds = poll_interval_seconds or SIMULATING_POLL_PERIOD + + reader = FlexStackerReader(driver=driver) + poller = Poller(reader=reader, interval=poll_interval_seconds) + module = cls( + port=port, + usb_port=usb_port, + driver=driver, + reader=reader, + poller=poller, + device_info=(await driver.get_device_info()).to_dict(), + hw_control_loop=hw_control_loop, + execution_manager=execution_manager, + disconnected_callback=disconnected_callback, + ) + + try: + await poller.start() + except Exception: + log.exception(f"First read of Flex-Stacker on port {port} failed") + + return module + + def __init__( + self, + port: str, + usb_port: USBPort, + execution_manager: ExecutionManager, + driver: AbstractFlexStackerDriver, + reader: FlexStackerReader, + poller: Poller, + device_info: Mapping[str, str], + hw_control_loop: asyncio.AbstractEventLoop, + disconnected_callback: ModuleDisconnectedCallback = None, + ): + super().__init__( + port=port, + usb_port=usb_port, + hw_control_loop=hw_control_loop, + execution_manager=execution_manager, + disconnected_callback=disconnected_callback, + ) + self._device_info = device_info + self._driver = driver + self._reader = reader + self._poller = poller + self._stacker_status = FlexStackerStatus.IDLE + + async def cleanup(self) -> None: + """Stop the poller task""" + await self._poller.stop() + await self._driver.disconnect() + + @classmethod + def name(cls) -> str: + """Used for picking up serial port symlinks""" + return "flexstacker" + + def firmware_prefix(self) -> str: + """The prefix used for looking up firmware""" + return "flex-stacker" + + @staticmethod + def _model_from_revision(revision: Optional[str]) -> str: + """Defines the revision -> model mapping""" + return "flexStackerModuleV1" + + def model(self) -> str: + return self._model_from_revision(self._device_info.get("model")) + + @property + def latch_state(self) -> LatchState: + """The state of the latch.""" + return LatchState.from_state(self.limit_switch_status[StackerAxis.L]) + + @property + def platform_state(self) -> PlatformState: + """The state of the platform.""" + return self._reader.platform_state + + @property + def hopper_door_state(self) -> HopperDoorState: + """The status of the hopper door.""" + return HopperDoorState.from_state(self._reader.hopper_door_closed) + + @property + def limit_switch_status(self) -> Dict[StackerAxis, StackerAxisState]: + """The status of the Limit switches.""" + return self._reader.limit_switch_status + + @property + def device_info(self) -> Mapping[str, str]: + return self._device_info + + @property + def status(self) -> FlexStackerStatus: + """Module status or error state details.""" + return self._stacker_status + + @property + def is_simulated(self) -> bool: + return isinstance(self._driver, SimulatingDriver) + + @property + def live_data(self) -> LiveData: + return { + "status": self.status.value, + "data": { + "latchState": self.latch_state.value, + "platformState": self.platform_state.value, + "hopperDoorState": self.hopper_door_state.value, + "axisStateX": self.limit_switch_status[StackerAxis.X].value, + "axisStateZ": self.limit_switch_status[StackerAxis.Z].value, + "errorDetails": self._reader.error, + }, + } + + async def prep_for_update(self) -> str: + await self._poller.stop() + await self._driver.stop_motors() + await self._driver.enter_programming_mode() + # flex stacker has three unique "devices" over DFU + dfu_info = await update.find_dfu_device(pid=DFU_PID, expected_device_count=3) + return dfu_info + + def bootloader(self) -> UploadFunction: + return update.upload_via_dfu + + async def deactivate(self, must_be_running: bool = True) -> None: + await self._driver.stop_motors() + + async def move_axis( + self, + axis: StackerAxis, + direction: Direction, + distance: float, + speed: Optional[float] = None, + acceleration: Optional[float] = None, + current: Optional[float] = None, + ) -> bool: + """Move the axis in a direction by the given distance in mm.""" + motion_params = STACKER_MOTION_CONFIG[axis]["move"] + await self._driver.set_run_current(axis, current or motion_params.current or 0) + if any([speed, acceleration]): + motion_params.max_speed = speed or motion_params.max_speed + motion_params.acceleration = acceleration or motion_params.acceleration + distance = direction.distance(distance) + success = await self._driver.move_in_mm(axis, distance, params=motion_params) + # TODO: This can return a stall, handle that here + return success == MoveResult.NO_ERROR + + async def home_axis( + self, + axis: StackerAxis, + direction: Direction, + speed: Optional[float] = None, + acceleration: Optional[float] = None, + current: Optional[float] = None, + ) -> bool: + motion_params = STACKER_MOTION_CONFIG[axis]["home"] + await self._driver.set_run_current(axis, current or motion_params.current or 0) + # Set the max hold current for the Z axis + if axis == StackerAxis.Z: + await self._driver.set_ihold_current(axis, 1.8) + if any([speed, acceleration]): + motion_params.max_speed = speed or motion_params.max_speed + motion_params.acceleration = acceleration or motion_params.acceleration + success = await self._driver.move_to_limit_switch( + axis=axis, direction=direction, params=motion_params + ) + # TODO: This can return a stall, handle that here + return success == MoveResult.NO_ERROR + + async def close_latch( + self, + velocity: Optional[float] = None, + acceleration: Optional[float] = None, + ) -> bool: + """Close the latch, dropping any labware its holding.""" + # Dont move the latch if its already closed. + if self.limit_switch_status[StackerAxis.L] == StackerAxisState.EXTENDED: + return True + motion_params = STACKER_MOTION_CONFIG[StackerAxis.L]["move"] + speed = velocity or motion_params.max_speed + accel = acceleration or motion_params.acceleration + success = await self.move_axis( + StackerAxis.L, + Direction.RETRACT, + distance=LATCH_TRAVEL, + speed=speed, + acceleration=accel, + ) + # Check that the latch is closed. + await self._reader.get_limit_switch_status() + return ( + success + and self.limit_switch_status[StackerAxis.L] == StackerAxisState.EXTENDED + ) + + async def open_latch( + self, + velocity: Optional[float] = None, + acceleration: Optional[float] = None, + ) -> bool: + """Open the latch.""" + # Dont move the latch if its already opened. + if self.limit_switch_status[StackerAxis.L] == StackerAxisState.RETRACTED: + return True + motion_params = STACKER_MOTION_CONFIG[StackerAxis.L]["move"] + speed = velocity or motion_params.max_speed + accel = acceleration or motion_params.acceleration + success = await self.move_axis( + StackerAxis.L, + Direction.EXTENT, + distance=LATCH_TRAVEL, + speed=speed, + acceleration=accel, + ) + # Check that the latch is opened. + await self._reader.get_limit_switch_status() + return ( + success + and self.limit_switch_status[StackerAxis.L] == StackerAxisState.RETRACTED + ) + + # NOTE: We are defining the interface, will implement in seperate pr. + async def dispense(self) -> bool: + """Dispenses the next labware in the stacker.""" + return True + + async def store(self) -> bool: + """Stores a labware in the stacker.""" + return True + + +class FlexStackerReader(Reader): + error: Optional[str] + + def __init__(self, driver: AbstractFlexStackerDriver) -> None: + self.error: Optional[str] = None + self._driver = driver + self.limit_switch_status = { + axis: StackerAxisState.UNKNOWN for axis in StackerAxis + } + self.platform_state = PlatformState.UNKNOWN + self.hopper_door_closed = False + self.motion_params = {axis: MoveParams(axis=axis) for axis in StackerAxis} + self.get_config = True + + async def read(self) -> None: + await self.get_limit_switch_status() + await self.get_platform_sensor_state() + await self.get_door_closed() + if self.get_config: + await self.get_motion_parameters() + self.get_config = False + self._set_error(None) + + async def get_limit_switch_status(self) -> None: + """Get the limit switch status.""" + status = await self._driver.get_limit_switches_status() + self.limit_switch_status = { + StackerAxis.X: StackerAxisState.from_status(status, StackerAxis.X), + StackerAxis.Z: StackerAxisState.from_status(status, StackerAxis.Z), + StackerAxis.L: StackerAxisState.from_status(status, StackerAxis.L), + } + + async def get_motion_parameters(self) -> None: + """Get the motion parameters used by the axis motors.""" + self.move_params = { + axis: self._driver.get_motion_params(axis) for axis in StackerAxis + } + + async def get_platform_sensor_state(self) -> None: + """Get the platform state.""" + status = await self._driver.get_platform_status() + self.platform_state = PlatformState.from_status(status) + + async def get_door_closed(self) -> None: + """Check if the hopper door is closed.""" + self.hopper_door_closed = await self._driver.get_hopper_door_closed() + + def on_error(self, exception: Exception) -> None: + self._set_error(exception) + + def _set_error(self, exception: Optional[Exception]) -> None: + if exception is None: + self.error = None + else: + try: + self.error = str(exception.args[0]) + except Exception: + self.error = repr(exception) diff --git a/api/src/opentrons/hardware_control/modules/types.py b/api/src/opentrons/hardware_control/modules/types.py index 9b7c33058d4..a43c7046a6b 100644 --- a/api/src/opentrons/hardware_control/modules/types.py +++ b/api/src/opentrons/hardware_control/modules/types.py @@ -17,6 +17,11 @@ from typing_extensions import TypedDict from pathlib import Path +from opentrons.drivers.flex_stacker.types import ( + LimitSwitchStatus, + PlatformStatus, + StackerAxis, +) from opentrons.drivers.rpi_drivers.types import USBPort if TYPE_CHECKING: @@ -27,6 +32,7 @@ HeaterShakerModuleType, MagneticBlockType, AbsorbanceReaderType, + FlexStackerModuleType, ) @@ -62,6 +68,7 @@ class ModuleType(str, Enum): HEATER_SHAKER: HeaterShakerModuleType = "heaterShakerModuleType" MAGNETIC_BLOCK: MagneticBlockType = "magneticBlockType" ABSORBANCE_READER: AbsorbanceReaderType = "absorbanceReaderType" + FLEX_STACKER: FlexStackerModuleType = "flexStackerModuleType" @classmethod def from_model(cls, model: ModuleModel) -> ModuleType: @@ -77,6 +84,8 @@ def from_model(cls, model: ModuleModel) -> ModuleType: return cls.MAGNETIC_BLOCK if isinstance(model, AbsorbanceReaderModel): return cls.ABSORBANCE_READER + if isinstance(model, FlexStackerModuleModel): + return cls.FLEX_STACKER @classmethod def to_module_fixture_id(cls, module_type: ModuleType) -> str: @@ -91,6 +100,8 @@ def to_module_fixture_id(cls, module_type: ModuleType) -> str: return "magneticBlockV1" if module_type == ModuleType.ABSORBANCE_READER: return "absorbanceReaderV1" + if module_type == ModuleType.FLEX_STACKER: + return "flexStackerModuleV1" else: raise ValueError( f"Module Type {module_type} does not have a related fixture ID." @@ -124,6 +135,10 @@ class AbsorbanceReaderModel(str, Enum): ABSORBANCE_READER_V1: str = "absorbanceReaderV1" +class FlexStackerModuleModel(str, Enum): + FLEX_STACKER_V1: str = "flexStackerModuleV1" + + def module_model_from_string(model_string: str) -> ModuleModel: for model_enum in { MagneticModuleModel, @@ -132,6 +147,7 @@ def module_model_from_string(model_string: str) -> ModuleModel: HeaterShakerModuleModel, MagneticBlockModel, AbsorbanceReaderModel, + FlexStackerModuleModel, }: try: return cast(ModuleModel, model_enum(model_string)) @@ -184,6 +200,7 @@ class ModuleInfo(NamedTuple): HeaterShakerModuleModel, MagneticBlockModel, AbsorbanceReaderModel, + FlexStackerModuleModel, ] @@ -225,3 +242,71 @@ class LidStatus(str, Enum): OFF = "off" UNKNOWN = "unknown" ERROR = "error" + + +class FlexStackerStatus(str, Enum): + IDLE = "idle" + DISPENSING = "dispensing" + STORING = "storing" + ERROR = "error" + + +class PlatformState(str, Enum): + UNKNOWN = "unknown" + EXTENDED = "extended" + RETRACTED = "retracted" + + @classmethod + def from_status(cls, status: PlatformStatus) -> "PlatformState": + """Get the state from the platform status.""" + if status.E and not status.R: + return cls.EXTENDED + if status.R and not status.E: + return cls.RETRACTED + return cls.UNKNOWN + + +class StackerAxisState(str, Enum): + UNKNOWN = "unknown" + EXTENDED = "extended" + RETRACTED = "retracted" + + @classmethod + def from_status( + cls, status: LimitSwitchStatus, axis: StackerAxis + ) -> "StackerAxisState": + """Get the axis state from the limit switch status.""" + match axis: + case StackerAxis.X: + if status.XE and not status.XR: + return cls.EXTENDED + if status.XR and not status.XE: + return cls.RETRACTED + case StackerAxis.Z: + if status.ZE and not status.ZR: + return cls.EXTENDED + if status.ZR and not status.ZE: + return cls.RETRACTED + case StackerAxis.L: + return cls.EXTENDED if status.LR else cls.RETRACTED + return cls.UNKNOWN + + +class LatchState(str, Enum): + CLOSED = "closed" + OPENED = "opened" + + @classmethod + def from_state(cls, state: StackerAxisState) -> "LatchState": + """Get the latch state from the axis state.""" + return cls.CLOSED if state == StackerAxisState.EXTENDED else cls.OPENED + + +class HopperDoorState(str, Enum): + CLOSED = "closed" + OPENED = "opened" + + @classmethod + def from_state(cls, state: bool) -> "HopperDoorState": + """Get the hopper door state from the door state boolean.""" + return cls.CLOSED if state else cls.OPENED diff --git a/api/src/opentrons/hardware_control/modules/utils.py b/api/src/opentrons/hardware_control/modules/utils.py index 296c89a1311..481d0366324 100644 --- a/api/src/opentrons/hardware_control/modules/utils.py +++ b/api/src/opentrons/hardware_control/modules/utils.py @@ -13,6 +13,7 @@ from .thermocycler import Thermocycler from .heater_shaker import HeaterShaker from .absorbance_reader import AbsorbanceReader +from .flex_stacker import FlexStacker log = logging.getLogger(__name__) @@ -26,6 +27,7 @@ Thermocycler.name(): Thermocycler.MODULE_TYPE, HeaterShaker.name(): HeaterShaker.MODULE_TYPE, AbsorbanceReader.name(): AbsorbanceReader.MODULE_TYPE, + FlexStacker.name(): FlexStacker.MODULE_TYPE, } _MODULE_CLS_BY_TYPE: Dict[ModuleType, Type[AbstractModule]] = { @@ -34,6 +36,7 @@ Thermocycler.MODULE_TYPE: Thermocycler, HeaterShaker.MODULE_TYPE: HeaterShaker, AbsorbanceReader.MODULE_TYPE: AbsorbanceReader, + FlexStacker.MODULE_TYPE: FlexStacker, } diff --git a/api/src/opentrons/protocol_api/validation.py b/api/src/opentrons/protocol_api/validation.py index e734a98e818..9ea9bc55027 100644 --- a/api/src/opentrons/protocol_api/validation.py +++ b/api/src/opentrons/protocol_api/validation.py @@ -14,13 +14,14 @@ from math import isinf, isnan from typing_extensions import TypeGuard -from opentrons_shared_data.labware.labware_definition import LabwareRole +from opentrons_shared_data.labware.labware_definition import ( + LabwareDefinition, + LabwareRole, +) from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.robot.types import RobotType - from opentrons.protocols.api_support.types import APIVersion, ThermocyclerStep from opentrons.protocols.api_support.util import APIVersionError -from opentrons.protocols.models import LabwareDefinition from opentrons.protocols.advanced_control.transfers.common import TransferTipPolicyV2 from opentrons.types import ( Mount, @@ -105,6 +106,10 @@ class LabwareDefinitionIsNotLabwareError(ValueError): """An error raised when a labware is not loaded using `load_labware`.""" +class LabwareDefinitionIsNotLoadableOnPosition(ValueError): + """An error raised when a labware is not able to be loaded at the location.""" + + class InvalidTrashBinLocationError(ValueError): """An error raised when attempting to load trash bins in invalid slots.""" diff --git a/api/src/opentrons/protocol_engine/actions/actions.py b/api/src/opentrons/protocol_engine/actions/actions.py index a9dcc3e7dc3..0ec505d68e6 100644 --- a/api/src/opentrons/protocol_engine/actions/actions.py +++ b/api/src/opentrons/protocol_engine/actions/actions.py @@ -8,12 +8,12 @@ from enum import Enum from typing import List, Optional, Union -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.errors import EnumeratedError +from opentrons_shared_data.labware.labware_definition import LabwareDefinition + from opentrons.hardware_control.types import DoorState from opentrons.hardware_control.modules import LiveData -from opentrons_shared_data.errors import EnumeratedError - from ..commands import ( Command, CommandCreate, diff --git a/api/src/opentrons/protocol_engine/errors/__init__.py b/api/src/opentrons/protocol_engine/errors/__init__.py index 2b0fb6a6060..419043120a6 100644 --- a/api/src/opentrons/protocol_engine/errors/__init__.py +++ b/api/src/opentrons/protocol_engine/errors/__init__.py @@ -18,6 +18,7 @@ LiquidDoesNotExistError, LabwareDefinitionDoesNotExistError, LabwareCannotBeStackedError, + LabwareCannotSitOnDeckError, LabwareIsInStackError, LabwareOffsetDoesNotExistError, LabwareIsNotTipRackError, @@ -105,6 +106,7 @@ "LiquidDoesNotExistError", "LabwareDefinitionDoesNotExistError", "LabwareCannotBeStackedError", + "LabwareCannotSitOnDeckError", "LabwareIsInStackError", "LabwareOffsetDoesNotExistError", "LabwareIsNotTipRackError", diff --git a/api/src/opentrons/protocol_engine/errors/exceptions.py b/api/src/opentrons/protocol_engine/errors/exceptions.py index c3fddf99a61..2f7e4b07e56 100644 --- a/api/src/opentrons/protocol_engine/errors/exceptions.py +++ b/api/src/opentrons/protocol_engine/errors/exceptions.py @@ -283,6 +283,19 @@ def __init__( super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping) +class LabwareCannotSitOnDeckError(ProtocolEngineError): + """Raised when a labware is incompatible with a deck slot.""" + + def __init__( + self, + message: Optional[str] = None, + details: Optional[Dict[str, Any]] = None, + wrapping: Optional[Sequence[EnumeratedError]] = None, + ) -> None: + """Build a LabwareCannotSitOnDeckError.""" + super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping) + + class LabwareIsInStackError(ProtocolEngineError): """Raised when trying to move to or physically interact with a labware that has another labware on top.""" diff --git a/api/src/opentrons/protocol_engine/execution/equipment.py b/api/src/opentrons/protocol_engine/execution/equipment.py index 3d26b355741..5ff31fcdabb 100644 --- a/api/src/opentrons/protocol_engine/execution/equipment.py +++ b/api/src/opentrons/protocol_engine/execution/equipment.py @@ -2,10 +2,10 @@ from dataclasses import dataclass from typing import Optional, overload, Union, List +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.pipette.types import PipetteNameType from opentrons.calibration_storage.helpers import uri_from_details -from opentrons.protocols.models import LabwareDefinition from opentrons.types import MountType from opentrons.hardware_control import HardwareControlAPI from opentrons.hardware_control.modules import ( diff --git a/api/src/opentrons/protocol_engine/protocol_engine.py b/api/src/opentrons/protocol_engine/protocol_engine.py index 92d992016cd..d1636d18001 100644 --- a/api/src/opentrons/protocol_engine/protocol_engine.py +++ b/api/src/opentrons/protocol_engine/protocol_engine.py @@ -2,20 +2,21 @@ from contextlib import AsyncExitStack from logging import getLogger from typing import Dict, Optional, Union, AsyncGenerator, Callable -from opentrons.protocol_engine.actions.actions import ( - ResumeFromRecoveryAction, - SetErrorRecoveryPolicyAction, -) -from opentrons.protocols.models import LabwareDefinition -from opentrons.hardware_control import HardwareControlAPI -from opentrons.hardware_control.modules import AbstractModule as HardwareModuleAPI -from opentrons.hardware_control.types import PauseType as HardwarePauseType from opentrons_shared_data.errors import ( ErrorCodes, EnumeratedError, ) +from opentrons_shared_data.labware.labware_definition import LabwareDefinition +from opentrons.hardware_control import HardwareControlAPI +from opentrons.hardware_control.modules import AbstractModule as HardwareModuleAPI +from opentrons.hardware_control.types import PauseType as HardwarePauseType + +from .actions.actions import ( + ResumeFromRecoveryAction, + SetErrorRecoveryPolicyAction, +) from .errors import ProtocolCommandFailedError, ErrorOccurrence, CommandNotAllowedError from .errors.exceptions import EStopActivatedError from .error_recovery_policy import ErrorRecoveryPolicy diff --git a/api/src/opentrons/protocol_engine/resources/deck_data_provider.py b/api/src/opentrons/protocol_engine/resources/deck_data_provider.py index 72117c23075..5249508a3dd 100644 --- a/api/src/opentrons/protocol_engine/resources/deck_data_provider.py +++ b/api/src/opentrons/protocol_engine/resources/deck_data_provider.py @@ -10,7 +10,7 @@ DEFAULT_DECK_DEFINITION_VERSION, ) from opentrons_shared_data.deck.types import DeckDefinitionV5 -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.types import DeckSlotName from ..types import ( diff --git a/api/src/opentrons/protocol_engine/resources/labware_data_provider.py b/api/src/opentrons/protocol_engine/resources/labware_data_provider.py index 8d5cdfc7899..b71f7e6dac1 100644 --- a/api/src/opentrons/protocol_engine/resources/labware_data_provider.py +++ b/api/src/opentrons/protocol_engine/resources/labware_data_provider.py @@ -6,7 +6,8 @@ import logging from anyio import to_thread -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition + from opentrons.protocols.labware import get_labware_definition # TODO (lc 09-26-2022) We should conditionally import ot2 or ot3 calibration diff --git a/api/src/opentrons/protocol_engine/resources/labware_validation.py b/api/src/opentrons/protocol_engine/resources/labware_validation.py index efe6d6daf65..da66d33efb7 100644 --- a/api/src/opentrons/protocol_engine/resources/labware_validation.py +++ b/api/src/opentrons/protocol_engine/resources/labware_validation.py @@ -1,7 +1,9 @@ """Validation file for labware role and location checking functions.""" -from opentrons_shared_data.labware.labware_definition import LabwareRole -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.labware.labware_definition import ( + LabwareDefinition, + LabwareRole, +) def is_flex_trash(load_name: str) -> bool: @@ -44,6 +46,14 @@ def validate_labware_can_be_stacked( return below_labware_load_name in top_labware_definition.stackingOffsetWithLabware +def validate_labware_can_be_ondeck(definition: LabwareDefinition) -> bool: + """Validate that the labware being loaded onto the deck can sit in a slot.""" + return ( + definition.parameters.quirks is None + or "stackingOnly" not in definition.parameters.quirks + ) + + def validate_gripper_compatible(definition: LabwareDefinition) -> bool: """Validate that the labware definition does not have a quirk disallowing movement with gripper.""" return ( diff --git a/api/src/opentrons/protocol_engine/state/frustum_helpers.py b/api/src/opentrons/protocol_engine/state/frustum_helpers.py index 83499fb2510..b28fb936be7 100644 --- a/api/src/opentrons/protocol_engine/state/frustum_helpers.py +++ b/api/src/opentrons/protocol_engine/state/frustum_helpers.py @@ -82,19 +82,12 @@ def _circular_frustum_polynomial_roots( def _volume_from_height_circular( - target_height: float, - total_frustum_height: float, - bottom_radius: float, - top_radius: float, + target_height: float, segment: ConicalFrustum ) -> float: """Find the volume given a height within a circular frustum.""" - a, b, c = _circular_frustum_polynomial_roots( - bottom_radius=bottom_radius, - top_radius=top_radius, - total_frustum_height=total_frustum_height, - ) - volume = a * (target_height**3) + b * (target_height**2) + c * target_height - return volume + heights = segment.height_to_volume_table.keys() + best_fit_height = min(heights, key=lambda x: abs(x - target_height)) + return segment.height_to_volume_table[best_fit_height] def _volume_from_height_rectangular( @@ -138,26 +131,12 @@ def _volume_from_height_squared_cone( def _height_from_volume_circular( - volume: float, - total_frustum_height: float, - bottom_radius: float, - top_radius: float, + target_volume: float, segment: ConicalFrustum ) -> float: - """Find the height given a volume within a circular frustum.""" - a, b, c = _circular_frustum_polynomial_roots( - bottom_radius=bottom_radius, - top_radius=top_radius, - total_frustum_height=total_frustum_height, - ) - d = volume * -1 - x_intercept_roots = (a, b, c, d) - - height_from_volume_roots = roots(x_intercept_roots) - height = _reject_unacceptable_heights( - potential_heights=list(height_from_volume_roots), - max_height=total_frustum_height, - ) - return height + """Find the height given a volume within a squared cone segment.""" + volumes = segment.volume_to_height_table.keys() + best_fit_volume = min(volumes, key=lambda x: abs(x - target_volume)) + return segment.volume_to_height_table[best_fit_volume] def _height_from_volume_rectangular( @@ -243,9 +222,7 @@ def _get_segment_capacity(segment: WellSegment) -> float: return ( _volume_from_height_circular( target_height=section_height, - total_frustum_height=section_height, - bottom_radius=(segment.bottomDiameter / 2), - top_radius=(segment.topDiameter / 2), + segment=segment, ) * segment.count ) @@ -293,12 +270,7 @@ def height_at_volume_within_section( radius_of_curvature=section.radiusOfCurvature, ) case ConicalFrustum(): - return _height_from_volume_circular( - volume=target_volume_relative, - top_radius=(section.bottomDiameter / 2), - bottom_radius=(section.topDiameter / 2), - total_frustum_height=section_height, - ) + return _height_from_volume_circular(target_volume_relative, section) case CuboidalFrustum(): return _height_from_volume_rectangular( volume=target_volume_relative, @@ -334,10 +306,7 @@ def volume_at_height_within_section( case ConicalFrustum(): return ( _volume_from_height_circular( - target_height=target_height_relative, - total_frustum_height=section_height, - bottom_radius=(section.bottomDiameter / 2), - top_radius=(section.topDiameter / 2), + target_height=target_height_relative, segment=section ) * section.count ) @@ -427,7 +396,7 @@ def _find_height_in_partial_frustum( if ( bottom_section_volume < target_volume - < (bottom_section_volume + section_volume) + <= (bottom_section_volume + section_volume) ): relative_target_volume = target_volume - bottom_section_volume section_height = section.topHeight - section.bottomHeight diff --git a/api/src/opentrons/protocol_engine/state/geometry.py b/api/src/opentrons/protocol_engine/state/geometry.py index e0d9cb1afa1..7c725d88c62 100644 --- a/api/src/opentrons/protocol_engine/state/geometry.py +++ b/api/src/opentrons/protocol_engine/state/geometry.py @@ -11,10 +11,10 @@ from opentrons_shared_data.errors.exceptions import InvalidStoredData from opentrons_shared_data.labware.constants import WELL_NAME_PATTERN +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.deck.types import CutoutFixture from opentrons_shared_data.pipette import PIPETTE_X_SPAN from opentrons_shared_data.pipette.types import ChannelCount -from opentrons.protocols.models import LabwareDefinition from .. import errors from ..errors import ( diff --git a/api/src/opentrons/protocol_engine/state/labware.py b/api/src/opentrons/protocol_engine/state/labware.py index 70cb43c8403..da2cf6dce1d 100644 --- a/api/src/opentrons/protocol_engine/state/labware.py +++ b/api/src/opentrons/protocol_engine/state/labware.py @@ -20,14 +20,15 @@ from opentrons_shared_data.deck.types import DeckDefinitionV5 from opentrons_shared_data.gripper.constants import LABWARE_GRIP_FORCE from opentrons_shared_data.labware.labware_definition import ( - LabwareRole, InnerWellGeometry, + LabwareDefinition, + LabwareRole, + WellDefinition, ) from opentrons_shared_data.pipette.types import LabwareUri from opentrons.types import DeckSlotName, StagingSlotName, MountType from opentrons.protocols.api_support.constants import OPENTRONS_NAMESPACE -from opentrons.protocols.models import LabwareDefinition, WellDefinition from opentrons.calibration_storage.helpers import uri_from_details from .. import errors @@ -524,7 +525,6 @@ def get_well_definition( will be used. """ definition = self.get_definition(labware_id) - if well_name is None: well_name = definition.ordering[0][0] @@ -887,6 +887,19 @@ def raise_if_labware_in_location( f"Labware {labware.loadName} is already present at {location}." ) + def raise_if_labware_cannot_be_ondeck( + self, + location: OnDeckLabwareLocation, + labware_definition: LabwareDefinition, + ) -> None: + """Raise an error if the labware cannot be in the specified location.""" + if isinstance( + location, (DeckSlotLocation, AddressableAreaLocation) + ) and not labware_validation.validate_labware_can_be_ondeck(labware_definition): + raise errors.LabwareCannotSitOnDeckError( + f"{labware_definition.parameters.loadName} cannot sit in a slot by itself." + ) + def raise_if_labware_incompatible_with_plate_reader( self, labware_definition: LabwareDefinition, diff --git a/api/src/opentrons/protocol_engine/types.py b/api/src/opentrons/protocol_engine/types.py index 9d596adbaa8..3815077464d 100644 --- a/api/src/opentrons/protocol_engine/types.py +++ b/api/src/opentrons/protocol_engine/types.py @@ -476,6 +476,7 @@ class ModuleModel(str, Enum): HEATER_SHAKER_MODULE_V1 = "heaterShakerModuleV1" MAGNETIC_BLOCK_V1 = "magneticBlockV1" ABSORBANCE_READER_V1 = "absorbanceReaderV1" + FLEX_STACKER_MODULE_V1 = "flexStackerModuleV1" def as_type(self) -> ModuleType: """Get the ModuleType of this model.""" @@ -491,6 +492,8 @@ def as_type(self) -> ModuleType: return ModuleType.MAGNETIC_BLOCK elif ModuleModel.is_absorbance_reader(self): return ModuleType.ABSORBANCE_READER + elif ModuleModel.is_flex_stacker(self): + return ModuleType.FLEX_STACKER assert False, f"Invalid ModuleModel {self}" @@ -534,6 +537,11 @@ def is_absorbance_reader( """Whether a given model is an Absorbance Plate Reader.""" return model == cls.ABSORBANCE_READER_V1 + @classmethod + def is_flex_stacker(cls, model: ModuleModel) -> TypeGuard[AbsorbanceReaderModel]: + """Whether a given model is a Flex Stacker..""" + return model == cls.FLEX_STACKER_MODULE_V1 + TemperatureModuleModel = Literal[ ModuleModel.TEMPERATURE_MODULE_V1, ModuleModel.TEMPERATURE_MODULE_V2 @@ -547,6 +555,7 @@ def is_absorbance_reader( HeaterShakerModuleModel = Literal[ModuleModel.HEATER_SHAKER_MODULE_V1] MagneticBlockModel = Literal[ModuleModel.MAGNETIC_BLOCK_V1] AbsorbanceReaderModel = Literal[ModuleModel.ABSORBANCE_READER_V1] +FlexStackerModuleModel = Literal[ModuleModel.FLEX_STACKER_MODULE_V1] class ModuleDimensions(BaseModel): diff --git a/api/src/opentrons/protocol_reader/extract_labware_definitions.py b/api/src/opentrons/protocol_reader/extract_labware_definitions.py index 88d7e256a07..8ee4c820e87 100644 --- a/api/src/opentrons/protocol_reader/extract_labware_definitions.py +++ b/api/src/opentrons/protocol_reader/extract_labware_definitions.py @@ -6,7 +6,7 @@ import anyio -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from .protocol_source import ProtocolFileRole, ProtocolSource, ProtocolType diff --git a/api/src/opentrons/protocol_reader/file_format_validator.py b/api/src/opentrons/protocol_reader/file_format_validator.py index 17969fc70fe..ca664eced92 100644 --- a/api/src/opentrons/protocol_reader/file_format_validator.py +++ b/api/src/opentrons/protocol_reader/file_format_validator.py @@ -14,7 +14,7 @@ ) from opentrons_shared_data.errors.exceptions import PythonException -from opentrons.protocols.models import JsonProtocol as JsonProtocolUpToV5 +from opentrons.protocols.models.json_protocol import Model as JsonProtocolUpToV5 from .file_identifier import ( IdentifiedFile, diff --git a/api/src/opentrons/protocols/models/__init__.py b/api/src/opentrons/protocols/models/__init__.py index 62eccdf44ff..e69de29bb2d 100644 --- a/api/src/opentrons/protocols/models/__init__.py +++ b/api/src/opentrons/protocols/models/__init__.py @@ -1,21 +0,0 @@ -# Convenience re-exports of models that are especially common or important. -# More detailed sub-models are always available through the underlying -# submodules. -# -# If re-exporting something, its name should still make sense when it's separated -# from the name of its parent submodule. e.g. re-exporting models.json_protocol.Labware -# as models.Labware could be confusing. - -# TODO(mc, 2022-03-11): remove this re-export when it won't break pickling -# https://opentrons.atlassian.net/browse/RSS-94 -from opentrons_shared_data.labware.labware_definition import ( - LabwareDefinition, - WellDefinition, -) -from .json_protocol import Model as JsonProtocol - -__all__ = [ - "LabwareDefinition", - "WellDefinition", - "JsonProtocol", -] diff --git a/api/tests/opentrons/drivers/flex_stacker/test_driver.py b/api/tests/opentrons/drivers/flex_stacker/test_driver.py index aea2492cf9e..1de13c569cb 100644 --- a/api/tests/opentrons/drivers/flex_stacker/test_driver.py +++ b/api/tests/opentrons/drivers/flex_stacker/test_driver.py @@ -66,6 +66,27 @@ async def test_stop_motors(subject: FlexStackerDriver, connection: AsyncMock) -> await subject.get_device_info() +async def test_get_motion_params( + subject: FlexStackerDriver, connection: AsyncMock +) -> None: + """It should send a get motion params command.""" + connection.send_command.return_value = "M120 M:X V:200.000 A:1500.000 D:5.000" + response = await subject.get_motion_params(types.StackerAxis.X) + assert response == types.MoveParams( + axis=types.StackerAxis.X, + acceleration=1500.0, + max_speed=200.0, + max_speed_discont=5.0, + ) + + command = types.GCODE.GET_MOVE_PARAMS.build_command().add_element( + types.StackerAxis.X.name + ) + response = await connection.send_command(command) + connection.send_command.assert_any_call(command) + connection.reset_mock() + + async def test_set_serial_number( subject: FlexStackerDriver, connection: AsyncMock ) -> None: @@ -94,6 +115,32 @@ async def test_set_serial_number( connection.reset_mock() +async def test_enable_motors(subject: FlexStackerDriver, connection: AsyncMock) -> None: + """It should send a enable motors command""" + connection.send_command.return_value = "M17" + response = await subject.enable_motors([types.StackerAxis.X]) + assert response + + move_to = types.GCODE.ENABLE_MOTORS.build_command().add_element( + types.StackerAxis.X.value + ) + connection.send_command.assert_any_call(move_to) + connection.reset_mock() + + # Test no arg to disable all motors + response = await subject.enable_motors(list(types.StackerAxis)) + assert response + + move_to = types.GCODE.ENABLE_MOTORS.build_command() + move_to.add_element(types.StackerAxis.X.value) + move_to.add_element(types.StackerAxis.Z.value) + move_to.add_element(types.StackerAxis.L.value) + + print("MOVE TO", move_to) + connection.send_command.assert_any_call(move_to) + connection.reset_mock() + + async def test_get_limit_switch( subject: FlexStackerDriver, connection: AsyncMock ) -> None: diff --git a/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py b/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py index 9bd87fe62ec..d9901ac6cd8 100644 --- a/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py +++ b/api/tests/opentrons/hardware_control/backends/test_ot3_controller.py @@ -145,7 +145,18 @@ def mock_messenger(can_message_notifier: MockCanMessageNotifier) -> mock.AsyncMo @pytest.fixture def mock_can_driver(mock_messenger: mock.AsyncMock) -> AbstractCanDriver: - return mock.AsyncMock(spec=AbstractCanDriver) + driver = mock.AsyncMock(spec=AbstractCanDriver) + + # ignoring this type error because this is a very weird function that will in fact + # do nothing, but has to have the yield in there for the compiler to make it a + # generator function + async def _fake_message_retrieve(d): # type: ignore[no-untyped-def] + while True: + await asyncio.sleep(1) + yield + + driver.__aiter__ = _fake_message_retrieve + return driver @pytest.fixture @@ -160,15 +171,19 @@ def mock_eeprom_driver() -> EEPROMDriver: @pytest.fixture -def controller( +async def controller( mock_config: OT3Config, mock_can_driver: AbstractCanDriver, mock_eeprom_driver: EEPROMDriver, -) -> OT3Controller: - with (mock.patch("opentrons.hardware_control.backends.ot3controller.OT3GPIO")): - return OT3Controller( +) -> AsyncIterator[OT3Controller]: + with mock.patch("opentrons.hardware_control.backends.ot3controller.OT3GPIO"): + controller = OT3Controller( mock_config, mock_can_driver, eeprom_driver=mock_eeprom_driver ) + try: + yield controller + finally: + await controller.clean_up() @pytest.fixture diff --git a/api/tests/opentrons/hardware_control/modules/test_hc_flexstacker.py b/api/tests/opentrons/hardware_control/modules/test_hc_flexstacker.py new file mode 100644 index 00000000000..0a6d43e441f --- /dev/null +++ b/api/tests/opentrons/hardware_control/modules/test_hc_flexstacker.py @@ -0,0 +1,52 @@ +import asyncio +import pytest +import mock +from typing import AsyncGenerator +from opentrons.hardware_control import modules, ExecutionManager +from opentrons.drivers.rpi_drivers.types import USBPort + + +@pytest.fixture +def usb_port() -> USBPort: + return USBPort( + name="", + port_number=0, + device_path="/dev/ot_module_sim_flexstacker0", + ) + + +@pytest.fixture +async def simulating_module( + usb_port: USBPort, +) -> AsyncGenerator[modules.AbstractModule, None]: + module = await modules.build( + port=usb_port.device_path, + usb_port=usb_port, + type=modules.ModuleType["FLEX_STACKER"], + simulating=True, + hw_control_loop=asyncio.get_running_loop(), + execution_manager=ExecutionManager(), + ) + assert isinstance(module, modules.AbstractModule) + try: + yield module + finally: + await module.cleanup() + + +@pytest.fixture +async def simulating_module_driver_patched( + simulating_module: modules.FlexStacker, +) -> AsyncGenerator[modules.AbstractModule, None]: + driver_mock = mock.MagicMock() + with mock.patch.object( + simulating_module, "_driver", driver_mock + ), mock.patch.object(simulating_module._reader, "_driver", driver_mock): + yield simulating_module + + +async def test_sim_state(simulating_module: modules.FlexStacker) -> None: + status = simulating_module.device_info + assert status["serial"] == "dummySerialFS" + assert status["model"] == "a1" + assert status["version"] == "stacker-fw" diff --git a/api/tests/opentrons/hardware_control/test_modules.py b/api/tests/opentrons/hardware_control/test_modules.py index 5df0b142e07..f5fa0e69336 100644 --- a/api/tests/opentrons/hardware_control/test_modules.py +++ b/api/tests/opentrons/hardware_control/test_modules.py @@ -8,6 +8,7 @@ from opentrons.hardware_control import ExecutionManager from opentrons.hardware_control.modules import ModuleAtPort +from opentrons.hardware_control.modules.flex_stacker import FlexStacker from opentrons.hardware_control.modules.types import ( BundledFirmware, ModuleModel, @@ -16,6 +17,7 @@ HeaterShakerModuleModel, ThermocyclerModuleModel, AbsorbanceReaderModel, + FlexStackerModuleModel, ModuleType, ) from opentrons.hardware_control.modules import ( @@ -49,6 +51,9 @@ async def test_get_modules_simulating() -> None: "absorbancereader": [ SimulatingModule(serial_number="555", model="absorbanceReaderV1") ], + "flexstacker": [ + SimulatingModule(serial_number="656", model="flexStackerModuleV1") + ], } api = await hardware_control.API.build_hardware_simulator(attached_modules=mods) await asyncio.sleep(0.05) @@ -110,6 +115,7 @@ async def test_module_caching() -> None: (ThermocyclerModuleModel.THERMOCYCLER_V1, Thermocycler), (HeaterShakerModuleModel.HEATER_SHAKER_V1, HeaterShaker), (AbsorbanceReaderModel.ABSORBANCE_READER_V1, AbsorbanceReader), + (FlexStackerModuleModel.FLEX_STACKER_V1, FlexStacker), ], ) async def test_create_simulating_module( @@ -259,7 +265,28 @@ async def mod_absorbancereader() -> AsyncIterator[AbstractModule]: await absorbancereader.cleanup() -async def test_module_update_integration( +@pytest.fixture +async def mod_flexstacker() -> AsyncIterator[AbstractModule]: + usb_port = USBPort( + name="", + hub=False, + port_number=0, + device_path="/dev/ot_module_sim_flexstacker0", + ) + + flexstacker = await build_module( + port="/dev/ot_module_sim_flexstacker0", + usb_port=usb_port, + type=ModuleType.FLEX_STACKER, + simulating=True, + hw_control_loop=asyncio.get_running_loop(), + execution_manager=ExecutionManager(), + ) + yield flexstacker + await flexstacker.cleanup() + + +async def test_module_update_integration( # noqa: C901 monkeypatch: pytest.MonkeyPatch, mod_tempdeck: AbstractModule, mod_magdeck: AbstractModule, @@ -267,6 +294,7 @@ async def test_module_update_integration( mod_heatershaker: AbstractModule, mod_thermocycler_gen2: AbstractModule, mod_absorbancereader: AbstractModule, + mod_flexstacker: AbstractModule, ) -> None: from opentrons.hardware_control import modules @@ -362,6 +390,7 @@ async def mock_find_dfu_device_tc2(pid: str, expected_device_count: int) -> str: upload_via_dfu_mock.assert_called_once_with( "df11", "fake_fw_file_path", bootloader_kwargs ) + upload_via_dfu_mock.reset_mock() # Test absorbancereader update with byonoy library bootloader_kwargs["module"] = mod_absorbancereader @@ -373,6 +402,20 @@ async def mock_find_dfu_device_tc2(pid: str, expected_device_count: int) -> str: byonoy_update_firmware_mock.assert_called_once_with("fake_fw_file_path") assert not mod_absorbancereader.updating + # test flex stacker update with dfu bootloader + async def mock_find_dfu_device_fs2(pid: str, expected_device_count: int) -> str: + if expected_device_count == 3: + return "df11" + return "none" + + monkeypatch.setattr(modules.update, "find_dfu_device", mock_find_dfu_device_fs2) + + bootloader_kwargs["module"] = mod_flexstacker + await modules.update_firmware(mod_flexstacker, "fake_fw_file_path") + upload_via_dfu_mock.assert_called_once_with( + "df11", "fake_fw_file_path", bootloader_kwargs + ) + async def test_get_bundled_fw(monkeypatch: pytest.MonkeyPatch, tmpdir: Path) -> None: from opentrons.hardware_control import modules @@ -392,6 +435,9 @@ async def test_get_bundled_fw(monkeypatch: pytest.MonkeyPatch, tmpdir: Path) -> dummy_abs_file = Path(tmpdir) / "absorbance-96@v1.0.2.byoup" dummy_abs_file.write_text("hello") + dummy_fs_file = Path(tmpdir) / "flex-stacker@v7.0.0.bin" + dummy_fs_file.write_text("hello") + dummy_bogus_file = Path(tmpdir) / "thermoshaker@v6.6.6.bin" dummy_bogus_file.write_text("hello") @@ -414,6 +460,9 @@ async def test_get_bundled_fw(monkeypatch: pytest.MonkeyPatch, tmpdir: Path) -> "absorbancereader": [ SimulatingModule(serial_number="555", model="absorbanceReaderV1") ], + "flexstacker": [ + SimulatingModule(serial_number="656", model="flexStackerModuleV1") + ], } api = await API.build_hardware_simulator(attached_modules=mods) @@ -434,6 +483,9 @@ async def test_get_bundled_fw(monkeypatch: pytest.MonkeyPatch, tmpdir: Path) -> assert api.attached_modules[4].bundled_fw == BundledFirmware( version="1.0.2", path=dummy_abs_file ) + assert api.attached_modules[5].bundled_fw == BundledFirmware( + version="7.0.0", path=dummy_fs_file + ) for m in api.attached_modules: await m.cleanup() diff --git a/api/tests/opentrons/protocol_api/test_validation.py b/api/tests/opentrons/protocol_api/test_validation.py index ce12d1a8f53..ff02f86bcff 100644 --- a/api/tests/opentrons/protocol_api/test_validation.py +++ b/api/tests/opentrons/protocol_api/test_validation.py @@ -9,6 +9,7 @@ from opentrons.protocols.advanced_control.transfers.common import TransferTipPolicyV2 from opentrons_shared_data.labware.labware_definition import ( + LabwareDefinition, LabwareRole, Parameters as LabwareDefinitionParameters, ) @@ -33,7 +34,6 @@ HeaterShakerModuleModel, ThermocyclerStep, ) -from opentrons.protocols.models import LabwareDefinition from opentrons.protocols.api_support.types import APIVersion from opentrons.protocols.api_support.util import APIVersionError from opentrons.protocol_api import ( diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_labware.py b/api/tests/opentrons/protocol_engine/commands/test_load_labware.py index 8229d7f4265..c8cdcbec147 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_labware.py @@ -6,8 +6,9 @@ import pytest from decoy import Decoy +from opentrons_shared_data.labware.labware_definition import LabwareDefinition + from opentrons.types import DeckSlotName -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine.errors import ( LabwareIsNotAllowedInLocationError, diff --git a/api/tests/opentrons/protocol_engine/commands/test_move_labware.py b/api/tests/opentrons/protocol_engine/commands/test_move_labware.py index 2036bda558a..3a1e8c47b02 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_move_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_move_labware.py @@ -7,7 +7,11 @@ import pytest from decoy import Decoy, matchers -from opentrons_shared_data.labware.labware_definition import Parameters, Dimensions +from opentrons_shared_data.labware.labware_definition import ( + LabwareDefinition, + Parameters, + Dimensions, +) from opentrons_shared_data.errors.exceptions import ( EnumeratedError, FailedGripperPickupError, @@ -18,7 +22,6 @@ from opentrons.protocol_engine.state import update_types from opentrons.types import DeckSlotName, Point -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine import errors, Config from opentrons.protocol_engine.resources import labware_validation from opentrons.protocol_engine.resources.model_utils import ModelUtils diff --git a/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py b/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py index 51779c427d7..6b13f464e77 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py +++ b/api/tests/opentrons/protocol_engine/commands/test_reload_labware.py @@ -1,15 +1,12 @@ """Test load labware commands.""" import inspect -from opentrons.protocol_engine.state.update_types import ( - LabwareLocationUpdate, - StateUpdate, -) -import pytest +import pytest from decoy import Decoy +from opentrons_shared_data.labware.labware_definition import LabwareDefinition + from opentrons.types import DeckSlotName -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine.errors import ( LabwareNotLoadedError, @@ -21,6 +18,10 @@ from opentrons.protocol_engine.execution import ReloadedLabwareData, EquipmentHandler from opentrons.protocol_engine.resources import labware_validation from opentrons.protocol_engine.state.state import StateView +from opentrons.protocol_engine.state.update_types import ( + LabwareLocationUpdate, + StateUpdate, +) from opentrons.protocol_engine.commands.command import SuccessData from opentrons.protocol_engine.commands.reload_labware import ( diff --git a/api/tests/opentrons/protocol_engine/conftest.py b/api/tests/opentrons/protocol_engine/conftest.py index 48ce28e7a98..cc4e80485e0 100644 --- a/api/tests/opentrons/protocol_engine/conftest.py +++ b/api/tests/opentrons/protocol_engine/conftest.py @@ -9,8 +9,8 @@ from opentrons_shared_data.deck import load as load_deck from opentrons_shared_data.deck.types import DeckDefinitionV5 from opentrons_shared_data.labware import load_definition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.pipette import pipette_definition -from opentrons.protocols.models import LabwareDefinition from opentrons.protocols.api_support.deck_type import ( STANDARD_OT2_DECK, SHORT_TRASH_DECK, diff --git a/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py b/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py index 29117a894b5..5d3edc307bd 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py +++ b/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py @@ -9,6 +9,7 @@ from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.pipette import pipette_definition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.labware.types import LabwareUri from opentrons.calibration_storage.helpers import uri_from_details @@ -21,7 +22,6 @@ AbstractModule, ) from opentrons.hardware_control.dev_types import PipetteDict -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine import errors from opentrons.protocol_engine.types import ( diff --git a/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py b/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py index 23f701db80b..b04bdd25b67 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py +++ b/api/tests/opentrons/protocol_engine/execution/test_tip_handler.py @@ -11,7 +11,6 @@ from opentrons.hardware_control.types import TipStateType from opentrons.hardware_control.protocols.types import OT2RobotType, FlexRobotType -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine.state.state import StateView from opentrons.protocol_engine.types import TipGeometry, TipPresenceStatus from opentrons.protocol_engine.resources import LabwareDataProvider @@ -20,6 +19,7 @@ CommandPreconditionViolated, CommandParameterLimitViolated, ) +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.protocol_engine.execution.tip_handler import ( HardwareTipHandler, VirtualTipHandler, diff --git a/api/tests/opentrons/protocol_engine/resources/test_deck_configuration_provider.py b/api/tests/opentrons/protocol_engine/resources/test_deck_configuration_provider.py index 174c101f8b1..070efd9dbcf 100644 --- a/api/tests/opentrons/protocol_engine/resources/test_deck_configuration_provider.py +++ b/api/tests/opentrons/protocol_engine/resources/test_deck_configuration_provider.py @@ -203,6 +203,11 @@ def test_get_provided_addressable_area_names( cutout_fixture_id="stagingAreaRightSlot", provided_addressable_areas=frozenset({"D3", "D4"}), ), + PotentialCutoutFixture( + cutout_id="cutoutD3", + cutout_fixture_id="flexStackerV1", + provided_addressable_areas=frozenset({"D3", "flexStackerV1D4"}), + ), }, lazy_fixture("ot3_standard_deck_def"), ), diff --git a/api/tests/opentrons/protocol_engine/resources/test_deck_data_provider.py b/api/tests/opentrons/protocol_engine/resources/test_deck_data_provider.py index e051f155113..2c6ed1589dd 100644 --- a/api/tests/opentrons/protocol_engine/resources/test_deck_data_provider.py +++ b/api/tests/opentrons/protocol_engine/resources/test_deck_data_provider.py @@ -4,7 +4,7 @@ from decoy import Decoy from opentrons_shared_data.deck.types import DeckDefinitionV5 -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.types import DeckSlotName from opentrons.protocol_engine.types import ( diff --git a/api/tests/opentrons/protocol_engine/resources/test_labware_data_provider.py b/api/tests/opentrons/protocol_engine/resources/test_labware_data_provider.py index a666e7a697d..80c9775ad2d 100644 --- a/api/tests/opentrons/protocol_engine/resources/test_labware_data_provider.py +++ b/api/tests/opentrons/protocol_engine/resources/test_labware_data_provider.py @@ -1,9 +1,9 @@ """Functional tests for the LabwareDataProvider.""" from typing import cast +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.labware.types import LabwareDefinition as LabwareDefDict from opentrons.calibration_storage.helpers import hash_labware_def -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_api.labware import get_labware_definition from opentrons.protocol_engine.resources import LabwareDataProvider diff --git a/api/tests/opentrons/protocol_engine/resources/test_labware_validation.py b/api/tests/opentrons/protocol_engine/resources/test_labware_validation.py index fbe9d6c21a4..bb0db528598 100644 --- a/api/tests/opentrons/protocol_engine/resources/test_labware_validation.py +++ b/api/tests/opentrons/protocol_engine/resources/test_labware_validation.py @@ -2,11 +2,11 @@ import pytest from opentrons_shared_data.labware.labware_definition import ( + LabwareDefinition, LabwareRole, OverlapOffset, Parameters, ) -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine.resources import labware_validation as subject diff --git a/api/tests/opentrons/protocol_engine/state/command_fixtures.py b/api/tests/opentrons/protocol_engine/state/command_fixtures.py index 31f06858b53..a50d6ebc1b4 100644 --- a/api/tests/opentrons/protocol_engine/state/command_fixtures.py +++ b/api/tests/opentrons/protocol_engine/state/command_fixtures.py @@ -4,9 +4,9 @@ from pydantic import BaseModel from typing import Optional, cast, Dict +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.pipette.types import PipetteNameType from opentrons.types import MountType -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine import ErrorOccurrence, commands as cmd from opentrons.protocol_engine.types import ( DeckPoint, diff --git a/api/tests/opentrons/protocol_engine/state/inner_geometry_test_params.py b/api/tests/opentrons/protocol_engine/state/inner_geometry_test_params.py new file mode 100644 index 00000000000..0a60bf4206c --- /dev/null +++ b/api/tests/opentrons/protocol_engine/state/inner_geometry_test_params.py @@ -0,0 +1,150 @@ +"""Arguments needed to test inner geometry. + +Each labware has 2 nominal volumes calculated in solidworks. +- One is a nominal bottom volume, calculated some set distance from the bottom of the inside of the well. +- The other is a nominal top volume, calculated some set distance from the top of the inside of the well. +""" +INNER_WELL_GEOMETRY_TEST_PARAMS = [ + [ + "opentrons_10_tuberack_nest_4x50ml_6x15ml_conical", + "conicalWell15mL", + 16.7, + 15546.9, + 3.0, + 5.0, + ], + [ + "opentrons_10_tuberack_nest_4x50ml_6x15ml_conical", + "conicalWell50mL", + 111.2, + 56110.3, + 3.0, + 5.0, + ], + ["opentrons_24_tuberack_nest_2ml_screwcap", "conicalWell", 66.6, 2104.9, 3.0, 3.0], + [ + "opentrons_24_tuberack_nest_1.5ml_screwcap", + "conicalWell", + 19.5, + 1750.8, + 3.0, + 3.0, + ], + ["nest_1_reservoir_290ml", "cuboidalWell", 16570.380, 271690.520, 3.0, 3.0], + ["opentrons_24_tuberack_nest_2ml_snapcap", "conicalWell", 69.62, 2148.5, 3.0, 3.0], + ["nest_96_wellplate_2ml_deep", "cuboidalWell", 118.3, 2060.4, 3.0, 3.0], + ["opentrons_24_tuberack_nest_1.5ml_snapcap", "conicalWell", 27.8, 1682.3, 3.0, 3.0], + ["nest_12_reservoir_15ml", "cuboidalWell", 1219.0, 13236.1, 3.0, 3.0], + ["nest_1_reservoir_195ml", "cuboidalWell", 14034.2, 172301.9, 3.0, 3.0], + [ + "opentrons_24_tuberack_nest_0.5ml_screwcap", + "conicalWell", + 21.95, + 795.4, + 3.0, + 3.0, + ], + [ + "opentrons_96_wellplate_200ul_pcr_full_skirt", + "conicalWell", + 14.3, + 150.2, + 3.0, + 3.0, + ], + ["nest_96_wellplate_100ul_pcr_full_skirt", "conicalWell", 15.5, 150.8, 3.0, 3.0], + ["nest_96_wellplate_200ul_flat", "conicalWell", 96.3, 259.8, 3.0, 3.0], + [ + "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "50mlconicalWell", + 163.9, + 57720.5, + 3.0, + 3.0, + ], + [ + "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "15mlconicalWell", + 40.8, + 15956.6, + 3.0, + 3.0, + ], + ["usascientific_12_reservoir_22ml", "cuboidalWell", 529.36, 21111.5, 3.0, 3.0], + ["thermoscientificnunc_96_wellplate_2000ul", "conicalWell", 73.5, 1768.0, 3.0, 3.0], + [ + "usascientific_96_wellplate_2.4ml_deep", + "cuboidalWell", + 72.220, + 2241.360, + 3.0, + 3.0, + ], + ["agilent_1_reservoir_290ml", "cuboidalWell", 15652.9, 268813.8, 3.0, 3.0], + [ + "opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap", + "conicalWell", + 25.8, + 1576.1, + 3.0, + 3.0, + ], + ["thermoscientificnunc_96_wellplate_1300ul", "conicalWell", 73.5, 1155.1, 3.0, 3.0], + ["corning_12_wellplate_6.9ml_flat", "conicalWell", 1156.3, 5654.8, 3.0, 3.0], + ["corning_24_wellplate_3.4ml_flat", "conicalWell", 579.0, 2853.4, 3.0, 3.0], + ["corning_6_wellplate_16.8ml_flat", "conicalWell", 2862.1, 13901.9, 3.0, 3.0], + ["corning_48_wellplate_1.6ml_flat", "conicalWell", 268.9, 1327.0, 3.0, 3.0], + ["biorad_96_wellplate_200ul_pcr", "conicalWell", 17.9, 161.2, 3.0, 3.0], + ["axygen_1_reservoir_90ml", "cuboidalWell", 22373.4, 70450.6, 3.0, 3.0], + ["corning_384_wellplate_112ul_flat", "flatWell", 22.4, 77.4, 2.88, 3.0], + ["corning_96_wellplate_360ul_flat", "conicalWell", 97.2, 257.1, 3.0, 3.0], + ["biorad_384_wellplate_50ul", "conicalWell", 7.7, 27.8, 3.0, 3.0], + [ + "appliedbiosystemsmicroamp_384_wellplate_40ul", + "conicalWell", + 7.44, + 26.19, + 3.0, + 3.0, + ], + [ + "opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap", + "conicalWell", + 60.940, + 2163.980, + 3.0, + 3.0, + ], + [ + "opentrons_10_tuberack_nest_4x50ml_6x15ml_conical", + "conicalWell15mL", + 16.690, + 15546.930, + 3.0, + 5.0, + ], + [ + "opentrons_10_tuberack_nest_4x50ml_6x15ml_conical", + "conicalWell50mL", + 111.200, + 56110.279, + 3.0, + 5.0, + ], + [ + "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "15mlconicalWell", + 40.830, + 15956.600, + 3.0, + 3.0, + ], + [ + "opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical", + "50mlconicalWell", + 163.860, + 57720.510, + 3.0, + 3.0, + ], +] diff --git a/api/tests/opentrons/protocol_engine/state/test_geometry_view.py b/api/tests/opentrons/protocol_engine/state/test_geometry_view.py index fda32a56ce0..bf82c17c6bc 100644 --- a/api/tests/opentrons/protocol_engine/state/test_geometry_view.py +++ b/api/tests/opentrons/protocol_engine/state/test_geometry_view.py @@ -6,6 +6,7 @@ from math import isclose from typing import cast, List, Tuple, Optional, NamedTuple, Dict from unittest.mock import sentinel +from os import listdir, path import pytest from decoy import Decoy @@ -15,20 +16,21 @@ StateUpdate, ) +from opentrons_shared_data import get_shared_data_root, load_shared_data from opentrons_shared_data.deck.types import DeckDefinitionV5 from opentrons_shared_data.deck import load as load_deck +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.labware.types import LabwareUri from opentrons_shared_data.pipette import pipette_definition from opentrons.calibration_storage.helpers import uri_from_details -from opentrons.protocols.models import LabwareDefinition from opentrons.types import Point, DeckSlotName, MountType, StagingSlotName from opentrons_shared_data.pipette.types import PipetteNameType from opentrons_shared_data.labware.labware_definition import ( Dimensions as LabwareDimensions, Parameters as LabwareDefinitionParameters, CornerOffsetFromSlot, + ConicalFrustum, ) -from opentrons_shared_data import load_shared_data from opentrons.protocol_engine import errors from opentrons.protocol_engine.types import ( @@ -96,6 +98,7 @@ _volume_from_height_circular, _volume_from_height_rectangular, ) +from .inner_geometry_test_params import INNER_WELL_GEOMETRY_TEST_PARAMS from ..pipette_fixtures import get_default_nozzle_map from ..mock_circular_frusta import TEST_EXAMPLES as CIRCULAR_TEST_EXAMPLES from ..mock_rectangular_frusta import TEST_EXAMPLES as RECTANGULAR_TEST_EXAMPLES @@ -3278,19 +3281,23 @@ def _find_volume_from_height_(index: int) -> None: nonlocal total_frustum_height, bottom_radius top_radius = frustum["radius"][index] target_height = frustum["height"][index] - + segment = ConicalFrustum( + shape="conical", + bottomDiameter=bottom_radius * 2, + topDiameter=top_radius * 2, + topHeight=total_frustum_height, + bottomHeight=0.0, + xCount=1, + yCount=1, + ) found_volume = _volume_from_height_circular( target_height=target_height, - total_frustum_height=total_frustum_height, - top_radius=top_radius, - bottom_radius=bottom_radius, + segment=segment, ) found_height = _height_from_volume_circular( - volume=found_volume, - total_frustum_height=total_frustum_height, - top_radius=top_radius, - bottom_radius=bottom_radius, + target_volume=found_volume, + segment=segment, ) assert isclose(found_height, frustum["height"][index]) @@ -3360,3 +3367,133 @@ def test_validate_dispense_volume_into_well_meniscus( ), volume=1100000.0, ) + + +@pytest.mark.parametrize( + [ + "labware_id", + "well_name", + "input_volume_bottom", + "input_volume_top", + "expected_height_from_bottom_mm", + "expected_height_from_top_mm", + ], + INNER_WELL_GEOMETRY_TEST_PARAMS, +) +def test_get_well_height_at_volume( + decoy: Decoy, + subject: GeometryView, + labware_id: str, + well_name: str, + input_volume_bottom: float, + input_volume_top: float, + expected_height_from_bottom_mm: float, + expected_height_from_top_mm: float, + mock_labware_view: LabwareView, +) -> None: + """Test getting the well height at a given volume.""" + + def _get_labware_def() -> LabwareDefinition: + def_dir = str(get_shared_data_root()) + f"/labware/definitions/3/{labware_id}" + version_str = max([str(version) for version in listdir(def_dir)]) + def_path = path.join(def_dir, version_str) + _labware_def = LabwareDefinition.model_validate( + json.loads(load_shared_data(def_path).decode("utf-8")) + ) + return _labware_def + + labware_def = _get_labware_def() + assert labware_def.innerLabwareGeometry is not None + well_geometry = labware_def.innerLabwareGeometry.get(well_name) + assert well_geometry is not None + well_definition = [ + well + for well in labware_def.wells.values() + if well.geometryDefinitionId == well_name + ][0] + + decoy.when(mock_labware_view.get_well_geometry(labware_id, well_name)).then_return( + well_geometry + ) + decoy.when( + mock_labware_view.get_well_definition(labware_id, well_name) + ).then_return(well_definition) + + found_height_bottom = subject.get_well_height_at_volume( + labware_id=labware_id, well_name=well_name, volume=input_volume_bottom + ) + found_height_top = subject.get_well_height_at_volume( + labware_id=labware_id, well_name=well_name, volume=input_volume_top + ) + assert isclose(found_height_bottom, expected_height_from_bottom_mm, rel_tol=0.01) + vol_2_expected_height_from_bottom = ( + subject.get_well_height(labware_id=labware_id, well_name=well_name) + - expected_height_from_top_mm + ) + assert isclose(found_height_top, vol_2_expected_height_from_bottom, rel_tol=0.01) + + +@pytest.mark.parametrize( + [ + "labware_id", + "well_name", + "expected_volume_bottom", + "expected_volume_top", + "input_height_from_bottom_mm", + "input_height_from_top_mm", + ], + INNER_WELL_GEOMETRY_TEST_PARAMS, +) +def test_get_well_volume_at_height( + decoy: Decoy, + subject: GeometryView, + labware_id: str, + well_name: str, + expected_volume_bottom: float, + expected_volume_top: float, + input_height_from_bottom_mm: float, + input_height_from_top_mm: float, + mock_labware_view: LabwareView, +) -> None: + """Test getting the volume at a given height.""" + + def _get_labware_def() -> LabwareDefinition: + def_dir = str(get_shared_data_root()) + f"/labware/definitions/3/{labware_id}" + version_str = max([str(version) for version in listdir(def_dir)]) + def_path = path.join(def_dir, version_str) + _labware_def = LabwareDefinition.model_validate( + json.loads(load_shared_data(def_path).decode("utf-8")) + ) + return _labware_def + + labware_def = _get_labware_def() + assert labware_def.innerLabwareGeometry is not None + well_geometry = labware_def.innerLabwareGeometry.get(well_name) + assert well_geometry is not None + well_definition = [ + well + for well in labware_def.wells.values() + if well.geometryDefinitionId == well_name + ][0] + + decoy.when(mock_labware_view.get_well_geometry(labware_id, well_name)).then_return( + well_geometry + ) + decoy.when( + mock_labware_view.get_well_definition(labware_id, well_name) + ).then_return(well_definition) + + found_volume_bottom = subject.get_well_volume_at_height( + labware_id=labware_id, well_name=well_name, height=input_height_from_bottom_mm + ) + vol_2_input_height_from_bottom = ( + subject.get_well_height(labware_id=labware_id, well_name=well_name) + - input_height_from_top_mm + ) + found_volume_top = subject.get_well_volume_at_height( + labware_id=labware_id, + well_name=well_name, + height=vol_2_input_height_from_bottom, + ) + assert isclose(found_volume_bottom, expected_volume_bottom, rel_tol=0.01) + assert isclose(found_volume_top, expected_volume_top, rel_tol=0.01) diff --git a/api/tests/opentrons/protocol_engine/state/test_labware_store_old.py b/api/tests/opentrons/protocol_engine/state/test_labware_store_old.py index 3b539df58e3..d5e7e41770e 100644 --- a/api/tests/opentrons/protocol_engine/state/test_labware_store_old.py +++ b/api/tests/opentrons/protocol_engine/state/test_labware_store_old.py @@ -12,7 +12,7 @@ from opentrons.calibration_storage.helpers import uri_from_details from opentrons_shared_data.deck.types import DeckDefinitionV5 -from opentrons.protocols.models import LabwareDefinition +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.types import DeckSlotName from opentrons.protocol_engine.types import ( diff --git a/api/tests/opentrons/protocol_engine/state/test_labware_view_old.py b/api/tests/opentrons/protocol_engine/state/test_labware_view_old.py index ac92d5e5eaf..c657ec2a7ae 100644 --- a/api/tests/opentrons/protocol_engine/state/test_labware_view_old.py +++ b/api/tests/opentrons/protocol_engine/state/test_labware_view_old.py @@ -15,6 +15,7 @@ from opentrons_shared_data.labware import load_definition from opentrons_shared_data.labware.labware_definition import ( Parameters, + LabwareDefinition, LabwareRole, OverlapOffset as SharedDataOverlapOffset, GripperOffsets, @@ -25,7 +26,6 @@ STANDARD_OT2_DECK, STANDARD_OT3_DECK, ) -from opentrons.protocols.models import LabwareDefinition from opentrons.types import DeckSlotName, MountType from opentrons.protocol_engine import errors diff --git a/api/tests/opentrons/protocol_engine/state/test_module_store_old.py b/api/tests/opentrons/protocol_engine/state/test_module_store_old.py index 4767ecad16b..b3125865ba6 100644 --- a/api/tests/opentrons/protocol_engine/state/test_module_store_old.py +++ b/api/tests/opentrons/protocol_engine/state/test_module_store_old.py @@ -7,6 +7,8 @@ from typing import List, Set, cast, Dict, Optional import pytest + +from opentrons.protocol_engine.state import update_types from opentrons_shared_data.robot.types import RobotType from opentrons_shared_data.deck.types import DeckDefinitionV5 from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] @@ -44,6 +46,8 @@ TemperatureModuleSubState, ThermocyclerModuleId, ThermocyclerModuleSubState, + AbsorbanceReaderSubState, + AbsorbanceReaderId, ModuleSubStateType, ) @@ -723,3 +727,134 @@ def test_handle_thermocycler_lid_commands( target_lid_temperature=None, ) } + + +def test_handle_absorbance_reader_commands( + abs_reader_v1_def: ModuleDefinition, +) -> None: + """It should update absorbance reader state.""" + load_module_cmd = commands.LoadModule.model_construct( # type: ignore[call-arg] + params=commands.LoadModuleParams( + model=ModuleModel.ABSORBANCE_READER_V1, + location=DeckSlotLocation(slotName=DeckSlotName.SLOT_1), + ), + result=commands.LoadModuleResult( + moduleId="module-id", + model=ModuleModel.ABSORBANCE_READER_V1, + serialNumber="serial-number", + definition=abs_reader_v1_def, + ), + ) + + initialize_reader = commands.Comment.model_construct( # type: ignore[call-arg] + params=commands.CommentParams(message="hello"), + result=commands.CommentResult(), + ) + open_lid = commands.Comment.model_construct( # type: ignore[call-arg] + params=commands.CommentParams(message="hello dude"), + result=commands.CommentResult(), + ) + + read_data = commands.Comment.model_construct( # type: ignore[call-arg] + params=commands.CommentParams(message="hello man"), + result=commands.CommentResult(), + ) + + close_lid = commands.Comment.model_construct( # type: ignore[call-arg] + params=commands.CommentParams(message="hello ladies"), + result=commands.CommentResult(), + ) + + subject = ModuleStore( + Config( + use_simulated_deck_config=False, + robot_type="OT-3 Standard", + deck_type=DeckType.OT3_STANDARD, + ), + deck_fixed_labware=[], + ) + + subject.handle_action( + actions.SucceedCommandAction( + command=load_module_cmd, + state_update=update_types.StateUpdate().initialize_absorbance_reader( + "module-id", "single", [1], None + ), + ) + ) + subject.handle_action(actions.SucceedCommandAction(command=initialize_reader)) + assert subject.state.substate_by_module_id == { + "module-id": AbsorbanceReaderSubState( + module_id=AbsorbanceReaderId("module-id"), + is_lid_on=True, + configured=True, + measured=False, + data=None, + configured_wavelengths=[1], + measure_mode="single", # type: ignore[arg-type] + reference_wavelength=None, + ) + } + + subject.handle_action( + actions.SucceedCommandAction( + command=open_lid, + state_update=update_types.StateUpdate().set_absorbance_reader_lid( + module_id="module-id", is_lid_on=False + ), + ) + ) + assert subject.state.substate_by_module_id == { + "module-id": AbsorbanceReaderSubState( + module_id=AbsorbanceReaderId("module-id"), + is_lid_on=False, + configured=True, + measured=True, + data=None, + configured_wavelengths=[1], + measure_mode="single", # type: ignore[arg-type] + reference_wavelength=None, + ) + } + + subject.handle_action( + actions.SucceedCommandAction( + command=read_data, + state_update=update_types.StateUpdate().set_absorbance_reader_data( + module_id="module-id", read_result={1: {"A1": 1.2}} + ), + ) + ) + assert subject.state.substate_by_module_id == { + "module-id": AbsorbanceReaderSubState( + module_id=AbsorbanceReaderId("module-id"), + is_lid_on=False, + configured=True, + measured=True, + data={1: {"A1": 1.2}}, + configured_wavelengths=[1], + measure_mode="single", # type: ignore[arg-type] + reference_wavelength=None, + ) + } + + subject.handle_action( + actions.SucceedCommandAction( + command=close_lid, + state_update=update_types.StateUpdate().set_absorbance_reader_lid( + module_id="module-id", is_lid_on=True + ), + ) + ) + assert subject.state.substate_by_module_id == { + "module-id": AbsorbanceReaderSubState( + module_id=AbsorbanceReaderId("module-id"), + is_lid_on=True, + configured=True, + measured=True, + data={1: {"A1": 1.2}}, + configured_wavelengths=[1], + measure_mode="single", # type: ignore[arg-type] + reference_wavelength=None, + ) + } diff --git a/api/tests/opentrons/protocol_engine/test_create_protocol_engine.py b/api/tests/opentrons/protocol_engine/test_create_protocol_engine.py index b5733cda6b8..a7cb708df75 100644 --- a/api/tests/opentrons/protocol_engine/test_create_protocol_engine.py +++ b/api/tests/opentrons/protocol_engine/test_create_protocol_engine.py @@ -2,14 +2,14 @@ import pytest from pytest_lazyfixture import lazy_fixture # type: ignore[import-untyped] +from opentrons_shared_data.deck import load as load_deck from opentrons_shared_data.deck.types import DeckDefinitionV5 +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons_shared_data.robot.types import RobotType -from opentrons_shared_data.deck import load as load_deck from opentrons.calibration_storage.helpers import uri_from_details from opentrons.hardware_control import API as HardwareAPI from opentrons.hardware_control.types import DoorState -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine import ( ProtocolEngine, Config as EngineConfig, diff --git a/api/tests/opentrons/protocol_engine/test_protocol_engine.py b/api/tests/opentrons/protocol_engine/test_protocol_engine.py index 95289d681b8..6c1efcc55d7 100644 --- a/api/tests/opentrons/protocol_engine/test_protocol_engine.py +++ b/api/tests/opentrons/protocol_engine/test_protocol_engine.py @@ -9,6 +9,7 @@ from decoy import Decoy from opentrons_shared_data.robot.types import RobotType +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.protocol_engine.actions.actions import SetErrorRecoveryPolicyAction from opentrons.protocol_engine.state.update_types import StateUpdate @@ -16,7 +17,6 @@ from opentrons.hardware_control import HardwareControlAPI, OT2HardwareControlAPI from opentrons.hardware_control.modules import MagDeck, TempDeck from opentrons.hardware_control.types import PauseType as HardwarePauseType -from opentrons.protocols.models import LabwareDefinition from opentrons.protocol_engine import ProtocolEngine, commands, slot_standardization from opentrons.protocol_engine.errors.exceptions import ( diff --git a/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py b/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py index 0b8d3429527..d9bd8173834 100644 --- a/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py +++ b/api/tests/opentrons/protocols/geometry/test_frustum_helpers.py @@ -11,7 +11,6 @@ _cross_section_area_rectangular, _cross_section_area_circular, _reject_unacceptable_heights, - _circular_frustum_polynomial_roots, _rectangular_frustum_polynomial_roots, _volume_from_height_rectangular, _volume_from_height_circular, @@ -211,39 +210,25 @@ def test_volume_and_height_circular(well: List[Any]) -> None: """Test both volume and height calculations for circular frusta.""" if well[-1].shape == "spherical": return - total_height = well[0].topHeight for segment in well: if segment.shape == "conical": - top_radius = segment.topDiameter / 2 - bottom_radius = segment.bottomDiameter / 2 - a = pi * ((top_radius - bottom_radius) ** 2) / (3 * total_height**2) - b = pi * bottom_radius * (top_radius - bottom_radius) / total_height - c = pi * bottom_radius**2 - assert _circular_frustum_polynomial_roots( - top_radius=top_radius, - bottom_radius=bottom_radius, - total_frustum_height=total_height, - ) == (a, b, c) + a = segment.topDiameter / 2 + b = segment.bottomDiameter / 2 # test volume within a bunch of arbitrary heights - for target_height in range(round(total_height)): - expected_volume = ( - a * (target_height**3) - + b * (target_height**2) - + c * target_height + segment_height = segment.topHeight - segment.bottomHeight + for target_height in range(round(segment_height)): + r_y = (target_height / segment_height) * (a - b) + b + expected_volume = (pi * target_height / 3) * ( + b**2 + b * r_y + r_y**2 ) found_volume = _volume_from_height_circular( target_height=target_height, - total_frustum_height=total_height, - bottom_radius=bottom_radius, - top_radius=top_radius, + segment=segment, ) - assert found_volume == expected_volume + assert isclose(found_volume, expected_volume) # test going backwards to get height back found_height = _height_from_volume_circular( - volume=found_volume, - total_frustum_height=total_height, - bottom_radius=bottom_radius, - top_radius=top_radius, + target_volume=found_volume, segment=segment ) assert isclose(found_height, target_height) diff --git a/app/src/DesignTokens/Spacing/Spacing.stories.tsx b/app/src/DesignTokens/Spacing/Spacing.stories.tsx index 3b12ae833db..11c9125a45f 100644 --- a/app/src/DesignTokens/Spacing/Spacing.stories.tsx +++ b/app/src/DesignTokens/Spacing/Spacing.stories.tsx @@ -1,3 +1,6 @@ +import styled from 'styled-components' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import React from 'react' import { ALIGN_FLEX_START, Box, @@ -5,8 +8,7 @@ import { DIRECTION_COLUMN, Flex, SPACING, - LegacyStyledText, - TYPOGRAPHY, + StyledText, } from '@opentrons/components' import type { Story, Meta } from '@storybook/react' @@ -21,6 +23,12 @@ interface SpacingsStorybookProps { const Template: Story = args => { const targetSpacings = args.spacings.filter(s => !s[1].includes('auto')) + // sort by rem value + const sortedSpacing = targetSpacings.sort((a, b) => { + const aValue = parseFloat(a[1].replace('rem', '')) + const bValue = parseFloat(b[1].replace('rem', '')) + return aValue - bValue + }) const convertToPx = (remFormat: string): string => { const pxVal = Number(remFormat.replace('rem', '')) * 16 @@ -33,7 +41,7 @@ const Template: Story = args => { gridGap={SPACING.spacing8} padding={SPACING.spacing24} > - {targetSpacings.map((spacing, index) => ( + {sortedSpacing.map((spacing, index) => ( = args => { width="100%" height="6rem" > - + {`${spacing[0]} - ${spacing[1]}: ${convertToPx(spacing[1])}`} - - + + + + + ))} @@ -62,3 +69,9 @@ const allSpacings = Object.entries(SPACING) AllSpacing.args = { spacings: allSpacings, } + +const StyledBox = styled(Box)` + width: 2rem; + height: 2rem; + background-color: ${COLORS.blue35}; +` diff --git a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx index 6533828d803..2d35ca9925c 100644 --- a/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx +++ b/app/src/organisms/Desktop/Devices/ProtocolRun/SetupModuleAndDeck/OT2MultipleModulesHelp.tsx @@ -9,11 +9,11 @@ import { DIRECTION_ROW, Flex, Icon, + LegacyStyledText, Link, + Modal, PrimaryButton, SPACING, - Modal, - LegacyStyledText, TYPOGRAPHY, } from '@opentrons/components' import { getTopPortalEl } from '/app/App/portal' diff --git a/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx b/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx index f8729d48263..e089b8cee20 100644 --- a/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx +++ b/app/src/organisms/EmergencyStop/DesktopEstopMissingModal.stories.tsx @@ -2,7 +2,7 @@ import type * as React from 'react' import { Provider } from 'react-redux' import { createStore } from 'redux' -import { configReducer } from '/app/redux/config/reducer' +import { configReducer } from '../../redux/config/reducer' import { EstopMissingModal } from '.' import type { Store, StoreEnhancer } from 'redux' diff --git a/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx b/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx index 5b999ce2bc5..917e92143c6 100644 --- a/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx +++ b/app/src/organisms/EmergencyStop/DesktopEstopPressedModal.stories.tsx @@ -3,7 +3,7 @@ import { Provider } from 'react-redux' import { createStore } from 'redux' import { QueryClient, QueryClientProvider } from 'react-query' -import { configReducer } from '/app/redux/config/reducer' +import { configReducer } from '../../redux/config/reducer' import { EstopPressedModal } from '.' import type { Store, StoreEnhancer } from 'redux' diff --git a/components/src/modals/Modal.stories.tsx b/components/src/modals/Modal.stories.tsx index 6adfcbc3274..76cef153d47 100644 --- a/components/src/modals/Modal.stories.tsx +++ b/components/src/modals/Modal.stories.tsx @@ -1,52 +1,36 @@ -import type * as React from 'react' +import { PrimaryButton, StyledText } from '../atoms' +import { SPACING } from '../ui-style-constants' +import { Flex } from '../primitives' +import { JUSTIFY_END } from '../styles' +import { Modal as ModalComponent } from './Modal' -import { LegacyStyledText } from '../atoms' -import { SPACING, TYPOGRAPHY } from '../ui-style-constants' -import { PrimaryBtn } from '../primitives' -import { COLORS } from '../helix-design-system' -import { Modal } from './Modal' +import type { Meta, StoryObj } from '@storybook/react' -import type { Story, Meta } from '@storybook/react' - -export default { +const meta: Meta = { title: 'Library/Molecules/modals/Modal', - component: Modal, -} as Meta - -const Template: Story> = args => ( - -) + component: ModalComponent, +} +export default meta +type Story = StoryObj +const bodyText = 'Modal body goes here' const Children = ( - <> - - {'Modal body goes here'} - + {bodyText} +) - - - {'btn text'} - - - +const Footer = ( + + {}}>{'btn text'} + ) -export const Primary = Template.bind({}) -Primary.args = { - type: 'info', - onClose: () => {}, - closeOnOutsideClick: false, - title: 'Modal Title', - children: Children, +export const Modal: Story = { + args: { + type: 'info', + onClose: () => {}, + closeOnOutsideClick: false, + title: 'Modal Title', + children: Children, + footer: Footer, + }, } diff --git a/components/src/modals/Modal.tsx b/components/src/modals/Modal.tsx index 304b733de8a..7c10694981c 100644 --- a/components/src/modals/Modal.tsx +++ b/components/src/modals/Modal.tsx @@ -66,7 +66,6 @@ export const Modal = (props: ModalProps): JSX.Element => { name: 'ot-alert', color: iconColor(type), size: '1.25rem', - marginRight: SPACING.spacing8, } const modalHeader = ( diff --git a/components/src/modals/ModalHeader.tsx b/components/src/modals/ModalHeader.tsx index b505b1f1a47..6472157400f 100644 --- a/components/src/modals/ModalHeader.tsx +++ b/components/src/modals/ModalHeader.tsx @@ -1,10 +1,15 @@ -import { css } from 'styled-components' +import styled, { css } from 'styled-components' import { Icon } from '../icons' import { Box, Btn, Flex } from '../primitives' -import { LegacyStyledText } from '../atoms' -import { ALIGN_CENTER, JUSTIFY_CENTER, JUSTIFY_SPACE_BETWEEN } from '../styles' -import { SPACING, TYPOGRAPHY } from '../ui-style-constants' +import { StyledText } from '../atoms' +import { + ALIGN_CENTER, + DISPLAY_FLEX, + JUSTIFY_CENTER, + JUSTIFY_SPACE_BETWEEN, +} from '../styles' +import { SPACING } from '../ui-style-constants' import { COLORS } from '../helix-design-system' import type { MouseEventHandler, ReactNode } from 'react' @@ -21,22 +26,6 @@ export interface ModalHeaderProps { closeButton?: ReactNode } -const closeIconStyles = css` - display: flex; - justify-content: ${JUSTIFY_CENTER}; - align-items: ${ALIGN_CENTER}; - border-radius: 0.875rem; - width: 1.625rem; - height: 1.625rem; - &:hover { - background-color: ${COLORS.grey30}; - } - - &:active { - background-color: ${COLORS.grey35}; - } -` - export const ModalHeader = (props: ModalHeaderProps): JSX.Element => { const { icon, @@ -45,57 +34,72 @@ export const ModalHeader = (props: ModalHeaderProps): JSX.Element => { titleElement1, titleElement2, backgroundColor, - color, + color = COLORS.black90, closeButton, } = props return ( <> - - + {icon != null && } {titleElement1} {titleElement2} - {/* TODO (nd: 08/07/2024) Convert to StyledText once designs are resolved */} - + {title} - + - {closeButton != null - ? closeButton - : onClose != null && ( - - - - )} - - + {closeButton != null || + (onClose != null && ( + + + + ))} + + ) } + +const StyledModalHeader = styled(Flex)` + padding: ${SPACING.spacing16} ${SPACING.spacing24}; + justify-content: ${JUSTIFY_SPACE_BETWEEN}; + align-items: ${ALIGN_CENTER}; + background-color: ${props => props.backgroundColor}; +` + +const StyledDivider = styled(Box)` + border-bottom: 1px solid ${COLORS.grey30}; + margin: 0; + width: 100%; +` + +const closeIconStyles = css` + display: ${DISPLAY_FLEX}; + justify-content: ${JUSTIFY_CENTER}; + align-items: ${ALIGN_CENTER}; + border-radius: 0.875rem; + width: 1.625rem; + height: 1.625rem; + &:hover { + background-color: ${COLORS.grey30}; + } + + &:active { + background-color: ${COLORS.grey35}; + } +` diff --git a/components/src/modals/ModalShell.tsx b/components/src/modals/ModalShell.tsx index c6fa7e5ccb3..82ae09b8868 100644 --- a/components/src/modals/ModalShell.tsx +++ b/components/src/modals/ModalShell.tsx @@ -3,6 +3,7 @@ import { ALIGN_CENTER, ALIGN_END, CURSOR_DEFAULT, + DISPLAY_FLEX, JUSTIFY_CENTER, JUSTIFY_END, OVERFLOW_AUTO, @@ -110,7 +111,7 @@ const ContentArea = styled.div<{ position: Position noPadding: boolean }>` - display: flex; + display: ${DISPLAY_FLEX}; position: ${POSITION_ABSOLUTE}; align-items: ${({ position }) => position === 'center' ? ALIGN_CENTER : ALIGN_END}; @@ -137,6 +138,7 @@ const ModalArea = styled.div< box-shadow: ${BORDERS.smallDropShadow}; height: ${({ isFullPage }) => (isFullPage ? '100%' : 'auto')}; background-color: ${COLORS.white}; + @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} { border-radius: ${BORDERS.borderRadius16}; } diff --git a/components/src/modals/__tests__/ModalHeader.test.tsx b/components/src/modals/__tests__/ModalHeader.test.tsx index bf55110b63f..051dfea623d 100644 --- a/components/src/modals/__tests__/ModalHeader.test.tsx +++ b/components/src/modals/__tests__/ModalHeader.test.tsx @@ -3,10 +3,9 @@ import '@testing-library/jest-dom/vitest' import { describe, it, expect, vi, beforeEach } from 'vitest' import { renderWithProviders } from '../../testing/utils' -import { ModalHeader } from '../ModalHeader' import { COLORS } from '../../helix-design-system' -import { SPACING } from '../../ui-style-constants' import { ALIGN_CENTER, JUSTIFY_CENTER } from '../../styles' +import { ModalHeader } from '../ModalHeader' import type { ComponentProps } from 'react' @@ -40,7 +39,6 @@ describe('ModalHeader', () => { name: 'ot-alert', color: COLORS.black90, size: '1.25rem', - marginRight: SPACING.spacing8, } render(props) expect(screen.getByTestId('Modal_header_icon')).toHaveStyle( @@ -52,9 +50,6 @@ describe('ModalHeader', () => { expect(screen.getByTestId('Modal_header_icon')).toHaveStyle( `height: 1.25rem` ) - expect(screen.getByTestId('Modal_header_icon')).toHaveStyle( - `margin-right: ${SPACING.spacing8}` - ) }) it('should call a mock function when clicking close icon', () => { diff --git a/components/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx b/components/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx index 5836fe5b947..73542cce99a 100644 --- a/components/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +++ b/components/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx @@ -8,14 +8,17 @@ import type { Meta, StoryObj } from '@storybook/react' const mockDeckLabels = [ { + isZoomed: false, text: 'Label', isSelected: false, labelBorderRadius: BORDERS.borderRadius4, }, { + isZoomed: false, text: 'Label', isSelected: false, labelBorderRadius: BORDERS.borderRadius4, + isLast: true, }, ] @@ -24,7 +27,7 @@ const meta: Meta = { component: DeckLabelSetComponent, decorators: [ Story => ( - + ), @@ -38,8 +41,8 @@ export const DeckLabel: Story = { args: { // width and height from Figma deckLabels: mockDeckLabels, - width: 31.9375, - height: 5.75, + width: 31.9375 * 16, + height: 5.75 * 16, x: 0, y: 0, }, diff --git a/hardware/opentrons_hardware/drivers/can_bus/can_messenger.py b/hardware/opentrons_hardware/drivers/can_bus/can_messenger.py index c0b49e376bb..69623381d96 100644 --- a/hardware/opentrons_hardware/drivers/can_bus/can_messenger.py +++ b/hardware/opentrons_hardware/drivers/can_bus/can_messenger.py @@ -1,4 +1,5 @@ """Can messenger class.""" + from __future__ import annotations import asyncio from inspect import Traceback @@ -361,7 +362,11 @@ async def _read_task_shield(self) -> None: return except BaseException: log.exception("Exception in read") + await asyncio.sleep(0) continue + else: + log.error("read task finished, this should not happen") + await asyncio.sleep(0) async def _read_task(self) -> None: """Read task.""" diff --git a/package.json b/package.json index 654f12137fc..870fa181506 100755 --- a/package.json +++ b/package.json @@ -47,11 +47,11 @@ "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.2.1", "@rollup/plugin-replace": "^2.4.2", - "@storybook/addon-actions": "^7.6.16", - "@storybook/addon-essentials": "^7.6.16", - "@storybook/addon-links": "^7.6.16", - "@storybook/react": "^7.6.16", - "@storybook/react-vite": "^7.6.16", + "@storybook/addon-actions": "7.6.17", + "@storybook/addon-essentials": "7.6.17", + "@storybook/addon-links": "7.6.17", + "@storybook/react": "7.6.17", + "@storybook/react-vite": "7.6.17", "@testing-library/jest-dom": "6.4.2", "@testing-library/react": "14.2.1", "@testing-library/user-event": "13.5.0", @@ -140,7 +140,7 @@ "semver": "^7.3.8", "shx": "^0.3.4", "simple-git": "^3.15.1", - "storybook": "^7.6.16", + "storybook": "7.6.17", "storybook-addon-pseudo-states": "2.0.0", "style-loader": "^1.1.3", "stylelint": "^11.0.0", @@ -150,7 +150,7 @@ "terser-webpack-plugin": "^2.3.5", "typescript": "5.3.3", "url-loader": "^2.1.0", - "vite": "5.3.2", + "vite": "5.4.11", "vitest": "2.1.8", "vitest-when": "0.5.0", "wait-on": "^4.0.2", diff --git a/protocol-designer/cypress/e2e/createNew.cy.ts b/protocol-designer/cypress/e2e/createNew.cy.ts index fb1c70470b3..230721febad 100644 --- a/protocol-designer/cypress/e2e/createNew.cy.ts +++ b/protocol-designer/cypress/e2e/createNew.cy.ts @@ -1,21 +1,16 @@ -import { - Actions, - Verifications, - runCreateTest, - verifyCreateProtocolPage, -} from '../support/createNew' +import { Actions, Verifications, runCreateTest } from '../support/createNew' import { UniversalActions } from '../support/universalActions' +import '../support/commands' describe('The Redesigned Create Protocol Landing Page', () => { beforeEach(() => { cy.visit('/') + cy.closeAnalyticsModal() }) it('content and step 1 flow works', () => { - cy.closeAnalyticsModal() - cy.clickCreateNew() cy.verifyCreateNewHeader() - verifyCreateProtocolPage() + cy.clickCreateNew() const steps: Array = [ Verifications.OnStep1, Verifications.FlexSelected, diff --git a/protocol-designer/cypress/e2e/createNewFlex.cy.ts b/protocol-designer/cypress/e2e/createNewFlex.cy.ts new file mode 100644 index 00000000000..8f9017e63ae --- /dev/null +++ b/protocol-designer/cypress/e2e/createNewFlex.cy.ts @@ -0,0 +1,72 @@ +import { Actions, Verifications, runCreateTest } from '../support/createNew' +import { UniversalActions } from '../support/universalActions' + +describe('The Redesigned Create Protocol Landing Page', () => { + beforeEach(() => { + cy.visit('/') + cy.closeAnalyticsModal() + }) + + it('content and step 1 flow works', () => { + cy.clickCreateNew() + cy.verifyCreateNewHeader() + const steps: Array = [ + Verifications.OnStep1, + Verifications.FlexSelected, + UniversalActions.Snapshot, + Actions.SelectOT2, + Verifications.OT2Selected, + UniversalActions.Snapshot, + Actions.SelectFlex, + Verifications.FlexSelected, + UniversalActions.Snapshot, + Actions.Confirm, + Verifications.OnStep2, + Actions.SingleChannelPipette50, + Verifications.StepTwo50uL, + UniversalActions.Snapshot, + Actions.Confirm, + Verifications.StepTwoPart3, + UniversalActions.Snapshot, + Actions.Confirm, + Verifications.OnStep3, + Actions.YesGripper, + Actions.Confirm, + Verifications.Step4Verification, + Actions.AddThermocycler, + Verifications.ThermocyclerImg, + Actions.AddHeaterShaker, + Verifications.HeaterShakerImg, + Actions.AddMagBlock, + Verifications.MagBlockImg, + Actions.AddTempdeck2, + Verifications.Tempdeck2Img, + Actions.Confirm, + Actions.Confirm, + Actions.Confirm, + Actions.EditProtocolA, + Actions.ChoseDeckSlotC2, + Actions.AddHardwareLabware, + Actions.ClickLabwareHeader, + Actions.ClickWellPlatesSection, + Actions.SelectArmadillo96WellPlate, + Actions.ChoseDeckSlotC2Labware, + Actions.AddLiquid, + Actions.ClickLiquidButton, + Actions.DefineLiquid, + Actions.LiquidSaveWIP, + Actions.WellSelector, + Actions.LiquidDropdown, + Verifications.LiquidPage, + UniversalActions.Snapshot, + Actions.SelectLiquidWells, + Actions.SetVolumeAndSaveforWells, + Actions.ChoseDeckSlotC3, + Actions.AddHardwareLabware, + Actions.ClickLabwareHeader, + Actions.ClickWellPlatesSection, + Actions.SelectBioRad96WellPlate, + ] + runCreateTest(steps) + }) +}) diff --git a/protocol-designer/cypress/e2e/home.cy.ts b/protocol-designer/cypress/e2e/home.cy.ts index 211100898bf..32a7c766d8e 100644 --- a/protocol-designer/cypress/e2e/home.cy.ts +++ b/protocol-designer/cypress/e2e/home.cy.ts @@ -1,6 +1,7 @@ describe('The Home Page', () => { beforeEach(() => { cy.visit('/') + cy.closeAnalyticsModal() }) it('successfully loads', () => { diff --git a/protocol-designer/cypress/e2e/mixSettings.cy.js b/protocol-designer/cypress/e2e/mixSettings.cy.js deleted file mode 100644 index 600d25971be..00000000000 --- a/protocol-designer/cypress/e2e/mixSettings.cy.js +++ /dev/null @@ -1,299 +0,0 @@ -// TODO: refactor to test with new navigation -// const isMacOSX = Cypress.platform === 'darwin' -// const invalidInput = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()<>?,-' -// const batchEditClickOptions = { [isMacOSX ? 'metaKey' : 'ctrlKey']: true } - -// function importProtocol() { -// cy.fixture('../../fixtures/protocol/5/mixSettings.json').then(fileContent => { -// cy.get('input[type=file]').upload({ -// fileContent: JSON.stringify(fileContent), -// fileName: 'fixture.json', -// mimeType: 'application/json', -// encoding: 'utf8', -// }) -// cy.get('div') -// .contains( -// 'Your protocol will be automatically updated to the latest version.' -// ) -// .should('exist') -// cy.get('button').contains('ok', { matchCase: false }).click() -// // wait until computation is done before proceeding, with generous timeout -// cy.get('[data-test="ComputingSpinner"]', { timeout: 30000 }).should( -// 'not.exist' -// ) -// }) -// } - -// function openDesignTab() { -// cy.get('button[id=NavTab_design]').click() -// cy.get('button').contains('ok').click() - -// // Verify the Design Page -// cy.get('#TitleBar_main > h1').contains('Multi select banner test protocol') -// cy.get('#TitleBar_main > h2').contains('STARTING DECK STATE') -// cy.get('button[id=StepCreationButton]').contains('+ Add Step') -// } - -// function enterBatchEdit() { -// cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) -// cy.get('button').contains('exit batch edit').should('exist') -// } - -describe('Advanced Settings for Mix Form', () => { - // before(() => { - // cy.visit('/') - // cy.closeAnnouncementModal() - // importProtocol() - // openDesignTab() - // }) - // it('should verify the batch edit form works as expected', () => { - // // Verify functionality of mix settings with different labware - // enterBatchEdit() - // // Different labware disbales aspirate and dispense Flowrate , tipPosition, delay and touchTip - // // step 4 has different labware than step 1 - // cy.get('[data-test="StepItem_4"]').click(batchEditClickOptions) - // // well-order is always enabled - // cy.get('[id=WellOrderField_button_mix]').should('be.visible') - // // Aspirate Flowrate disabled - // cy.get('input[name="aspirate_flowRate"]').should('be.disabled') - // // TipPosition Aspirate should be disabled - // cy.get('[id=TipPositionIcon_mix_mmFromBottom]').should('not.be.enabled') - // // Dispense Flowrate disbled - // cy.get('input[name="dispense_flowRate"]').should('be.disabled') - // // Delay aspirate & dispense and Touch tip is disabled - // cy.get('input[name="aspirate_delay_checkbox"]').should('be.disabled') - // cy.get('input[name="dispense_delay_checkbox"]').should('be.disabled') - // cy.get('input[name="mix_touchTip_checkbox"]').should('be.disabled') - // // Save button is disabled - // cy.get('button').contains('save').should('be.disabled') - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify functionality of mix settings with same labware - // enterBatchEdit() - // // Same labware enables aspirate and dispense Flowrate ,tipPosition ,delay and touchTip - // // deslecting step 4 - // cy.get('[data-test="StepItem_4"]').click(batchEditClickOptions) - // // step 2 has same labware as step 1 - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Aspirate Flowrate are enabled - // cy.get('input[name="aspirate_flowRate"]').should('be.enabled') - // // Dispense Flowrate are enabled - // cy.get('input[name="dispense_flowRate"]').should('be.enabled') - // // TipPosition Aspirate should be enabled - // cy.get('[id=TipPositionIcon_mix_mmFromBottom]').should('not.be.disabled') - // // Delay in aspirate and Dispense settings is enabled - // cy.get('input[name="aspirate_delay_checkbox"]').should('be.enabled') - // cy.get('input[name="dispense_delay_checkbox"]').should('be.enabled') - // // Touchtip in Dispense settings is enabled - // cy.get('input[name="mix_touchTip_checkbox"]').should('be.enabled') - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify invalid input in delay field - // // click on step 2 in batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // cy.get('input[name="aspirate_delay_checkbox"]').click({ force: true }) - // cy.get('input[name="aspirate_delay_seconds"]') - // .type(invalidInput) - // .should('be.empty') - // // click on Discard Changes button to not save the changes - // cy.get('button').contains('discard changes').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify indeterminate state of flowrate - // // click on step 2 in batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // cy.get('input[name="aspirate_flowRate"]').click({ force: true }) - // cy.contains( - // 'The default P1000 Single-Channel GEN2 flow rate is optimal for handling aqueous liquids' - // ) - // cy.get('input[name="aspirate_flowRate_customFlowRate"]').type('100') - // cy.get('button').contains('Done').click() - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 1 as it has flowrate set to 100 from previous testcase - // cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) - // // indeterminate state in flowrate is empty - // cy.get('input[name="aspirate_flowRate"]').should('have.value', '') - // // Verify functionality of flowrate in batch edit mix form - // // Batch editing the Flowrate value - // cy.get('input[name="aspirate_flowRate"]').click({ force: true }) - // cy.contains( - // 'The default P1000 Single-Channel GEN2 flow rate is optimal for handling aqueous liquids' - // ) - // cy.get('input[name="aspirate_flowRate_customFlowRate"]').type('100') - // cy.get('button').contains('Done').click() - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that flowrate is updated to 100 - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that flowrate value - // cy.get('input[name="aspirate_flowRate"]').should('have.value', 100) - // // Click on step 1 to verify that flowrate is updated to 100 - // cy.get('[data-test="StepItem_1"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that flowrate value - // cy.get('input[name="aspirate_flowRate"]').should('have.value', 100) - // // Verify delay settings indeterminate value - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select delay settings - // cy.get('input[name="aspirate_delay_checkbox"]') - // .check({ force: true }) - // .should('be.checked') - // cy.get('input[name="aspirate_delay_seconds"]').type('2') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 3 to generate indertminate state for delay settings. - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('delay').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify delay settings batch editing in mix form - // // Click on step 1, to enter batch edit mode - // cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) - // // Click on step 2 to batch edit mix settings - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select delay settings - // cy.get('input[name="aspirate_delay_checkbox"]').click({ force: true }) - // cy.get('input[name="aspirate_delay_seconds"]').clear().type('2') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 1 to verify that delay has volume set to 2 - // cy.get('[data-test="StepItem_1"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set to 2 - // cy.get('input[name="aspirate_delay_seconds"]').should('have.value', 2) - // // Click on step 2 to verify that delay has volume set to 2 - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set to 2 - // cy.get('input[name="aspirate_delay_seconds"]').should('have.value', 2) - // // Verify touchTip settings indeterminate value - // cy.get('[data-test="StepItem_2"]').click() - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select touchTip settings - // cy.get('input[name="mix_touchTip_checkbox"]').click({ force: true }) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 1 to generate indertminate state for touchTip settings. - // cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('touch tip').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify touchTip settings batch editing in mix form - // cy.get('[data-test="StepItem_2"]').click() - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Click on step 3 to batch edit mix settings - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Select touchTip settings - // cy.get('input[name="mix_touchTip_checkbox"]').click({ force: true }) - // // cy.get('[id=TipPositionField_mix_touchTip_mmFromBottom]').type('24') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that touchTip has volume set to 2 - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_dispense"]').click() - // // Verify that volume is set - // cy.get('[id=TipPositionField_mix_touchTip_mmFromBottom]').should( - // 'have.value', - // 16.4 - // ) - // // Click on step 1 to verify that touchTip has volume set - // cy.get('[data-test="StepItem_3"]').click() - // cy.get('button[id="AspDispSection_settings_button_dispense"]').click() - // // Verify that volume is set - // cy.get('[id=TipPositionField_mix_touchTip_mmFromBottom]').should( - // 'have.value', - // 16.4 - // ) - // // Verify blowout settings indeterminate value - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select blowout settings - // cy.get('input[name="blowout_checkbox"]').click({ force: true }) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 1 to generate indertminate state for blowout settings. - // cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('blowout').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify blowout settings batch editing in mix form - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Click on step 3 to batch edit mix settings - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Select blowout settings - // cy.get('input[name="blowout_checkbox"]').click({ force: true }) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that blowout has dest well selected - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify dest well is selected - // cy.get('[id=BlowoutLocationField_dropdown]').should($input => { - // const value = $input.val() - // const expectedSubstring = 'trashBin' - // expect(value).to.include(expectedSubstring) - // }) - // // Click on step 3 to verify the batch editing - // cy.get('[data-test="StepItem_3"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that dest well is selected for the blowout option - // cy.get('[id=BlowoutLocationField_dropdown]').should($input => { - // const value = $input.val() - // const expectedSubstring = 'trashBin' - // expect(value).to.include(expectedSubstring) - // }) - // // verify well-order indeterminate state - // // Click on step 2, to enter batch edit and click on well order to change the order - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // click on well-order and change the order - // cy.get('[id=WellOrderField_button_mix]').click({ force: true }) - // cy.get('h4').contains('Well Order') - // cy.get('p').contains( - // 'Change the order in which the robot aspirates from the selected wells' - // ) - // cy.get('select[name="mix_wellOrder_first"]') - // .select('Bottom to top') - // .should('have.value', 'b2t') - // cy.get('select[name="mix_wellOrder_second"]') - // .select('Left to right') - // .should('have.value', 'l2r') - // // Click done button to save the changes - // cy.get('button').contains('done').click() - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 1, as it has different well order - // cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) - // cy.get('[id=WellOrderField_button_mix]').contains('mixed') - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // }) -}) diff --git a/protocol-designer/cypress/e2e/transferSettings.cy.js b/protocol-designer/cypress/e2e/transferSettings.cy.js deleted file mode 100644 index 6fded2dd9e6..00000000000 --- a/protocol-designer/cypress/e2e/transferSettings.cy.js +++ /dev/null @@ -1,347 +0,0 @@ -// TODO: refactor to test with new navigation -// const isMacOSX = Cypress.platform === 'darwin' -// const batchEditClickOptions = { [isMacOSX ? 'metaKey' : 'ctrlKey']: true } - -// const invalidInput = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*()<>?,-' - -// function importProtocol() { -// cy.fixture('../../fixtures/protocol/5/transferSettings.json').then( -// fileContent => { -// cy.get('input[type=file]').upload({ -// fileContent: JSON.stringify(fileContent), -// fileName: 'fixture.json', -// mimeType: 'application/json', -// encoding: 'utf8', -// }) -// cy.get('[data-test="ComputingSpinner"]').should('exist') -// cy.get('div') -// .contains( -// 'Your protocol will be automatically updated to the latest version.' -// ) -// .should('exist') -// cy.get('button').contains('ok', { matchCase: false }).click() -// // wait until computation is done before proceeding, with generous timeout -// cy.get('[data-test="ComputingSpinner"]', { timeout: 30000 }).should( -// 'not.exist' -// ) -// } -// ) -// } - -// function openDesignTab() { -// cy.get('button[id=NavTab_design]').click() -// cy.get('button').contains('ok').click() - -// // Verify the Design Page -// cy.get('#TitleBar_main > h1').contains('Multi select banner test protocol') -// cy.get('#TitleBar_main > h2').contains('STARTING DECK STATE') -// cy.get('button[id=StepCreationButton]').contains('+ Add Step') -// } - -// function enterBatchEdit() { -// cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) -// cy.get('button').contains('exit batch edit').should('exist') -// } - -describe('Advanced Settings for Transfer Form', () => { - // before(() => { - // cy.visit('/') - // cy.closeAnnouncementModal() - // importProtocol() - // openDesignTab() - // }) - // it('Verify functionality of the transfer form', () => { - // // Verify functionality of advanced settings with different pipette and labware - // enterBatchEdit() - // // Different Pipette disables aspirate and dispense Flowrate and Mix settings - // // step 6 has different pipette than step 1 - // cy.get('[data-test="StepItem_6"]').click(batchEditClickOptions) - // // Pre-wet tip is always enabled - // cy.get('input[name="preWetTip"]').should('be.enabled') - // // well-order is always enabled - // cy.get('[id=WellOrderField_button_aspirate]').should('be.visible') - // // Aspirate Flowrate and mix disabled - // cy.get('input[name="aspirate_flowRate"]').should('be.disabled') - // cy.get('input[name="aspirate_mix_checkbox"]').should('be.disabled') - // // TipPosition Aspirate and Dispense should be disabled - // cy.get('[id=TipPositionIcon_aspirate_mmFromBottom]').should( - // 'not.be.enabled' - // ) - // cy.get('[id=TipPositionIcon_dispense_mmFromBottom]').should( - // 'not.be.enabled' - // ) - // // Dispense Flowrate and mix disabled - // cy.get('input[name="dispense_flowRate"]').should('be.disabled') - // cy.get('input[name="dispense_mix_checkbox"]').should('be.disabled') - // // Delay , Touch tip is disabled - // cy.get('input[name="aspirate_delay_checkbox"]').should('be.disabled') - // cy.get('input[name="aspirate_touchTip_checkbox"]').should('be.disabled') - // // Save button is disabled - // cy.get('button').contains('save').should('not.be.enabled') - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify functionality of advanced settings with same pipette and labware - // // click on step 2 in batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // deselecting on step 6 in batch edit mode - // cy.get('[data-test="StepItem_6"]').click(batchEditClickOptions) - // // click on step 3 , as step 2 & 3 have same pipette and labware - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Aspirate Flowrate and mix are enabled - // cy.get('input[name="aspirate_flowRate"]').should('be.enabled') - // cy.get('input[name="aspirate_mix_checkbox"]').should('be.enabled') - // // Dispense Flowrate and mix are enabled - // cy.get('input[name="dispense_flowRate"]').should('be.enabled') - // cy.get('input[name="dispense_mix_checkbox"]').should('be.enabled') - // // Verify invalid input in one of the fields - // cy.get('input[name="dispense_mix_checkbox"]').click({ force: true }) - // cy.get('input[name="dispense_mix_volume"]') - // .type(invalidInput) - // .should('be.empty') - // // TipPosition Aspirate and Dispense should be enabled - // cy.get('[id=TipPositionIcon_aspirate_mmFromBottom]').should( - // 'not.be.disabled' - // ) - // cy.get('[id=TipPositionIcon_dispense_mmFromBottom]').should( - // 'not.be.disabled' - // ) - // // Delay in aspirate and Dispense settings is enabled - // cy.get('input[name="aspirate_delay_checkbox"]').should('be.enabled') - // cy.get('input[name="dispense_delay_checkbox"]').should('be.enabled') - // // Touchtip in aspirate and Dispense settings is enabled - // cy.get('input[name="aspirate_touchTip_checkbox"]').should('be.enabled') - // cy.get('input[name="dispense_touchTip_checkbox"]').should('be.enabled') - // // Blowout in dispense settings is enabled - // cy.get('input[name="blowout_checkbox"]').should('be.enabled') - // cy.get('button').contains('discard changes').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify flowrate indeterminate value - // // click on step 2 in batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // cy.get('input[name="aspirate_flowRate"]').click({ force: true }) - // cy.contains( - // 'The default P1000 Single-Channel GEN2 flow rate is optimal for handling aqueous liquids' - // ) - // cy.get('input[name="aspirate_flowRate_customFlowRate"]').type('100') - // cy.get('button').contains('Done').click() - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 4 as it has flowrate set to 100 from previous testcase - // cy.get('[data-test="StepItem_4"]').click(batchEditClickOptions) - // // indeterminate state in flowrate is empty - // cy.get('input[name="aspirate_flowRate"]').should('have.value', '') - // // Verify functionality of flowrate in batch edit transfer - // // Batch editing the Flowrate value - // cy.get('input[name="aspirate_flowRate"]').click({ force: true }) - // cy.contains( - // 'The default P1000 Single-Channel GEN2 flow rate is optimal for handling aqueous liquids' - // ) - // cy.get('input[name="aspirate_flowRate_customFlowRate"]').type('100') - // cy.get('button').contains('Done').click() - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that flowrate is updated to 100 - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that flowrate value - // cy.get('input[name="aspirate_flowRate"]').should('have.value', 100) - // // Click on step 3 to verify that flowrate is updated to 100 - // cy.get('[data-test="StepItem_3"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that flowrate value - // cy.get('input[name="aspirate_flowRate"]').should('have.value', 100) - // // Verify prewet tip indeterminate value - // // Click on step 2, to enter batch edit and enable prewet tip - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // enable pre-wet tip - // cy.togglePreWetTip() - // cy.get('input[name="preWetTip"]').should('be.enabled') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 1, as it does not have prewet-tip selected - indeteminate state - // cy.get('[data-test="StepItem_1"]').click(batchEditClickOptions) - // // Check tooltip here - // cy.contains('pre-wet tip').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify mix settings indeterminate value - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_4"]').click(batchEditClickOptions) - // // Select mix settings - // cy.mixaspirate() - // cy.get('input[name="aspirate_mix_volume"]').type('10') - // cy.get('input[name="aspirate_mix_times"]').type('2') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 3 to generate indertminate state for mix settings. - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('mix').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify mix settings batch editing in transfer form - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Click on step 3 to batch edit mix settings - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // cy.get('input[name="aspirate_mix_checkbox"]').click({ force: true }) - // // Select mix settings - // cy.get('input[name="aspirate_mix_volume"]').type('10') - // cy.get('input[name="aspirate_mix_times"]').type('2') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that mix has volume set to 10 with 2 repitititons - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set to 10 and repetitions to 2 - // cy.get('input[name="aspirate_mix_volume"]').should('have.value', 10) - // cy.get('input[name="aspirate_mix_times"]').should('have.value', 2) - // // Verify delay settings indeterminate value - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select delay settings - // cy.get('input[name="aspirate_delay_checkbox"]') - // .check({ force: true }) - // .should('be.checked') - // cy.get('input[name="aspirate_delay_seconds"]').type('2') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 3 to generate indertminate state for delay settings. - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('delay').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify delay settings batch editing in transfer form - // // Click on step 4, to enter batch edit mode - // cy.get('[data-test="StepItem_4"]').click(batchEditClickOptions) - // // Click on step 5 to batch edit mix settings - // cy.get('[data-test="StepItem_5"]').click(batchEditClickOptions) - // // Select delay settings - // cy.get('input[name="aspirate_delay_checkbox"]').click({ force: true }) - // cy.get('input[name="aspirate_delay_seconds"]').clear().type('2') - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 4 to verify that delay has volume set to 2 - // cy.get('[data-test="StepItem_4"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set to 2 and repitions to 2 - // cy.get('input[name="aspirate_delay_seconds"]').should('have.value', 2) - // // Click on step 5 to verify that delay has volume set to 2 - // cy.get('[data-test="StepItem_5"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set to 2 and repitions to 2 - // cy.get('input[name="aspirate_delay_seconds"]').should('have.value', 2) - // // Verify touchTip settings indeterminate value - // cy.get('[data-test="StepItem_2"]').click() - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select touchTip settings - // cy.get('input[name="aspirate_touchTip_checkbox"]').click({ force: true }) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 5 to generate indertminate state for touchTip settings. - // cy.get('[data-test="StepItem_5"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('touch tip').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // verify touchTip settings batch editing in transfer form - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Click on step 3 to batch edit mix settings - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Select touchTip settings - // cy.get('input[name="aspirate_touchTip_checkbox"]').click({ force: true }) - // // cy.get('[id=TipPositionModal_custom_input]').type(15) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that touchTip has volume set to 2 - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set - // cy.get('[id=TipPositionField_aspirate_touchTip_mmFromBottom]').should( - // 'have.value', - // 13.78 - // ) - // // Click on step 3 to verify that touchTip has volume set - // cy.get('[data-test="StepItem_3"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that volume is set - // cy.get('[id=TipPositionField_aspirate_touchTip_mmFromBottom]').should( - // 'have.value', - // 13.78 - // ) - // // verify blowout settings indeterminate value - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Select blowout settings - // cy.get('input[name="blowout_checkbox"]').click({ force: true }) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Click on step 4 to generate indertminate state for blowout settings. - // cy.get('[data-test="StepItem_4"]').click(batchEditClickOptions) - // // Verify the tooltip here - // cy.contains('blowout').trigger('pointerover') - // cy.get('div[role="tooltip"]').should( - // 'contain', - // 'Not all selected steps are using this setting' - // ) - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Verify blowout settings batch editing in transfer form - // // Click on step 2, to enter batch edit mode - // cy.get('[data-test="StepItem_2"]').click(batchEditClickOptions) - // // Click on step 3 to batch edit mix settings - // cy.get('[data-test="StepItem_3"]').click(batchEditClickOptions) - // // Select blowout settings - // cy.get('input[name="blowout_checkbox"]').click({ force: true }) - // // Click save button to save the changes - // cy.get('button').contains('save').click() - // // Exit batch edit mode - // cy.get('button').contains('exit batch edit').click() - // // Click on step 2 to verify that blowout has trash selected - // cy.get('[data-test="StepItem_2"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that trash is selected - // cy.get('[id=BlowoutLocationField_dropdown]').should($input => { - // const value = $input.val() - // const expectedSubstring = 'trashBin' - // expect(value).to.include(expectedSubstring) - // }) - // // Click on step 3 to verify the batch editing - // cy.get('[data-test="StepItem_3"]').click() - // cy.get('button[id="AspDispSection_settings_button_aspirate"]').click() - // // Verify that trash is selected for the blowout option - // cy.get('[id=BlowoutLocationField_dropdown]').should($input => { - // const value = $input.val() - // const expectedSubstring = 'trashBin' - // expect(value).to.include(expectedSubstring) - // }) - // }) -}) diff --git a/protocol-designer/cypress/e2e/transferSettings.cy.ts b/protocol-designer/cypress/e2e/transferSettings.cy.ts new file mode 100644 index 00000000000..a3371e0feff --- /dev/null +++ b/protocol-designer/cypress/e2e/transferSettings.cy.ts @@ -0,0 +1,77 @@ +import { Actions, Verifications, runCreateTest } from '../support/createNew' +import { UniversalActions } from '../support/universalActions' + +describe('The Redesigned Create Protocol Landing Page', () => { + beforeEach(() => { + cy.visit('/') + cy.verifyHomePage() + cy.closeAnalyticsModal() + }) + + it('content and step 1 flow works', () => { + cy.clickCreateNew() + cy.verifyCreateNewHeader() + const steps: Array = [ + Verifications.OnStep1, + Verifications.FlexSelected, + UniversalActions.Snapshot, + Actions.SelectOT2, + Verifications.OT2Selected, + UniversalActions.Snapshot, + Actions.SelectFlex, + Verifications.FlexSelected, + UniversalActions.Snapshot, + Actions.Confirm, + Verifications.OnStep2, + Actions.SingleChannelPipette50, + Verifications.StepTwo50uL, + UniversalActions.Snapshot, + Actions.Confirm, + Verifications.StepTwoPart3, + UniversalActions.Snapshot, + Actions.Confirm, + Verifications.OnStep3, + Actions.YesGripper, + Actions.Confirm, + Verifications.Step4Verification, + Actions.AddThermocycler, + Verifications.ThermocyclerImg, + Actions.AddHeaterShaker, + Verifications.HeaterShakerImg, + Actions.AddMagBlock, + Verifications.MagBlockImg, + Actions.AddTempdeck2, + Verifications.Tempdeck2Img, + Actions.Confirm, + Actions.Confirm, + Actions.Confirm, + Actions.EditProtocolA, + Actions.ChoseDeckSlotC2, + Actions.AddHardwareLabware, + Actions.ClickLabwareHeader, + Actions.ClickWellPlatesSection, + Actions.SelectArmadillo96WellPlate, + Actions.ChoseDeckSlotC2Labware, + Actions.AddLiquid, + Actions.ClickLiquidButton, + Actions.DefineLiquid, + Actions.LiquidSaveWIP, + Actions.WellSelector, + Actions.LiquidDropdown, + Verifications.LiquidPage, + UniversalActions.Snapshot, + Actions.SelectLiquidWells, + Actions.SetVolumeAndSaveforWells, + Actions.ChoseDeckSlotC3, + Actions.AddHardwareLabware, + Actions.ClickLabwareHeader, + Actions.ClickWellPlatesSection, + Actions.SelectBioRad96WellPlate, + Actions.ProtocolStepsH, + Actions.AddStep, + Verifications.TransferPopOut, + UniversalActions.Snapshot, + ] + runCreateTest(steps) + }) +}) diff --git a/protocol-designer/cypress/support/commands.ts b/protocol-designer/cypress/support/commands.ts index 5a40d7762cb..697ddfa32f5 100644 --- a/protocol-designer/cypress/support/commands.ts +++ b/protocol-designer/cypress/support/commands.ts @@ -10,7 +10,6 @@ declare global { verifyCreateNewHeader: () => Cypress.Chainable clickCreateNew: () => Cypress.Chainable closeAnalyticsModal: () => Cypress.Chainable - closeAnnouncementModal: () => Cypress.Chainable verifyHomePage: () => Cypress.Chainable importProtocol: (protocolFile: string) => Cypress.Chainable verifyImportPageOldProtocol: () => Cypress.Chainable @@ -28,6 +27,7 @@ declare global { openDesignPage: () => Cypress.Chainable addStep: (stepName: string) => Cypress.Chainable openSettingsPage: () => Cypress.Chainable + robotSelection: (robotName: string) => Cypress.Chainable verifySettingsPage: () => Cypress.Chainable verifyCreateNewPage: () => Cypress.Chainable togglePreWetTip: () => Cypress.Chainable @@ -55,7 +55,9 @@ export const locators = { import: 'Import', createNew: 'Create new', createProtocol: 'Create a protocol', - editProtocol: 'Edit existing protocol', + Flex_Home: 'Opentrons Flex', + OT2_Home: 'Opentrons OT-2', + importProtocol: 'Import existing protocol', settingsDataTestid: 'SettingsIconButton', settings: 'Settings', privacyPolicy: 'a[href="https://opentrons.com/privacy-policy"]', @@ -103,7 +105,7 @@ Cypress.Commands.add('verifyCreateNewHeader', () => { Cypress.Commands.add('verifyHomePage', () => { cy.contains(content.welcome) cy.contains('button', locators.createProtocol).should('be.visible') - cy.contains('label', locators.editProtocol).should('be.visible') + cy.contains('label', locators.importProtocol).should('be.visible') cy.getByTestId(locators.settingsDataTestid).should('be.visible') cy.get(locators.privacyPolicy).should('exist').and('be.visible') cy.get(locators.eula).should('exist').and('be.visible') @@ -128,6 +130,17 @@ Cypress.Commands.add('importProtocol', (protocolFilePath: string) => { .selectFile(protocolFilePath, { force: true }) }) +Cypress.Commands.add('robotSelection', (robotName: string) => { + if (robotName === 'Opentrons OT-2') { + cy.contains('label', locators.OT2_Home).should('be.visible').click() + } else { + // Just checking that the selection modal works + cy.contains('label', locators.OT2_Home).should('be.visible').click() + cy.contains('label', locators.Flex_Home).should('be.visible').click() + } + cy.contains('button', 'Confirm').should('be.visible').click() +}) + // Settings Page Actions Cypress.Commands.add('openSettingsPage', () => { cy.getByTestId(locators.settingsDataTestid).click() @@ -152,16 +165,10 @@ Cypress.Commands.add('verifySettingsPage', () => { // as a reference during test migration. /// ///////////////////////////////////////////////////////////////// -Cypress.Commands.add('closeAnnouncementModal', () => { +Cypress.Commands.add('closeAnalyticsModal', () => { // ComputingSpinner sometimes covers the announcement modal button and prevents the button click // this will retry until the ComputingSpinner does not exist - cy.get('[data-test="ComputingSpinner"]', { timeout: 30000 }).should( - 'not.exist' - ) - cy.get('button') - .contains('Got It!') - .should('be.visible') - .click({ force: true }) + cy.contains('button', 'Confirm').click({ force: true }) }) // diff --git a/protocol-designer/cypress/support/createNew.ts b/protocol-designer/cypress/support/createNew.ts index b5fde778339..02430507405 100644 --- a/protocol-designer/cypress/support/createNew.ts +++ b/protocol-designer/cypress/support/createNew.ts @@ -1,33 +1,129 @@ import { executeUniversalAction, UniversalActions } from './universalActions' import { isEnumValue } from './utils' +import '../support/commands' +// ToDo Future planning should have Step 5, Step 6, and 7 verification +// Todo ProtocolOverview page. This might change from deck map revamp, +// so let's hold off until then. +// This PR unblocks Sara and I to work on this separately, so I want +// To prioritize its getting pulled into the repo +// Some day we should make a way to input variables into actions +import 'cypress-file-upload' +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace Cypress { + interface Chainable { + chooseDeckSlot: (slot: string) => Cypress.Chainable + } + } +} export enum Actions { SelectFlex = 'Select Opentrons Flex', SelectOT2 = 'Select Opentrons OT-2', Confirm = 'Confirm', GoBack = 'Go back', + SingleChannelPipette50 = 'Select 50uL Single-Channel Pipette', + YesGripper = 'Select Yes to gripper', + NoGripper = 'Select no to gripper', + AddThermocycler = 'Thermocycler Module GEN2', + AddHeaterShaker = 'Heater-Shaker Module GEN1', + AddTempdeck2 = 'Temperature Module GEN2', + AddMagBlock = 'Magnetic Block GEN1', + EditProtocolA = 'Blue button edit protocol', + choseDeckSlot = 'Chose each deck slot', + ChoseDeckSlotA1 = 'Choose deck slot A1', + ChoseDeckSlotA2 = 'Choose deck slot A2', + ChoseDeckSlotA3 = 'Choose deck slot A3', + ChoseDeckSlotB1 = 'Choose deck slot B1', + ChoseDeckSlotB2 = 'Choose deck slot B2', + ChoseDeckSlotB3 = 'Choose deck slot B3', + ChoseDeckSlotC1 = 'Choose deck slot C1', + ChoseDeckSlotC2 = 'Choose deck slot C2', + ChoseDeckSlotC2Labware = 'Chose labware on deck slot C2', + ChoseDeckSlotC3 = 'Choose deck slot C3', + ChoseDeckSlotD1 = 'Choose deck slot D1', + ChoseDeckSlotD2 = 'Choose deck slot D2', + ChoseDeckSlotD3 = 'Choose deck slot D3', + AddHardwareLabware = 'Adds labware to deck slot by chose deck slot', + ClickLabwareHeader = 'Click Labware', + ClickWellPlatesSection = 'Click Well plates', + SelectArmadillo96WellPlate = 'Select Armadillo 96 Well Plate', + SelectBioRad96WellPlate = 'Select Bio-Rad 96 Well Plate', + AddLiquid = 'Add liquid', + DefineLiquid = 'Define a liquid', + ClickLiquidButton = 'Click Liquid button', + LiquidSaveWIP = 'Save liquid, is functional but could use a refactor', + WellSelector = 'Select wells with strings A1, A2, etc. comman separated LIST', + LiquidDropdown = 'Dropdown for liquids when adding to well', + SelectLiquidWells = 'Select Liquid Wells', + SetVolumeAndSaveforWells = 'Set volume and save for wells', + ProtocolStepsH = 'Select Protocol Steps Header', + AddStep = 'Use after making sure you are on ProtocolStepsH or have already made a step', } export enum Verifications { OnStep1 = 'On Step 1 page.', OnStep2 = 'On Step 2 page.', + OnStep3 = 'on Step 3 page', FlexSelected = 'Opentrons Flex selected.', OT2Selected = 'Opentrons OT-2 selected.', NinetySixChannel = '96-Channel option is available.', NotNinetySixChannel = '96-Channel option is not available.', + StepTwo50uL = 'Step Two part two', + StepTwoPart3 = 'Step Two part three', + Step4Verification = 'Step 4 part 1', + ThermocyclerImg = 'Thermocycler Module GEN2', + HeaterShakerImg = 'Heater-Shaker Module GEN1', + Tempdeck2Img = 'Temperature Module GEN2', + MagBlockImg = 'Magnetic Block GEN1', + LiquidPage = 'Liquid page content is visible', + TransferPopOut = 'Verify Step 1 of the transfer function is present', } - export enum Content { Step1Title = 'Step 1', Step2Title = 'Step 2', + Step3Title = 'Step3', + Step4Title = 'Step4', AddPipette = 'Add a pipette', NinetySixChannel = '96-Channel', + SingleChannel = '1-Channel', + EightChannel = '8-Channel', + TipRack = 'Filter Tip Rack 50 µL', + PipetteType = 'Pipette type', + PipetteVolume = 'Pipette volume', + FullP50SingleName = 'Flex 1-Channel 50 μL', + FullP50TiprackName = 'Opentrons Flex 96 Filter Tip Rack 50 µL', GoBack = 'Go back', Confirm = 'Confirm', OpentronsFlex = 'Opentrons Flex', OpentronsOT2 = 'Opentrons OT-2', LetsGetStarted = 'Let’s start with the basics', WhatKindOfRobot = 'What kind of robot do you have?', + Volume50 = '50 µL', + Volume1000 = '1000 µL', + FilterTiprack50 = 'Filter Tip Rack 50 µL', + Tiprack50 = 'Tip Rack 50 µL', + Yes = 'Yes', + No = 'No', + Thermocycler = 'Thermocycler Module GEN2', + HeaterShaker = 'Heater-Shaker Module GEN1', + Tempdeck2 = 'Temperature Module GEN2', + MagBlock = 'Magnetic Block GEN1', + ModulePageH = 'Add your modules', + ModulePageB = 'Select modules to use in your protocol.', + EditProtocol = 'Edit protocol', + EditSlot = 'Edit slot', + AddLabwareToDeck = 'Add hardware/labware', + LabwareH = 'Labware', + WellPlatesCat = 'Well plates', + Armadillo96WellPlate200uL = 'Armadillo 96 Well Plate 200 µL PCR Full Skirt', + Biorad96WellPlate200uL = 'Bio-Rad 96 Well Plate 200 µL PCR', + AddLiquid = 'Add liquid', + DefineALiquid = 'Define a liquid', + LiquidButton = 'Liquid', + SampleLiquidName = 'My liquid!', + ProtocolSteps = 'Protocol steps', + AddStep = 'Add Step', } export enum Locators { @@ -38,8 +134,91 @@ export enum Locators { FlexOption = 'button:contains("Opentrons Flex")', OT2Option = 'button:contains("Opentrons OT-2")', NinetySixChannel = 'div:contains("96-Channel")', + ThermocyclerImage = 'img[alt="temperatureModuleType"]', + MagblockImage = 'img[alt="magneticBlockType"]', + HeaterShakerImage = 'img[alt="heaterShakerModuleType"]', + TemperatureModuleImage = 'img[alt="temperatureModuleType"]', + LiquidNameInput = 'input[name="name"]', + ModalShellArea = 'div[aria-label="ModalShell_ModalArea"]', + SaveButton = 'button[type="submit"]', + LiquidsDropdown = 'div[tabindex="0"].sc-bqWxrE', // Add new locator for the dropdown + LabwareSelectionLocation = '[data-testid="Toolbox_confirmButton"]', +} + +const chooseDeckSlot = ( + slot: string +): Cypress.Chainable> => { + const deckSlots: Record< + | 'A1' + | 'A2' + | 'A3' + | 'B1' + | 'B2' + | 'B3' + | 'C1' + | 'C2' + | 'C3' + | 'D1' + | 'D2' + | 'D3', + () => Cypress.Chainable> + > = { + A1: () => cy.contains('foreignObject[x="0"][y="321"]', Content.EditSlot), + A2: () => cy.contains('foreignObject[x="164"][y="321"]', Content.EditSlot), + A3: () => cy.contains('foreignObject[x="328"][y="321"]', Content.EditSlot), + B1: () => cy.contains('foreignObject[x="0"][y="214"]', Content.EditSlot), + B2: () => cy.contains('foreignObject[x="164"][y="214"]', Content.EditSlot), + B3: () => cy.contains('foreignObject[x="328"][y="214"]', Content.EditSlot), + C1: () => cy.contains('foreignObject[x="0"][y="107"]', Content.EditSlot), + C2: () => cy.contains('foreignObject[x="164"][y="107"]', Content.EditSlot), + C3: () => cy.contains('foreignObject[x="328"][y="107"]', Content.EditSlot), + D1: () => cy.contains('foreignObject[x="0"][y="0"]', Content.EditSlot), + D2: () => cy.contains('foreignObject[x="164"][y="0"]', Content.EditSlot), + D3: () => cy.contains('foreignObject[x="328"][y="0"]', Content.EditSlot), + } + + const slotAction = deckSlots[slot as keyof typeof deckSlots] + + if (typeof slotAction === 'function') { + return slotAction() // Return the chainable object + } else { + throw new Error(`Slot ${slot} not found in deck slots.`) + } +} +// Well name selection for liquids and in general +const selectWells = (wells: string[]): void => { + // Define a dictionary of well selectors + const wellSelectors: Record< + string, + () => Cypress.Chainable> + > = {} + + // Populate the dictionary dynamically + const rows = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] + const columns = Array.from({ length: 12 }, (_, i) => (i + 1).toString()) + + rows.forEach(row => { + columns.forEach(column => { + const wellName = `${row}${column}` + wellSelectors[wellName] = () => + cy.get(`circle[data-wellname="${wellName}"]`).click({ force: true }) + }) + }) + + // Iterate over the wells array and click the corresponding wells + wells.forEach(well => { + const wellAction = wellSelectors[well] + if (typeof wellAction === 'function') { + wellAction() // Click the well + } else { + throw new Error(`Well ${well} not found.`) + } + }) } +// Example usage +// selectWells(['A1', 'B3', 'H12']) + const executeAction = (action: Actions | UniversalActions): void => { if (isEnumValue([UniversalActions], [action])) { executeUniversalAction(action as UniversalActions) @@ -50,6 +229,7 @@ const executeAction = (action: Actions | UniversalActions): void => { case Actions.SelectFlex: cy.contains(Content.OpentronsFlex).should('be.visible').click() break + case Actions.SelectOT2: cy.contains(Content.OpentronsOT2).should('be.visible').click() break @@ -59,6 +239,147 @@ const executeAction = (action: Actions | UniversalActions): void => { case Actions.GoBack: cy.contains(Content.GoBack).should('be.visible').click() break + case Actions.SingleChannelPipette50: + cy.contains('label', Content.SingleChannel) + .should('exist') + .and('be.visible') + .click() + cy.contains(Content.Volume50).click() + cy.contains(Content.Tiprack50).click() + // ToDo after PR, why does this click Tiprack50 again + // instead of clicking the filter tiprack? + // cy.contains(Content.FilterTiprack50).click() + break + case Actions.AddThermocycler: + cy.contains(Content.Thermocycler).click() + break + case Actions.AddHeaterShaker: + cy.contains(Content.HeaterShaker).click() + break + case Actions.AddTempdeck2: + cy.contains(Content.Tempdeck2).click() + break + case Actions.AddMagBlock: + cy.contains(Content.MagBlock).click() + break + case Actions.YesGripper: + cy.contains(Content.Yes).click() + break + case Actions.NoGripper: + cy.contains(Content.No).click() + break + case Actions.EditProtocolA: + cy.contains(Content.EditProtocol).click() + break + case Actions.ChoseDeckSlotA1: + chooseDeckSlot('A1').click() + break + case Actions.ChoseDeckSlotA2: + chooseDeckSlot('A2').click() + break + case Actions.ChoseDeckSlotA3: + chooseDeckSlot('A3').click() + break + case Actions.ChoseDeckSlotB1: + chooseDeckSlot('B1').click() + break + case Actions.ChoseDeckSlotB2: + chooseDeckSlot('B2').click() + break + case Actions.ChoseDeckSlotB3: + chooseDeckSlot('B3').click() + break + case Actions.ChoseDeckSlotC1: + chooseDeckSlot('C1').click() + break + case Actions.ChoseDeckSlotC2: + chooseDeckSlot('C2').click() + break + case Actions.ChoseDeckSlotC3: + chooseDeckSlot('C3').click() + break + case Actions.ChoseDeckSlotD1: + chooseDeckSlot('D1').click() + break + case Actions.ChoseDeckSlotD2: + chooseDeckSlot('D2').click() + break + case Actions.ChoseDeckSlotD3: + chooseDeckSlot('D3').click() + break + case Actions.AddHardwareLabware: // New case + cy.contains(Content.AddLabwareToDeck).click() + break + case Actions.ClickLabwareHeader: // New case + cy.contains(Content.LabwareH).click() + break + case Actions.ClickWellPlatesSection: // New case + cy.contains(Content.WellPlatesCat).click() + break + case Actions.ChoseDeckSlotC2Labware: + // Todo Investigate making a dictionary of slot editing. + // Maybe next PR + chooseDeckSlot('C2') + .find('.Box-sc-8ozbhb-0.kIDovv') + .find('a[role="button"]') + .contains(Content.EditSlot) + .click({ force: true }) + break + case Actions.SelectArmadillo96WellPlate: // New case for selecting Armadillo plate + cy.contains(Content.Armadillo96WellPlate200uL).click({ force: true }) + cy.get(Locators.LabwareSelectionLocation).click({ force: true }) + break + case Actions.SelectBioRad96WellPlate: // New case for selecting Armadillo plate + cy.contains(Content.Biorad96WellPlate200uL).click({ force: true }) + cy.get(Locators.LabwareSelectionLocation).click({ force: true }) + break + + case Actions.AddLiquid: // New case for "Add liquid" + cy.contains('button', Content.AddLiquid).click() + break + case Actions.ClickLiquidButton: // New case for "Liquid button" + cy.contains('button', Content.LiquidButton).click() + break + case Actions.DefineLiquid: // New case for "Define a liquid" + cy.contains('button', Content.DefineALiquid).click() + break + case Actions.LiquidSaveWIP: + cy.get(Locators.LiquidNameInput) // Locate the input with name="name" + .type(Content.SampleLiquidName) + + cy.get(Locators.ModalShellArea) + .find('form') // Target the form inside the modal + .invoke('submit', (e: SubmitEvent) => { + e.preventDefault() // Prevent default form submission + }) + + cy.get(Locators.ModalShellArea) + .find(Locators.SaveButton) // Locate the Save button + .contains('Save') + .click({ force: true }) // Trigger the Save button + break + case Actions.WellSelector: + selectWells(['A1', 'A2']) + break + case Actions.LiquidDropdown: // New case for dropdown + cy.get(Locators.LiquidsDropdown) + .should('be.visible') // Ensure the dropdown is visible + .click() // Click the dropdown + break + case Actions.SelectLiquidWells: + cy.contains('My liquid!').click() // Action for clicking 'My liquid!' + break + case Actions.SetVolumeAndSaveforWells: + cy.get('input[name="volume"]').type(`150`) // Set volume + cy.contains('button', 'Save').click() // Click Save button + cy.contains('button', 'Done').click({ force: true }) // Click Done button, forcing click if necessary + break + case Actions.ProtocolStepsH: + cy.contains('button', Content.ProtocolSteps).click() + break + case Actions.AddStep: + cy.contains('button', Content.AddStep).click() + break default: throw new Error(`Unrecognized action: ${action as string}`) } @@ -93,6 +414,65 @@ const verifyStep = (verification: Verifications): void => { case Verifications.NotNinetySixChannel: cy.contains(Content.NinetySixChannel).should('not.exist') break + case Verifications.StepTwo50uL: + // This function should get used after you select 50uL fully + cy.contains(Content.PipetteVolume) + cy.contains(Content.Volume50).should('be.visible') + cy.contains(Content.Volume1000).should('be.visible') + cy.contains(Content.Tiprack50).should('be.visible') + cy.contains(Content.FilterTiprack50).should('be.visible') + break + case Verifications.StepTwoPart3: + // This function should get used after you select 50uL fully + cy.contains(Content.FullP50SingleName).should('be.visible') + cy.contains(Content.FullP50TiprackName).should('be.visible') + cy.contains('Left Mount').should('be.visible') + cy.contains(Content.Step2Title) + cy.contains('Robot pipettes') + cy.contains(Content.AddPipette) + break + case Verifications.OnStep3: + cy.contains('Add a gripper').should('be.visible') + cy.contains( + 'Do you want to move labware automatically with the gripper?' + ).should('be.visible') + cy.contains(Content.Yes).should('be.visible') + cy.contains(Content.No).should('be.visible') + break + case Verifications.Step4Verification: + cy.contains(Content.ModulePageH).should('be.visible') + cy.contains(Content.ModulePageB).should('be.visible') + cy.contains(Content.Thermocycler).should('be.visible') + cy.contains(Content.HeaterShaker).should('be.visible') + cy.contains(Content.MagBlock).should('be.visible') + cy.contains(Content.Tempdeck2).should('be.visible') + break + case Verifications.ThermocyclerImg: + cy.get(Locators.TemperatureModuleImage).should('be.visible') + break + case Verifications.HeaterShakerImg: + cy.get(Locators.HeaterShakerImage).should('be.visible') + break + case Verifications.Tempdeck2Img: + cy.contains(Content.Tempdeck2).should('be.visible') + break + case Verifications.LiquidPage: + cy.contains('Liquid').should('be.visible') + cy.contains('Add liquid').should('be.visible') + cy.contains('Liquid volume by well').should('be.visible') + cy.contains('Cancel').should('be.visible') + break + case Verifications.TransferPopOut: + cy.contains('button', 'Transfer').should('be.visible').click() + cy.contains('Source labware') + cy.contains('Select source wells') + cy.contains('Destination labware') + cy.contains('Volume per well') + cy.contains('Tip handling') + cy.contains('Tip handling') + cy.contains('Tip drop location') + break + default: throw new Error( `Unrecognized verification: ${verification as Verifications}` diff --git a/protocol-designer/fixtures/protocol/8/newAdvancedSettingsAndMultiTemp.json b/protocol-designer/fixtures/protocol/8/newAdvancedSettingsAndMultiTemp.json index 9c6d24abaca..8b8d129418f 100644 --- a/protocol-designer/fixtures/protocol/8/newAdvancedSettingsAndMultiTemp.json +++ b/protocol-designer/fixtures/protocol/8/newAdvancedSettingsAndMultiTemp.json @@ -3624,7 +3624,7 @@ "key": "dd1b37d6-eb8c-4616-bc8a-e1f17556234a", "params": { "pipetteId": "21087f15-4c03-4587-8a2b-1ba0b5a501a0", - "volume": 1 + "volume": 10 } }, { diff --git a/protocol-designer/package.json b/protocol-designer/package.json index 8be7d0a965b..51718e773bf 100755 --- a/protocol-designer/package.json +++ b/protocol-designer/package.json @@ -33,12 +33,10 @@ "@typescript-eslint/eslint-plugin": "^6.10.0", "@typescript-eslint/parser": "^6.10.0", "ajv": "6.12.3", - "cookie": "0.3.1", "core-js": "3.2.1", "date-fns": "2.10.0", "file-saver": "2.0.1", "i18next": "^19.8.3", - "immer": "9.0.6", "lodash": "4.17.21", "mixpanel-browser": "2.22.1", "query-string": "6.2.0", diff --git a/protocol-designer/src/assets/localization/en/protocol_steps.json b/protocol-designer/src/assets/localization/en/protocol_steps.json index 2f498904c61..0ed3f34caf8 100644 --- a/protocol-designer/src/assets/localization/en/protocol_steps.json +++ b/protocol-designer/src/assets/localization/en/protocol_steps.json @@ -143,5 +143,6 @@ "volume_per_well": "Volume per well", "well_name": "Well {{wellName}}", "well_order_title": "{{prefix}} well order", - "well_position": "Well position: X {{x}} Y {{y}} Z {{z}} (mm)" + "well_position": "Well position: X {{x}} Y {{y}} Z {{z}} (mm)", + "unknown_module": "Unknown module" } diff --git a/protocol-designer/src/assets/localization/en/shared.json b/protocol-designer/src/assets/localization/en/shared.json index 212ae62bf05..afbd96b1211 100644 --- a/protocol-designer/src/assets/localization/en/shared.json +++ b/protocol-designer/src/assets/localization/en/shared.json @@ -37,6 +37,7 @@ "heatershakermoduletype": "Heater-shaker Module", "hints": "Hints", "import": "Import", + "import_existing_protocol": "Import existing protocol", "incorrect_file_header": "Invalid file type", "incorrect_file_type_body": "Protocol Designer only accepts JSON protocol files created with Protocol Designer. Upload a valid file to continue.", "invalid_json_file_body": "This JSON file is either missing required information or contains sections that Protocol Designer cannot read. At this time we do not support JSON files created outside of Protocol Designer.", diff --git a/protocol-designer/src/feature-flags/reducers.ts b/protocol-designer/src/feature-flags/reducers.ts index bcffd39c5e7..336014c6691 100644 --- a/protocol-designer/src/feature-flags/reducers.ts +++ b/protocol-designer/src/feature-flags/reducers.ts @@ -31,7 +31,7 @@ const initialFlags: Flags = { process.env.OT_PD_ENABLE_HOT_KEYS_DISPLAY === '1' || true, OT_PD_ENABLE_REACT_SCAN: process.env.OT_PD_ENABLE_REACT_SCAN === '1' || false, OT_PD_ENABLE_LIQUID_CLASSES: - process.env.OT_PD_ENABLE_REACT_SCAN === '1' || false, + process.env.OT_PD_ENABLE_LIQUID_CLASSES === '1' || false, } // @ts-expect-error(sa, 2021-6-10): cannot use string literals as action type // TODO IMMEDIATELY: refactor this to the old fashioned way if we cannot have type safety: https://github.com/redux-utilities/redux-actions/issues/282#issuecomment-595163081 diff --git a/protocol-designer/src/organisms/AnnouncementModal/__tests__/AnnouncementModal.test.tsx b/protocol-designer/src/organisms/AnnouncementModal/__tests__/AnnouncementModal.test.tsx index da4929df54d..34a220d0eae 100644 --- a/protocol-designer/src/organisms/AnnouncementModal/__tests__/AnnouncementModal.test.tsx +++ b/protocol-designer/src/organisms/AnnouncementModal/__tests__/AnnouncementModal.test.tsx @@ -31,7 +31,7 @@ describe('AnnouncementModal', () => { const heading = screen.getByText('mockHeading') expect(heading).toBeVisible() screen.getByText('mockImage') - fireEvent.click(screen.getByRole('button', { name: 'Got It!' })) + fireEvent.click(screen.getByRole('button', { name: 'Close' })) expect(vi.mocked(setLocalStorageItem)).toHaveBeenCalled() expect(heading).not.toBeVisible() }) diff --git a/protocol-designer/src/organisms/AnnouncementModal/index.tsx b/protocol-designer/src/organisms/AnnouncementModal/index.tsx index 1974ef47eb6..db898dd3a9e 100644 --- a/protocol-designer/src/organisms/AnnouncementModal/index.tsx +++ b/protocol-designer/src/organisms/AnnouncementModal/index.tsx @@ -25,7 +25,7 @@ export const AnnouncementModal = ( props: AnnouncementModalProps ): JSX.Element => { const { onClose, isViewReleaseNotes = false } = props - const { t } = useTranslation(['modal', 'button']) + const { i18n, t } = useTranslation(['modal', 'button']) const announcements = useAnnouncements() const { announcementKey, message, heading, image } = announcements[ @@ -40,7 +40,9 @@ export const AnnouncementModal = ( ) const handleClick = (): void => { - if (onClose != null) onClose() + if (onClose != null) { + onClose() + } setLocalStorageItem(localStorageAnnouncementKey, announcementKey) setShowAnnouncementModal(false) } @@ -49,13 +51,18 @@ export const AnnouncementModal = ( <> {showAnnouncementModal && ( + - {t('button:got_it')} + {i18n.format(t('close'), 'capitalize')} } diff --git a/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx b/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx index 3e2e90d8d94..33f98e7c412 100644 --- a/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx +++ b/protocol-designer/src/organisms/DefineLiquidsModal/index.tsx @@ -143,8 +143,8 @@ export function DefineLiquidsModal( saveForm({ name: values.name, displayColor: values.displayColor, - liquidClass: values.liquidClass ? values.liquidClass : null, - description: values.description ? values.description : null, + liquidClass: values.liquidClass !== '' ? values.liquidClass : null, + description: values.description !== '' ? values.description : null, serialize: values.serialize ?? false, }) } diff --git a/protocol-designer/src/organisms/MaterialsListModal/MaterialsListModal.stories.tsx b/protocol-designer/src/organisms/MaterialsListModal/MaterialsListModal.stories.tsx index 36cb4f58efb..21d6a171744 100644 --- a/protocol-designer/src/organisms/MaterialsListModal/MaterialsListModal.stories.tsx +++ b/protocol-designer/src/organisms/MaterialsListModal/MaterialsListModal.stories.tsx @@ -1,11 +1,15 @@ import { I18nextProvider } from 'react-i18next' +import { Provider } from 'react-redux' + import { i18n } from '../../assets/localization' +import { configureStore } from '../../configureStore' import { MaterialsListModal as MaterialsListModalComponent } from '.' import type { Meta, StoryObj } from '@storybook/react' import type { LabwareOnDeck, ModuleOnDeck } from '../../step-forms' import type { FixtureInList } from '.' +const mockStore = configureStore() const mockHardware = [ { id: 'mockHardware', @@ -49,9 +53,11 @@ const meta: Meta = { component: MaterialsListModalComponent, decorators: [ Story => ( - - - + + + + + ), ], } diff --git a/protocol-designer/src/organisms/SlotInformation/SlotInformation.stories.tsx b/protocol-designer/src/organisms/SlotInformation/SlotInformation.stories.tsx index 98d6132ef23..1a748fbc37f 100644 --- a/protocol-designer/src/organisms/SlotInformation/SlotInformation.stories.tsx +++ b/protocol-designer/src/organisms/SlotInformation/SlotInformation.stories.tsx @@ -1,6 +1,7 @@ -import { Flex } from '@opentrons/components' +import { MemoryRouter } from 'react-router-dom' import { I18nextProvider } from 'react-i18next' import { i18n } from '../../assets/localization' +import { Flex } from '@opentrons/components' import { SlotInformation as SlotInformationComponent } from '.' import type { Meta, StoryObj } from '@storybook/react' @@ -37,11 +38,13 @@ const meta: Meta = { }, decorators: [ Story => ( - - - - - + + + + + + + ), ], } diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx index f5b1fe252cd..49caf5c55cc 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx @@ -67,6 +67,13 @@ import type { AddressableAreaName, ModuleModel } from '@opentrons/shared-data' import type { ThunkDispatch } from '../../../types' import type { Fixture } from './constants' +const mapModTypeToStepType: Record = { + heaterShakerModuleType: 'heaterShaker', + magneticModuleType: 'magnet', + temperatureModuleType: 'temperature', + thermocyclerModuleType: 'thermocycler', +} + interface DeckSetupToolsProps { onCloseClick: () => void setHoveredLabware: (defUri: string | null) => void @@ -91,6 +98,7 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { const { makeSnackbar } = useKitchen() const selectedSlotInfo = useSelector(selectors.getZoomedInSlotInfo) const robotType = useSelector(getRobotType) + const savedSteps = useSelector(getSavedStepForms) const [showDeleteLabwareModal, setShowDeleteLabwareModal] = useState< ModuleModel | 'clear' | null >(null) @@ -272,7 +280,11 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { if ( createdLabwareForSlot != null && (!keepExistingLabware || - createdLabwareForSlot.labwareDefURI !== selectedLabwareDefUri) + createdLabwareForSlot.labwareDefURI !== selectedLabwareDefUri || + // if nested labware changes but labware doesn't, still delete both + (createdLabwareForSlot.labwareDefURI === selectedLabwareDefUri && + createdNestedLabwareForSlot?.labwareDefURI !== + selectedNestedLabwareDefUri)) ) { dispatch(deleteContainer({ labwareId: createdLabwareForSlot.id })) } @@ -333,10 +345,12 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { return } dispatch( - createModule({ + createModuleEntityAndChangeForm({ slot, type: moduleType, model: selectedModuleModel, + moduleSteps, + pauseSteps, }) ) } @@ -364,7 +378,11 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { if ( selectedModuleModel != null && selectedLabwareDefUri != null && - createdLabwareForSlot?.labwareDefURI !== selectedLabwareDefUri + (createdLabwareForSlot?.labwareDefURI !== selectedLabwareDefUri || + // if nested labware changes but labware doesn't, still create both both + (createdLabwareForSlot.labwareDefURI === selectedLabwareDefUri && + createdNestedLabwareForSlot?.labwareDefURI !== + selectedNestedLabwareDefUri)) ) { // create adapter + labware on module dispatch( diff --git a/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx b/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx index 995b06219d6..fca8de157a9 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx @@ -438,10 +438,15 @@ export function LabwareTools(props: LabwareToolsProps): JSX.Element { ) } ) - : getLabwareCompatibleWithAdapter( - loadName - ).map(nestedDefUri => { - const nestedDef = defs[nestedDefUri] + : [ + ...getLabwareCompatibleWithAdapter( + loadName + ), + ...Object.keys(customLabwareDefs), + ].map(nestedDefUri => { + const nestedDef = + defs[nestedDefUri] ?? + customLabwareDefs[nestedDefUri] return ( { additionalEquipmentOnDeck: {}, pipettes: {}, }) + vi.mocked(getSavedStepForms).mockReturnValue({}) vi.mocked(getDismissedHints).mockReturnValue([]) vi.mocked(getAdditionalEquipment).mockReturnValue({}) vi.mocked(useKitchen).mockReturnValue({ diff --git a/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx b/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx index 1a4b2e12c29..38b5867b2cc 100644 --- a/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx +++ b/protocol-designer/src/pages/Designer/LiquidsOverflowMenu.tsx @@ -5,10 +5,10 @@ import { useLocation } from 'react-router-dom' import { ALIGN_CENTER, BORDERS, - Box, COLORS, CURSOR_POINTER, DIRECTION_COLUMN, + Divider, Flex, Icon, LiquidIcon, @@ -92,7 +92,7 @@ export function LiquidsOverflowMenu( ) })} {liquids.length > 0 ? ( - + ) : null} )} diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/utils.ts b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/utils.ts index 9f5cbab9655..5f565eef321 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/utils.ts +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/utils.ts @@ -135,14 +135,21 @@ export function getDisabledPathMap( airGapVolume, }) - if (!withinCapacityForMultiDispense) { + if ( + !withinCapacityForMultiDispense && + values.volume != null && + values.volume !== '' + ) { disabledPathMap = { ...disabledPathMap, multiDispense: t('step_edit_form.field.path.subtitle.volume_too_high'), } } - - if (!withinCapacityForMultiAspirate) { + if ( + !withinCapacityForMultiAspirate && + values.volume != null && + values.volume !== '' + ) { disabledPathMap = { ...disabledPathMap, multiAspirate: t('step_edit_form.field.path.subtitle.volume_too_high'), diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx index b2183d7b678..7f15ecce744 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/ThermocyclerTools/ThermocyclerState.tsx @@ -65,7 +65,6 @@ export function ThermocyclerState(props: ThermocyclerStateProps): JSX.Element { flexDirection={DIRECTION_COLUMN} gridGap={SPACING.spacing4} paddingX={SPACING.spacing16} - paddingTop={SPACING.spacing16} > diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx index f97d73e469f..a7d4349bad6 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepSummary.tsx @@ -11,8 +11,12 @@ import { SPACING, StyledText, Tag, + WRAP, } from '@opentrons/components' -import { getModuleDisplayName } from '@opentrons/shared-data' +import { + WASTE_CHUTE_CUTOUT, + getModuleDisplayName, +} from '@opentrons/shared-data' import { getAdditionalEquipmentEntities, getLabwareEntities, @@ -20,6 +24,8 @@ import { } from '../../../step-forms/selectors' import { getLabwareNicknamesById } from '../../../ui/labware/selectors' import { LINE_CLAMP_TEXT_STYLE } from '../../../atoms' +import { formatTime } from '../utils' + import type { FormData } from '../../../form-types' interface StyledTransProps { @@ -35,10 +41,8 @@ function StyledTrans(props: StyledTransProps): JSX.Element { ) break - case 'magnet': + } + + case 'magnet': { const { moduleId: magneticModuleId, engageHeight, magnetAction, } = currentStep - const magneticModuleDisplayName = getModuleDisplayName( - modules[magneticModuleId].model - ) + const magneticModuleDisplayName = + getModuleDisplayName(modules[magneticModuleId]?.model) ?? unknownModule stepSummaryContent = magnetAction === 'engage' ? ( ) break - case 'thermocycler': + } + + case 'thermocycler': { const { lidIsActive, lidTargetTemp, @@ -215,7 +223,9 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { ) break - case 'pause': + } + + case 'pause': { const { moduleId: pauseModuleId, pauseAction, @@ -231,9 +241,8 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { ) break case 'untilTemperature': - const pauseModuleDisplayName = getModuleDisplayName( - modules[pauseModuleId].model - ) + const pauseModuleDisplayName = + getModuleDisplayName(modules[pauseModuleId]?.model) ?? unknownModule stepSummaryContent = ( ) break } break - case 'temperature': + } + + case 'temperature': { const { moduleId: tempModuleId, setTemperature, targetTemperature, } = currentStep const isDeactivating = setTemperature === 'false' - const tempModuleDisplayName = getModuleDisplayName( - modules[tempModuleId].model - ) + const tempModuleDisplayName = + getModuleDisplayName(modules[tempModuleId]?.model) ?? unknownModule stepSummaryContent = isDeactivating ? ( ) break - case 'moveLabware': + } + + case 'moveLabware': { const { labware, newLocation, useGripper } = currentStep const labwareName = labwareNicknamesById[labware] let newLocationName = newLocation @@ -285,6 +297,8 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { newLocationName = labwareNicknamesById[newLocation] } else if (newLocation === 'offDeck') { newLocationName = t('off_deck') + } else if (newLocation === WASTE_CHUTE_CUTOUT) { + newLocationName = t('shared:wasteChute') } stepSummaryContent = ( ) break - case 'moveLiquid': + } + + case 'moveLiquid': { let moveLiquidType const { aspirate_labware, @@ -353,7 +369,9 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { ) break - case 'heaterShaker': + } + + case 'heaterShaker': { const { latchOpen, heaterShakerTimer, @@ -361,9 +379,9 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { targetHeaterShakerTemperature, targetSpeed, } = currentStep - const moduleDisplayName = getModuleDisplayName( - modules[heaterShakerModuleId].model - ) + const moduleDisplayName = + getModuleDisplayName(modules[heaterShakerModuleId]?.model) ?? + unknownModule stepSummaryContent = ( @@ -389,7 +407,7 @@ export function StepSummary(props: StepSummaryProps): JSX.Element | null { {heaterShakerTimer ? ( ) : null} ) break + } + default: stepSummaryContent = null } + return stepSummaryContent != null || stepDetails != null ? ( title.replace( /(^[\d\W]*)([a-zA-Z])|(-[a-zA-Z])/g, (match, prefix, firstLetter) => { - if (prefix) { + if (prefix != null) { return `${prefix}${firstLetter.toUpperCase()}` } else { return `${match.charAt(0)}${match.charAt(1).toUpperCase()}` diff --git a/protocol-designer/src/pages/Designer/__tests__/utils.test.ts b/protocol-designer/src/pages/Designer/__tests__/utils.test.ts index 6be91d71b2a..2e22a095b24 100644 --- a/protocol-designer/src/pages/Designer/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/Designer/__tests__/utils.test.ts @@ -7,7 +7,7 @@ import { WASTE_CHUTE_CUTOUT, fixture96Plate, } from '@opentrons/shared-data' -import { getSlotInformation } from '../utils' +import { getSlotInformation, formatTime } from '../utils' import type { LabwareDefinition2 } from '@opentrons/shared-data' import type { AdditionalEquipmentName } from '@opentrons/step-generation' import type { AllTemporalPropertiesForTimelineFrame } from '../../../step-forms' @@ -194,3 +194,21 @@ describe('getSlotInformation', () => { }) }) }) + +describe('formatTime', () => { + it('input is 3:3:3 and output is 03:03:03', () => { + expect(formatTime('3:3:3')).toEqual('03:03:03') + }) + it('input is 3:3 and output is 03:03', () => { + expect(formatTime('3:3')).toEqual('03:03') + }) + it('input is 30:12 and output is 30:12', () => { + expect(formatTime('30:12')).toEqual('30:12') + }) + it('input is 12:23:34 and output is 12:23:34', () => { + expect(formatTime('12:23:34')).toEqual('12:23:34') + }) + it('input is 0:03 and output is 00:03', () => { + expect(formatTime('0:03')).toEqual('00:03') + }) +}) diff --git a/protocol-designer/src/pages/Designer/utils.ts b/protocol-designer/src/pages/Designer/utils.ts index 3110f9d519d..7a9e5008154 100644 --- a/protocol-designer/src/pages/Designer/utils.ts +++ b/protocol-designer/src/pages/Designer/utils.ts @@ -105,3 +105,21 @@ export const getSlotInformation = ( matchingLabwareFor4thColumn: matchingLabware, } } + +export const formatTime = (input: string): string => { + const timeParts = input.split(':') + if (timeParts.length === 3) { + const [hours, minutes, seconds] = timeParts + return [ + hours.toString().padStart(2, '0'), + minutes.toString().padStart(2, '0'), + seconds.toString().padStart(2, '0'), + ].join(':') + } else { + const [minutes, seconds] = timeParts + return [ + minutes.toString().padStart(2, '0'), + seconds.toString().padStart(2, '0'), + ].join(':') + } +} diff --git a/protocol-designer/src/pages/Landing/__tests__/Landing.test.tsx b/protocol-designer/src/pages/Landing/__tests__/Landing.test.tsx index c064a66dfb2..0cb0d3c9a68 100644 --- a/protocol-designer/src/pages/Landing/__tests__/Landing.test.tsx +++ b/protocol-designer/src/pages/Landing/__tests__/Landing.test.tsx @@ -58,7 +58,7 @@ describe('Landing', () => { ) fireEvent.click(screen.getByRole('button', { name: 'Create a protocol' })) expect(vi.mocked(toggleNewProtocolModal)).toHaveBeenCalled() - screen.getByText('Edit existing protocol') + screen.getByText('Import existing protocol') screen.getByRole('img', { name: 'welcome image' }) }) diff --git a/protocol-designer/src/pages/Landing/index.tsx b/protocol-designer/src/pages/Landing/index.tsx index 1e0424c5630..3f2f839e33b 100644 --- a/protocol-designer/src/pages/Landing/index.tsx +++ b/protocol-designer/src/pages/Landing/index.tsx @@ -25,7 +25,11 @@ import { toggleNewProtocolModal } from '../../navigation/actions' import { useKitchen } from '../../organisms/Kitchen/hooks' import { getHasOptedIn } from '../../analytics/selectors' import { useAnnouncements } from '../../organisms/AnnouncementModal/announcements' -import { getLocalStorageItem, localStorageAnnouncementKey } from '../../persist' +import { + getLocalStorageItem, + localStorageAnnouncementKey, + setLocalStorageItem, +} from '../../persist' import welcomeImage from '../../assets/images/welcome_page.png' import type { ChangeEvent, ComponentProps } from 'react' @@ -39,7 +43,7 @@ export function Landing(): JSX.Element { const [showAnnouncementModal, setShowAnnouncementModal] = useState( false ) - const { hasOptedIn } = useSelector(getHasOptedIn) + const { hasOptedIn, appVersion } = useSelector(getHasOptedIn) const { bakeToast, eatToast } = useKitchen() const announcements = useAnnouncements() const lastAnnouncement = announcements[announcements.length - 1] @@ -52,7 +56,11 @@ export function Landing(): JSX.Element { hasOptedIn != null useEffect(() => { - if (userHasNotSeenAnnouncement) { + if ( + userHasNotSeenAnnouncement && + appVersion != null && + hasOptedIn != null + ) { const toastId = bakeToast( t('learn_more', { version: process.env.OT_PD_VERSION }) as string, INFO_TOAST, @@ -60,6 +68,9 @@ export function Landing(): JSX.Element { heading: t('updated_protocol_designer'), closeButton: true, linkText: t('view_release_notes'), + onClose: () => { + setLocalStorageItem(localStorageAnnouncementKey, announcementKey) + }, onLinkClick: () => { eatToast(toastId) setShowAnnouncementModal(true) @@ -69,7 +80,7 @@ export function Landing(): JSX.Element { } ) } - }, [userHasNotSeenAnnouncement]) + }, [userHasNotSeenAnnouncement, appVersion, hasOptedIn]) useEffect(() => { if (metadata?.created != null) { @@ -138,7 +149,7 @@ export function Landing(): JSX.Element { - {t('edit_existing')} + {t('import_existing_protocol')} diff --git a/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx b/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx index ee40f77aef4..1ef1a76561f 100644 --- a/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/InstrumentsInfo.tsx @@ -1,6 +1,7 @@ import { useTranslation } from 'react-i18next' import { + ALIGN_CENTER, Btn, COLORS, DIRECTION_COLUMN, @@ -77,7 +78,7 @@ export function InstrumentsInfo({ return ( - + {t('instruments')} diff --git a/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx b/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx index 564c99d9f89..c5d85a6047e 100644 --- a/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx +++ b/protocol-designer/src/pages/ProtocolOverview/ProtocolMetadata.tsx @@ -1,5 +1,6 @@ import { useTranslation } from 'react-i18next' import { + ALIGN_CENTER, Btn, COLORS, DIRECTION_COLUMN, @@ -36,7 +37,7 @@ export function ProtocolMetadata({ return ( - + {t('protocol_metadata')} diff --git a/protocol-designer/src/step-forms/actions/thunks.ts b/protocol-designer/src/step-forms/actions/thunks.ts index 0a0f5f17227..65079b0fe2d 100644 --- a/protocol-designer/src/step-forms/actions/thunks.ts +++ b/protocol-designer/src/step-forms/actions/thunks.ts @@ -1,12 +1,21 @@ import { createContainer } from '../../labware-ingred/actions' import { getDeckSetupForActiveItem } from '../../top-selectors/labware-locations' +import { uuid } from '../../utils' +import { changeSavedStepForm } from '../../steplist/actions' -import type { DeckSlotId } from '@opentrons/shared-data' +import type { + DeckSlotId, + ModuleModel, + ModuleType, +} from '@opentrons/shared-data' import type { ThunkAction } from '../../types' import type { CreateContainerAction, RenameLabwareAction, } from '../../labware-ingred/actions' +import type { CreateModuleAction } from './modules' +import type { ChangeSavedStepFormAction } from '../../steplist/actions' +import type { FormData } from '../../form-types' export interface CreateContainerAboveModuleArgs { slot: DeckSlotId @@ -37,3 +46,47 @@ export const createContainerAboveModule: ( }) ) } + +interface ModuleAndChangeFormArgs { + slot: DeckSlotId + type: ModuleType + model: ModuleModel + moduleSteps: FormData[] + pauseSteps: FormData[] +} +export const createModuleEntityAndChangeForm: ( + args: ModuleAndChangeFormArgs +) => ThunkAction = args => ( + dispatch, + getState +) => { + const { slot, model, type, moduleSteps, pauseSteps } = args + const moduleId = `${uuid()}:${type}` + + dispatch({ + type: 'CREATE_MODULE', + payload: { slot, model, type, id: moduleId }, + }) + + // if steps are created with the module that has been regenerated, migrate them to use the correct moduleId + moduleSteps.forEach(step => { + dispatch( + changeSavedStepForm({ + stepId: step.id, + update: { + moduleId, + }, + }) + ) + }) + pauseSteps.forEach(step => { + dispatch( + changeSavedStepForm({ + stepId: step.id, + update: { + moduleId, + }, + }) + ) + }) +} diff --git a/protocol-designer/src/steplist/fieldLevel/errors.ts b/protocol-designer/src/steplist/fieldLevel/errors.ts index 7405f097643..892e7f0a11a 100644 --- a/protocol-designer/src/steplist/fieldLevel/errors.ts +++ b/protocol-designer/src/steplist/fieldLevel/errors.ts @@ -34,7 +34,7 @@ export type ErrorChecker = (value: unknown) => string | null export const requiredField: ErrorChecker = (value: unknown) => !value ? FIELD_ERRORS.REQUIRED : null export const isTimeFormat: ErrorChecker = (value: unknown): string | null => { - const timeRegex = new RegExp(/^\d{1,2}:\d{1,2}:\d{1,2}$/g) + const timeRegex = new RegExp(/^\d{1,2}:(?:[0-5]?\d):(?:[0-5]?\d)$/g) return (typeof value === 'string' && timeRegex.test(value)) || !value ? null : FIELD_ERRORS.BAD_TIME_HMS @@ -42,7 +42,7 @@ export const isTimeFormat: ErrorChecker = (value: unknown): string | null => { export const isTimeFormatMinutesSeconds: ErrorChecker = ( value: unknown ): string | null => { - const timeRegex = new RegExp(/^\d{1,2}:\d{1,2}$/g) + const timeRegex = new RegExp(/^\d+:[0-5]?\d$/g) return (typeof value === 'string' && timeRegex.test(value)) || !value ? null : FIELD_ERRORS.BAD_TIME_MS diff --git a/robot-server/robot_server/labware_offsets/router.py b/robot-server/robot_server/labware_offsets/router.py index 155eef4b5ce..b9aafec1116 100644 --- a/robot-server/robot_server/labware_offsets/router.py +++ b/robot-server/robot_server/labware_offsets/router.py @@ -3,9 +3,11 @@ from datetime import datetime import textwrap -from typing import Annotated, Literal +from typing import Annotated, Literal, Type import fastapi +from pydantic import Json +from pydantic.json_schema import SkipJsonSchema from server_utils.fastapi_utils.light_router import LightRouter from opentrons.protocol_engine import LabwareOffset, LabwareOffsetCreate, ModuleModel @@ -22,7 +24,7 @@ SimpleMultiBody, ) -from .store import LabwareOffsetNotFoundError, LabwareOffsetStore +from .store import DO_NOT_FILTER, LabwareOffsetNotFoundError, LabwareOffsetStore from .fastapi_dependencies import get_labware_offset_store @@ -78,11 +80,11 @@ async def post_labware_offset( # noqa: D103 async def get_labware_offsets( # noqa: D103 store: Annotated[LabwareOffsetStore, fastapi.Depends(get_labware_offset_store)], id: Annotated[ - str | None, + Json[str] | SkipJsonSchema[Type[DO_NOT_FILTER]], fastapi.Query(description="Filter for exact matches on the `id` field."), - ] = None, + ] = DO_NOT_FILTER, definition_uri: Annotated[ - str | None, + Json[str] | SkipJsonSchema[Type[DO_NOT_FILTER]], fastapi.Query( alias="definitionUri", description=( @@ -90,23 +92,23 @@ async def get_labware_offsets( # noqa: D103 " (Not to be confused with `location.definitionUri`.)" ), ), - ] = None, + ] = DO_NOT_FILTER, location_slot_name: Annotated[ - DeckSlotName | None, + Json[DeckSlotName] | SkipJsonSchema[Type[DO_NOT_FILTER]], fastapi.Query( alias="locationSlotName", description="Filter for exact matches on the `location.slotName` field.", ), - ] = None, + ] = DO_NOT_FILTER, location_module_model: Annotated[ - ModuleModel | None, + Json[ModuleModel | None] | SkipJsonSchema[Type[DO_NOT_FILTER]], fastapi.Query( alias="locationModuleModel", description="Filter for exact matches on the `location.moduleModel` field.", ), - ] = None, + ] = DO_NOT_FILTER, location_definition_uri: Annotated[ - str | None, + Json[str | None] | SkipJsonSchema[Type[DO_NOT_FILTER]], fastapi.Query( alias="locationDefinitionUri", description=( @@ -114,9 +116,9 @@ async def get_labware_offsets( # noqa: D103 " (Not to be confused with just `definitionUri`.)" ), ), - ] = None, + ] = DO_NOT_FILTER, cursor: Annotated[ - int | None, + int | SkipJsonSchema[None], fastapi.Query( description=( "The first index to return out of the overall filtered result list." diff --git a/robot-server/robot_server/labware_offsets/store.py b/robot-server/robot_server/labware_offsets/store.py index 9f7e76cfd57..93968a30986 100644 --- a/robot-server/robot_server/labware_offsets/store.py +++ b/robot-server/robot_server/labware_offsets/store.py @@ -1,9 +1,21 @@ # noqa: D100 +from typing import Type + from opentrons.protocol_engine import LabwareOffset, ModuleModel from opentrons.types import DeckSlotName +class DO_NOT_FILTER: + """A sentinel value for when a filter should not be applied. + + This is different from filtering on `None`, which returns only entries where the + value is equal to `None`. + """ + + pass + + # todo(mm, 2024-12-06): Convert to be SQL-based and persistent instead of in-memory. # https://opentrons.atlassian.net/browse/EXEC-1015 class LabwareOffsetStore: @@ -19,11 +31,15 @@ def add(self, offset: LabwareOffset) -> None: def search( self, - id_filter: str | None, - definition_uri_filter: str | None, - location_slot_name_filter: DeckSlotName | None, - location_module_model_filter: ModuleModel | None, - location_definition_uri_filter: str | None, + id_filter: str | Type[DO_NOT_FILTER] = DO_NOT_FILTER, + definition_uri_filter: str | Type[DO_NOT_FILTER] = DO_NOT_FILTER, + location_slot_name_filter: DeckSlotName | Type[DO_NOT_FILTER] = DO_NOT_FILTER, + location_module_model_filter: ModuleModel + | None + | Type[DO_NOT_FILTER] = DO_NOT_FILTER, + location_definition_uri_filter: str + | None + | Type[DO_NOT_FILTER] = DO_NOT_FILTER, # todo(mm, 2024-12-06): Support pagination (cursor & pageLength query params). # The logic for that is currently duplicated across several places in # robot-server and api. We should try to clean that up, or at least avoid @@ -33,13 +49,14 @@ def search( def is_match(candidate: LabwareOffset) -> bool: return ( - id_filter in (None, candidate.id) - and definition_uri_filter in (None, candidate.definitionUri) - and location_slot_name_filter in (None, candidate.location.slotName) + id_filter in (DO_NOT_FILTER, candidate.id) + and definition_uri_filter in (DO_NOT_FILTER, candidate.definitionUri) + and location_slot_name_filter + in (DO_NOT_FILTER, candidate.location.slotName) and location_module_model_filter - in (None, candidate.location.moduleModel) + in (DO_NOT_FILTER, candidate.location.moduleModel) and location_definition_uri_filter - in (None, candidate.location.definitionUri) + in (DO_NOT_FILTER, candidate.location.definitionUri) ) return [ diff --git a/robot-server/robot_server/maintenance_runs/router/labware_router.py b/robot-server/robot_server/maintenance_runs/router/labware_router.py index 100fafe910a..53dce4ae6eb 100644 --- a/robot-server/robot_server/maintenance_runs/router/labware_router.py +++ b/robot-server/robot_server/maintenance_runs/router/labware_router.py @@ -3,10 +3,11 @@ import logging from fastapi import Depends, status + +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from server_utils.fastapi_utils.light_router import LightRouter from opentrons.protocol_engine import LabwareOffsetCreate, LabwareOffset -from opentrons.protocols.models import LabwareDefinition from robot_server.errors.error_responses import ErrorBody from robot_server.service.json_api import RequestModel, SimpleBody, PydanticResponse diff --git a/robot-server/robot_server/modules/module_data_mapper.py b/robot-server/robot_server/modules/module_data_mapper.py index f0c623fdab3..b425c547c22 100644 --- a/robot-server/robot_server/modules/module_data_mapper.py +++ b/robot-server/robot_server/modules/module_data_mapper.py @@ -12,6 +12,9 @@ HeaterShakerStatus, SpeedStatus, AbsorbanceReaderStatus, + PlatformState, + StackerAxisState, + FlexStackerStatus, ) from opentrons.hardware_control.modules.magdeck import OFFSET_TO_LABWARE_BOTTOM from opentrons.drivers.types import ( @@ -22,12 +25,15 @@ ) from opentrons.drivers.rpi_drivers.types import USBPort as HardwareUSBPort +from opentrons.hardware_control.modules.types import HopperDoorState, LatchState from opentrons.protocol_engine import ModuleModel, DeckType from .module_identifier import ModuleIdentity from .module_models import ( AttachedModule, AttachedModuleData, + FlexStackerModule, + FlexStackerModuleData, MagneticModule, MagneticModuleData, ModuleCalibrationData, @@ -155,6 +161,20 @@ def map_data( int, live_data["data"].get("referenceWavelength") ), ) + elif module_type == ModuleType.FLEX_STACKER: + module_cls = FlexStackerModule + module_data = FlexStackerModuleData( + status=FlexStackerStatus(live_data["status"]), + latchState=cast(LatchState, live_data["data"].get("latchState")), + platformState=cast( + PlatformState, live_data["data"].get("platformState") + ), + hopperDoorState=cast( + HopperDoorState, live_data["data"].get("hopperDoorState") + ), + axisStateX=cast(StackerAxisState, live_data["data"].get("axisStateX")), + axisStateZ=cast(StackerAxisState, live_data["data"].get("axisStateZ")), + ) else: assert False, f"Invalid module type {module_type}" diff --git a/robot-server/robot_server/modules/module_models.py b/robot-server/robot_server/modules/module_models.py index 7b6da4925ac..fb56e9e3fbf 100644 --- a/robot-server/robot_server/modules/module_models.py +++ b/robot-server/robot_server/modules/module_models.py @@ -12,6 +12,8 @@ HeaterShakerStatus, SpeedStatus, AbsorbanceReaderStatus, + PlatformState, + StackerAxisState, ) from opentrons.drivers.types import ( ThermocyclerLidStatus, @@ -19,6 +21,7 @@ AbsorbanceReaderLidStatus, AbsorbanceReaderPlatePresence, ) +from opentrons.hardware_control.modules.types import HopperDoorState, LatchState from opentrons.protocol_engine import ModuleModel from opentrons.protocol_engine.types import Vec3f @@ -343,19 +346,54 @@ class AbsorbanceReaderModule( AbsorbanceReaderModuleData, ] ): - """An attached Heater-Shaker Module.""" + """An attached Absorbance Reader Module.""" moduleType: Literal[ModuleType.ABSORBANCE_READER] moduleModel: Literal[ModuleModel.ABSORBANCE_READER_V1] data: AbsorbanceReaderModuleData +class FlexStackerModuleData(BaseModel): + """Live data from a Flex Stacker module.""" + + status: str = Field( + ..., + description="Overall status of the module.", + ) + latchState: LatchState = Field(..., description="The state of the labware latch.") + platformState: PlatformState = Field(..., description="The state of the platform.") + hopperDoorState: HopperDoorState = Field( + ..., description="The state of the hopper door." + ) + axisStateX: StackerAxisState = Field( + ..., description="The state of the X axis limit switches." + ) + axisStateZ: StackerAxisState = Field( + ..., description="The state of the Z axis limit switches." + ) + + +class FlexStackerModule( + _GenericModule[ + Literal[ModuleType.FLEX_STACKER], + Literal[ModuleModel.FLEX_STACKER_MODULE_V1], + FlexStackerModuleData, + ] +): + """An attached Flex Stacker Module.""" + + moduleType: Literal[ModuleType.FLEX_STACKER] + moduleModel: Literal[ModuleModel.FLEX_STACKER_MODULE_V1] + data: FlexStackerModuleData + + AttachedModule = Union[ TemperatureModule, MagneticModule, ThermocyclerModule, HeaterShakerModule, AbsorbanceReaderModule, + FlexStackerModule, ] @@ -365,4 +403,5 @@ class AbsorbanceReaderModule( ThermocyclerModuleData, HeaterShakerModuleData, AbsorbanceReaderModuleData, + FlexStackerModuleData, ] diff --git a/robot-server/robot_server/persistence/tables/schema_2.py b/robot-server/robot_server/persistence/tables/schema_2.py index 607cb8062cb..ccf389332bd 100644 --- a/robot-server/robot_server/persistence/tables/schema_2.py +++ b/robot-server/robot_server/persistence/tables/schema_2.py @@ -62,7 +62,6 @@ sqlalchemy.Column( "completed_analysis", # Stores a pickled dict. See CompletedAnalysisStore. - # TODO(mm, 2023-08-30): Remove this. See https://opentrons.atlassian.net/browse/RSS-98. sqlalchemy.LargeBinary, nullable=False, ), diff --git a/robot-server/robot_server/protocols/analysis_models.py b/robot-server/robot_server/protocols/analysis_models.py index f4b5c54fec8..522c065c5ad 100644 --- a/robot-server/robot_server/protocols/analysis_models.py +++ b/robot-server/robot_server/protocols/analysis_models.py @@ -141,9 +141,9 @@ class CompletedAnalysis(BaseModel): # Fields that should match local analysis: robotType: Optional[RobotType] = Field( - # robotType is deliberately typed as a Literal instead of an Enum. - # It's a bad idea at the moment to store enums in robot-server's database. - # https://opentrons.atlassian.net/browse/RSS-98 + # robotType was typed as a Literal instead of an Enum because it was a bad idea + # at the time to store enums in robot-server's database + # (https://opentrons.atlassian.net/browse/RSS-98). default=None, # default=None to fit objects that were stored before this field existed. description=( "The type of robot that this protocol can run on." diff --git a/robot-server/robot_server/runs/router/labware_router.py b/robot-server/robot_server/runs/router/labware_router.py index 06c16f8b71a..f9264da51e6 100644 --- a/robot-server/robot_server/runs/router/labware_router.py +++ b/robot-server/robot_server/runs/router/labware_router.py @@ -5,14 +5,11 @@ from fastapi import Depends, status -from opentrons_shared_data.labware.labware_definition import ( - LabwareDefinition as SD_LabwareDefinition, -) +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from server_utils.fastapi_utils.light_router import LightRouter from opentrons.protocol_engine import LabwareOffsetCreate, LabwareOffset -from opentrons.protocols.models import LabwareDefinition from robot_server.errors.error_responses import ErrorBody from robot_server.service.json_api import ( @@ -136,14 +133,14 @@ async def add_labware_definition( " Repeated definitions will be deduplicated." ), responses={ - status.HTTP_200_OK: {"model": SimpleBody[list[SD_LabwareDefinition]]}, + status.HTTP_200_OK: {"model": SimpleBody[list[LabwareDefinition]]}, status.HTTP_409_CONFLICT: {"model": ErrorBody[RunStopped]}, }, ) async def get_run_loaded_labware_definitions( runId: str, run_data_manager: Annotated[RunDataManager, Depends(get_run_data_manager)], -) -> PydanticResponse[SimpleBody[list[SD_LabwareDefinition]]]: +) -> PydanticResponse[SimpleBody[list[LabwareDefinition]]]: """Get a run's loaded labware definition by the run ID. Args: diff --git a/robot-server/tests/deck_configuration/test_validation.py b/robot-server/tests/deck_configuration/test_validation.py index 3f8de00a60b..9d86c26d622 100644 --- a/robot-server/tests/deck_configuration/test_validation.py +++ b/robot-server/tests/deck_configuration/test_validation.py @@ -228,6 +228,9 @@ def test_unrecognized_cutout_fixture() -> None: "magneticBlockV1", "absorbanceReaderV1", "stagingAreaSlotWithMagneticBlockV1", + "flexStackerV1", + "flexStackerV1WithWasteChuteRightAdapterCovered", + "flexStackerV1WithWasteChuteRightAdapterNoCover", ] ), ) diff --git a/robot-server/tests/integration/http_api/test_labware_offsets.tavern.yaml b/robot-server/tests/integration/http_api/test_labware_offsets.tavern.yaml index d9ff35d7136..f84e5b15d56 100644 --- a/robot-server/tests/integration/http_api/test_labware_offsets.tavern.yaml +++ b/robot-server/tests/integration/http_api/test_labware_offsets.tavern.yaml @@ -83,7 +83,7 @@ stages: # Just a basic test here. More complicated tests for the filters belong in the unit tests. - name: Test getting labware offsets with a filter request: - url: '{ot3_server_base_url}/labwareOffsets?locationSlotName=A2' + url: '{ot3_server_base_url}/labwareOffsets?locationSlotName="A2"' method: GET response: json: @@ -129,3 +129,122 @@ stages: meta: cursor: 0 totalLength: 0 + +--- +# Some of the filter query parameters can have `null` values or be omitted, +# with different semantics between the two. That distinction takes a bit of care to +# preserve across our code, so here we test it specifically. +test_name: Test null vs. omitted filter query parameters +marks: + - usefixtures: + - ot3_server_base_url +stages: + - name: POST test offset 1 + request: + method: POST + url: '{ot3_server_base_url}/labwareOffsets' + json: + data: + definitionUri: testNamespace/loadName1/1 + location: + slotName: A1 + # No moduleModel + # No definitionUri + vector: + x: 1 + y: 2 + z: 3 + response: + status_code: 201 + save: + json: + offset_1_data: data + - name: POST test offset 2 + request: + method: POST + url: '{ot3_server_base_url}/labwareOffsets' + json: + data: + definitionUri: testNamespace/loadName2/1 + location: + slotName: A1 + moduleModel: temperatureModuleV2 + # No definitionUri + vector: + x: 1 + y: 2 + z: 3 + response: + status_code: 201 + save: + json: + offset_2_data: data + - name: POST test offset 3 + request: + method: POST + url: '{ot3_server_base_url}/labwareOffsets' + json: + data: + definitionUri: testNamespace/loadName2/1 + location: + slotName: A1 + # no moduleModel + definitionUri: testNamespace/adapterLoadName/1 + vector: + x: 1 + y: 2 + z: 3 + response: + status_code: 201 + save: + json: + offset_3_data: data + - name: POST test offset 4 + request: + method: POST + url: '{ot3_server_base_url}/labwareOffsets' + json: + data: + definitionUri: testNamespace/loadName3/1 + location: + slotName: A1 + moduleModel: temperatureModuleV2 + definitionUri: testNamespace/adapterLoadName/1 + vector: + x: 1 + y: 2 + z: 3 + response: + status_code: 201 + save: + json: + offset_4_data: data + - name: Test no filters + request: + url: '{ot3_server_base_url}/labwareOffsets' + response: + json: + data: + - !force_format_include '{offset_1_data}' + - !force_format_include '{offset_2_data}' + - !force_format_include '{offset_3_data}' + - !force_format_include '{offset_4_data}' + meta: !anydict + - name: Test filtering on locationModuleModel=null + request: + url: '{ot3_server_base_url}/labwareOffsets?locationModuleModel=null' + response: + json: + data: + - !force_format_include '{offset_1_data}' + - !force_format_include '{offset_3_data}' + meta: !anydict + - name: Test filtering on locationDefinitionUri=null + request: + url: '{ot3_server_base_url}/labwareOffsets?locationDefinitionUri=null' + response: + json: + data: + - !force_format_include '{offset_1_data}' + - !force_format_include '{offset_2_data}' + meta: !anydict diff --git a/robot-server/tests/labware_offsets/test_store.py b/robot-server/tests/labware_offsets/test_store.py index 0f28f2e6825..9f122e2930a 100644 --- a/robot-server/tests/labware_offsets/test_store.py +++ b/robot-server/tests/labware_offsets/test_store.py @@ -16,13 +16,7 @@ def _get_all(store: LabwareOffsetStore) -> list[LabwareOffset]: - return store.search( - id_filter=None, - definition_uri_filter=None, - location_definition_uri_filter=None, - location_module_model_filter=None, - location_slot_name_filter=None, - ) + return store.search() def test_filters() -> None: @@ -52,25 +46,10 @@ def test_filters() -> None: subject.add(labware_offset) # No filters: - assert ( - subject.search( - id_filter=None, - definition_uri_filter=None, - location_definition_uri_filter=None, - location_module_model_filter=None, - location_slot_name_filter=None, - ) - == labware_offsets - ) + assert subject.search() == labware_offsets # Filter on one thing: - result = subject.search( - id_filter=None, - definition_uri_filter="definition-uri-b", - location_definition_uri_filter=None, - location_module_model_filter=None, - location_slot_name_filter=None, - ) + result = subject.search(definition_uri_filter="definition-uri-b") assert len(result) == 3 assert result == [ entry for entry in labware_offsets if entry.definitionUri == "definition-uri-b" @@ -80,9 +59,6 @@ def test_filters() -> None: result = subject.search( id_filter="id-2", definition_uri_filter="definition-uri-b", - location_definition_uri_filter=None, - location_module_model_filter=None, - location_slot_name_filter=None, ) assert result == [labware_offsets[1]] @@ -90,9 +66,6 @@ def test_filters() -> None: result = subject.search( id_filter="id-1", definition_uri_filter="definition-uri-b", - location_definition_uri_filter=None, - location_module_model_filter=None, - location_slot_name_filter=None, ) assert result == [] diff --git a/robot-server/tests/maintenance_runs/router/test_labware_router.py b/robot-server/tests/maintenance_runs/router/test_labware_router.py index d23204aa2d2..2b03b13c9e8 100644 --- a/robot-server/tests/maintenance_runs/router/test_labware_router.py +++ b/robot-server/tests/maintenance_runs/router/test_labware_router.py @@ -4,10 +4,10 @@ from decoy import Decoy from opentrons_shared_data.labware.types import LabwareDefinition as LabwareDefDict +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.types import DeckSlotName from opentrons.protocol_engine import EngineStatus, types as pe_types -from opentrons.protocols.models import LabwareDefinition from robot_server.service.json_api import RequestModel, SimpleBody from robot_server.maintenance_runs.maintenance_run_models import ( diff --git a/robot-server/tests/runs/router/test_labware_router.py b/robot-server/tests/runs/router/test_labware_router.py index 25f80048df6..bf55021a6ad 100644 --- a/robot-server/tests/runs/router/test_labware_router.py +++ b/robot-server/tests/runs/router/test_labware_router.py @@ -5,10 +5,10 @@ from decoy import Decoy from opentrons_shared_data.labware.types import LabwareDefinition as LabwareDefDict +from opentrons_shared_data.labware.labware_definition import LabwareDefinition from opentrons.types import DeckSlotName from opentrons.protocol_engine import EngineStatus, types as pe_types -from opentrons.protocols.models import LabwareDefinition from robot_server.errors.error_responses import ApiError from robot_server.service.json_api import RequestModel, SimpleBody diff --git a/shared-data/Makefile b/shared-data/Makefile index 2e972110c19..3236f350cef 100644 --- a/shared-data/Makefile +++ b/shared-data/Makefile @@ -39,7 +39,7 @@ lint: lint-js lint-py .PHONY: lib-js lib-js: export NODE_ENV := production lib-js: - NODE_OPTIONS=--openssl-legacy-provider yarn vite build + yarn vite build .PHONY: build-ts build-ts: diff --git a/shared-data/deck/definitions/5/ot3_standard.json b/shared-data/deck/definitions/5/ot3_standard.json index fe47adc0a3c..38cb0104352 100644 --- a/shared-data/deck/definitions/5/ot3_standard.json +++ b/shared-data/deck/definitions/5/ot3_standard.json @@ -760,6 +760,50 @@ "zDimension": 0 }, "displayName": "Absorbance Reader Lid Dock in A4" + }, + { + "id": "flexStackerV1D4", + "areaType": "flexStacker", + "offsetFromCutoutFixture": [161.0, 0.0, 31.0], + "boundingBox": { + "xDimension": 128.0, + "yDimension": 86.0, + "zDimension": 0 + }, + "displayName": "Flex Stacker in D4" + }, + { + "id": "flexStackerV1C4", + "areaType": "flexStacker", + "offsetFromCutoutFixture": [161.0, 0.0, 31.0], + "boundingBox": { + "xDimension": 128.0, + "yDimension": 86.0, + "zDimension": 0 + }, + "displayName": "Flex Stacker in C4" + }, + { + "id": "flexStackerV1B4", + "areaType": "flexStacker", + "offsetFromCutoutFixture": [161.0, 0.0, 31.0], + "boundingBox": { + "xDimension": 128.0, + "yDimension": 86.0, + "zDimension": 0 + }, + "displayName": "Flex Stacker in B4" + }, + { + "id": "flexStackerV1A4", + "areaType": "flexStacker", + "offsetFromCutoutFixture": [161.0, 0.0, 31.0], + "boundingBox": { + "xDimension": 128.0, + "yDimension": 86.0, + "zDimension": 0 + }, + "displayName": "Flex Stacker in A4" } ], "cutouts": [ @@ -973,6 +1017,34 @@ "fixtureGroup": {}, "height": 124.5 }, + { + "id": "flexStackerV1WithWasteChuteRightAdapterCovered", + "expectOpentronsModuleSerialNumber": true, + "mayMountTo": ["cutoutD3"], + "displayName": "Flex Stacker With Waste Chute Adapter for 96 Channel Pipette or Gripper", + "providesAddressableAreas": { + "cutoutD3": ["1ChannelWasteChute", "8ChannelWasteChute", "D4"] + }, + "fixtureGroup": {}, + "height": 124.5 + }, + { + "id": "flexStackerV1WithWasteChuteRightAdapterNoCover", + "expectOpentronsModuleSerialNumber": true, + "mayMountTo": ["cutoutD3"], + "displayName": "Flex Stacker With Waste Chute Adapter", + "providesAddressableAreas": { + "cutoutD3": [ + "1ChannelWasteChute", + "8ChannelWasteChute", + "96ChannelWasteChute", + "gripperWasteChute", + "flexStackerV1D4" + ] + }, + "fixtureGroup": {}, + "height": 124.5 + }, { "id": "thermocyclerModuleV2Rear", "expectOpentronsModuleSerialNumber": true, @@ -1125,6 +1197,20 @@ }, "fixtureGroup": {}, "height": 10.65 + }, + { + "id": "flexStackerV1", + "expectOpentronsModuleSerialNumber": true, + "mayMountTo": ["cutoutD3", "cutoutC3", "cutoutB3", "cutoutA3"], + "displayName": "Slot With a Flex Stacker", + "providesAddressableAreas": { + "cutoutD3": ["flexStackerV1D4", "D3"], + "cutoutC3": ["flexStackerV1C4", "C3"], + "cutoutB3": ["flexStackerV1B4", "B3"], + "cutoutA3": ["flexStackerV1A4", "A3"] + }, + "fixtureGroup": {}, + "height": 10.65 } ], "gripperOffsets": { diff --git a/shared-data/deck/schemas/5.json b/shared-data/deck/schemas/5.json index 54e2f74b9bc..1db1a2de74f 100644 --- a/shared-data/deck/schemas/5.json +++ b/shared-data/deck/schemas/5.json @@ -142,7 +142,13 @@ "movableTrash", "fixedTrash", "wasteChute", - "lidDock" + "lidDock", + "heaterShaker", + "magneticBlock", + "temperatureModule", + "thermocycler", + "absorbanceReader", + "flexStacker" ] }, "offsetFromCutoutFixture": { diff --git a/shared-data/deck/types/schemaV5.ts b/shared-data/deck/types/schemaV5.ts index acd11fbb8be..7c69c650e80 100644 --- a/shared-data/deck/types/schemaV5.ts +++ b/shared-data/deck/types/schemaV5.ts @@ -64,6 +64,10 @@ export type FlexAddressableAreaName = | 'absorbanceReaderV1LidDockB4' | 'absorbanceReaderV1LidDockC4' | 'absorbanceReaderV1LidDockD4' + | 'flexStackerV1A4' + | 'flexStackerV1B4' + | 'flexStackerV1C4' + | 'flexStackerV1D4' export type OT2AddressableAreaName = | '1' @@ -126,6 +130,8 @@ export type WasteChuteCutoutFixtureId = | 'wasteChuteRightAdapterNoCover' | 'stagingAreaSlotWithWasteChuteRightAdapterCovered' | 'stagingAreaSlotWithWasteChuteRightAdapterNoCover' + | 'flexStackerV1WithWasteChuteRightAdapterCovered' + | 'flexStackerV1WithWasteChuteRightAdapterNoCover' export type FlexModuleCutoutFixtureId = | 'heaterShakerModuleV1' @@ -135,6 +141,7 @@ export type FlexModuleCutoutFixtureId = | 'thermocyclerModuleV2Rear' | 'thermocyclerModuleV2Front' | 'absorbanceReaderV1' + | 'flexStackerV1' export type OT2SingleStandardSlot = 'singleStandardSlot' diff --git a/shared-data/js/__tests__/labwareDefQuirks.test.ts b/shared-data/js/__tests__/labwareDefQuirks.test.ts index 6251c894647..4ef69b5cb51 100644 --- a/shared-data/js/__tests__/labwareDefQuirks.test.ts +++ b/shared-data/js/__tests__/labwareDefQuirks.test.ts @@ -14,6 +14,7 @@ const EXPECTED_VALID_QUIRKS = [ 'gripperIncompatible', 'tiprackAdapterFor96Channel', 'stackingMaxFive', + 'stackingOnly', ] describe('check quirks for all labware defs', () => { diff --git a/shared-data/js/labware.ts b/shared-data/js/labware.ts index 20d41c3a697..70b37b7ae4a 100644 --- a/shared-data/js/labware.ts +++ b/shared-data/js/labware.ts @@ -121,6 +121,8 @@ import thermoscientificnunc96Wellplate2000UlV1Uncasted from '../labware/definiti import tipone96Tiprack200UlV1Uncasted from '../labware/definitions/2/tipone_96_tiprack_200ul/1.json' import usascientific12Reservoir22MlV1Uncasted from '../labware/definitions/2/usascientific_12_reservoir_22ml/1.json' import usascientific96Wellplate24MlDeepV1Uncasted from '../labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/1.json' +import evotipsFlex96TiprackAdapterV1Uncasted from '../labware/definitions/2/evotips_flex_96_tiprack_adapter/1.json' +import evotipsOpentrons96LabwareV1Uncasted from '../labware/definitions/2/evotips_opentrons_96_labware/1.json' // v1 legacy labware definitions @@ -297,6 +299,8 @@ const thermoscientificnunc96Wellplate2000UlV1 = thermoscientificnunc96Wellplate2 const tipone96Tiprack200UlV1 = tipone96Tiprack200UlV1Uncasted as LabwareDefinition2 const usascientific12Reservoir22MlV1 = usascientific12Reservoir22MlV1Uncasted as LabwareDefinition2 const usascientific96Wellplate24MlDeepV1 = usascientific96Wellplate24MlDeepV1Uncasted as LabwareDefinition2 +const evotipsFlex96TiprackAdapterV1 = evotipsFlex96TiprackAdapterV1Uncasted as LabwareDefinition2 +const evotipsOpentrons96LabwareV1 = evotipsOpentrons96LabwareV1Uncasted as LabwareDefinition2 // cast v1 defs @@ -466,6 +470,8 @@ const latestDefs = { tipone96Tiprack200UlV1, usascientific12Reservoir22MlV1, usascientific96Wellplate24MlDeepV1, + evotipsFlex96TiprackAdapterV1, + evotipsOpentrons96LabwareV1, } // labware definitions const getAllLabwareDefs = (): Record< diff --git a/shared-data/labware/definitions/2/evotips_flex_96_tiprack_adapter/1.json b/shared-data/labware/definitions/2/evotips_flex_96_tiprack_adapter/1.json new file mode 100644 index 00000000000..e9cf3d8966f --- /dev/null +++ b/shared-data/labware/definitions/2/evotips_flex_96_tiprack_adapter/1.json @@ -0,0 +1,41 @@ +{ + "ordering": [], + "brand": { + "brand": "Opentrons", + "brandId": [] + }, + "metadata": { + "displayName": "Evotips adapter", + "displayCategory": "adapter", + "displayVolumeUnits": "\u00b5L", + "tags": [] + }, + "dimensions": { + "xDimension": 156.5, + "yDimension": 105, + "zDimension": 132 + }, + "wells": {}, + "groups": [ + { + "metadata": {}, + "wells": [] + } + ], + "parameters": { + "format": "96Standard", + "quirks": ["tiprackAdapterFor96Channel", "stackingMaxFive"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "evotips_flex_96_tiprack_adapter" + }, + "namespace": "opentrons", + "version": 1, + "schemaVersion": 2, + "allowedRoles": ["adapter"], + "cornerOffsetFromSlot": { + "x": -14.25, + "y": -3.5, + "z": 0 + } +} diff --git a/shared-data/labware/definitions/2/evotips_opentrons_96_labware/1.json b/shared-data/labware/definitions/2/evotips_opentrons_96_labware/1.json new file mode 100644 index 00000000000..946f6ef5a26 --- /dev/null +++ b/shared-data/labware/definitions/2/evotips_opentrons_96_labware/1.json @@ -0,0 +1,1032 @@ +{ + "ordering": [ + ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1"], + ["A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2"], + ["A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3"], + ["A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4"], + ["A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5"], + ["A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6"], + ["A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7"], + ["A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8"], + ["A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9"], + ["A10", "B10", "C10", "D10", "E10", "F10", "G10", "H10"], + ["A11", "B11", "C11", "D11", "E11", "F11", "G11", "H11"], + ["A12", "B12", "C12", "D12", "E12", "F12", "G12", "H12"] + ], + "brand": { + "brand": "opentrons", + "brandId": [] + }, + "metadata": { + "displayName": "Evotips", + "displayCategory": "wellPlate", + "displayVolumeUnits": "µL", + "tags": [] + }, + "dimensions": { + "xDimension": 127.75, + "yDimension": 86, + "zDimension": 55.0 + }, + "wells": { + "A1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 73.75, + "z": 1 + }, + "B1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 64.75, + "z": 1 + }, + "C1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 55.75, + "z": 1 + }, + "D1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 46.75, + "z": 1 + }, + "E1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 37.75, + "z": 1 + }, + "F1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 28.75, + "z": 1 + }, + "G1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 19.75, + "z": 1 + }, + "H1": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 16.08, + "y": 10.75, + "z": 1 + }, + "A2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 73.75, + "z": 1 + }, + "B2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 64.75, + "z": 1 + }, + "C2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 55.75, + "z": 1 + }, + "D2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 46.75, + "z": 1 + }, + "E2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 37.75, + "z": 1 + }, + "F2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 28.75, + "z": 1 + }, + "G2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 19.75, + "z": 1 + }, + "H2": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 25.08, + "y": 10.75, + "z": 1 + }, + "A3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 73.75, + "z": 1 + }, + "B3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 64.75, + "z": 1 + }, + "C3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 55.75, + "z": 1 + }, + "D3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 46.75, + "z": 1 + }, + "E3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 37.75, + "z": 1 + }, + "F3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 28.75, + "z": 1 + }, + "G3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 19.75, + "z": 1 + }, + "H3": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 34.08, + "y": 10.75, + "z": 1 + }, + "A4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 73.75, + "z": 1 + }, + "B4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 64.75, + "z": 1 + }, + "C4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 55.75, + "z": 1 + }, + "D4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 46.75, + "z": 1 + }, + "E4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 37.75, + "z": 1 + }, + "F4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 28.75, + "z": 1 + }, + "G4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 19.75, + "z": 1 + }, + "H4": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 43.08, + "y": 10.75, + "z": 1 + }, + "A5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 73.75, + "z": 1 + }, + "B5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 64.75, + "z": 1 + }, + "C5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 55.75, + "z": 1 + }, + "D5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 46.75, + "z": 1 + }, + "E5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 37.75, + "z": 1 + }, + "F5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 28.75, + "z": 1 + }, + "G5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 19.75, + "z": 1 + }, + "H5": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 52.08, + "y": 10.75, + "z": 1 + }, + "A6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 73.75, + "z": 1 + }, + "B6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 64.75, + "z": 1 + }, + "C6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 55.75, + "z": 1 + }, + "D6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 46.75, + "z": 1 + }, + "E6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 37.75, + "z": 1 + }, + "F6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 28.75, + "z": 1 + }, + "G6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 19.75, + "z": 1 + }, + "H6": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 61.08, + "y": 10.75, + "z": 1 + }, + "A7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 73.75, + "z": 1 + }, + "B7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 64.75, + "z": 1 + }, + "C7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 55.75, + "z": 1 + }, + "D7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 46.75, + "z": 1 + }, + "E7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 37.75, + "z": 1 + }, + "F7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 28.75, + "z": 1 + }, + "G7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 19.75, + "z": 1 + }, + "H7": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 70.08, + "y": 10.75, + "z": 1 + }, + "A8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 73.75, + "z": 1 + }, + "B8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 64.75, + "z": 1 + }, + "C8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 55.75, + "z": 1 + }, + "D8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 46.75, + "z": 1 + }, + "E8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 37.75, + "z": 1 + }, + "F8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 28.75, + "z": 1 + }, + "G8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 19.75, + "z": 1 + }, + "H8": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 79.08, + "y": 10.75, + "z": 1 + }, + "A9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 73.75, + "z": 1 + }, + "B9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 64.75, + "z": 1 + }, + "C9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 55.75, + "z": 1 + }, + "D9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 46.75, + "z": 1 + }, + "E9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 37.75, + "z": 1 + }, + "F9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 28.75, + "z": 1 + }, + "G9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 19.75, + "z": 1 + }, + "H9": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 88.08, + "y": 10.75, + "z": 1 + }, + "A10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 73.75, + "z": 1 + }, + "B10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 64.75, + "z": 1 + }, + "C10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 55.75, + "z": 1 + }, + "D10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 46.75, + "z": 1 + }, + "E10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 37.75, + "z": 1 + }, + "F10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 28.75, + "z": 1 + }, + "G10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 19.75, + "z": 1 + }, + "H10": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 97.08, + "y": 10.75, + "z": 1 + }, + "A11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 73.75, + "z": 1 + }, + "B11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 64.75, + "z": 1 + }, + "C11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 55.75, + "z": 1 + }, + "D11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 46.75, + "z": 1 + }, + "E11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 37.75, + "z": 1 + }, + "F11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 28.75, + "z": 1 + }, + "G11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 19.75, + "z": 1 + }, + "H11": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 106.08, + "y": 10.75, + "z": 1 + }, + "A12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 73.75, + "z": 1 + }, + "B12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 64.75, + "z": 1 + }, + "C12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 55.75, + "z": 1 + }, + "D12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 46.75, + "z": 1 + }, + "E12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 37.75, + "z": 1 + }, + "F12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 28.75, + "z": 1 + }, + "G12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 19.75, + "z": 1 + }, + "H12": { + "depth": 54, + "totalLiquidVolume": 300, + "shape": "circular", + "diameter": 7, + "x": 115.08, + "y": 10.75, + "z": 1 + } + }, + "groups": [ + { + "metadata": { + "wellBottomShape": "v" + }, + "wells": [ + "A1", + "B1", + "C1", + "D1", + "E1", + "F1", + "G1", + "H1", + "A2", + "B2", + "C2", + "D2", + "E2", + "F2", + "G2", + "H2", + "A3", + "B3", + "C3", + "D3", + "E3", + "F3", + "G3", + "H3", + "A4", + "B4", + "C4", + "D4", + "E4", + "F4", + "G4", + "H4", + "A5", + "B5", + "C5", + "D5", + "E5", + "F5", + "G5", + "H5", + "A6", + "B6", + "C6", + "D6", + "E6", + "F6", + "G6", + "H6", + "A7", + "B7", + "C7", + "D7", + "E7", + "F7", + "G7", + "H7", + "A8", + "B8", + "C8", + "D8", + "E8", + "F8", + "G8", + "H8", + "A9", + "B9", + "C9", + "D9", + "E9", + "F9", + "G9", + "H9", + "A10", + "B10", + "C10", + "D10", + "E10", + "F10", + "G10", + "H10", + "A11", + "B11", + "C11", + "D11", + "E11", + "F11", + "G11", + "H11", + "A12", + "B12", + "C12", + "D12", + "E12", + "F12", + "G12", + "H12" + ] + } + ], + "parameters": { + "format": "96Standard", + "quirks": ["stackingOnly"], + "isTiprack": false, + "isMagneticModuleCompatible": false, + "loadName": "evotips_opentrons_96_labware" + }, + "namespace": "opentrons", + "allowedRoles": ["labware"], + "version": 1, + "stackLimit": 5, + "compatibleParentLabware": ["nest_96_wellplate_2ml_deep", "nest_1_reservoir_195ml"], + "schemaVersion": 2, + "cornerOffsetFromSlot": { + "x": 0, + "y": 0, + "z": 0 + }, + "stackingOffsetWithLabware": { + "nest_96_wellplate_2ml_deep": { + "x": 0, + "y": 0, + "z": 22.5 + }, + "nest_1_reservoir_195ml": { + "x": 0, + "y": 0, + "z": 22.5 + } + } +} diff --git a/shared-data/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json b/shared-data/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json index 775596e7386..0a1b4c0c38a 100644 --- a/shared-data/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json +++ b/shared-data/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json @@ -1106,7 +1106,7 @@ ], "parameters": { "format": "96Standard", - "quirks": [], + "quirks": ["stackingMaxFive"], "isTiprack": false, "isMagneticModuleCompatible": true, "loadName": "nest_96_wellplate_2ml_deep", @@ -1130,6 +1130,11 @@ "x": 0, "y": 0, "z": 16.1 + }, + "evotips_flex_96_tiprack_adapter": { + "x": 0, + "y": 0, + "z": 102 } }, "stackingOffsetWithModule": { diff --git a/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json b/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json index 4a06fc94f97..f9bf94127ab 100644 --- a/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json +++ b/shared-data/labware/definitions/3/agilent_1_reservoir_290ml/2.json @@ -57,22 +57,22 @@ "sections": [ { "shape": "cuboidal", - "topXDimension": 107.25, + "topXDimension": 106.79, "topYDimension": 8, "bottomXDimension": 101.25, "bottomYDimension": 1.66, "topHeight": 2, - "bottomHeight": 8, + "bottomHeight": 0, "yCount": 8 }, { "shape": "cuboidal", "topXDimension": 107.5, "topYDimension": 71.25, - "bottomXDimension": 107.25, + "bottomXDimension": 106.79, "bottomYDimension": 71.0, - "topHeight": 39.22, - "bottomHeight": 2 + "topHeight": 39.23, + "bottomHeight": 2.0 } ] } diff --git a/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json b/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json index a6954ac9d06..d47afca68c4 100644 --- a/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json +++ b/shared-data/labware/definitions/3/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json @@ -4712,8 +4712,8 @@ }, { "shape": "conical", - "bottomDiameter": 1.4, "topDiameter": 3.17, + "bottomDiameter": 1.4, "topHeight": 5.77, "bottomHeight": 0.34 }, diff --git a/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json b/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json index 61f780b9bfd..24f0656db6b 100644 --- a/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json +++ b/shared-data/labware/definitions/3/biorad_96_wellplate_200ul_pcr/3.json @@ -38,9 +38,9 @@ "gripHeightFromLabwareBottom": 10.14, "wells": { "H1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 11.24, @@ -48,9 +48,9 @@ "geometryDefinitionId": "conicalWell" }, "G1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 20.24, @@ -58,9 +58,9 @@ "geometryDefinitionId": "conicalWell" }, "F1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 29.24, @@ -68,9 +68,9 @@ "geometryDefinitionId": "conicalWell" }, "E1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 38.24, @@ -78,9 +78,9 @@ "geometryDefinitionId": "conicalWell" }, "D1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 47.24, @@ -88,9 +88,9 @@ "geometryDefinitionId": "conicalWell" }, "C1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 56.24, @@ -98,9 +98,9 @@ "geometryDefinitionId": "conicalWell" }, "B1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 65.24, @@ -108,9 +108,9 @@ "geometryDefinitionId": "conicalWell" }, "A1": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 14.38, "y": 74.24, @@ -118,9 +118,9 @@ "geometryDefinitionId": "conicalWell" }, "H2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 11.24, @@ -128,9 +128,9 @@ "geometryDefinitionId": "conicalWell" }, "G2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 20.24, @@ -138,9 +138,9 @@ "geometryDefinitionId": "conicalWell" }, "F2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 29.24, @@ -148,9 +148,9 @@ "geometryDefinitionId": "conicalWell" }, "E2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 38.24, @@ -158,9 +158,9 @@ "geometryDefinitionId": "conicalWell" }, "D2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 47.24, @@ -168,9 +168,9 @@ "geometryDefinitionId": "conicalWell" }, "C2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 56.24, @@ -178,9 +178,9 @@ "geometryDefinitionId": "conicalWell" }, "B2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 65.24, @@ -188,9 +188,9 @@ "geometryDefinitionId": "conicalWell" }, "A2": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 23.38, "y": 74.24, @@ -198,9 +198,9 @@ "geometryDefinitionId": "conicalWell" }, "H3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 11.24, @@ -208,9 +208,9 @@ "geometryDefinitionId": "conicalWell" }, "G3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 20.24, @@ -218,9 +218,9 @@ "geometryDefinitionId": "conicalWell" }, "F3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 29.24, @@ -228,9 +228,9 @@ "geometryDefinitionId": "conicalWell" }, "E3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 38.24, @@ -238,9 +238,9 @@ "geometryDefinitionId": "conicalWell" }, "D3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 47.24, @@ -248,9 +248,9 @@ "geometryDefinitionId": "conicalWell" }, "C3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 56.24, @@ -258,9 +258,9 @@ "geometryDefinitionId": "conicalWell" }, "B3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 65.24, @@ -268,9 +268,9 @@ "geometryDefinitionId": "conicalWell" }, "A3": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 32.38, "y": 74.24, @@ -278,9 +278,9 @@ "geometryDefinitionId": "conicalWell" }, "H4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 11.24, @@ -288,9 +288,9 @@ "geometryDefinitionId": "conicalWell" }, "G4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 20.24, @@ -298,9 +298,9 @@ "geometryDefinitionId": "conicalWell" }, "F4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 29.24, @@ -308,9 +308,9 @@ "geometryDefinitionId": "conicalWell" }, "E4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 38.24, @@ -318,9 +318,9 @@ "geometryDefinitionId": "conicalWell" }, "D4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 47.24, @@ -328,9 +328,9 @@ "geometryDefinitionId": "conicalWell" }, "C4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 56.24, @@ -338,9 +338,9 @@ "geometryDefinitionId": "conicalWell" }, "B4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 65.24, @@ -348,9 +348,9 @@ "geometryDefinitionId": "conicalWell" }, "A4": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 41.38, "y": 74.24, @@ -358,9 +358,9 @@ "geometryDefinitionId": "conicalWell" }, "H5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 11.24, @@ -368,9 +368,9 @@ "geometryDefinitionId": "conicalWell" }, "G5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 20.24, @@ -378,9 +378,9 @@ "geometryDefinitionId": "conicalWell" }, "F5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 29.24, @@ -388,9 +388,9 @@ "geometryDefinitionId": "conicalWell" }, "E5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 38.24, @@ -398,9 +398,9 @@ "geometryDefinitionId": "conicalWell" }, "D5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 47.24, @@ -408,9 +408,9 @@ "geometryDefinitionId": "conicalWell" }, "C5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 56.24, @@ -418,9 +418,9 @@ "geometryDefinitionId": "conicalWell" }, "B5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 65.24, @@ -428,9 +428,9 @@ "geometryDefinitionId": "conicalWell" }, "A5": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 50.38, "y": 74.24, @@ -438,9 +438,9 @@ "geometryDefinitionId": "conicalWell" }, "H6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 11.24, @@ -448,9 +448,9 @@ "geometryDefinitionId": "conicalWell" }, "G6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 20.24, @@ -458,9 +458,9 @@ "geometryDefinitionId": "conicalWell" }, "F6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 29.24, @@ -468,9 +468,9 @@ "geometryDefinitionId": "conicalWell" }, "E6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 38.24, @@ -478,9 +478,9 @@ "geometryDefinitionId": "conicalWell" }, "D6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 47.24, @@ -488,9 +488,9 @@ "geometryDefinitionId": "conicalWell" }, "C6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 56.24, @@ -498,9 +498,9 @@ "geometryDefinitionId": "conicalWell" }, "B6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 65.24, @@ -508,9 +508,9 @@ "geometryDefinitionId": "conicalWell" }, "A6": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 59.38, "y": 74.24, @@ -518,9 +518,9 @@ "geometryDefinitionId": "conicalWell" }, "H7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 11.24, @@ -528,9 +528,9 @@ "geometryDefinitionId": "conicalWell" }, "G7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 20.24, @@ -538,9 +538,9 @@ "geometryDefinitionId": "conicalWell" }, "F7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 29.24, @@ -548,9 +548,9 @@ "geometryDefinitionId": "conicalWell" }, "E7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 38.24, @@ -558,9 +558,9 @@ "geometryDefinitionId": "conicalWell" }, "D7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 47.24, @@ -568,9 +568,9 @@ "geometryDefinitionId": "conicalWell" }, "C7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 56.24, @@ -578,9 +578,9 @@ "geometryDefinitionId": "conicalWell" }, "B7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 65.24, @@ -588,9 +588,9 @@ "geometryDefinitionId": "conicalWell" }, "A7": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 68.38, "y": 74.24, @@ -598,9 +598,9 @@ "geometryDefinitionId": "conicalWell" }, "H8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 11.24, @@ -608,9 +608,9 @@ "geometryDefinitionId": "conicalWell" }, "G8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 20.24, @@ -618,9 +618,9 @@ "geometryDefinitionId": "conicalWell" }, "F8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 29.24, @@ -628,9 +628,9 @@ "geometryDefinitionId": "conicalWell" }, "E8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 38.24, @@ -638,9 +638,9 @@ "geometryDefinitionId": "conicalWell" }, "D8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 47.24, @@ -648,9 +648,9 @@ "geometryDefinitionId": "conicalWell" }, "C8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 56.24, @@ -658,9 +658,9 @@ "geometryDefinitionId": "conicalWell" }, "B8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 65.24, @@ -668,9 +668,9 @@ "geometryDefinitionId": "conicalWell" }, "A8": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 77.38, "y": 74.24, @@ -678,9 +678,9 @@ "geometryDefinitionId": "conicalWell" }, "H9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 11.24, @@ -688,9 +688,9 @@ "geometryDefinitionId": "conicalWell" }, "G9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 20.24, @@ -698,9 +698,9 @@ "geometryDefinitionId": "conicalWell" }, "F9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 29.24, @@ -708,9 +708,9 @@ "geometryDefinitionId": "conicalWell" }, "E9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 38.24, @@ -718,9 +718,9 @@ "geometryDefinitionId": "conicalWell" }, "D9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 47.24, @@ -728,9 +728,9 @@ "geometryDefinitionId": "conicalWell" }, "C9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 56.24, @@ -738,9 +738,9 @@ "geometryDefinitionId": "conicalWell" }, "B9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 65.24, @@ -748,9 +748,9 @@ "geometryDefinitionId": "conicalWell" }, "A9": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 86.38, "y": 74.24, @@ -758,9 +758,9 @@ "geometryDefinitionId": "conicalWell" }, "H10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 11.24, @@ -768,9 +768,9 @@ "geometryDefinitionId": "conicalWell" }, "G10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 20.24, @@ -778,9 +778,9 @@ "geometryDefinitionId": "conicalWell" }, "F10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 29.24, @@ -788,9 +788,9 @@ "geometryDefinitionId": "conicalWell" }, "E10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 38.24, @@ -798,9 +798,9 @@ "geometryDefinitionId": "conicalWell" }, "D10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 47.24, @@ -808,9 +808,9 @@ "geometryDefinitionId": "conicalWell" }, "C10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 56.24, @@ -818,9 +818,9 @@ "geometryDefinitionId": "conicalWell" }, "B10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 65.24, @@ -828,9 +828,9 @@ "geometryDefinitionId": "conicalWell" }, "A10": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 95.38, "y": 74.24, @@ -838,9 +838,9 @@ "geometryDefinitionId": "conicalWell" }, "H11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 11.24, @@ -848,9 +848,9 @@ "geometryDefinitionId": "conicalWell" }, "G11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 20.24, @@ -858,9 +858,9 @@ "geometryDefinitionId": "conicalWell" }, "F11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 29.24, @@ -868,9 +868,9 @@ "geometryDefinitionId": "conicalWell" }, "E11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 38.24, @@ -878,9 +878,9 @@ "geometryDefinitionId": "conicalWell" }, "D11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 47.24, @@ -888,9 +888,9 @@ "geometryDefinitionId": "conicalWell" }, "C11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 56.24, @@ -898,9 +898,9 @@ "geometryDefinitionId": "conicalWell" }, "B11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 65.24, @@ -908,9 +908,9 @@ "geometryDefinitionId": "conicalWell" }, "A11": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 104.38, "y": 74.24, @@ -918,9 +918,9 @@ "geometryDefinitionId": "conicalWell" }, "H12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 11.24, @@ -928,9 +928,9 @@ "geometryDefinitionId": "conicalWell" }, "G12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 20.24, @@ -938,9 +938,9 @@ "geometryDefinitionId": "conicalWell" }, "F12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 29.24, @@ -948,9 +948,9 @@ "geometryDefinitionId": "conicalWell" }, "E12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 38.24, @@ -958,9 +958,9 @@ "geometryDefinitionId": "conicalWell" }, "D12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 47.24, @@ -968,9 +968,9 @@ "geometryDefinitionId": "conicalWell" }, "C12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 56.24, @@ -978,9 +978,9 @@ "geometryDefinitionId": "conicalWell" }, "B12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 65.24, @@ -988,9 +988,9 @@ "geometryDefinitionId": "conicalWell" }, "A12": { - "depth": 14.81, + "depth": 14.57, "shape": "circular", - "diameter": 5.46, + "diameter": 5.44, "totalLiquidVolume": 200, "x": 113.38, "y": 74.24, @@ -1150,22 +1150,22 @@ }, { "shape": "conical", + "topDiameter": 3.0, "bottomDiameter": 2.81, - "topDiameter": 3, "topHeight": 1.87, "bottomHeight": 1.21 }, { "shape": "conical", - "bottomDiameter": 3, "topDiameter": 4.98, + "bottomDiameter": 3, "topHeight": 8.58, "bottomHeight": 1.87 }, { "shape": "conical", - "bottomDiameter": 3, "topDiameter": 5.44, + "bottomDiameter": 4.98, "topHeight": 10.14, "bottomHeight": 8.58 }, diff --git a/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json b/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json index f51bce0859c..3a0001ef016 100644 --- a/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json +++ b/shared-data/labware/definitions/3/corning_12_wellplate_6.9ml_flat/3.json @@ -31,7 +31,7 @@ "wells": { "C1": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 24.94, @@ -41,7 +41,7 @@ }, "B1": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 24.94, @@ -51,7 +51,7 @@ }, "A1": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 24.94, @@ -61,7 +61,7 @@ }, "C2": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 50.95, @@ -71,7 +71,7 @@ }, "B2": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 50.95, @@ -81,7 +81,7 @@ }, "A2": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 50.95, @@ -91,7 +91,7 @@ }, "C3": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 76.96, @@ -101,7 +101,7 @@ }, "B3": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 76.96, @@ -111,7 +111,7 @@ }, "A3": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 76.96, @@ -121,7 +121,7 @@ }, "C4": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 102.97, @@ -131,7 +131,7 @@ }, "B4": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 102.97, @@ -141,7 +141,7 @@ }, "A4": { "shape": "circular", - "depth": 17.53, + "depth": 17.399, "diameter": 22.73, "totalLiquidVolume": 6900, "x": 102.97, diff --git a/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json b/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json index ca3758f2339..69a3b324063 100644 --- a/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json +++ b/shared-data/labware/definitions/3/corning_384_wellplate_112ul_flat/3.json @@ -457,7 +457,7 @@ "gripHeightFromLabwareBottom": 12.4, "wells": { "P1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -465,10 +465,10 @@ "x": 12.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -476,10 +476,10 @@ "x": 12.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -487,10 +487,10 @@ "x": 12.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -498,10 +498,10 @@ "x": 12.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -509,10 +509,10 @@ "x": 12.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -520,10 +520,10 @@ "x": 12.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -531,10 +531,10 @@ "x": 12.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -542,10 +542,10 @@ "x": 12.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -553,10 +553,10 @@ "x": 12.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -564,10 +564,10 @@ "x": 12.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -575,10 +575,10 @@ "x": 12.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -586,10 +586,10 @@ "x": 12.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -597,10 +597,10 @@ "x": 12.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -608,10 +608,10 @@ "x": 12.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -619,10 +619,10 @@ "x": 12.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A1": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -630,10 +630,10 @@ "x": 12.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -641,10 +641,10 @@ "x": 16.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -652,10 +652,10 @@ "x": 16.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -663,10 +663,10 @@ "x": 16.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -674,10 +674,10 @@ "x": 16.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -685,10 +685,10 @@ "x": 16.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -696,10 +696,10 @@ "x": 16.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -707,10 +707,10 @@ "x": 16.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -718,10 +718,10 @@ "x": 16.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -729,10 +729,10 @@ "x": 16.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -740,10 +740,10 @@ "x": 16.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -751,10 +751,10 @@ "x": 16.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -762,10 +762,10 @@ "x": 16.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -773,10 +773,10 @@ "x": 16.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -784,10 +784,10 @@ "x": 16.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -795,10 +795,10 @@ "x": 16.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A2": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -806,10 +806,10 @@ "x": 16.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -817,10 +817,10 @@ "x": 21.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -828,10 +828,10 @@ "x": 21.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -839,10 +839,10 @@ "x": 21.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -850,10 +850,10 @@ "x": 21.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -861,10 +861,10 @@ "x": 21.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -872,10 +872,10 @@ "x": 21.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -883,10 +883,10 @@ "x": 21.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -894,10 +894,10 @@ "x": 21.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -905,10 +905,10 @@ "x": 21.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -916,10 +916,10 @@ "x": 21.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -927,10 +927,10 @@ "x": 21.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -938,10 +938,10 @@ "x": 21.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -949,10 +949,10 @@ "x": 21.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -960,10 +960,10 @@ "x": 21.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -971,10 +971,10 @@ "x": 21.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A3": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -982,10 +982,10 @@ "x": 21.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -993,10 +993,10 @@ "x": 25.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1004,10 +1004,10 @@ "x": 25.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1015,10 +1015,10 @@ "x": 25.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1026,10 +1026,10 @@ "x": 25.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1037,10 +1037,10 @@ "x": 25.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1048,10 +1048,10 @@ "x": 25.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1059,10 +1059,10 @@ "x": 25.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1070,10 +1070,10 @@ "x": 25.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1081,10 +1081,10 @@ "x": 25.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1092,10 +1092,10 @@ "x": 25.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1103,10 +1103,10 @@ "x": 25.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1114,10 +1114,10 @@ "x": 25.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1125,10 +1125,10 @@ "x": 25.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1136,10 +1136,10 @@ "x": 25.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1147,10 +1147,10 @@ "x": 25.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A4": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1158,10 +1158,10 @@ "x": 25.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1169,10 +1169,10 @@ "x": 30.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1180,10 +1180,10 @@ "x": 30.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1191,10 +1191,10 @@ "x": 30.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1202,10 +1202,10 @@ "x": 30.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1213,10 +1213,10 @@ "x": 30.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1224,10 +1224,10 @@ "x": 30.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1235,10 +1235,10 @@ "x": 30.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1246,10 +1246,10 @@ "x": 30.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1257,10 +1257,10 @@ "x": 30.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1268,10 +1268,10 @@ "x": 30.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1279,10 +1279,10 @@ "x": 30.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1290,10 +1290,10 @@ "x": 30.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1301,10 +1301,10 @@ "x": 30.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1312,10 +1312,10 @@ "x": 30.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1323,10 +1323,10 @@ "x": 30.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A5": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1334,10 +1334,10 @@ "x": 30.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1345,10 +1345,10 @@ "x": 34.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1356,10 +1356,10 @@ "x": 34.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1367,10 +1367,10 @@ "x": 34.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1378,10 +1378,10 @@ "x": 34.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1389,10 +1389,10 @@ "x": 34.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1400,10 +1400,10 @@ "x": 34.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1411,10 +1411,10 @@ "x": 34.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1422,10 +1422,10 @@ "x": 34.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1433,10 +1433,10 @@ "x": 34.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1444,10 +1444,10 @@ "x": 34.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1455,10 +1455,10 @@ "x": 34.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1466,10 +1466,10 @@ "x": 34.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1477,10 +1477,10 @@ "x": 34.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1488,10 +1488,10 @@ "x": 34.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1499,10 +1499,10 @@ "x": 34.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A6": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1510,10 +1510,10 @@ "x": 34.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1521,10 +1521,10 @@ "x": 39.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1532,10 +1532,10 @@ "x": 39.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1543,10 +1543,10 @@ "x": 39.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1554,10 +1554,10 @@ "x": 39.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1565,10 +1565,10 @@ "x": 39.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1576,10 +1576,10 @@ "x": 39.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1587,10 +1587,10 @@ "x": 39.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1598,10 +1598,10 @@ "x": 39.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1609,10 +1609,10 @@ "x": 39.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1620,10 +1620,10 @@ "x": 39.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1631,10 +1631,10 @@ "x": 39.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1642,10 +1642,10 @@ "x": 39.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1653,10 +1653,10 @@ "x": 39.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1664,10 +1664,10 @@ "x": 39.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1675,10 +1675,10 @@ "x": 39.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A7": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1686,10 +1686,10 @@ "x": 39.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1697,10 +1697,10 @@ "x": 43.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1708,10 +1708,10 @@ "x": 43.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1719,10 +1719,10 @@ "x": 43.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1730,10 +1730,10 @@ "x": 43.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1741,10 +1741,10 @@ "x": 43.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1752,10 +1752,10 @@ "x": 43.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1763,10 +1763,10 @@ "x": 43.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1774,10 +1774,10 @@ "x": 43.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1785,10 +1785,10 @@ "x": 43.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1796,10 +1796,10 @@ "x": 43.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1807,10 +1807,10 @@ "x": 43.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1818,10 +1818,10 @@ "x": 43.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1829,10 +1829,10 @@ "x": 43.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1840,10 +1840,10 @@ "x": 43.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1851,10 +1851,10 @@ "x": 43.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A8": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1862,10 +1862,10 @@ "x": 43.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1873,10 +1873,10 @@ "x": 48.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1884,10 +1884,10 @@ "x": 48.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1895,10 +1895,10 @@ "x": 48.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1906,10 +1906,10 @@ "x": 48.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1917,10 +1917,10 @@ "x": 48.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1928,10 +1928,10 @@ "x": 48.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1939,10 +1939,10 @@ "x": 48.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1950,10 +1950,10 @@ "x": 48.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1961,10 +1961,10 @@ "x": 48.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1972,10 +1972,10 @@ "x": 48.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1983,10 +1983,10 @@ "x": 48.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -1994,10 +1994,10 @@ "x": 48.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2005,10 +2005,10 @@ "x": 48.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2016,10 +2016,10 @@ "x": 48.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2027,10 +2027,10 @@ "x": 48.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A9": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2038,10 +2038,10 @@ "x": 48.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2049,10 +2049,10 @@ "x": 52.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2060,10 +2060,10 @@ "x": 52.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2071,10 +2071,10 @@ "x": 52.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2082,10 +2082,10 @@ "x": 52.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2093,10 +2093,10 @@ "x": 52.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2104,10 +2104,10 @@ "x": 52.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2115,10 +2115,10 @@ "x": 52.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2126,10 +2126,10 @@ "x": 52.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2137,10 +2137,10 @@ "x": 52.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2148,10 +2148,10 @@ "x": 52.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2159,10 +2159,10 @@ "x": 52.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2170,10 +2170,10 @@ "x": 52.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2181,10 +2181,10 @@ "x": 52.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2192,10 +2192,10 @@ "x": 52.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2203,10 +2203,10 @@ "x": 52.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A10": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2214,10 +2214,10 @@ "x": 52.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2225,10 +2225,10 @@ "x": 57.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2236,10 +2236,10 @@ "x": 57.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2247,10 +2247,10 @@ "x": 57.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2258,10 +2258,10 @@ "x": 57.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2269,10 +2269,10 @@ "x": 57.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2280,10 +2280,10 @@ "x": 57.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2291,10 +2291,10 @@ "x": 57.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2302,10 +2302,10 @@ "x": 57.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2313,10 +2313,10 @@ "x": 57.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2324,10 +2324,10 @@ "x": 57.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2335,10 +2335,10 @@ "x": 57.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2346,10 +2346,10 @@ "x": 57.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2357,10 +2357,10 @@ "x": 57.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2368,10 +2368,10 @@ "x": 57.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2379,10 +2379,10 @@ "x": 57.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A11": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2390,10 +2390,10 @@ "x": 57.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2401,10 +2401,10 @@ "x": 61.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2412,10 +2412,10 @@ "x": 61.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2423,10 +2423,10 @@ "x": 61.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2434,10 +2434,10 @@ "x": 61.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2445,10 +2445,10 @@ "x": 61.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2456,10 +2456,10 @@ "x": 61.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2467,10 +2467,10 @@ "x": 61.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2478,10 +2478,10 @@ "x": 61.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2489,10 +2489,10 @@ "x": 61.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2500,10 +2500,10 @@ "x": 61.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2511,10 +2511,10 @@ "x": 61.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2522,10 +2522,10 @@ "x": 61.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2533,10 +2533,10 @@ "x": 61.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2544,10 +2544,10 @@ "x": 61.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2555,10 +2555,10 @@ "x": 61.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A12": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2566,10 +2566,10 @@ "x": 61.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2577,10 +2577,10 @@ "x": 66.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2588,10 +2588,10 @@ "x": 66.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2599,10 +2599,10 @@ "x": 66.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2610,10 +2610,10 @@ "x": 66.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2621,10 +2621,10 @@ "x": 66.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2632,10 +2632,10 @@ "x": 66.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2643,10 +2643,10 @@ "x": 66.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2654,10 +2654,10 @@ "x": 66.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2665,10 +2665,10 @@ "x": 66.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2676,10 +2676,10 @@ "x": 66.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2687,10 +2687,10 @@ "x": 66.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2698,10 +2698,10 @@ "x": 66.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2709,10 +2709,10 @@ "x": 66.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2720,10 +2720,10 @@ "x": 66.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2731,10 +2731,10 @@ "x": 66.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A13": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2742,10 +2742,10 @@ "x": 66.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2753,10 +2753,10 @@ "x": 70.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2764,10 +2764,10 @@ "x": 70.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2775,10 +2775,10 @@ "x": 70.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2786,10 +2786,10 @@ "x": 70.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2797,10 +2797,10 @@ "x": 70.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2808,10 +2808,10 @@ "x": 70.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2819,10 +2819,10 @@ "x": 70.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2830,10 +2830,10 @@ "x": 70.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2841,10 +2841,10 @@ "x": 70.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2852,10 +2852,10 @@ "x": 70.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2863,10 +2863,10 @@ "x": 70.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2874,10 +2874,10 @@ "x": 70.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2885,10 +2885,10 @@ "x": 70.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2896,10 +2896,10 @@ "x": 70.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2907,10 +2907,10 @@ "x": 70.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A14": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2918,10 +2918,10 @@ "x": 70.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2929,10 +2929,10 @@ "x": 75.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2940,10 +2940,10 @@ "x": 75.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2951,10 +2951,10 @@ "x": 75.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2962,10 +2962,10 @@ "x": 75.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2973,10 +2973,10 @@ "x": 75.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2984,10 +2984,10 @@ "x": 75.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -2995,10 +2995,10 @@ "x": 75.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3006,10 +3006,10 @@ "x": 75.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3017,10 +3017,10 @@ "x": 75.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3028,10 +3028,10 @@ "x": 75.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3039,10 +3039,10 @@ "x": 75.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3050,10 +3050,10 @@ "x": 75.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3061,10 +3061,10 @@ "x": 75.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3072,10 +3072,10 @@ "x": 75.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3083,10 +3083,10 @@ "x": 75.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A15": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3094,10 +3094,10 @@ "x": 75.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3105,10 +3105,10 @@ "x": 79.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3116,10 +3116,10 @@ "x": 79.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3127,10 +3127,10 @@ "x": 79.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3138,10 +3138,10 @@ "x": 79.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3149,10 +3149,10 @@ "x": 79.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3160,10 +3160,10 @@ "x": 79.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3171,10 +3171,10 @@ "x": 79.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3182,10 +3182,10 @@ "x": 79.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3193,10 +3193,10 @@ "x": 79.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3204,10 +3204,10 @@ "x": 79.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3215,10 +3215,10 @@ "x": 79.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3226,10 +3226,10 @@ "x": 79.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3237,10 +3237,10 @@ "x": 79.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3248,10 +3248,10 @@ "x": 79.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3259,10 +3259,10 @@ "x": 79.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A16": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3270,10 +3270,10 @@ "x": 79.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3281,10 +3281,10 @@ "x": 84.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3292,10 +3292,10 @@ "x": 84.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3303,10 +3303,10 @@ "x": 84.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3314,10 +3314,10 @@ "x": 84.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3325,10 +3325,10 @@ "x": 84.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3336,10 +3336,10 @@ "x": 84.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3347,10 +3347,10 @@ "x": 84.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3358,10 +3358,10 @@ "x": 84.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3369,10 +3369,10 @@ "x": 84.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3380,10 +3380,10 @@ "x": 84.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3391,10 +3391,10 @@ "x": 84.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3402,10 +3402,10 @@ "x": 84.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3413,10 +3413,10 @@ "x": 84.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3424,10 +3424,10 @@ "x": 84.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3435,10 +3435,10 @@ "x": 84.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A17": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3446,10 +3446,10 @@ "x": 84.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3457,10 +3457,10 @@ "x": 88.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3468,10 +3468,10 @@ "x": 88.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3479,10 +3479,10 @@ "x": 88.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3490,10 +3490,10 @@ "x": 88.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3501,10 +3501,10 @@ "x": 88.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3512,10 +3512,10 @@ "x": 88.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3523,10 +3523,10 @@ "x": 88.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3534,10 +3534,10 @@ "x": 88.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3545,10 +3545,10 @@ "x": 88.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3556,10 +3556,10 @@ "x": 88.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3567,10 +3567,10 @@ "x": 88.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3578,10 +3578,10 @@ "x": 88.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3589,10 +3589,10 @@ "x": 88.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3600,10 +3600,10 @@ "x": 88.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3611,10 +3611,10 @@ "x": 88.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A18": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3622,10 +3622,10 @@ "x": 88.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3633,10 +3633,10 @@ "x": 93.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3644,10 +3644,10 @@ "x": 93.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3655,10 +3655,10 @@ "x": 93.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3666,10 +3666,10 @@ "x": 93.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3677,10 +3677,10 @@ "x": 93.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3688,10 +3688,10 @@ "x": 93.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3699,10 +3699,10 @@ "x": 93.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3710,10 +3710,10 @@ "x": 93.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3721,10 +3721,10 @@ "x": 93.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3732,10 +3732,10 @@ "x": 93.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3743,10 +3743,10 @@ "x": 93.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3754,10 +3754,10 @@ "x": 93.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3765,10 +3765,10 @@ "x": 93.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3776,10 +3776,10 @@ "x": 93.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3787,10 +3787,10 @@ "x": 93.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A19": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3798,10 +3798,10 @@ "x": 93.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3809,10 +3809,10 @@ "x": 97.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3820,10 +3820,10 @@ "x": 97.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3831,10 +3831,10 @@ "x": 97.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3842,10 +3842,10 @@ "x": 97.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3853,10 +3853,10 @@ "x": 97.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3864,10 +3864,10 @@ "x": 97.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3875,10 +3875,10 @@ "x": 97.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3886,10 +3886,10 @@ "x": 97.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3897,10 +3897,10 @@ "x": 97.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3908,10 +3908,10 @@ "x": 97.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3919,10 +3919,10 @@ "x": 97.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3930,10 +3930,10 @@ "x": 97.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3941,10 +3941,10 @@ "x": 97.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3952,10 +3952,10 @@ "x": 97.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3963,10 +3963,10 @@ "x": 97.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A20": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3974,10 +3974,10 @@ "x": 97.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3985,10 +3985,10 @@ "x": 102.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -3996,10 +3996,10 @@ "x": 102.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4007,10 +4007,10 @@ "x": 102.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4018,10 +4018,10 @@ "x": 102.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4029,10 +4029,10 @@ "x": 102.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4040,10 +4040,10 @@ "x": 102.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4051,10 +4051,10 @@ "x": 102.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4062,10 +4062,10 @@ "x": 102.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4073,10 +4073,10 @@ "x": 102.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4084,10 +4084,10 @@ "x": 102.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4095,10 +4095,10 @@ "x": 102.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4106,10 +4106,10 @@ "x": 102.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4117,10 +4117,10 @@ "x": 102.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4128,10 +4128,10 @@ "x": 102.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4139,10 +4139,10 @@ "x": 102.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A21": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4150,10 +4150,10 @@ "x": 102.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4161,10 +4161,10 @@ "x": 106.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4172,10 +4172,10 @@ "x": 106.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4183,10 +4183,10 @@ "x": 106.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4194,10 +4194,10 @@ "x": 106.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4205,10 +4205,10 @@ "x": 106.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4216,10 +4216,10 @@ "x": 106.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4227,10 +4227,10 @@ "x": 106.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4238,10 +4238,10 @@ "x": 106.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4249,10 +4249,10 @@ "x": 106.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4260,10 +4260,10 @@ "x": 106.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4271,10 +4271,10 @@ "x": 106.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4282,10 +4282,10 @@ "x": 106.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4293,10 +4293,10 @@ "x": 106.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4304,10 +4304,10 @@ "x": 106.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4315,10 +4315,10 @@ "x": 106.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A22": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4326,10 +4326,10 @@ "x": 106.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4337,10 +4337,10 @@ "x": 111.12, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4348,10 +4348,10 @@ "x": 111.12, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4359,10 +4359,10 @@ "x": 111.12, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4370,10 +4370,10 @@ "x": 111.12, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4381,10 +4381,10 @@ "x": 111.12, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4392,10 +4392,10 @@ "x": 111.12, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4403,10 +4403,10 @@ "x": 111.12, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4414,10 +4414,10 @@ "x": 111.12, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4425,10 +4425,10 @@ "x": 111.12, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4436,10 +4436,10 @@ "x": 111.12, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4447,10 +4447,10 @@ "x": 111.12, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4458,10 +4458,10 @@ "x": 111.12, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4469,10 +4469,10 @@ "x": 111.12, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4480,10 +4480,10 @@ "x": 111.12, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4491,10 +4491,10 @@ "x": 111.12, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A23": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4502,10 +4502,10 @@ "x": 111.12, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "P24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4513,10 +4513,10 @@ "x": 115.62, "y": 8.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "O24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4524,10 +4524,10 @@ "x": 115.62, "y": 13.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "N24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4535,10 +4535,10 @@ "x": 115.62, "y": 17.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "M24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4546,10 +4546,10 @@ "x": 115.62, "y": 22.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "L24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4557,10 +4557,10 @@ "x": 115.62, "y": 26.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "K24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4568,10 +4568,10 @@ "x": 115.62, "y": 31.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "J24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4579,10 +4579,10 @@ "x": 115.62, "y": 35.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "I24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4590,10 +4590,10 @@ "x": 115.62, "y": 40.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "H24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4601,10 +4601,10 @@ "x": 115.62, "y": 44.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "G24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4612,10 +4612,10 @@ "x": 115.62, "y": 49.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "F24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4623,10 +4623,10 @@ "x": 115.62, "y": 53.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "E24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4634,10 +4634,10 @@ "x": 115.62, "y": 58.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "D24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4645,10 +4645,10 @@ "x": 115.62, "y": 62.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "C24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4656,10 +4656,10 @@ "x": 115.62, "y": 67.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "B24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4667,10 +4667,10 @@ "x": 115.62, "y": 71.99, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" }, "A24": { - "shape": "rectangular", + "shape": "circular", "depth": 11.43, "xDimension": 3.63, "yDimension": 3.63, @@ -4678,7 +4678,7 @@ "x": 115.62, "y": 76.49, "z": 2.79, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "flatWell" } }, "brand": { @@ -5099,13 +5099,15 @@ } }, "innerLabwareGeometry": { - "conicalWell": { + "flatWell": { "sections": [ { - "shape": "conical", - "bottomDiameter": 3.64, - "topDiameter": 2.74, - "topHeight": 11.65, + "shape": "cuboidal", + "topXDimension": 3.6322, + "topYDimension": 3.6322, + "bottomXDimension": 2.667, + "bottomYDimension": 2.667, + "topHeight": 11.43, "bottomHeight": 0.0 } ] diff --git a/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json b/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json index 9caad9af4b0..ad4bf3005ac 100644 --- a/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json +++ b/shared-data/labware/definitions/3/corning_48_wellplate_1.6ml_flat/3.json @@ -35,7 +35,7 @@ "F1": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 18.16, "y": 10.08, @@ -45,7 +45,7 @@ "E1": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 18.16, "y": 23.16, @@ -55,7 +55,7 @@ "D1": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 18.16, "y": 36.24, @@ -65,7 +65,7 @@ "C1": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 18.16, "y": 49.32, @@ -75,7 +75,7 @@ "B1": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 18.16, "y": 62.4, @@ -85,7 +85,7 @@ "A1": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 18.16, "y": 75.48, @@ -95,7 +95,7 @@ "F2": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 31.24, "y": 10.08, @@ -105,7 +105,7 @@ "E2": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 31.24, "y": 23.16, @@ -115,7 +115,7 @@ "D2": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 31.24, "y": 36.24, @@ -125,7 +125,7 @@ "C2": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 31.24, "y": 49.32, @@ -135,7 +135,7 @@ "B2": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 31.24, "y": 62.4, @@ -145,7 +145,7 @@ "A2": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 31.24, "y": 75.48, @@ -155,7 +155,7 @@ "F3": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 44.32, "y": 10.08, @@ -165,7 +165,7 @@ "E3": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 44.32, "y": 23.16, @@ -175,7 +175,7 @@ "D3": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 44.32, "y": 36.24, @@ -185,7 +185,7 @@ "C3": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 44.32, "y": 49.32, @@ -195,7 +195,7 @@ "B3": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 44.32, "y": 62.4, @@ -205,7 +205,7 @@ "A3": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 44.32, "y": 75.48, @@ -215,7 +215,7 @@ "F4": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 57.4, "y": 10.08, @@ -225,7 +225,7 @@ "E4": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 57.4, "y": 23.16, @@ -235,7 +235,7 @@ "D4": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 57.4, "y": 36.24, @@ -245,7 +245,7 @@ "C4": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 57.4, "y": 49.32, @@ -255,7 +255,7 @@ "B4": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 57.4, "y": 62.4, @@ -265,7 +265,7 @@ "A4": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 57.4, "y": 75.48, @@ -275,7 +275,7 @@ "F5": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 70.48, "y": 10.08, @@ -285,7 +285,7 @@ "E5": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 70.48, "y": 23.16, @@ -295,7 +295,7 @@ "D5": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 70.48, "y": 36.24, @@ -305,7 +305,7 @@ "C5": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 70.48, "y": 49.32, @@ -315,7 +315,7 @@ "B5": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 70.48, "y": 62.4, @@ -325,7 +325,7 @@ "A5": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 70.48, "y": 75.48, @@ -335,7 +335,7 @@ "F6": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 83.56, "y": 10.08, @@ -345,7 +345,7 @@ "E6": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 83.56, "y": 23.16, @@ -355,7 +355,7 @@ "D6": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 83.56, "y": 36.24, @@ -365,7 +365,7 @@ "C6": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 83.56, "y": 49.32, @@ -375,7 +375,7 @@ "B6": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 83.56, "y": 62.4, @@ -385,7 +385,7 @@ "A6": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 83.56, "y": 75.48, @@ -395,7 +395,7 @@ "F7": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 96.64, "y": 10.08, @@ -405,7 +405,7 @@ "E7": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 96.64, "y": 23.16, @@ -415,7 +415,7 @@ "D7": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 96.64, "y": 36.24, @@ -425,7 +425,7 @@ "C7": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 96.64, "y": 49.32, @@ -435,7 +435,7 @@ "B7": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 96.64, "y": 62.4, @@ -445,7 +445,7 @@ "A7": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 96.64, "y": 75.48, @@ -455,7 +455,7 @@ "F8": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 109.72, "y": 10.08, @@ -465,7 +465,7 @@ "E8": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 109.72, "y": 23.16, @@ -475,7 +475,7 @@ "D8": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 109.72, "y": 36.24, @@ -485,7 +485,7 @@ "C8": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 109.72, "y": 49.32, @@ -495,7 +495,7 @@ "B8": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 109.72, "y": 62.4, @@ -505,7 +505,7 @@ "A8": { "shape": "circular", "depth": 17.4, - "diameter": 11.56, + "diameter": 11.1, "totalLiquidVolume": 1600, "x": 109.72, "y": 75.48, @@ -594,9 +594,9 @@ "sections": [ { "shape": "conical", - "bottomDiameter": 11.0998, - "topDiameter": 10.6426, - "topHeight": 17.399, + "bottomDiameter": 10.6426, + "topDiameter": 11.0998, + "topHeight": 17.4, "bottomHeight": 0.0 } ] diff --git a/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json b/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json index 842b916fb8c..a5fb287ad8c 100644 --- a/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json +++ b/shared-data/labware/definitions/3/nest_1_reservoir_195ml/3.json @@ -20,7 +20,7 @@ "gripHeightFromLabwareBottom": 16.8, "wells": { "A1": { - "depth": 25, + "depth": 26.85, "shape": "rectangular", "xDimension": 106.8, "yDimension": 71.2, @@ -71,11 +71,11 @@ { "shape": "cuboidal", "topXDimension": 71.3, - "topYDimension": 70.6, - "bottomXDimension": 107.3, + "topYDimension": 107.3, + "bottomXDimension": 70.6, "bottomYDimension": 106.8, "topHeight": 26.85, - "bottomHeight": 2 + "bottomHeight": 2.0 } ] } diff --git a/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json b/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json index 13e9cd8f40c..46c5a494533 100644 --- a/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json +++ b/shared-data/labware/definitions/3/nest_1_reservoir_290ml/2.json @@ -57,12 +57,22 @@ "sections": [ { "shape": "cuboidal", - "topXDimension": 70.6, - "topYDimension": 106.8, - "bottomXDimension": 71.3, - "bottomYDimension": 107.3, - "topHeight": 2.05, - "bottomHeight": 0.0 + "topXDimension": 7.75, + "topYDimension": 70.75, + "bottomXDimension": 3.127, + "bottomYDimension": 66.85, + "topHeight": 2.0, + "bottomHeight": 0.0, + "xCount": 12 + }, + { + "shape": "cuboidal", + "topXDimension": 107.76, + "topYDimension": 71.0, + "bottomXDimension": 106.75, + "bottomYDimension": 70.75, + "topHeight": 39.55, + "bottomHeight": 2.0 } ] } diff --git a/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json b/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json index 3e55fa4ed84..44114349497 100644 --- a/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json +++ b/shared-data/labware/definitions/3/nest_96_wellplate_100ul_pcr_full_skirt/3.json @@ -33,7 +33,7 @@ "gripHeightFromLabwareBottom": 10.65, "wells": { "A1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -43,7 +43,7 @@ "geometryDefinitionId": "conicalWell" }, "B1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -53,7 +53,7 @@ "geometryDefinitionId": "conicalWell" }, "C1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -63,7 +63,7 @@ "geometryDefinitionId": "conicalWell" }, "D1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -73,7 +73,7 @@ "geometryDefinitionId": "conicalWell" }, "E1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -83,7 +83,7 @@ "geometryDefinitionId": "conicalWell" }, "F1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -93,7 +93,7 @@ "geometryDefinitionId": "conicalWell" }, "G1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -103,7 +103,7 @@ "geometryDefinitionId": "conicalWell" }, "H1": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -113,7 +113,7 @@ "geometryDefinitionId": "conicalWell" }, "A2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -123,7 +123,7 @@ "geometryDefinitionId": "conicalWell" }, "B2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -133,7 +133,7 @@ "geometryDefinitionId": "conicalWell" }, "C2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -143,7 +143,7 @@ "geometryDefinitionId": "conicalWell" }, "D2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -153,7 +153,7 @@ "geometryDefinitionId": "conicalWell" }, "E2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -163,7 +163,7 @@ "geometryDefinitionId": "conicalWell" }, "F2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -173,7 +173,7 @@ "geometryDefinitionId": "conicalWell" }, "G2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -183,7 +183,7 @@ "geometryDefinitionId": "conicalWell" }, "H2": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -193,7 +193,7 @@ "geometryDefinitionId": "conicalWell" }, "A3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -203,7 +203,7 @@ "geometryDefinitionId": "conicalWell" }, "B3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -213,7 +213,7 @@ "geometryDefinitionId": "conicalWell" }, "C3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -223,7 +223,7 @@ "geometryDefinitionId": "conicalWell" }, "D3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -233,7 +233,7 @@ "geometryDefinitionId": "conicalWell" }, "E3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -243,7 +243,7 @@ "geometryDefinitionId": "conicalWell" }, "F3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -253,7 +253,7 @@ "geometryDefinitionId": "conicalWell" }, "G3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -263,7 +263,7 @@ "geometryDefinitionId": "conicalWell" }, "H3": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -273,7 +273,7 @@ "geometryDefinitionId": "conicalWell" }, "A4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -283,7 +283,7 @@ "geometryDefinitionId": "conicalWell" }, "B4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -293,7 +293,7 @@ "geometryDefinitionId": "conicalWell" }, "C4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -303,7 +303,7 @@ "geometryDefinitionId": "conicalWell" }, "D4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -313,7 +313,7 @@ "geometryDefinitionId": "conicalWell" }, "E4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -323,7 +323,7 @@ "geometryDefinitionId": "conicalWell" }, "F4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -333,7 +333,7 @@ "geometryDefinitionId": "conicalWell" }, "G4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -343,7 +343,7 @@ "geometryDefinitionId": "conicalWell" }, "H4": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -353,7 +353,7 @@ "geometryDefinitionId": "conicalWell" }, "A5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -363,7 +363,7 @@ "geometryDefinitionId": "conicalWell" }, "B5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -373,7 +373,7 @@ "geometryDefinitionId": "conicalWell" }, "C5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -383,7 +383,7 @@ "geometryDefinitionId": "conicalWell" }, "D5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -393,7 +393,7 @@ "geometryDefinitionId": "conicalWell" }, "E5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -403,7 +403,7 @@ "geometryDefinitionId": "conicalWell" }, "F5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -413,7 +413,7 @@ "geometryDefinitionId": "conicalWell" }, "G5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -423,7 +423,7 @@ "geometryDefinitionId": "conicalWell" }, "H5": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -433,7 +433,7 @@ "geometryDefinitionId": "conicalWell" }, "A6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -443,7 +443,7 @@ "geometryDefinitionId": "conicalWell" }, "B6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -453,7 +453,7 @@ "geometryDefinitionId": "conicalWell" }, "C6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -463,7 +463,7 @@ "geometryDefinitionId": "conicalWell" }, "D6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -473,7 +473,7 @@ "geometryDefinitionId": "conicalWell" }, "E6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -483,7 +483,7 @@ "geometryDefinitionId": "conicalWell" }, "F6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -493,7 +493,7 @@ "geometryDefinitionId": "conicalWell" }, "G6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -503,7 +503,7 @@ "geometryDefinitionId": "conicalWell" }, "H6": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -513,7 +513,7 @@ "geometryDefinitionId": "conicalWell" }, "A7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -523,7 +523,7 @@ "geometryDefinitionId": "conicalWell" }, "B7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -533,7 +533,7 @@ "geometryDefinitionId": "conicalWell" }, "C7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -543,7 +543,7 @@ "geometryDefinitionId": "conicalWell" }, "D7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -553,7 +553,7 @@ "geometryDefinitionId": "conicalWell" }, "E7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -563,7 +563,7 @@ "geometryDefinitionId": "conicalWell" }, "F7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -573,7 +573,7 @@ "geometryDefinitionId": "conicalWell" }, "G7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -583,7 +583,7 @@ "geometryDefinitionId": "conicalWell" }, "H7": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -593,7 +593,7 @@ "geometryDefinitionId": "conicalWell" }, "A8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -603,7 +603,7 @@ "geometryDefinitionId": "conicalWell" }, "B8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -613,7 +613,7 @@ "geometryDefinitionId": "conicalWell" }, "C8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -623,7 +623,7 @@ "geometryDefinitionId": "conicalWell" }, "D8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -633,7 +633,7 @@ "geometryDefinitionId": "conicalWell" }, "E8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -643,7 +643,7 @@ "geometryDefinitionId": "conicalWell" }, "F8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -653,7 +653,7 @@ "geometryDefinitionId": "conicalWell" }, "G8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -663,7 +663,7 @@ "geometryDefinitionId": "conicalWell" }, "H8": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -673,7 +673,7 @@ "geometryDefinitionId": "conicalWell" }, "A9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -683,7 +683,7 @@ "geometryDefinitionId": "conicalWell" }, "B9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -693,7 +693,7 @@ "geometryDefinitionId": "conicalWell" }, "C9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -703,7 +703,7 @@ "geometryDefinitionId": "conicalWell" }, "D9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -713,7 +713,7 @@ "geometryDefinitionId": "conicalWell" }, "E9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -723,7 +723,7 @@ "geometryDefinitionId": "conicalWell" }, "F9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -733,7 +733,7 @@ "geometryDefinitionId": "conicalWell" }, "G9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -743,7 +743,7 @@ "geometryDefinitionId": "conicalWell" }, "H9": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -753,7 +753,7 @@ "geometryDefinitionId": "conicalWell" }, "A10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -763,7 +763,7 @@ "geometryDefinitionId": "conicalWell" }, "B10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -773,7 +773,7 @@ "geometryDefinitionId": "conicalWell" }, "C10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -783,7 +783,7 @@ "geometryDefinitionId": "conicalWell" }, "D10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -793,7 +793,7 @@ "geometryDefinitionId": "conicalWell" }, "E10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -803,7 +803,7 @@ "geometryDefinitionId": "conicalWell" }, "F10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -813,7 +813,7 @@ "geometryDefinitionId": "conicalWell" }, "G10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -823,7 +823,7 @@ "geometryDefinitionId": "conicalWell" }, "H10": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -833,7 +833,7 @@ "geometryDefinitionId": "conicalWell" }, "A11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -843,7 +843,7 @@ "geometryDefinitionId": "conicalWell" }, "B11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -853,7 +853,7 @@ "geometryDefinitionId": "conicalWell" }, "C11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -863,7 +863,7 @@ "geometryDefinitionId": "conicalWell" }, "D11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -873,7 +873,7 @@ "geometryDefinitionId": "conicalWell" }, "E11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -883,7 +883,7 @@ "geometryDefinitionId": "conicalWell" }, "F11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -893,7 +893,7 @@ "geometryDefinitionId": "conicalWell" }, "G11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -903,7 +903,7 @@ "geometryDefinitionId": "conicalWell" }, "H11": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -913,7 +913,7 @@ "geometryDefinitionId": "conicalWell" }, "A12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -923,7 +923,7 @@ "geometryDefinitionId": "conicalWell" }, "B12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -933,7 +933,7 @@ "geometryDefinitionId": "conicalWell" }, "C12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -943,7 +943,7 @@ "geometryDefinitionId": "conicalWell" }, "D12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -953,7 +953,7 @@ "geometryDefinitionId": "conicalWell" }, "E12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -963,7 +963,7 @@ "geometryDefinitionId": "conicalWell" }, "F12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -973,7 +973,7 @@ "geometryDefinitionId": "conicalWell" }, "G12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, @@ -983,7 +983,7 @@ "geometryDefinitionId": "conicalWell" }, "H12": { - "depth": 14.78, + "depth": 14.7, "shape": "circular", "diameter": 5.34, "totalLiquidVolume": 100, diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json index 7827cbb5916..788e56ee3ba 100644 --- a/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json @@ -90,7 +90,7 @@ "totalLiquidVolume": 50000, "diameter": 27.81, "shape": "circular", - "depth": 113, + "depth": 112.85, "x": 71.38, "y": 60.25, "z": 7.3, @@ -100,7 +100,7 @@ "totalLiquidVolume": 50000, "diameter": 27.81, "shape": "circular", - "depth": 113, + "depth": 112.85, "x": 71.38, "y": 25.25, "z": 7.3, @@ -110,7 +110,7 @@ "totalLiquidVolume": 50000, "diameter": 27.81, "shape": "circular", - "depth": 113, + "depth": 112.85, "x": 106.38, "y": 60.25, "z": 7.3, @@ -120,7 +120,7 @@ "totalLiquidVolume": 50000, "diameter": 27.81, "shape": "circular", - "depth": 113, + "depth": 112.85, "x": 106.38, "y": 25.25, "z": 7.3, diff --git a/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json b/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json index 417e3e893de..209aeac29e6 100644 --- a/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json +++ b/shared-data/labware/definitions/3/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json @@ -8,7 +8,7 @@ "x": 13.88, "y": 67.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "conicalWell15mL" }, "B1": { "totalLiquidVolume": 15000, @@ -18,7 +18,7 @@ "x": 13.88, "y": 42.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "conicalWell15mL" }, "C1": { "totalLiquidVolume": 15000, @@ -28,7 +28,7 @@ "x": 13.88, "y": 17.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "conicalWell15mL" }, "A2": { "totalLiquidVolume": 15000, @@ -38,7 +38,7 @@ "x": 38.88, "y": 67.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "conicalWell15mL" }, "B2": { "totalLiquidVolume": 15000, @@ -48,7 +48,7 @@ "x": 38.88, "y": 42.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "conicalWell15mL" }, "C2": { "totalLiquidVolume": 15000, @@ -58,47 +58,47 @@ "x": 38.88, "y": 17.75, "z": 6.85, - "geometryDefinitionId": "conicalWell" + "geometryDefinitionId": "conicalWell15mL" }, "A3": { "totalLiquidVolume": 50000, - "diameter": 27.95, + "diameter": 28.18, "shape": "circular", - "depth": 113.05, + "depth": 113.1, "x": 71.38, "y": 60.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "conicalWell50mL" }, "B3": { "totalLiquidVolume": 50000, - "diameter": 27.95, + "diameter": 28.18, "shape": "circular", - "depth": 113.05, + "depth": 113.1, "x": 71.38, "y": 25.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "conicalWell50mL" }, "A4": { "totalLiquidVolume": 50000, - "diameter": 27.95, + "diameter": 28.18, "shape": "circular", - "depth": 113.05, + "depth": 113.1, "x": 106.38, "y": 60.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "conicalWell50mL" }, "B4": { "totalLiquidVolume": 50000, - "diameter": 27.95, + "diameter": 28.18, "shape": "circular", - "depth": 113.05, + "depth": 113.1, "x": 106.38, "y": 25.25, "z": 7.3, - "geometryDefinitionId": "b" + "geometryDefinitionId": "conicalWell50mL" } }, "groups": [ @@ -168,53 +168,66 @@ "z": 0 }, "innerLabwareGeometry": { - "conicalWell": { + "conicalWell15mL": { "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.235, + "topHeight": 0.92, + "bottomHeight": 0.0 + }, { "shape": "conical", "topDiameter": 13.8, - "bottomDiameter": 2.5, + "bottomDiameter": 2.38, "topHeight": 22.55, - "bottomHeight": 0.0 + "bottomHeight": 0.92 }, { "shape": "conical", - "topDiameter": 14.78, + "topDiameter": 14.56, "bottomDiameter": 13.8, - "topHeight": 109.03, + "topHeight": 113.8, "bottomHeight": 22.55 }, { "shape": "conical", "topDiameter": 15.5, - "bottomDiameter": 14.78, + "bottomDiameter": 14.56, "topHeight": 117.8, - "bottomHeight": 109.03 + "bottomHeight": 113.8 } ] }, - "b": { + "conicalWell50mL": { "sections": [ { "shape": "conical", "topDiameter": 26.0, - "bottomDiameter": 6.0, - "topHeight": 14.28, + "bottomDiameter": 4.5, + "topHeight": 14.35, "bottomHeight": 0.0 }, { "shape": "conical", - "topDiameter": 27.0, + "topDiameter": 27.69, "bottomDiameter": 26.0, - "topHeight": 109.0, - "bottomHeight": 14.28 + "topHeight": 108.8, + "bottomHeight": 14.35 + }, + { + "shape": "conical", + "topDiameter": 27.95, + "bottomDiameter": 27.69, + "topHeight": 109.1, + "bottomHeight": 108.8 }, { "shape": "conical", - "topDiameter": 27.45, - "bottomDiameter": 27.0, - "topHeight": 113.3, - "bottomHeight": 109.0 + "topDiameter": 28.18, + "bottomDiameter": 27.95, + "topHeight": 113.1, + "bottomHeight": 109.1 } ] } diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json index 1a0cc9ea508..97726f203f7 100644 --- a/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json @@ -334,7 +334,140 @@ }, "innerLabwareGeometry": { "conicalWell": { - "sections": [] + "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 2.88, + "topHeight": 1.45, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 6.0, + "bottomDiameter": 5.0, + "topHeight": 2.2, + "bottomHeight": 1.45 + }, + { + "shape": "conical", + "topDiameter": 6.4, + "bottomDiameter": 6.0, + "topHeight": 2.45, + "bottomHeight": 2.2 + }, + { + "shape": "conical", + "topDiameter": 6.8, + "bottomDiameter": 6.4, + "topHeight": 2.75, + "bottomHeight": 2.45 + }, + { + "shape": "conical", + "topDiameter": 7.2, + "bottomDiameter": 6.8, + "topHeight": 3.14, + "bottomHeight": 2.75 + }, + { + "shape": "conical", + "topDiameter": 7.6, + "bottomDiameter": 7.2, + "topHeight": 3.67, + "bottomHeight": 3.14 + }, + { + "shape": "conical", + "topDiameter": 7.7, + "bottomDiameter": 7.6, + "topHeight": 3.93, + "bottomHeight": 3.67 + }, + { + "shape": "conical", + "topDiameter": 8.0, + "bottomDiameter": 7.7, + "topHeight": 4.29, + "bottomHeight": 3.93 + }, + { + "shape": "conical", + "topDiameter": 8.2, + "bottomDiameter": 8.0, + "topHeight": 4.53, + "bottomHeight": 4.29 + }, + { + "shape": "conical", + "topDiameter": 8.4, + "bottomDiameter": 8.2, + "topHeight": 5.03, + "bottomHeight": 4.53 + }, + { + "shape": "conical", + "topDiameter": 8.5, + "bottomDiameter": 8.4, + "topHeight": 5.15, + "bottomHeight": 5.03 + }, + { + "shape": "conical", + "topDiameter": 8.6, + "bottomDiameter": 8.5, + "topHeight": 5.43, + "bottomHeight": 5.15 + }, + { + "shape": "conical", + "topDiameter": 8.78, + "bottomDiameter": 8.6, + "topHeight": 6.97, + "bottomHeight": 5.43 + }, + { + "shape": "conical", + "topDiameter": 8.9, + "bottomDiameter": 8.78, + "topHeight": 10.17, + "bottomHeight": 6.97 + }, + { + "shape": "conical", + "topDiameter": 9.0, + "bottomDiameter": 8.9, + "topHeight": 13.32, + "bottomHeight": 10.17 + }, + { + "shape": "conical", + "topDiameter": 9.1, + "bottomDiameter": 9.0, + "topHeight": 25.26, + "bottomHeight": 13.32 + }, + { + "shape": "conical", + "topDiameter": 9.2, + "bottomDiameter": 9.1, + "topHeight": 32.5, + "bottomHeight": 25.26 + }, + { + "shape": "conical", + "topDiameter": 9.6, + "bottomDiameter": 9.2, + "topHeight": 33.96, + "bottomHeight": 32.5 + }, + { + "shape": "conical", + "topDiameter": 10.0, + "bottomDiameter": 9.6, + "topHeight": 39.02, + "bottomHeight": 33.96 + } + ] } } } diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json index 660331eedfd..0914789708c 100644 --- a/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_generic_2ml_screwcap/2.json @@ -323,7 +323,29 @@ }, "innerLabwareGeometry": { "conicalWell": { - "sections": [] + "sections": [ + { + "shape": "conical", + "topDiameter": 6.5, + "bottomDiameter": 1.21, + "topHeight": 2.08, + "bottomHeight": 0.0 + }, + { + "shape": "conical", + "topDiameter": 8.14, + "bottomDiameter": 6.5, + "topHeight": 3.04, + "bottomHeight": 2.08 + }, + { + "shape": "conical", + "topDiameter": 8.5, + "bottomDiameter": 8.14, + "topHeight": 42.0, + "bottomHeight": 3.04 + } + ] } } } diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json index 7d7a193d55d..9544e5cc9c2 100644 --- a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json @@ -27,9 +27,9 @@ }, "wells": { "A1": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 18.21, "y": 75.43, @@ -37,9 +37,9 @@ "geometryDefinitionId": "conicalWell" }, "B1": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 18.21, "y": 56.15, @@ -47,9 +47,9 @@ "geometryDefinitionId": "conicalWell" }, "C1": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 18.21, "y": 36.87, @@ -57,9 +57,9 @@ "geometryDefinitionId": "conicalWell" }, "D1": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 18.21, "y": 17.59, @@ -67,9 +67,9 @@ "geometryDefinitionId": "conicalWell" }, "A2": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 38.1, "y": 75.43, @@ -77,9 +77,9 @@ "geometryDefinitionId": "conicalWell" }, "B2": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 38.1, "y": 56.15, @@ -87,9 +87,9 @@ "geometryDefinitionId": "conicalWell" }, "C2": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 38.1, "y": 36.87, @@ -97,9 +97,9 @@ "geometryDefinitionId": "conicalWell" }, "D2": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 38.1, "y": 17.59, @@ -107,9 +107,9 @@ "geometryDefinitionId": "conicalWell" }, "A3": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 57.99, "y": 75.43, @@ -117,9 +117,9 @@ "geometryDefinitionId": "conicalWell" }, "B3": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 57.99, "y": 56.15, @@ -127,9 +127,9 @@ "geometryDefinitionId": "conicalWell" }, "C3": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 57.99, "y": 36.87, @@ -137,9 +137,9 @@ "geometryDefinitionId": "conicalWell" }, "D3": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 57.99, "y": 17.59, @@ -147,9 +147,9 @@ "geometryDefinitionId": "conicalWell" }, "A4": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 77.88, "y": 75.43, @@ -157,9 +157,9 @@ "geometryDefinitionId": "conicalWell" }, "B4": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 77.88, "y": 56.15, @@ -167,9 +167,9 @@ "geometryDefinitionId": "conicalWell" }, "C4": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 77.88, "y": 36.87, @@ -177,9 +177,9 @@ "geometryDefinitionId": "conicalWell" }, "D4": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 77.88, "y": 17.59, @@ -187,9 +187,9 @@ "geometryDefinitionId": "conicalWell" }, "A5": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 97.77, "y": 75.43, @@ -197,9 +197,9 @@ "geometryDefinitionId": "conicalWell" }, "B5": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 97.77, "y": 56.15, @@ -207,9 +207,9 @@ "geometryDefinitionId": "conicalWell" }, "C5": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 97.77, "y": 36.87, @@ -217,9 +217,9 @@ "geometryDefinitionId": "conicalWell" }, "D5": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 97.77, "y": 17.59, @@ -227,9 +227,9 @@ "geometryDefinitionId": "conicalWell" }, "A6": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 117.66, "y": 75.43, @@ -237,9 +237,9 @@ "geometryDefinitionId": "conicalWell" }, "B6": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 117.66, "y": 56.15, @@ -247,9 +247,9 @@ "geometryDefinitionId": "conicalWell" }, "C6": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 117.66, "y": 36.87, @@ -257,9 +257,9 @@ "geometryDefinitionId": "conicalWell" }, "D6": { - "depth": 43.9, + "depth": 42.6, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 1500, "x": 117.66, "y": 17.59, diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json index c1025a18ad1..af1f609a7f4 100644 --- a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json @@ -29,7 +29,7 @@ "A1": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 18.21, "y": 75.43, @@ -39,7 +39,7 @@ "B1": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 18.21, "y": 56.15, @@ -49,7 +49,7 @@ "C1": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 18.21, "y": 36.87, @@ -59,7 +59,7 @@ "D1": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 18.21, "y": 17.59, @@ -69,7 +69,7 @@ "A2": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 38.1, "y": 75.43, @@ -79,7 +79,7 @@ "B2": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 38.1, "y": 56.15, @@ -89,7 +89,7 @@ "C2": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 38.1, "y": 36.87, @@ -99,7 +99,7 @@ "D2": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 38.1, "y": 17.59, @@ -109,7 +109,7 @@ "A3": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 57.99, "y": 75.43, @@ -119,7 +119,7 @@ "B3": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 57.99, "y": 56.15, @@ -129,7 +129,7 @@ "C3": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 57.99, "y": 36.87, @@ -139,7 +139,7 @@ "D3": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 57.99, "y": 17.59, @@ -149,7 +149,7 @@ "A4": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 77.88, "y": 75.43, @@ -159,7 +159,7 @@ "B4": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 77.88, "y": 56.15, @@ -169,7 +169,7 @@ "C4": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 77.88, "y": 36.87, @@ -179,7 +179,7 @@ "D4": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 77.88, "y": 17.59, @@ -189,7 +189,7 @@ "A5": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 97.77, "y": 75.43, @@ -199,7 +199,7 @@ "B5": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 97.77, "y": 56.15, @@ -209,7 +209,7 @@ "C5": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 97.77, "y": 36.87, @@ -219,7 +219,7 @@ "D5": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 97.77, "y": 17.59, @@ -229,7 +229,7 @@ "A6": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 117.66, "y": 75.43, @@ -239,7 +239,7 @@ "B6": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 117.66, "y": 56.15, @@ -249,7 +249,7 @@ "C6": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 117.66, "y": 36.87, @@ -259,7 +259,7 @@ "D6": { "depth": 37.9, "shape": "circular", - "diameter": 10.2, + "diameter": 9.9, "totalLiquidVolume": 1500, "x": 117.66, "y": 17.59, @@ -328,23 +328,30 @@ "sections": [ { "shape": "spherical", - "radiusOfCurvature": 2.72, - "topHeight": 1.57, + "radiusOfCurvature": 1.87, + "topHeight": 1.56, "bottomHeight": 0.0 }, { "shape": "conical", - "topDiameter": 8.9, + "topDiameter": 8.98, "bottomDiameter": 3.69, - "topHeight": 17.7, - "bottomHeight": 1.57 + "topHeight": 17.4, + "bottomHeight": 1.56 }, { "shape": "conical", "topDiameter": 9.28, - "bottomDiameter": 8.9, + "bottomDiameter": 8.98, + "topHeight": 35.4, + "bottomHeight": 17.4 + }, + { + "shape": "conical", + "topDiameter": 9.9, + "bottomDiameter": 9.28, "topHeight": 37.9, - "bottomHeight": 17.7 + "bottomHeight": 35.4 } ] } diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json index 7b1ab858fe6..a66604fbb00 100644 --- a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_screwcap/2.json @@ -27,9 +27,9 @@ }, "wells": { "A1": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 18.21, "y": 75.43, @@ -37,9 +37,9 @@ "geometryDefinitionId": "conicalWell" }, "B1": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 18.21, "y": 56.15, @@ -47,9 +47,9 @@ "geometryDefinitionId": "conicalWell" }, "C1": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 18.21, "y": 36.87, @@ -57,9 +57,9 @@ "geometryDefinitionId": "conicalWell" }, "D1": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 18.21, "y": 17.59, @@ -67,9 +67,9 @@ "geometryDefinitionId": "conicalWell" }, "A2": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 38.1, "y": 75.43, @@ -77,9 +77,9 @@ "geometryDefinitionId": "conicalWell" }, "B2": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 38.1, "y": 56.15, @@ -87,9 +87,9 @@ "geometryDefinitionId": "conicalWell" }, "C2": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 38.1, "y": 36.87, @@ -97,9 +97,9 @@ "geometryDefinitionId": "conicalWell" }, "D2": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 38.1, "y": 17.59, @@ -107,9 +107,9 @@ "geometryDefinitionId": "conicalWell" }, "A3": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 57.99, "y": 75.43, @@ -117,9 +117,9 @@ "geometryDefinitionId": "conicalWell" }, "B3": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 57.99, "y": 56.15, @@ -127,9 +127,9 @@ "geometryDefinitionId": "conicalWell" }, "C3": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 57.99, "y": 36.87, @@ -137,9 +137,9 @@ "geometryDefinitionId": "conicalWell" }, "D3": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 57.99, "y": 17.59, @@ -147,9 +147,9 @@ "geometryDefinitionId": "conicalWell" }, "A4": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 77.88, "y": 75.43, @@ -157,9 +157,9 @@ "geometryDefinitionId": "conicalWell" }, "B4": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 77.88, "y": 56.15, @@ -167,9 +167,9 @@ "geometryDefinitionId": "conicalWell" }, "C4": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 77.88, "y": 36.87, @@ -177,9 +177,9 @@ "geometryDefinitionId": "conicalWell" }, "D4": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 77.88, "y": 17.59, @@ -187,9 +187,9 @@ "geometryDefinitionId": "conicalWell" }, "A5": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 97.77, "y": 75.43, @@ -197,9 +197,9 @@ "geometryDefinitionId": "conicalWell" }, "B5": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 97.77, "y": 56.15, @@ -207,9 +207,9 @@ "geometryDefinitionId": "conicalWell" }, "C5": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 97.77, "y": 36.87, @@ -217,9 +217,9 @@ "geometryDefinitionId": "conicalWell" }, "D5": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 97.77, "y": 17.59, @@ -227,9 +227,9 @@ "geometryDefinitionId": "conicalWell" }, "A6": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 117.66, "y": 75.43, @@ -237,9 +237,9 @@ "geometryDefinitionId": "conicalWell" }, "B6": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 117.66, "y": 56.15, @@ -247,9 +247,9 @@ "geometryDefinitionId": "conicalWell" }, "C6": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 117.66, "y": 36.87, @@ -257,9 +257,9 @@ "geometryDefinitionId": "conicalWell" }, "D6": { - "depth": 44.05, + "depth": 43.4, "shape": "circular", - "diameter": 8.69, + "diameter": 8.55, "totalLiquidVolume": 2000, "x": 117.66, "y": 17.59, diff --git a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json index 7ae81c69e0c..3918d0c0c42 100644 --- a/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json +++ b/shared-data/labware/definitions/3/opentrons_24_tuberack_nest_2ml_snapcap/2.json @@ -29,7 +29,7 @@ "A1": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 18.21, "y": 75.43, @@ -39,7 +39,7 @@ "B1": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 18.21, "y": 56.15, @@ -49,7 +49,7 @@ "C1": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 18.21, "y": 36.87, @@ -59,7 +59,7 @@ "D1": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 18.21, "y": 17.59, @@ -69,7 +69,7 @@ "A2": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 38.1, "y": 75.43, @@ -79,7 +79,7 @@ "B2": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 38.1, "y": 56.15, @@ -89,7 +89,7 @@ "C2": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 38.1, "y": 36.87, @@ -99,7 +99,7 @@ "D2": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 38.1, "y": 17.59, @@ -109,7 +109,7 @@ "A3": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 57.99, "y": 75.43, @@ -119,7 +119,7 @@ "B3": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 57.99, "y": 56.15, @@ -129,7 +129,7 @@ "C3": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 57.99, "y": 36.87, @@ -139,7 +139,7 @@ "D3": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 57.99, "y": 17.59, @@ -149,7 +149,7 @@ "A4": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 77.88, "y": 75.43, @@ -159,7 +159,7 @@ "B4": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 77.88, "y": 56.15, @@ -169,7 +169,7 @@ "C4": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 77.88, "y": 36.87, @@ -179,7 +179,7 @@ "D4": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 77.88, "y": 17.59, @@ -189,7 +189,7 @@ "A5": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 97.77, "y": 75.43, @@ -199,7 +199,7 @@ "B5": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 97.77, "y": 56.15, @@ -209,7 +209,7 @@ "C5": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 97.77, "y": 36.87, @@ -219,7 +219,7 @@ "D5": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 97.77, "y": 17.59, @@ -229,7 +229,7 @@ "A6": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 117.66, "y": 75.43, @@ -239,7 +239,7 @@ "B6": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 117.66, "y": 56.15, @@ -249,7 +249,7 @@ "C6": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 117.66, "y": 36.87, @@ -259,7 +259,7 @@ "D6": { "depth": 39.28, "shape": "circular", - "diameter": 10.18, + "diameter": 9.28, "totalLiquidVolume": 2000, "x": 117.66, "y": 17.59, @@ -362,11 +362,18 @@ }, { "shape": "conical", - "topDiameter": 8.9, + "topDiameter": 8.74, "bottomDiameter": 8.0, - "topHeight": 15.04, + "topHeight": 6.26, "bottomHeight": 3.98 }, + { + "shape": "conical", + "topDiameter": 8.9, + "bottomDiameter": 8.74, + "topHeight": 15.04, + "bottomHeight": 6.26 + }, { "shape": "conical", "topDiameter": 9.28, diff --git a/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json b/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json index d17d27c041a..bbc013e5d09 100644 --- a/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json +++ b/shared-data/labware/definitions/3/usascientific_12_reservoir_22ml/2.json @@ -37,7 +37,7 @@ "wells": { "A1": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -48,7 +48,7 @@ }, "A2": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -59,7 +59,7 @@ }, "A3": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -70,7 +70,7 @@ }, "A4": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -81,7 +81,7 @@ }, "A5": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -92,7 +92,7 @@ }, "A6": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -103,7 +103,7 @@ }, "A7": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -114,7 +114,7 @@ }, "A8": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -125,7 +125,7 @@ }, "A9": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -136,7 +136,7 @@ }, "A10": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -147,7 +147,7 @@ }, "A11": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -158,7 +158,7 @@ }, "A12": { "shape": "rectangular", - "depth": 42.16, + "depth": 41.75, "xDimension": 8.33, "yDimension": 71.88, "totalLiquidVolume": 22000, @@ -204,24 +204,32 @@ "innerLabwareGeometry": { "cuboidalWell": { "sections": [ + { + "shape": "spherical", + "radiusOfCurvature": 1.5362, + "topHeight": 0.25, + "bottomHeight": 0.0, + "yCount": 8 + }, { "shape": "squaredcone", "bottomCrossSection": "circular", - "circleDiameter": 2.5, - "rectangleXDimension": 7.98, - "rectangleYDimension": 70.98, - "topHeight": 4.05, - "bottomHeight": 0.0, + "circleDiameter": 1.68, + "rectangleXDimension": 7.9, + "rectangleYDimension": 7.9, + "topHeight": 4.0, + "bottomHeight": 0.25, + "xCount": 1, "yCount": 8 }, { "shape": "cuboidal", "topXDimension": 8.34, "topYDimension": 71.85, - "bottomXDimension": 7.98, - "bottomYDimension": 70.98, + "bottomXDimension": 7.9, + "bottomYDimension": 71.75, "topHeight": 41.75, - "bottomHeight": 4.05 + "bottomHeight": 4.0 } ] } diff --git a/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json b/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json index d9741e18c57..d7011a4920e 100644 --- a/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json +++ b/shared-data/labware/definitions/3/usascientific_96_wellplate_2.4ml_deep/2.json @@ -1211,7 +1211,26 @@ }, "innerLabwareGeometry": { "cuboidalWell": { - "sections": [] + "sections": [ + { + "shape": "cuboidal", + "topXDimension": 7.52, + "topYDimension": 7.52, + "bottomXDimension": 0.25, + "bottomYDimension": 0.25, + "topHeight": 2.63, + "bottomHeight": 0.0 + }, + { + "shape": "cuboidal", + "topXDimension": 8.2, + "topYDimension": 8.2, + "bottomXDimension": 7.52, + "bottomYDimension": 7.52, + "topHeight": 41.3, + "bottomHeight": 2.63 + } + ] } } } diff --git a/shared-data/module/definitions/3/flexStackerModuleV1.json b/shared-data/module/definitions/3/flexStackerModuleV1.json new file mode 100644 index 00000000000..fa6f7db3494 --- /dev/null +++ b/shared-data/module/definitions/3/flexStackerModuleV1.json @@ -0,0 +1,524 @@ +{ + "$otSharedSchema": "module/schemas/3", + "moduleType": "flexStackerModuleType", + "model": "flexStackerModuleV1", + "labwareOffset": { + "x": -0.125, + "y": 1.125, + "z": 68.275 + }, + "dimensions": { + "bareOverallHeight": 82, + "overLabwareHeight": 0, + "xDimension": 156.25, + "yDimension": 91.75, + "footprintXDimension": 128, + "footprintYDimension": 86, + "labwareInterfaceXDimension": 128, + "labwareInterfaceYDimension": 86 + }, + "cornerOffsetFromSlot": { + "x": -18, + "y": -1.8, + "z": 0 + }, + "calibrationPoint": { + "x": 12.0, + "y": 8.75, + "z": 68.275 + }, + "gripperOffsets": { + "default": { + "pickUpOffset": { + "x": 0, + "y": 0, + "z": 0 + }, + "dropOffset": { + "x": 0, + "y": 0, + "z": 1.0 + } + } + }, + "displayName": "Flex Stacker Module GEN1", + "quirks": [], + "slotTransforms": { + "ot2_standard": { + "3": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "6": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "9": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + } + }, + "ot2_short_trash": { + "3": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "6": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + }, + "9": { + "labwareOffset": [ + [-1, 0, 0, 0], + [0, -1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ] + } + }, + "ot3_standard": { + "D1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "C1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "B1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "A1": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "D3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "C3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "B3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + }, + "A3": { + "labwareOffset": [ + [1, 0, 0, 0.125], + [0, 1, 0, -1.125], + [0, 0, 1, -49.325], + [0, 0, 0, 1] + ] + } + } + }, + "compatibleWith": [], + "incompatibleWithDecks": [], + "twoDimensionalRendering": { + "name": "svg", + "type": "element", + "value": "", + "attributes": { + "version": "1.1", + "id": "flexstacker", + "xmlns": "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + "x": "0px", + "y": "0px", + "viewBox": "0 0 148.6 91.8", + "style": "enable-background:new 0 0 148.6 91.8;", + "xml:space": "preserve" + }, + "children": [ + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "moduleBaseFill" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#E6E6E6;", + "d": "M24.4,88.6c0.9,0,1.1-0.7,1.1-1.4v-3.4c0-0.2-0.2-0.5-0.5-0.5h-5.2c-0.2,0-0.5-0.2-0.5-0.5v-4.5\n\t\tc0-0.2-0.2-0.5-0.5-0.5h-5.7c-1,0-1.9-0.8-1.9-1.9V15.6c0-1,0.8-1.9,1.9-1.9h5.7c0.2,0,0.5-0.2,0.5-0.5V8.8c0-0.2,0.2-0.5,0.5-0.5\n\t\tH25c0.2,0,0.5-0.2,0.5-0.5V4.5c0-0.8-0.4-1.4-1.1-1.4s-23.9,0-23.9,0v85.5C0.5,88.6,23.5,88.6,24.4,88.6z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "moduleOutline" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M147.9,1.1v89.6H1.1V1.1H147.9 M148.9,0H0v91.7h148.9V0L148.9,0z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "moduleBaseInnerWalls" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M148.4,89.1H146v-1.4H26c-0.2,1.2-1.2,1.4-1.6,1.4H0.5v-1h23.8c0.3,0,0.7-0.1,0.7-0.9v-0.5h122v1.4h1.4V89.1z" + }, + "children": [] + }, + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M147,5H25V4.5c0-0.8-0.3-0.9-0.7-0.9H0.5v-1h23.8c0.4,0,1.4,0.1,1.6,1.4h120V2.6h2.4v1H147V5z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "statusFill" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#FFFFFF;", + "d": "M4.8,40.3c0-1.1,0.9-2,2-2s2,0.9,2,2v11.2c0,1.1-0.9,2-2,2s-2-0.9-2-2V40.3z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "statusOutline" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M6.8,53.7H6.7c-1.2,0-2.2-1-2.2-2.2V40.2c0-1.2,1-2.2,2.2-2.2h0.1C8,38,9,39,9,40.2v11.3C9,52.7,8,53.7,6.8,53.7z\n\t\t M6.7,38.5c-0.9,0-1.7,0.8-1.7,1.7v11.3c0,1,0.8,1.7,1.7,1.7h0.1c1,0,1.7-0.8,1.7-1.7V40.2c0-1-0.8-1.7-1.7-1.7H6.7z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "moduleMidFill" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#E6E6E6;", + "d": "M12.1,91.2L8.6,86c-0.1-0.1-0.1-0.2-0.1-0.3V6c0-0.1,0-0.2,0.1-0.3l3.5-5.2h134.2l3.5,5.2\n\t\tc0.1,0.1,0.1,0.2,0.1,0.3v79.7c0,0.1,0,0.2-0.1,0.3l-3.5,5.2H12.1" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "moduleMidOutline" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M146,1.1l3.3,5v79.7l-3.3,5H12.3l-3.3-5V6l3.3-4.9L146,1.1 M146.5,0H11.8L8.2,5.4C8.1,5.6,8,5.8,8,6v79.7\n\t\tc0,0.2,0.1,0.4,0.2,0.6l3.6,5.4h134.8l3.6-5.4c0.1-0.2,0.2-0.4,0.2-0.6V6c0-0.2-0.1-0.4-0.2-0.6L146.5,0L146.5,0z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "plateBottomFill" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#FFFFFF;", + "d": "M49.1,6.5c-0.9,0-1.7,0.6-1.9,1.6c-0.4,1.7-1.9,2.9-3.7,2.9s-3.3-1.2-3.7-2.9\n\t\tc-0.2-1-1.1-1.6-1.9-1.6H24.4c-1.6,0-2.9,1.3-2.9,2.9v72.9c0,1.6,1.3,2.9,2.9,2.9h13.4c0.8,0,1.6-0.6,1.9-1.6\n\t\tc0.4-1.7,1.9-2.9,3.7-2.9s3.3,1.2,3.7,2.9c0.2,1,1,1.6,1.9,1.6h60.2c0.9,0,1.7-0.6,1.9-1.6c0.4-1.7,1.9-2.9,3.7-2.9\n\t\tc1.8,0,3.3,1.2,3.7,2.9c0.2,1,1.1,1.6,1.9,1.6H134c1.6,0,2.9-1.3,2.9-2.9V9.4c0-1.6-1.3-2.9-2.9-2.9h-13.4c-0.8,0-1.6,0.6-1.9,1.6\n\t\tc-0.4,1.7-1.9,2.9-3.7,2.9c-1.8,0-3.3-1.2-3.7-2.9c-0.2-1-1-1.6-1.9-1.6L49.1,6.5L49.1,6.5z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "plateBottomOutline" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M134,85.5h-13.4c-1,0-1.8-0.7-2.1-1.7c-0.4-1.6-1.8-2.7-3.5-2.7s-3.1,1.1-3.5,2.7c-0.3,1.1-1.1,1.7-2.1,1.7H49.1\n\t\tc-1,0-1.9-0.7-2.1-1.7c-0.4-1.6-1.8-2.7-3.5-2.7s-3.1,1.1-3.5,2.7c-0.3,1-1.1,1.7-2.1,1.7H24.4c-1.8,0-3.2-1.4-3.2-3.2V9.4\n\t\tc0-1.8,1.4-3.2,3.2-3.2h13.4c1,0,1.8,0.7,2.1,1.7c0.4,1.6,1.8,2.7,3.5,2.7s3.1-1.1,3.5-2.7c0.3-1,1-1.6,1.9-1.7l0,0h60.4\n\t\tc1,0,1.9,0.7,2.1,1.7c0.4,1.6,1.8,2.7,3.5,2.7s3.1-1.1,3.5-2.7c0.3-1,1.1-1.7,2.1-1.7H134c1.8,0,3.2,1.4,3.2,3.2v72.9\n\t\tC137.1,84.1,135.7,85.5,134,85.5z M114.9,80.6c1.9,0,3.5,1.3,4,3.1c0.2,0.8,0.9,1.4,1.6,1.4H134c1.5,0,2.7-1.2,2.7-2.7v-73\n\t\tc0-1.5-1.2-2.7-2.7-2.7h-13.4c-0.7,0-1.4,0.6-1.6,1.4c-0.5,1.8-2.1,3.1-4,3.1s-3.5-1.3-4-3.1c-0.2-0.8-0.9-1.4-1.7-1.4h-60h-0.2\n\t\tc-0.8,0-1.4,0.5-1.7,1.4c-0.5,1.8-2.1,3.1-4,3.1s-3.5-1.3-4-3.1c-0.2-0.8-0.9-1.4-1.6-1.4H24.4c-1.5,0-2.7,1.2-2.7,2.7v72.9\n\t\tc0,1.5,1.2,2.7,2.7,2.7h13.4c0.7,0,1.4-0.6,1.6-1.4c0.5-1.8,2.1-3.1,4-3.1s3.5,1.3,4,3.1c0.2,0.8,0.9,1.4,1.7,1.4h60.2\n\t\tc0.8,0,1.4-0.5,1.7-1.4C111.4,81.8,113,80.6,114.9,80.6z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "plateHolder" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M114.9,3c-2.3,0-4.1,1.8-4.1,4.1s1.8,4.1,4.1,4.1s4.1-1.8,4.1-4.1S117.2,3,114.9,3z M111.3,7.1c0-0.4,0.1-0.8,0.2-1.1h6.8\n\t\tc0.1,0.4,0.2,0.7,0.2,1.1c0,0.2,0,0.4-0.1,0.6h-7.1C111.4,7.5,111.3,7.3,111.3,7.1z M114.9,3.5c1.4,0,2.6,0.8,3.2,2h-6.4\n\t\tC112.3,4.3,113.5,3.5,114.9,3.5z M114.9,10.7c-1.6,0-2.9-1.1-3.4-2.5h6.8C117.9,9.6,116.5,10.7,114.9,10.7z" + }, + "children": [] + }, + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M43.4,3c-2.3,0-4.1,1.8-4.1,4.1s1.8,4.1,4.1,4.1s4.1-1.8,4.1-4.1S45.7,3,43.4,3z M39.8,7.1c0-0.4,0.1-0.8,0.2-1.1h6.8\n\t\tC47,6.3,47,6.7,47,7.1c0,0.2,0,0.4-0.1,0.6h-7.1C39.9,7.5,39.8,7.3,39.8,7.1z M43.4,3.5c1.4,0,2.6,0.8,3.2,2h-6.4\n\t\tC40.9,4.3,42,3.5,43.4,3.5z M43.4,10.7c-1.6,0-2.9-1.1-3.4-2.5h6.8C46.4,9.6,45,10.7,43.4,10.7z" + }, + "children": [] + }, + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M43.4,80.5c-2.3,0-4.1,1.8-4.1,4.1s1.8,4.1,4.1,4.1s4.1-1.8,4.1-4.1S45.7,80.5,43.4,80.5z M43.4,81c1.6,0,3,1.1,3.4,2.5H40\n\t\tC40.5,82.1,41.8,81,43.4,81z M47,84.6c0,0.4-0.1,0.8-0.2,1.2H40c-0.1-0.4-0.2-0.8-0.2-1.2c0-0.2,0-0.4,0.1-0.6H47\n\t\tC47,84.2,47,84.4,47,84.6z M43.4,88.2c-1.4,0-2.6-0.8-3.2-1.9h6.3C46,87.4,44.8,88.2,43.4,88.2z" + }, + "children": [] + }, + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M114.9,80.5c-2.3,0-4.1,1.8-4.1,4.1s1.8,4.1,4.1,4.1s4.1-1.8,4.1-4.1S117.2,80.5,114.9,80.5z M114.9,81\n\t\tc1.6,0,3,1.1,3.4,2.5h-6.8C112,82.1,113.3,81,114.9,81z M118.5,84.6c0,0.4-0.1,0.8-0.2,1.2h-6.8c-0.1-0.4-0.2-0.8-0.2-1.2\n\t\tc0-0.2,0-0.4,0.1-0.6h7.1C118.5,84.2,118.5,84.4,118.5,84.6z M114.9,88.2c-1.4,0-2.6-0.8-3.2-1.9h6.3\n\t\tC117.5,87.4,116.3,88.2,114.9,88.2z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "adapterScrew" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#707075; opacity: 50%;", + "d": "M79.2,50.5c-2.6,0-4.7-2.1-4.7-4.7s2.1-4.7,4.7-4.7s4.7,2.1,4.7,4.7S81.7,50.5,79.2,50.5z M79.2,41.6\n\t\tc-2.3,0-4.2,1.9-4.2,4.2s1.9,4.2,4.2,4.2c2.3,0,4.2-1.9,4.2-4.2C83.4,43.5,81.5,41.6,79.2,41.6z" + }, + "children": [] + }, + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#707075; opacity: 50%;", + "d": "M79.2,49c-1.8,0-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2s3.2,1.4,3.2,3.2C82.3,47.6,80.9,49,79.2,49z M79.2,43.2\n\t\tc-1.5,0-2.7,1.2-2.7,2.7s1.2,2.7,2.7,2.7s2.7-1.2,2.7-2.7C81.8,44.4,80.6,43.2,79.2,43.2z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "leftLatchFill" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#E6E6E6;", + "d": "M14.1,6.6c0-0.4,0.1-0.8,0.4-1.2L18.8,0h-7L8.2,5.4C8.1,5.6,8,5.8,8,6v79.7c0,0.2,0.1,0.4,0.2,0.6\n\t\tl3.6,5.4h7l-4.3-5.4c-0.2-0.4-0.4-0.7-0.4-1.2L14.1,6.6L14.1,6.6z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "leftLatchOutline" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M16.6,1.1l-2.9,3.7c-0.4,0.5-0.6,1.2-0.6,1.8v78.5c0,0.7,0.2,1.3,0.6,1.8l2.9,3.7h-4.3l-3.3-5V6l3.3-4.9L16.6,1.1 M18.8,0\n\t\th-7L8.2,5.4C8.1,5.6,8,5.8,8,6v79.7c0,0.2,0.1,0.4,0.2,0.6l3.6,5.4h7l-4.3-5.4c-0.2-0.4-0.4-0.7-0.4-1.2V6.6c0-0.4,0.1-0.8,0.4-1.2\n\t\tL18.8,0L18.8,0z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "rightLatchFill" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "style": "fill:#E6E6E6;", + "d": "M145.3,6.6c0-0.4-0.1-0.8-0.4-1.2L140.6,0h7l3.6,5.4c0.1,0.2,0.2,0.4,0.2,0.6v79.7\n\t\tc0,0.2-0.1,0.4-0.2,0.6l-3.6,5.4h-7l4.3-5.4c0.2-0.4,0.4-0.7,0.4-1.2V6.6z" + }, + "children": [] + } + ] + }, + { + "name": "g", + "type": "element", + "value": "", + "attributes": { + "id": "rightLatchOutline" + }, + "children": [ + { + "name": "path", + "type": "element", + "value": "", + "attributes": { + "d": "M147.1,1.1l3.3,5v79.7l-3.3,5h-4.3l2.9-3.7c0.4-0.5,0.6-1.2,0.6-1.8V6.6c0-0.7-0.2-1.3-0.6-1.8l-2.9-3.7L147.1,1.1\n\t\t M147.6,0h-7l4.3,5.4c0.2,0.4,0.4,0.7,0.4,1.2v78.5c0,0.4-0.1,0.8-0.4,1.2l-4.3,5.4h7l3.6-5.4c0.1-0.2,0.2-0.4,0.2-0.6V5.9\n\t\tc0-0.2-0.1-0.4-0.2-0.6L147.6,0L147.6,0z" + }, + "children": [] + } + ] + } + ] + } +} diff --git a/shared-data/module/schemas/3.json b/shared-data/module/schemas/3.json index 9bc24d9adef..09504bbe494 100644 --- a/shared-data/module/schemas/3.json +++ b/shared-data/module/schemas/3.json @@ -83,13 +83,14 @@ "thermocyclerModuleType", "heaterShakerModuleType", "magneticBlockType", - "absorbanceReaderType" + "absorbanceReaderType", + "flexStackerModuleType" ], "type": "string" }, "model": { "type": "string", - "pattern": "^(temperatureModule|magneticModule|thermocyclerModule|heaterShakerModule|magneticBlock|absorbanceReader)V[0-9]+$" + "pattern": "^(temperatureModule|magneticModule|thermocyclerModule|heaterShakerModule|magneticBlock|absorbanceReader|flexStackerModule)V[0-9]+$" }, "labwareOffset": { "$ref": "#/definitions/coordinates" }, "dimensions": { diff --git a/shared-data/python/opentrons_shared_data/labware/labware_definition.py b/shared-data/python/opentrons_shared_data/labware/labware_definition.py index c25f37962c1..57f86016de5 100644 --- a/shared-data/python/opentrons_shared_data/labware/labware_definition.py +++ b/shared-data/python/opentrons_shared_data/labware/labware_definition.py @@ -299,6 +299,30 @@ class ConicalFrustum(BaseModel): description="Number of instances of this shape in the stackup, used for wells that have multiple sub-wells", ) + @cached_property + def height_to_volume_table(self) -> Dict[float, float]: + """Return a lookup table of heights to volumes.""" + # the accuracy of this method is approximately +- 10*dx so for dx of 0.001 we have a +- 0.01 ul + dx = 0.005 + total_height = self.topHeight - self.bottomHeight + y = 0.0 + table: Dict[float, float] = {} + # fill in the table + a = self.topDiameter / 2 + b = self.bottomDiameter / 2 + while y < total_height: + r_y = (y / total_height) * (a - b) + b + table[y] = (pi * y / 3) * (b**2 + b * r_y + r_y**2) + y = y + dx + + # we always want to include the volume at the max height + table[total_height] = (pi * total_height / 3) * (b**2 + a * b + a**2) + return table + + @cached_property + def volume_to_height_table(self) -> Dict[float, float]: + return dict((v, k) for k, v in self.height_to_volume_table.items()) + @cached_property def count(self) -> int: return self.xCount * self.yCount diff --git a/shared-data/python/opentrons_shared_data/module/types.py b/shared-data/python/opentrons_shared_data/module/types.py index ab9465b04f6..64907930396 100644 --- a/shared-data/python/opentrons_shared_data/module/types.py +++ b/shared-data/python/opentrons_shared_data/module/types.py @@ -19,6 +19,7 @@ HeaterShakerModuleType = Literal["heaterShakerModuleType"] MagneticBlockType = Literal["magneticBlockType"] AbsorbanceReaderType = Literal["absorbanceReaderType"] +FlexStackerModuleType = Literal["flexStackerModuleType"] ModuleType = Union[ MagneticModuleType, @@ -27,6 +28,7 @@ HeaterShakerModuleType, MagneticBlockType, AbsorbanceReaderType, + FlexStackerModuleType, ] MagneticModuleModel = Literal["magneticModuleV1", "magneticModuleV2"] @@ -35,6 +37,7 @@ HeaterShakerModuleModel = Literal["heaterShakerModuleV1"] MagneticBlockModel = Literal["magneticBlockV1"] AbsorbanceReaderModel = Literal["absorbanceReaderV1"] +FlexStackerModuleModel = Literal["flexStackerModuleV1"] ModuleModel = Union[ MagneticModuleModel, @@ -43,6 +46,7 @@ HeaterShakerModuleModel, MagneticBlockModel, AbsorbanceReaderModel, + FlexStackerModuleModel, ] ModuleSlotTransform = TypedDict( diff --git a/step-generation/src/commandCreators/compound/distribute.ts b/step-generation/src/commandCreators/compound/distribute.ts index 9c4c2cc865e..ceba8f3e89b 100644 --- a/step-generation/src/commandCreators/compound/distribute.ts +++ b/step-generation/src/commandCreators/compound/distribute.ts @@ -483,14 +483,20 @@ export const distribute: CommandCreator = ( }), ] : [] - + const aspirateDisposalVolumeOnce = chunkIndex === 0 ? disposalVolume : 0 return [ ...tipCommands, ...configureForVolumeCommand, ...mixBeforeAspirateCommands, curryCommandCreator(aspirate, { pipette, - volume: args.volume * destWellChunk.length + disposalVolume, + volume: + args.volume * destWellChunk.length + + // only add disposal volume if its the 1st chunk and changing tip once + // and not blowing out after dispenses + (args.changeTip === 'once' && blowoutLocation == null + ? aspirateDisposalVolumeOnce + : disposalVolume), labware: args.sourceLabware, well: args.sourceWell, flowRate: aspirateFlowRateUlSec, diff --git a/step-generation/src/commandCreators/compound/transfer.ts b/step-generation/src/commandCreators/compound/transfer.ts index e892dc94b3d..18f99b7e036 100644 --- a/step-generation/src/commandCreators/compound/transfer.ts +++ b/step-generation/src/commandCreators/compound/transfer.ts @@ -263,7 +263,7 @@ export const transfer: CommandCreator = ( ? [ curryCommandCreator(configureForVolume, { pipetteId: args.pipette, - volume: chunksPerSubTransfer, + volume: subTransferVol, }), ] : [] diff --git a/yarn.lock b/yarn.lock index d58c1ef61ac..a651fe1c429 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4127,81 +4127,176 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.2.tgz#29b7b3c70ddf532fe6dcf859cbfc3e4714c34842" integrity sha512-VGodkwtEuZ+ENPz/CpDSl091koMv8ao5jHVMbG1vNK+sbx/48/wVzP84M5xSfDAC69mAKKoEkSo+ym9bXYRK9w== +"@rollup/rollup-android-arm-eabi@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e" + integrity sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ== + "@rollup/rollup-android-arm64@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.2.tgz#f50f65d0c3b8b30d070d8616b2dfc0978dd588bd" integrity sha512-5/W1xyIdc7jw6c/f1KEtg1vYDBWnWCsLiipK41NiaWGLG93eH2edgE6EgQJ3AGiPERhiOLUqlDSfjRK08C9xFg== +"@rollup/rollup-android-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz#17ea71695fb1518c2c324badbe431a0bd1879f2d" + integrity sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA== + "@rollup/rollup-darwin-arm64@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.2.tgz#be3d9fffbf6fc5b9d5f0642f1f0250e0ecab8d3e" integrity sha512-vOAKMqZSTbPfyPVu1jBiy+YniIQd3MG7LUnqV0dA6Q5tyhdqYtxacTHP1+S/ksKl6qCtMG1qQ0grcIgk/19JEA== +"@rollup/rollup-darwin-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz#dac0f0d0cfa73e7d5225ae6d303c13c8979e7999" + integrity sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ== + "@rollup/rollup-darwin-x64@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.2.tgz#fe45a772526b2c03d545e20f97a1e5cd60a46e52" integrity sha512-aIJVRUS3Dnj6MqocBMrcXlatKm64O3ITeQAdAxVSE9swyhNyV1dwnRgw7IGKIkDQofatd8UqMSyUxuFEa42EcA== +"@rollup/rollup-darwin-x64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz#8f63baa1d31784904a380d2e293fa1ddf53dd4a2" + integrity sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ== + +"@rollup/rollup-freebsd-arm64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz#30ed247e0df6e8858cdc6ae4090e12dbeb8ce946" + integrity sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA== + +"@rollup/rollup-freebsd-x64@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz#57846f382fddbb508412ae07855b8a04c8f56282" + integrity sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ== + "@rollup/rollup-linux-arm-gnueabihf@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.2.tgz#450ecf66f30a51514413aafa79d28561db73151c" integrity sha512-/bjfUiXwy3P5vYr6/ezv//Yle2Y0ak3a+Av/BKoi76nFryjWCkki8AuVoPR7ZU/ckcvAWFo77OnFK14B9B5JsA== +"@rollup/rollup-linux-arm-gnueabihf@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz#378ca666c9dae5e6f94d1d351e7497c176e9b6df" + integrity sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA== + "@rollup/rollup-linux-arm-musleabihf@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.2.tgz#1e8807d220047084579cd01499c5476a325e0700" integrity sha512-S24b+tJHwpq2TNRz9T+r71FjMvyBBApY8EkYxz8Cwi/rhH6h+lu/iDUxyc9PuHf9UvyeBFYkWWcrDahai/NCGw== +"@rollup/rollup-linux-arm-musleabihf@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz#a692eff3bab330d5c33a5d5813a090c15374cddb" + integrity sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg== + "@rollup/rollup-linux-arm64-gnu@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.2.tgz#128adb9dbf0057b989127d2e7fd73931a6729410" integrity sha512-UN7VAXLyeyGbCQWiOtQN7BqmjTDw1ON2Oos4lfk0YR7yNhFEJWZiwGtvj9Ay4lsT/ueT04sh80Sg2MlWVVZ+Ug== +"@rollup/rollup-linux-arm64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz#6b1719b76088da5ac1ae1feccf48c5926b9e3db9" + integrity sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA== + "@rollup/rollup-linux-arm64-musl@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.2.tgz#fddc7730045301a7fb0132532890e5edcb23d2bc" integrity sha512-ZBKvz3+rIhQjusKMccuJiPsStCrPOtejCHxTe+yWp3tNnuPWtyCh9QLGPKz6bFNFbwbw28E2T6zDgzJZ05F1JQ== +"@rollup/rollup-linux-arm64-musl@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz#865baf5b6f5ff67acb32e5a359508828e8dc5788" + integrity sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A== + +"@rollup/rollup-linux-loongarch64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz#23c6609ba0f7fa7a7f2038b6b6a08555a5055a87" + integrity sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA== + "@rollup/rollup-linux-powerpc64le-gnu@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.2.tgz#7154fe9ffc6405b2a6555ca931c42c0aa5198c2a" integrity sha512-LjMMFiVBRL3wOe095vHAekL4b7nQqf4KZEpdMWd3/W+nIy5o9q/8tlVKiqMbfieDypNXLsxM9fexOxd9Qcklyg== +"@rollup/rollup-linux-powerpc64le-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz#652ef0d9334a9f25b9daf85731242801cb0fc41c" + integrity sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A== + "@rollup/rollup-linux-riscv64-gnu@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.2.tgz#7a7d091a94fa7c50ebf72d5578475093e01c739e" integrity sha512-ohkPt0lKoCU0s4B6twro2aft+QROPdUiWwOjPNTzwTsBK5w+2+iT9kySdtOdq0gzWJAdiqsV4NFtXOwGZmIsHA== +"@rollup/rollup-linux-riscv64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz#1eb6651839ee6ebca64d6cc64febbd299e95e6bd" + integrity sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA== + "@rollup/rollup-linux-s390x-gnu@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.2.tgz#39b87bd355dfafbc062ca856d3d6bc5aa1905d89" integrity sha512-jm2lvLc+/gqXfndlpDw05jKvsl/HKYxUEAt1h5UXcMFVpO4vGpoWmJVUfKDtTqSaHcCNw1his1XjkgR9aort3w== +"@rollup/rollup-linux-s390x-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz#015c52293afb3ff2a293cf0936b1d43975c1e9cd" + integrity sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg== + "@rollup/rollup-linux-x64-gnu@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.2.tgz#30b88169db18dec202ab9662d5148523d59da553" integrity sha512-oc5/SlITI/Vj/qL4UM+lXN7MERpiy1HEOnrE+SegXwzf7WP9bzmZd6+MDljCEZTdSY84CpvUv9Rq7bCaftn1+g== +"@rollup/rollup-linux-x64-gnu@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz#b83001b5abed2bcb5e2dbeec6a7e69b194235c1e" + integrity sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw== + "@rollup/rollup-linux-x64-musl@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.2.tgz#d4fd52a28d5ce4aaed436311d89a9a1eaff87c2d" integrity sha512-/2VWEBG6mKbS2itm7hzPwhIPaxfZh/KLWrYg20pCRLHhNFtF+epLgcBtwy3m07bl/k86Q3PFRAf2cX+VbZbwzQ== +"@rollup/rollup-linux-x64-musl@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz#6cc7c84cd4563737f8593e66f33b57d8e228805b" + integrity sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g== + "@rollup/rollup-win32-arm64-msvc@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.2.tgz#edd352302e3fa6a2d612447590b0a0887cdbf762" integrity sha512-Wg7ANh7+hSilF0lG3e/0Oy8GtfTIfEk1327Bw8juZOMOoKmJLs3R+a4JDa/4cHJp2Gs7QfCDTepXXcyFD0ubBg== +"@rollup/rollup-win32-arm64-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz#631ffeee094d71279fcd1fe8072bdcf25311bc11" + integrity sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A== + "@rollup/rollup-win32-ia32-msvc@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.2.tgz#f17cc1db108f364bf6ef427f98844b5f742d31f0" integrity sha512-J/jCDKVMWp0Y2ELnTjpQFYUCUWv1Jr+LdFrJVZtdqGyjDo0PHPa7pCamjHvJel6zBFM3doFFqAr7cmXYWBAbfw== +"@rollup/rollup-win32-ia32-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz#06d1d60d5b9f718e8a6c4a43f82e3f9e3254587f" + integrity sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA== + "@rollup/rollup-win32-x64-msvc@4.16.2": version "4.16.2" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.2.tgz#98fb87589960075d39c44784e3a99f67138602f4" integrity sha512-3nIf+SJMs2ZzrCh+SKNqgLVV9hS/UY0UjT1YU8XQYFGLiUfmHYJ/5trOU1XSvmHjV5gTF/K3DjrWxtyzKKcAHA== +"@rollup/rollup-win32-x64-msvc@4.28.1": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz#4dff5c4259ebe6c5b4a8f2c5bc3829b7a8447ff0" + integrity sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA== + "@serialport/binding-mock@10.2.2": version "10.2.2" resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-10.2.2.tgz#d322a8116a97806addda13c62f50e73d16125874" @@ -4765,7 +4860,7 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" -"@storybook/addon-actions@7.6.17", "@storybook/addon-actions@^7.6.16": +"@storybook/addon-actions@7.6.17": version "7.6.17" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.17.tgz#b1be5ab28b22b4a50c6aa0cd0a3671ca5b6f5f71" integrity sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ== @@ -4820,7 +4915,7 @@ remark-slug "^6.0.0" ts-dedent "^2.0.0" -"@storybook/addon-essentials@^7.6.16": +"@storybook/addon-essentials@7.6.17": version "7.6.17" resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.6.17.tgz#d49d9a77edc999518c6871b66032a647787c39f4" integrity sha512-qlSpamxuYfT2taF953nC9QijGF2pSbg1ewMNpdwLTj16PTZvR/d8NCDMTJujI1bDwM2m18u8Yc43ibh5LEmxCw== @@ -4847,7 +4942,7 @@ dependencies: "@storybook/global" "^5.0.0" -"@storybook/addon-links@^7.6.16": +"@storybook/addon-links@7.6.17": version "7.6.17" resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.6.17.tgz#5a678ff09c1b5056b67cb345c115cfcd343ffe86" integrity sha512-iFUwKObRn0EKI0zMETsil2p9a/81rCuSMEWECsi+khkCAs1FUnD2cT6Ag5ydcNcBXsdtdfDJdtXQrkw+TSoStQ== @@ -5292,7 +5387,7 @@ resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz#5875915316f687bf658cc6686ea49f2928eae4b2" integrity sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw== -"@storybook/react-vite@^7.6.16": +"@storybook/react-vite@7.6.17": version "7.6.17" resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.17.tgz#29ea46ef27595d10ad115b33833ed5b167f02960" integrity sha512-4dIm3CuRl44X1TLzN3WoZh/bChzJF7Ud28li9atj9C8db0bb/y0zl8cahrsRFoR7/LyfqdOVLqaztrnA5SsWfg== @@ -5305,7 +5400,7 @@ magic-string "^0.30.0" react-docgen "^7.0.0" -"@storybook/react@7.6.17", "@storybook/react@^7.6.16": +"@storybook/react@7.6.17": version "7.6.17" resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.17.tgz#3e585b37f4a45d01b60543e1952a46ae3da70e81" integrity sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA== @@ -5605,6 +5700,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" @@ -13605,11 +13705,6 @@ immer@5.1.0: resolved "https://registry.yarnpkg.com/immer/-/immer-5.1.0.tgz#38d9eba40dbb0389b7ae7b8b99e4661df0cf89e3" integrity sha512-t6gyFtTcokCuI0tX9KQZJQAkIjSqo/nTeJnwojfty69EzrorZbywwhZ8qNNlF+faajHeRnhOvM2F40KHLFCghQ== -immer@9.0.6: - version "9.0.6" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" - integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== - "immutable@^3.8.1 || ^4.0.0": version "4.3.5" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" @@ -17463,7 +17558,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picocolors@^1.1.0: +picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -18325,6 +18420,15 @@ postcss@^8.1.7, postcss@^8.4, postcss@^8.4.38: picocolors "^1.0.0" source-map-js "^1.2.0" +postcss@^8.4.43: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + preact@^10.25.1: version "10.25.1" resolved "https://registry.yarnpkg.com/preact/-/preact-10.25.1.tgz#1c4b84253c42dee874bfbf6a92bdce45e3662665" @@ -19889,6 +19993,34 @@ rollup@^4.13.0: "@rollup/rollup-win32-x64-msvc" "4.16.2" fsevents "~2.3.2" +rollup@^4.20.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.1.tgz#7718ba34d62b449dfc49adbfd2f312b4fe0df4de" + integrity sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.28.1" + "@rollup/rollup-android-arm64" "4.28.1" + "@rollup/rollup-darwin-arm64" "4.28.1" + "@rollup/rollup-darwin-x64" "4.28.1" + "@rollup/rollup-freebsd-arm64" "4.28.1" + "@rollup/rollup-freebsd-x64" "4.28.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.28.1" + "@rollup/rollup-linux-arm-musleabihf" "4.28.1" + "@rollup/rollup-linux-arm64-gnu" "4.28.1" + "@rollup/rollup-linux-arm64-musl" "4.28.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.28.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.28.1" + "@rollup/rollup-linux-riscv64-gnu" "4.28.1" + "@rollup/rollup-linux-s390x-gnu" "4.28.1" + "@rollup/rollup-linux-x64-gnu" "4.28.1" + "@rollup/rollup-linux-x64-musl" "4.28.1" + "@rollup/rollup-win32-arm64-msvc" "4.28.1" + "@rollup/rollup-win32-ia32-msvc" "4.28.1" + "@rollup/rollup-win32-x64-msvc" "4.28.1" + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -20533,6 +20665,11 @@ source-map-js@^1.2.0: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -20805,7 +20942,7 @@ storybook-addon-pseudo-states@2.0.0: resolved "https://registry.yarnpkg.com/storybook-addon-pseudo-states/-/storybook-addon-pseudo-states-2.0.0.tgz#4fa251aaea04ebc6d17b7e57e5f09ea240f14583" integrity sha512-tLuuwB1k+xFsX8C1fn4G/vJm5wX33jvSLeqTsJgWwI3/AKJUf6Thbg/kg14I2AwN8nqffjun2PzE05Iea23n0w== -storybook@^7.6.16: +storybook@7.6.17: version "7.6.17" resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.17.tgz#d7fdbbf57d61d386b3ccc6721285bc914f54269b" integrity sha512-8+EIo91bwmeFWPg1eysrxXlhIYv3OsXrznTr4+4Eq0NikqAoq6oBhtlN5K2RGS2lBVF537eN+9jTCNbR+WrzDA== @@ -22710,14 +22847,14 @@ vite-node@2.1.8: pathe "^1.1.2" vite "^5.0.0" -vite@5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.2.tgz#2f0a8531c71060467ed3e0a205a203f269b6d9c8" - integrity sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA== +vite@5.4.11: + version "5.4.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" + integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== dependencies: esbuild "^0.21.3" - postcss "^8.4.38" - rollup "^4.13.0" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3"