opentrons-shared-data 8.8.0a10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of opentrons-shared-data might be problematic. Click here for more details.

Files changed (690) hide show
  1. LICENSE +202 -0
  2. opentrons_shared_data/__init__.py +17 -0
  3. opentrons_shared_data/_version.py +34 -0
  4. opentrons_shared_data/command/__init__.py +111 -0
  5. opentrons_shared_data/data/command/schemas/10.json +4880 -0
  6. opentrons_shared_data/data/command/schemas/11.json +6267 -0
  7. opentrons_shared_data/data/command/schemas/12.json +7117 -0
  8. opentrons_shared_data/data/command/schemas/13.json +7039 -0
  9. opentrons_shared_data/data/command/schemas/14.json +7166 -0
  10. opentrons_shared_data/data/command/schemas/15.json +7676 -0
  11. opentrons_shared_data/data/command/schemas/7.json +3302 -0
  12. opentrons_shared_data/data/command/schemas/8.json +4321 -0
  13. opentrons_shared_data/data/command/schemas/9.json +4430 -0
  14. opentrons_shared_data/data/commandAnnotation/schemas/1.json +74 -0
  15. opentrons_shared_data/data/deck/definitions/3/ot2_short_trash.json +477 -0
  16. opentrons_shared_data/data/deck/definitions/3/ot2_standard.json +477 -0
  17. opentrons_shared_data/data/deck/definitions/3/ot3_standard.json +989 -0
  18. opentrons_shared_data/data/deck/definitions/4/ot2_short_trash.json +405 -0
  19. opentrons_shared_data/data/deck/definitions/4/ot2_standard.json +410 -0
  20. opentrons_shared_data/data/deck/definitions/4/ot3_standard.json +608 -0
  21. opentrons_shared_data/data/deck/definitions/5/ot2_short_trash.json +459 -0
  22. opentrons_shared_data/data/deck/definitions/5/ot2_standard.json +459 -0
  23. opentrons_shared_data/data/deck/definitions/5/ot3_standard.json +1419 -0
  24. opentrons_shared_data/data/deck/schemas/1.json +240 -0
  25. opentrons_shared_data/data/deck/schemas/2.json +250 -0
  26. opentrons_shared_data/data/deck/schemas/3.json +297 -0
  27. opentrons_shared_data/data/deck/schemas/4.json +319 -0
  28. opentrons_shared_data/data/deck/schemas/5.json +396 -0
  29. opentrons_shared_data/data/errors/definitions/1/errors.json +286 -0
  30. opentrons_shared_data/data/errors/schemas/1.json +50 -0
  31. opentrons_shared_data/data/gripper/definitions/1/gripperV1.1.json +29 -0
  32. opentrons_shared_data/data/gripper/definitions/1/gripperV1.2.json +29 -0
  33. opentrons_shared_data/data/gripper/definitions/1/gripperV1.3.json +29 -0
  34. opentrons_shared_data/data/gripper/definitions/1/gripperV1.json +28 -0
  35. opentrons_shared_data/data/gripper/schemas/1.json +186 -0
  36. opentrons_shared_data/data/labware/definitions/1/12-well-plate.json +147 -0
  37. opentrons_shared_data/data/labware/definitions/1/24-vial-rack.json +281 -0
  38. opentrons_shared_data/data/labware/definitions/1/24-well-plate.json +281 -0
  39. opentrons_shared_data/data/labware/definitions/1/384-plate.json +4667 -0
  40. opentrons_shared_data/data/labware/definitions/1/48-vial-plate.json +547 -0
  41. opentrons_shared_data/data/labware/definitions/1/48-well-plate.json +547 -0
  42. opentrons_shared_data/data/labware/definitions/1/5ml-3x4.json +147 -0
  43. opentrons_shared_data/data/labware/definitions/1/6-well-plate.json +80 -0
  44. opentrons_shared_data/data/labware/definitions/1/96-PCR-flat.json +1079 -0
  45. opentrons_shared_data/data/labware/definitions/1/96-PCR-tall.json +1079 -0
  46. opentrons_shared_data/data/labware/definitions/1/96-deep-well.json +1079 -0
  47. opentrons_shared_data/data/labware/definitions/1/96-flat.json +1079 -0
  48. opentrons_shared_data/data/labware/definitions/1/96-well-plate-20mm.json +1079 -0
  49. opentrons_shared_data/data/labware/definitions/1/MALDI-plate.json +4282 -0
  50. opentrons_shared_data/data/labware/definitions/1/PCR-strip-tall.json +1079 -0
  51. opentrons_shared_data/data/labware/definitions/1/T25-flask.json +20 -0
  52. opentrons_shared_data/data/labware/definitions/1/T75-flask.json +20 -0
  53. opentrons_shared_data/data/labware/definitions/1/alum-block-pcr-strips.json +188 -0
  54. opentrons_shared_data/data/labware/definitions/1/biorad-hardshell-96-PCR.json +1079 -0
  55. opentrons_shared_data/data/labware/definitions/1/e-gelgol.json +1078 -0
  56. opentrons_shared_data/data/labware/definitions/1/fixed-trash.json +19 -0
  57. opentrons_shared_data/data/labware/definitions/1/hampton-1ml-deep-block.json +1078 -0
  58. opentrons_shared_data/data/labware/definitions/1/opentrons-aluminum-block-2ml-eppendorf.json +281 -0
  59. opentrons_shared_data/data/labware/definitions/1/opentrons-aluminum-block-2ml-screwcap.json +281 -0
  60. opentrons_shared_data/data/labware/definitions/1/opentrons-aluminum-block-96-PCR-plate.json +1079 -0
  61. opentrons_shared_data/data/labware/definitions/1/opentrons-aluminum-block-PCR-strips-200ul.json +1079 -0
  62. opentrons_shared_data/data/labware/definitions/1/opentrons-tiprack-10ul.json +986 -0
  63. opentrons_shared_data/data/labware/definitions/1/opentrons-tiprack-300ul.json +986 -0
  64. opentrons_shared_data/data/labware/definitions/1/opentrons-tuberack-1.5ml-eppendorf.json +281 -0
  65. opentrons_shared_data/data/labware/definitions/1/opentrons-tuberack-15_50ml.json +125 -0
  66. opentrons_shared_data/data/labware/definitions/1/opentrons-tuberack-15ml.json +181 -0
  67. opentrons_shared_data/data/labware/definitions/1/opentrons-tuberack-2ml-eppendorf.json +281 -0
  68. opentrons_shared_data/data/labware/definitions/1/opentrons-tuberack-2ml-screwcap.json +281 -0
  69. opentrons_shared_data/data/labware/definitions/1/opentrons-tuberack-50ml.json +80 -0
  70. opentrons_shared_data/data/labware/definitions/1/point.json +18 -0
  71. opentrons_shared_data/data/labware/definitions/1/rigaku-compact-crystallization-plate.json +2146 -0
  72. opentrons_shared_data/data/labware/definitions/1/small_vial_rack_16x45.json +280 -0
  73. opentrons_shared_data/data/labware/definitions/1/tall-fixed-trash.json +19 -0
  74. opentrons_shared_data/data/labware/definitions/1/tiprack-1000ul-H.json +503 -0
  75. opentrons_shared_data/data/labware/definitions/1/tiprack-1000ul-chem.json +1034 -0
  76. opentrons_shared_data/data/labware/definitions/1/tiprack-1000ul.json +986 -0
  77. opentrons_shared_data/data/labware/definitions/1/tiprack-10ul-H.json +503 -0
  78. opentrons_shared_data/data/labware/definitions/1/tiprack-10ul.json +986 -0
  79. opentrons_shared_data/data/labware/definitions/1/tiprack-200ul.json +986 -0
  80. opentrons_shared_data/data/labware/definitions/1/trash-box.json +20 -0
  81. opentrons_shared_data/data/labware/definitions/1/trough-12row-short.json +143 -0
  82. opentrons_shared_data/data/labware/definitions/1/trough-12row.json +143 -0
  83. opentrons_shared_data/data/labware/definitions/1/trough-1row-25ml.json +21 -0
  84. opentrons_shared_data/data/labware/definitions/1/tube-rack-.75ml.json +281 -0
  85. opentrons_shared_data/data/labware/definitions/1/tube-rack-15_50ml.json +125 -0
  86. opentrons_shared_data/data/labware/definitions/1/tube-rack-2ml-9x9.json +911 -0
  87. opentrons_shared_data/data/labware/definitions/1/tube-rack-2ml.json +281 -0
  88. opentrons_shared_data/data/labware/definitions/1/tube-rack-5ml-96.json +1079 -0
  89. opentrons_shared_data/data/labware/definitions/1/tube-rack-80well.json +907 -0
  90. opentrons_shared_data/data/labware/definitions/1/wheaton_vial_rack.json +565 -0
  91. opentrons_shared_data/data/labware/definitions/2/agilent_1_reservoir_290ml/1.json +54 -0
  92. opentrons_shared_data/data/labware/definitions/2/agilent_1_reservoir_290ml/2.json +80 -0
  93. opentrons_shared_data/data/labware/definitions/2/agilent_1_reservoir_290ml/3.json +80 -0
  94. opentrons_shared_data/data/labware/definitions/2/agilent_1_reservoir_290ml/4.json +80 -0
  95. opentrons_shared_data/data/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/1.json +4320 -0
  96. opentrons_shared_data/data/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json +4730 -0
  97. opentrons_shared_data/data/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/3.json +4738 -0
  98. opentrons_shared_data/data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/1.json +1019 -0
  99. opentrons_shared_data/data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json +1045 -0
  100. opentrons_shared_data/data/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json +1167 -0
  101. opentrons_shared_data/data/labware/definitions/2/axygen_1_reservoir_90ml/1.json +56 -0
  102. opentrons_shared_data/data/labware/definitions/2/axygen_1_reservoir_90ml/2.json +72 -0
  103. opentrons_shared_data/data/labware/definitions/2/axygen_1_reservoir_90ml/3.json +72 -0
  104. opentrons_shared_data/data/labware/definitions/2/axygen_96_wellplate_500ul/1.json +1036 -0
  105. opentrons_shared_data/data/labware/definitions/2/axygen_96_wellplate_500ul/2.json +1159 -0
  106. opentrons_shared_data/data/labware/definitions/2/biorad_384_wellplate_50ul/1.json +4329 -0
  107. opentrons_shared_data/data/labware/definitions/2/biorad_384_wellplate_50ul/2.json +4331 -0
  108. opentrons_shared_data/data/labware/definitions/2/biorad_384_wellplate_50ul/3.json +4741 -0
  109. opentrons_shared_data/data/labware/definitions/2/biorad_384_wellplate_50ul/4.json +4748 -0
  110. opentrons_shared_data/data/labware/definitions/2/biorad_96_wellplate_200ul_pcr/1.json +1020 -0
  111. opentrons_shared_data/data/labware/definitions/2/biorad_96_wellplate_200ul_pcr/2.json +1046 -0
  112. opentrons_shared_data/data/labware/definitions/2/biorad_96_wellplate_200ul_pcr/3.json +1182 -0
  113. opentrons_shared_data/data/labware/definitions/2/biorad_96_wellplate_200ul_pcr/4.json +1187 -0
  114. opentrons_shared_data/data/labware/definitions/2/biorad_96_wellplate_200ul_pcr/5.json +1187 -0
  115. opentrons_shared_data/data/labware/definitions/2/black_96_well_microtiter_plate_lid/1.json +110 -0
  116. opentrons_shared_data/data/labware/definitions/2/corning_12_wellplate_6.9ml_flat/1.json +171 -0
  117. opentrons_shared_data/data/labware/definitions/2/corning_12_wellplate_6.9ml_flat/2.json +180 -0
  118. opentrons_shared_data/data/labware/definitions/2/corning_12_wellplate_6.9ml_flat/3.json +205 -0
  119. opentrons_shared_data/data/labware/definitions/2/corning_12_wellplate_6.9ml_flat/4.json +210 -0
  120. opentrons_shared_data/data/labware/definitions/2/corning_12_wellplate_6.9ml_flat/5.json +210 -0
  121. opentrons_shared_data/data/labware/definitions/2/corning_24_wellplate_3.4ml_flat/1.json +293 -0
  122. opentrons_shared_data/data/labware/definitions/2/corning_24_wellplate_3.4ml_flat/2.json +300 -0
  123. opentrons_shared_data/data/labware/definitions/2/corning_24_wellplate_3.4ml_flat/3.json +337 -0
  124. opentrons_shared_data/data/labware/definitions/2/corning_24_wellplate_3.4ml_flat/4.json +342 -0
  125. opentrons_shared_data/data/labware/definitions/2/corning_24_wellplate_3.4ml_flat/5.json +342 -0
  126. opentrons_shared_data/data/labware/definitions/2/corning_384_wellplate_112ul_flat/1.json +4703 -0
  127. opentrons_shared_data/data/labware/definitions/2/corning_384_wellplate_112ul_flat/2.json +4717 -0
  128. opentrons_shared_data/data/labware/definitions/2/corning_384_wellplate_112ul_flat/3.json +5116 -0
  129. opentrons_shared_data/data/labware/definitions/2/corning_384_wellplate_112ul_flat/4.json +5116 -0
  130. opentrons_shared_data/data/labware/definitions/2/corning_384_wellplate_112ul_flat/5.json +5116 -0
  131. opentrons_shared_data/data/labware/definitions/2/corning_48_wellplate_1.6ml_flat/1.json +535 -0
  132. opentrons_shared_data/data/labware/definitions/2/corning_48_wellplate_1.6ml_flat/2.json +544 -0
  133. opentrons_shared_data/data/labware/definitions/2/corning_48_wellplate_1.6ml_flat/3.json +605 -0
  134. opentrons_shared_data/data/labware/definitions/2/corning_48_wellplate_1.6ml_flat/4.json +605 -0
  135. opentrons_shared_data/data/labware/definitions/2/corning_48_wellplate_1.6ml_flat/5.json +610 -0
  136. opentrons_shared_data/data/labware/definitions/2/corning_48_wellplate_1.6ml_flat/6.json +610 -0
  137. opentrons_shared_data/data/labware/definitions/2/corning_6_wellplate_16.8ml_flat/1.json +103 -0
  138. opentrons_shared_data/data/labware/definitions/2/corning_6_wellplate_16.8ml_flat/2.json +110 -0
  139. opentrons_shared_data/data/labware/definitions/2/corning_6_wellplate_16.8ml_flat/3.json +129 -0
  140. opentrons_shared_data/data/labware/definitions/2/corning_6_wellplate_16.8ml_flat/4.json +134 -0
  141. opentrons_shared_data/data/labware/definitions/2/corning_6_wellplate_16.8ml_flat/5.json +134 -0
  142. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_330ul/1.json +1170 -0
  143. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_flat/1.json +1049 -0
  144. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_flat/2.json +1063 -0
  145. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_flat/3.json +1172 -0
  146. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_flat/4.json +1177 -0
  147. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_flat/5.json +1177 -0
  148. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_lid/1.json +117 -0
  149. opentrons_shared_data/data/labware/definitions/2/corning_falcon_384_wellplate_130ul_flat/1.json +5147 -0
  150. opentrons_shared_data/data/labware/definitions/2/corning_falcon_384_wellplate_130ul_flat_lid/1.json +118 -0
  151. opentrons_shared_data/data/labware/definitions/2/costar_96_wellplate_2.2ml/1.json +1372 -0
  152. opentrons_shared_data/data/labware/definitions/2/eppendorf_384_wellplate_45ul/1.json +4758 -0
  153. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_tiprack_1000ul_eptips/1.json +1019 -0
  154. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_tiprack_10ul_eptips/1.json +1019 -0
  155. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_1000ul/1.json +1149 -0
  156. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_150ul/1.json +1184 -0
  157. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_2000ul/1.json +1395 -0
  158. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_2000ul_lobind/1.json +1395 -0
  159. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_350ul_lobind/1.json +1184 -0
  160. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_500ul/1.json +1170 -0
  161. opentrons_shared_data/data/labware/definitions/2/eppendorf_96_wellplate_500ul_lobind/1.json +1170 -0
  162. opentrons_shared_data/data/labware/definitions/2/ev_resin_tips_flex_96_labware/1.json +1067 -0
  163. opentrons_shared_data/data/labware/definitions/2/ev_resin_tips_flex_96_tiprack_adapter/1.json +44 -0
  164. opentrons_shared_data/data/labware/definitions/2/ev_resin_tips_flex_short_adapter/1.json +44 -0
  165. opentrons_shared_data/data/labware/definitions/2/ev_resin_tips_flex_tall_adapter/1.json +44 -0
  166. opentrons_shared_data/data/labware/definitions/2/geb_96_tiprack_1000ul/1.json +1017 -0
  167. opentrons_shared_data/data/labware/definitions/2/geb_96_tiprack_10ul/1.json +1017 -0
  168. opentrons_shared_data/data/labware/definitions/2/greiner_384_wellplate_240ul/1.json +5209 -0
  169. opentrons_shared_data/data/labware/definitions/2/greiner_96_wellplate_323ul/1.json +1197 -0
  170. opentrons_shared_data/data/labware/definitions/2/greiner_96_wellplate_340ul_chimney/1.json +1166 -0
  171. opentrons_shared_data/data/labware/definitions/2/greiner_96_wellplate_382ul/1.json +1156 -0
  172. opentrons_shared_data/data/labware/definitions/2/ibidi_96_square_well_plate_300ul/1.json +1105 -0
  173. opentrons_shared_data/data/labware/definitions/2/ibidi_96_square_well_plate_300ul/2.json +1216 -0
  174. opentrons_shared_data/data/labware/definitions/2/ibidi_96_square_well_plate_300ul_lid/1.json +110 -0
  175. opentrons_shared_data/data/labware/definitions/2/milliplex_r_96_well_microtiter_plate/1.json +1018 -0
  176. opentrons_shared_data/data/labware/definitions/2/nest_12_reservoir_15ml/1.json +190 -0
  177. opentrons_shared_data/data/labware/definitions/2/nest_12_reservoir_15ml/2.json +226 -0
  178. opentrons_shared_data/data/labware/definitions/2/nest_12_reservoir_15ml/3.json +226 -0
  179. opentrons_shared_data/data/labware/definitions/2/nest_12_reservoir_22ml/1.json +232 -0
  180. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_195ml/1.json +54 -0
  181. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_195ml/2.json +56 -0
  182. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_195ml/3.json +83 -0
  183. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_195ml/4.json +83 -0
  184. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_290ml/1.json +54 -0
  185. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_290ml/2.json +80 -0
  186. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_290ml/3.json +80 -0
  187. opentrons_shared_data/data/labware/definitions/2/nest_1_reservoir_290ml/4.json +80 -0
  188. opentrons_shared_data/data/labware/definitions/2/nest_24_wellplate_10.4ml/1.json +386 -0
  189. opentrons_shared_data/data/labware/definitions/2/nest_8_reservoir_22ml/1.json +162 -0
  190. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/1.json +1018 -0
  191. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/2.json +1039 -0
  192. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/3.json +1161 -0
  193. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/4.json +1166 -0
  194. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/5.json +1166 -0
  195. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_200ul_flat/1.json +1017 -0
  196. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_200ul_flat/2.json +1031 -0
  197. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_200ul_flat/3.json +1140 -0
  198. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_200ul_flat/4.json +1145 -0
  199. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_200ul_flat/5.json +1145 -0
  200. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_2ml_deep/1.json +1121 -0
  201. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json +1147 -0
  202. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_2ml_deep/3.json +1256 -0
  203. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_2ml_deep/4.json +1261 -0
  204. opentrons_shared_data/data/labware/definitions/2/nest_96_wellplate_2ml_deep/5.json +1261 -0
  205. opentrons_shared_data/data/labware/definitions/2/nunc_384_wellplate_100ul/1.json +5136 -0
  206. opentrons_shared_data/data/labware/definitions/2/nunc_96_wellplate_450ul/1.json +1159 -0
  207. opentrons_shared_data/data/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1.json +164 -0
  208. opentrons_shared_data/data/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json +232 -0
  209. opentrons_shared_data/data/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/3.json +232 -0
  210. opentrons_shared_data/data/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/1.json +162 -0
  211. opentrons_shared_data/data/labware/definitions/2/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/1.json +160 -0
  212. opentrons_shared_data/data/labware/definitions/2/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json +235 -0
  213. opentrons_shared_data/data/labware/definitions/2/opentrons_15_tuberack_eppendorf_15ml_conical/1.json +314 -0
  214. opentrons_shared_data/data/labware/definitions/2/opentrons_15_tuberack_falcon_15ml_conical/1.json +211 -0
  215. opentrons_shared_data/data/labware/definitions/2/opentrons_15_tuberack_falcon_15ml_conical/2.json +259 -0
  216. opentrons_shared_data/data/labware/definitions/2/opentrons_15_tuberack_falcon_15ml_conical/3.json +259 -0
  217. opentrons_shared_data/data/labware/definitions/2/opentrons_15_tuberack_nest_15ml_conical/1.json +209 -0
  218. opentrons_shared_data/data/labware/definitions/2/opentrons_15_tuberack_nest_15ml_conical/2.json +257 -0
  219. opentrons_shared_data/data/labware/definitions/2/opentrons_1_trash_1100ml_fixed/1.json +50 -0
  220. opentrons_shared_data/data/labware/definitions/2/opentrons_1_trash_3200ml_fixed/1.json +50 -0
  221. opentrons_shared_data/data/labware/definitions/2/opentrons_1_trash_850ml_fixed/1.json +50 -0
  222. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/1.json +300 -0
  223. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/2.json +301 -0
  224. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/3.json +352 -0
  225. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/1.json +299 -0
  226. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/2.json +370 -0
  227. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/3.json +370 -0
  228. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/4.json +370 -0
  229. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_screwcap/1.json +299 -0
  230. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_screwcap/2.json +356 -0
  231. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_screwcap/3.json +356 -0
  232. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_snapcap/1.json +301 -0
  233. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_snapcap/2.json +358 -0
  234. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_snapcap/3.json +358 -0
  235. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_screwcap/1.json +299 -0
  236. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_screwcap/2.json +350 -0
  237. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_screwcap/3.json +350 -0
  238. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_snapcap/1.json +301 -0
  239. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_snapcap/2.json +386 -0
  240. opentrons_shared_data/data/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_snapcap/3.json +386 -0
  241. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/1.json +312 -0
  242. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/2.json +418 -0
  243. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/3.json +418 -0
  244. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/1.json +311 -0
  245. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json +473 -0
  246. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/3.json +473 -0
  247. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/1.json +309 -0
  248. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/1.json +298 -0
  249. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_generic_2ml_screwcap/1.json +300 -0
  250. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_generic_2ml_screwcap/2.json +351 -0
  251. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/1.json +300 -0
  252. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/2.json +371 -0
  253. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/3.json +371 -0
  254. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/4.json +371 -0
  255. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_screwcap/1.json +300 -0
  256. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json +357 -0
  257. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_snapcap/1.json +302 -0
  258. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json +359 -0
  259. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_2ml_screwcap/1.json +300 -0
  260. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_2ml_screwcap/2.json +351 -0
  261. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_2ml_snapcap/1.json +302 -0
  262. opentrons_shared_data/data/labware/definitions/2/opentrons_24_tuberack_nest_2ml_snapcap/2.json +387 -0
  263. opentrons_shared_data/data/labware/definitions/2/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/1.json +481 -0
  264. opentrons_shared_data/data/labware/definitions/2/opentrons_6_tuberack_falcon_50ml_conical/1.json +112 -0
  265. opentrons_shared_data/data/labware/definitions/2/opentrons_6_tuberack_falcon_50ml_conical/2.json +145 -0
  266. opentrons_shared_data/data/labware/definitions/2/opentrons_6_tuberack_nest_50ml_conical/1.json +110 -0
  267. opentrons_shared_data/data/labware/definitions/2/opentrons_6_tuberack_nest_50ml_conical/2.json +150 -0
  268. opentrons_shared_data/data/labware/definitions/2/opentrons_6_tuberack_nest_50ml_conical/3.json +150 -0
  269. opentrons_shared_data/data/labware/definitions/2/opentrons_96_aluminumblock_biorad_wellplate_200ul/1.json +1029 -0
  270. opentrons_shared_data/data/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/1.json +1026 -0
  271. opentrons_shared_data/data/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/2.json +1027 -0
  272. opentrons_shared_data/data/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/3.json +1027 -0
  273. opentrons_shared_data/data/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/4.json +1149 -0
  274. opentrons_shared_data/data/labware/definitions/2/opentrons_96_aluminumblock_nest_wellplate_100ul/1.json +1027 -0
  275. opentrons_shared_data/data/labware/definitions/2/opentrons_96_deep_well_adapter/1.json +41 -0
  276. opentrons_shared_data/data/labware/definitions/2/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/1.json +1121 -0
  277. opentrons_shared_data/data/labware/definitions/2/opentrons_96_deep_well_temp_mod_adapter/1.json +41 -0
  278. opentrons_shared_data/data/labware/definitions/2/opentrons_96_filtertiprack_1000ul/1.json +1017 -0
  279. opentrons_shared_data/data/labware/definitions/2/opentrons_96_filtertiprack_10ul/1.json +1017 -0
  280. opentrons_shared_data/data/labware/definitions/2/opentrons_96_filtertiprack_200ul/1.json +1017 -0
  281. opentrons_shared_data/data/labware/definitions/2/opentrons_96_filtertiprack_20ul/1.json +1017 -0
  282. opentrons_shared_data/data/labware/definitions/2/opentrons_96_flat_bottom_adapter/1.json +41 -0
  283. opentrons_shared_data/data/labware/definitions/2/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/1.json +1027 -0
  284. opentrons_shared_data/data/labware/definitions/2/opentrons_96_pcr_adapter/1.json +1032 -0
  285. opentrons_shared_data/data/labware/definitions/2/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/1.json +1027 -0
  286. opentrons_shared_data/data/labware/definitions/2/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/1.json +1025 -0
  287. opentrons_shared_data/data/labware/definitions/2/opentrons_96_tiprack_1000ul/1.json +1019 -0
  288. opentrons_shared_data/data/labware/definitions/2/opentrons_96_tiprack_10ul/1.json +1019 -0
  289. opentrons_shared_data/data/labware/definitions/2/opentrons_96_tiprack_20ul/1.json +1019 -0
  290. opentrons_shared_data/data/labware/definitions/2/opentrons_96_tiprack_300ul/1.json +1019 -0
  291. opentrons_shared_data/data/labware/definitions/2/opentrons_96_well_aluminum_block/1.json +1032 -0
  292. opentrons_shared_data/data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/1.json +1019 -0
  293. opentrons_shared_data/data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json +1045 -0
  294. opentrons_shared_data/data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/3.json +1174 -0
  295. opentrons_shared_data/data/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/4.json +1174 -0
  296. opentrons_shared_data/data/labware/definitions/2/opentrons_aluminum_flat_bottom_plate/1.json +41 -0
  297. opentrons_shared_data/data/labware/definitions/2/opentrons_calibration_adapter_heatershaker_module/1.json +62 -0
  298. opentrons_shared_data/data/labware/definitions/2/opentrons_calibration_adapter_temperature_module/1.json +62 -0
  299. opentrons_shared_data/data/labware/definitions/2/opentrons_calibration_adapter_thermocycler_module/1.json +69 -0
  300. opentrons_shared_data/data/labware/definitions/2/opentrons_calibrationblock_short_side_left/1.json +71 -0
  301. opentrons_shared_data/data/labware/definitions/2/opentrons_calibrationblock_short_side_right/1.json +71 -0
  302. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_filtertiprack_1000ul/1.json +1031 -0
  303. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_filtertiprack_200ul/1.json +1031 -0
  304. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_filtertiprack_20ul/1.json +1031 -0
  305. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_filtertiprack_50ul/1.json +1031 -0
  306. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_tiprack_1000ul/1.json +1031 -0
  307. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_tiprack_200ul/1.json +1031 -0
  308. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_tiprack_20ul/1.json +1031 -0
  309. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_tiprack_50ul/1.json +1031 -0
  310. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_96_tiprack_adapter/1.json +41 -0
  311. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_deck_riser/1.json +41 -0
  312. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_lid_absorbance_plate_reader_module/1.json +57 -0
  313. opentrons_shared_data/data/labware/definitions/2/opentrons_flex_tiprack_lid/1.json +122 -0
  314. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_12_reservoir_22ml/1.json +228 -0
  315. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_1_reservoir_300ml/1.json +83 -0
  316. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_4_reservoir_72ml/1.json +114 -0
  317. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_pcr_auto_sealing_lid/1.json +134 -0
  318. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_pcr_auto_sealing_lid/2.json +134 -0
  319. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_universal_lid/1.json +101 -0
  320. opentrons_shared_data/data/labware/definitions/2/opentrons_tough_universal_lid/2.json +101 -0
  321. opentrons_shared_data/data/labware/definitions/2/opentrons_universal_flat_adapter/1.json +151 -0
  322. opentrons_shared_data/data/labware/definitions/2/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/1.json +4710 -0
  323. opentrons_shared_data/data/labware/definitions/2/opentrons_universal_flat_adapter_type_b/1.json +151 -0
  324. opentrons_shared_data/data/labware/definitions/2/protocol_engine_lid_stack_object/1.json +48 -0
  325. opentrons_shared_data/data/labware/definitions/2/smc_384_read_plate/1.json +4701 -0
  326. opentrons_shared_data/data/labware/definitions/2/smc_384_read_plate/2.json +5100 -0
  327. opentrons_shared_data/data/labware/definitions/2/thermoscientific_96_wellplate_800ul/1.json +1194 -0
  328. opentrons_shared_data/data/labware/definitions/2/thermoscientific_abgene_96_wellplate_1.2ml/1.json +1314 -0
  329. opentrons_shared_data/data/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/1.json +1019 -0
  330. opentrons_shared_data/data/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/2.json +1134 -0
  331. opentrons_shared_data/data/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/3.json +1141 -0
  332. opentrons_shared_data/data/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/1.json +1019 -0
  333. opentrons_shared_data/data/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/2.json +1134 -0
  334. opentrons_shared_data/data/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/3.json +1141 -0
  335. opentrons_shared_data/data/labware/definitions/2/tipone_96_tiprack_200ul/1.json +1017 -0
  336. opentrons_shared_data/data/labware/definitions/2/usascientific_12_reservoir_22ml/1.json +192 -0
  337. opentrons_shared_data/data/labware/definitions/2/usascientific_12_reservoir_22ml/2.json +237 -0
  338. opentrons_shared_data/data/labware/definitions/2/usascientific_12_reservoir_22ml/3.json +237 -0
  339. opentrons_shared_data/data/labware/definitions/2/usascientific_12_reservoir_22ml/4.json +237 -0
  340. opentrons_shared_data/data/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/1.json +1116 -0
  341. opentrons_shared_data/data/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/2.json +1236 -0
  342. opentrons_shared_data/data/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/3.json +1243 -0
  343. opentrons_shared_data/data/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/4.json +1243 -0
  344. opentrons_shared_data/data/labware/definitions/3/schema3test_96_well_aluminum_block/999.json +1050 -0
  345. opentrons_shared_data/data/labware/definitions/3/schema3test_96_wellplate_200ul_pcr_full_skirt/999.json +1175 -0
  346. opentrons_shared_data/data/labware/definitions/3/schema3test_96_wellplate_360ul_flat/999.json +1189 -0
  347. opentrons_shared_data/data/labware/definitions/3/schema3test_aluminum_flat_bottom_plate/999.json +70 -0
  348. opentrons_shared_data/data/labware/definitions/3/schema3test_flex_96_tiprack_200ul/999.json +1040 -0
  349. opentrons_shared_data/data/labware/definitions/3/schema3test_flex_96_tiprack_adapter/999.json +70 -0
  350. opentrons_shared_data/data/labware/definitions/3/schema3test_flex_tiprack_lid/999.json +81 -0
  351. opentrons_shared_data/data/labware/definitions/3/schema3test_tough_pcr_auto_sealing_lid/999.json +115 -0
  352. opentrons_shared_data/data/labware/definitions/3/schema3test_universal_flat_adapter/999.json +177 -0
  353. opentrons_shared_data/data/labware/repository/schemas/1.json +81 -0
  354. opentrons_shared_data/data/labware/schemas/2.json +755 -0
  355. opentrons_shared_data/data/labware/schemas/3.json +915 -0
  356. opentrons_shared_data/data/liquid/schemas/1.json +21 -0
  357. opentrons_shared_data/data/liquid-class/definitions/1/ethanol_80/1.json +5811 -0
  358. opentrons_shared_data/data/liquid-class/definitions/1/ethanol_80/2.json +6886 -0
  359. opentrons_shared_data/data/liquid-class/definitions/1/glycerol_50/1.json +5531 -0
  360. opentrons_shared_data/data/liquid-class/definitions/1/glycerol_50/2.json +6542 -0
  361. opentrons_shared_data/data/liquid-class/definitions/1/water/1.json +5359 -0
  362. opentrons_shared_data/data/liquid-class/definitions/1/water/2.json +6332 -0
  363. opentrons_shared_data/data/liquid-class/schemas/1.json +505 -0
  364. opentrons_shared_data/data/module/definitions/1.json +57 -0
  365. opentrons_shared_data/data/module/definitions/2/magneticModuleV1.json +22 -0
  366. opentrons_shared_data/data/module/definitions/2/magneticModuleV2.json +69 -0
  367. opentrons_shared_data/data/module/definitions/2/temperatureModuleV1.json +22 -0
  368. opentrons_shared_data/data/module/definitions/2/temperatureModuleV2.json +69 -0
  369. opentrons_shared_data/data/module/definitions/2/thermocyclerModuleV1.json +23 -0
  370. opentrons_shared_data/data/module/definitions/3/absorbanceReaderV1.json +60 -0
  371. opentrons_shared_data/data/module/definitions/3/flexStackerModuleV1.json +89 -0
  372. opentrons_shared_data/data/module/definitions/3/heaterShakerModuleV1.json +218 -0
  373. opentrons_shared_data/data/module/definitions/3/magneticBlockV1.json +84 -0
  374. opentrons_shared_data/data/module/definitions/3/magneticModuleV1.json +67 -0
  375. opentrons_shared_data/data/module/definitions/3/magneticModuleV2.json +120 -0
  376. opentrons_shared_data/data/module/definitions/3/temperatureModuleV1.json +68 -0
  377. opentrons_shared_data/data/module/definitions/3/temperatureModuleV2.json +209 -0
  378. opentrons_shared_data/data/module/definitions/3/thermocyclerModuleV1.json +61 -0
  379. opentrons_shared_data/data/module/definitions/3/thermocyclerModuleV2.json +93 -0
  380. opentrons_shared_data/data/module/schemas/1.json +55 -0
  381. opentrons_shared_data/data/module/schemas/2.json +112 -0
  382. opentrons_shared_data/data/module/schemas/3.json +343 -0
  383. opentrons_shared_data/data/pipette/definitions/1/pipetteModelSpecs.json +11536 -0
  384. opentrons_shared_data/data/pipette/definitions/1/pipetteNameSpecs.json +784 -0
  385. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p10/1_0.json +206 -0
  386. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p10/1_3.json +206 -0
  387. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p10/1_4.json +206 -0
  388. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p10/1_5.json +206 -0
  389. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p10/1_6.json +206 -0
  390. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p1000/1_0.json +206 -0
  391. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p1000/3_0.json +233 -0
  392. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p1000/3_3.json +233 -0
  393. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p1000/3_4.json +323 -0
  394. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p1000/3_5.json +323 -0
  395. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p20/2_0.json +224 -0
  396. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p20/2_1.json +224 -0
  397. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p300/1_0.json +197 -0
  398. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p300/1_3.json +197 -0
  399. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p300/1_4.json +197 -0
  400. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p300/1_5.json +197 -0
  401. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p300/2_0.json +188 -0
  402. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p300/2_1.json +188 -0
  403. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/1_0.json +197 -0
  404. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/1_3.json +197 -0
  405. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/1_4.json +197 -0
  406. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/1_5.json +197 -0
  407. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_0.json +203 -0
  408. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_3.json +203 -0
  409. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_4.json +253 -0
  410. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_5.json +253 -0
  411. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel_em/p1000/1_0.json +320 -0
  412. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel_em/p1000/3_0.json +320 -0
  413. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json +556 -0
  414. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json +561 -0
  415. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json +556 -0
  416. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json +724 -0
  417. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json +858 -0
  418. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p1000/3_6.json +818 -0
  419. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/1_0.json +660 -0
  420. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/3_0.json +660 -0
  421. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/3_1.json +660 -0
  422. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/3_2.json +660 -0
  423. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p10/1_0.json +70 -0
  424. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p10/1_3.json +70 -0
  425. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p10/1_4.json +70 -0
  426. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p10/1_5.json +70 -0
  427. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/1_0.json +70 -0
  428. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/1_3.json +70 -0
  429. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/1_4.json +70 -0
  430. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/1_5.json +70 -0
  431. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/2_0.json +69 -0
  432. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/2_1.json +69 -0
  433. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/2_2.json +69 -0
  434. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/3_0.json +81 -0
  435. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/3_3.json +81 -0
  436. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/3_4.json +90 -0
  437. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/3_5.json +90 -0
  438. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/3_6.json +90 -0
  439. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p1000/3_7.json +81 -0
  440. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p20/2_0.json +72 -0
  441. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p20/2_1.json +72 -0
  442. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p20/2_2.json +72 -0
  443. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p300/1_0.json +69 -0
  444. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p300/1_3.json +69 -0
  445. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p300/1_4.json +69 -0
  446. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p300/1_5.json +69 -0
  447. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p300/2_0.json +68 -0
  448. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p300/2_1.json +68 -0
  449. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/1_0.json +69 -0
  450. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/1_3.json +69 -0
  451. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/1_4.json +69 -0
  452. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/1_5.json +69 -0
  453. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_0.json +83 -0
  454. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_3.json +83 -0
  455. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_4.json +88 -0
  456. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_5.json +88 -0
  457. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_6.json +88 -0
  458. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p10/1_0.json +42 -0
  459. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p10/1_3.json +42 -0
  460. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p10/1_4.json +42 -0
  461. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p10/1_5.json +42 -0
  462. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p10/1_6.json +42 -0
  463. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p10/placeholder.gltf +0 -0
  464. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p1000/1_0.json +42 -0
  465. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p1000/3_0.json +55 -0
  466. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p1000/3_3.json +55 -0
  467. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p1000/3_4.json +55 -0
  468. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p1000/3_5.json +55 -0
  469. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p1000/placeholder.gltf +0 -0
  470. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p20/2_0.json +42 -0
  471. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p20/2_1.json +42 -0
  472. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p20/placeholder.gltf +0 -0
  473. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/1_0.json +42 -0
  474. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/1_3.json +42 -0
  475. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/1_4.json +42 -0
  476. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/1_5.json +42 -0
  477. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/2_0.json +42 -0
  478. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/2_1.json +42 -0
  479. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p300/placeholder.gltf +0 -0
  480. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/1_0.json +42 -0
  481. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/1_3.json +42 -0
  482. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/1_4.json +42 -0
  483. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/1_5.json +42 -0
  484. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/3_0.json +47 -0
  485. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/3_3.json +47 -0
  486. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/3_4.json +47 -0
  487. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/3_5.json +51 -0
  488. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel/p50/placeholder.gltf +0 -0
  489. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel_em/p1000/1_0.json +55 -0
  490. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel_em/p1000/3_0.json +55 -0
  491. opentrons_shared_data/data/pipette/definitions/2/geometry/eight_channel_em/p1000/placeholder.gltf +0 -0
  492. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/1_0.json +296 -0
  493. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_0.json +309 -0
  494. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_3.json +309 -0
  495. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_4.json +309 -0
  496. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_5.json +309 -0
  497. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_6.json +309 -0
  498. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p1000/placeholder.gltf +0 -0
  499. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p200/1_0.json +305 -0
  500. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p200/3_0.json +309 -0
  501. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p200/3_1.json +309 -0
  502. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p200/3_2.json +309 -0
  503. opentrons_shared_data/data/pipette/definitions/2/geometry/ninety_six_channel/p200/placeholder.gltf +0 -0
  504. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p10/1_0.json +15 -0
  505. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p10/1_3.json +15 -0
  506. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p10/1_4.json +15 -0
  507. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p10/1_5.json +15 -0
  508. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p10/placeholder.gltf +0 -0
  509. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/1_0.json +15 -0
  510. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/1_3.json +15 -0
  511. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/1_4.json +15 -0
  512. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/1_5.json +15 -0
  513. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/2_0.json +15 -0
  514. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/2_1.json +15 -0
  515. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/2_2.json +15 -0
  516. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_0.json +28 -0
  517. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_3.json +28 -0
  518. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_4.json +28 -0
  519. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_5.json +28 -0
  520. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_6.json +28 -0
  521. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_7.json +28 -0
  522. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/placeholder.gltf +0 -0
  523. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p20/2_0.json +15 -0
  524. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p20/2_1.json +15 -0
  525. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p20/2_2.json +15 -0
  526. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p20/placeholder.gltf +0 -0
  527. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/1_0.json +15 -0
  528. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/1_3.json +15 -0
  529. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/1_4.json +15 -0
  530. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/1_5.json +15 -0
  531. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/2_0.json +15 -0
  532. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/2_1.json +15 -0
  533. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/placeholder.gltf +0 -0
  534. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/1_0.json +15 -0
  535. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/1_3.json +15 -0
  536. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/1_4.json +15 -0
  537. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/1_5.json +15 -0
  538. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/3_0.json +20 -0
  539. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/3_3.json +20 -0
  540. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/3_4.json +20 -0
  541. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/3_5.json +20 -0
  542. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/3_6.json +24 -0
  543. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p50/placeholder.gltf +0 -0
  544. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json +51 -0
  545. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json +51 -0
  546. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json +51 -0
  547. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json +40 -0
  548. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json +48 -0
  549. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json +350 -0
  550. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json +353 -0
  551. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json +356 -0
  552. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json +356 -0
  553. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json +287 -0
  554. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json +302 -0
  555. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json +184 -0
  556. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json +61 -0
  557. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json +61 -0
  558. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json +61 -0
  559. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json +61 -0
  560. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json +185 -0
  561. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json +187 -0
  562. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json +122 -0
  563. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json +122 -0
  564. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json +122 -0
  565. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json +104 -0
  566. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json +97 -0
  567. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json +98 -0
  568. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json +98 -0
  569. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json +155 -0
  570. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json +92 -0
  571. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json +88 -0
  572. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json +88 -0
  573. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json +151 -0
  574. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel_em/p1000/default/1_0.json +236 -0
  575. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel_em/p1000/default/3_0.json +236 -0
  576. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json +236 -0
  577. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json +185 -0
  578. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json +188 -0
  579. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json +188 -0
  580. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json +239 -0
  581. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_6.json +239 -0
  582. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p200/default/1_0.json +288 -0
  583. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_0.json +181 -0
  584. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_1.json +192 -0
  585. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_2.json +192 -0
  586. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json +52 -0
  587. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json +52 -0
  588. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json +49 -0
  589. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json +47 -0
  590. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json +41 -0
  591. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json +41 -0
  592. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json +41 -0
  593. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json +41 -0
  594. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json +99 -0
  595. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json +102 -0
  596. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json +102 -0
  597. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json +353 -0
  598. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json +356 -0
  599. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json +282 -0
  600. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json +255 -0
  601. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/3_6.json +255 -0
  602. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p1000/default/3_7.json +255 -0
  603. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json +422 -0
  604. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json +244 -0
  605. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json +304 -0
  606. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json +93 -0
  607. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json +93 -0
  608. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json +93 -0
  609. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json +69 -0
  610. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json +183 -0
  611. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json +185 -0
  612. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json +113 -0
  613. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json +122 -0
  614. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json +122 -0
  615. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json +98 -0
  616. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json +97 -0
  617. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json +98 -0
  618. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json +100 -0
  619. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json +145 -0
  620. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json +145 -0
  621. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json +77 -0
  622. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json +78 -0
  623. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json +78 -0
  624. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json +141 -0
  625. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json +141 -0
  626. opentrons_shared_data/data/pipette/schemas/1/pipetteModelSpecsSchema.json +155 -0
  627. opentrons_shared_data/data/pipette/schemas/1/pipetteNameSpecsSchema.json +91 -0
  628. opentrons_shared_data/data/pipette/schemas/2/pipetteGeometrySchema.json +124 -0
  629. opentrons_shared_data/data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json +117 -0
  630. opentrons_shared_data/data/pipette/schemas/2/pipettePropertiesSchema.json +323 -0
  631. opentrons_shared_data/data/protocol/schemas/1.json +389 -0
  632. opentrons_shared_data/data/protocol/schemas/2.json +416 -0
  633. opentrons_shared_data/data/protocol/schemas/3.json +360 -0
  634. opentrons_shared_data/data/protocol/schemas/4.json +662 -0
  635. opentrons_shared_data/data/protocol/schemas/5.json +701 -0
  636. opentrons_shared_data/data/protocol/schemas/6.json +1225 -0
  637. opentrons_shared_data/data/protocol/schemas/7.json +290 -0
  638. opentrons_shared_data/data/protocol/schemas/8.json +157 -0
  639. opentrons_shared_data/data/robot/definitions/1/ot2.json +16 -0
  640. opentrons_shared_data/data/robot/definitions/1/ot3.json +17 -0
  641. opentrons_shared_data/data/robot/schemas/1.json +83 -0
  642. opentrons_shared_data/data_files/__init__.py +26 -0
  643. opentrons_shared_data/data_files/types.py +84 -0
  644. opentrons_shared_data/deck/__init__.py +108 -0
  645. opentrons_shared_data/deck/types.py +216 -0
  646. opentrons_shared_data/errors/__init__.py +30 -0
  647. opentrons_shared_data/errors/categories.py +60 -0
  648. opentrons_shared_data/errors/codes.py +124 -0
  649. opentrons_shared_data/errors/exceptions.py +1308 -0
  650. opentrons_shared_data/gripper/__init__.py +63 -0
  651. opentrons_shared_data/gripper/constants.py +6 -0
  652. opentrons_shared_data/gripper/gripper_definition.py +98 -0
  653. opentrons_shared_data/labware/__init__.py +59 -0
  654. opentrons_shared_data/labware/constants.py +22 -0
  655. opentrons_shared_data/labware/labware_definition.py +630 -0
  656. opentrons_shared_data/labware/types.py +285 -0
  657. opentrons_shared_data/liquid_classes/__init__.py +44 -0
  658. opentrons_shared_data/liquid_classes/liquid_class_definition.py +555 -0
  659. opentrons_shared_data/liquid_classes/types.py +130 -0
  660. opentrons_shared_data/load.py +57 -0
  661. opentrons_shared_data/module/__init__.py +117 -0
  662. opentrons_shared_data/module/types.py +175 -0
  663. opentrons_shared_data/pipette/__init__.py +107 -0
  664. opentrons_shared_data/pipette/dev_types.py +181 -0
  665. opentrons_shared_data/pipette/file_operation_helpers.py +37 -0
  666. opentrons_shared_data/pipette/load_data.py +301 -0
  667. opentrons_shared_data/pipette/model_constants.py +144 -0
  668. opentrons_shared_data/pipette/mutable_configurations.py +454 -0
  669. opentrons_shared_data/pipette/pipette_definition.py +573 -0
  670. opentrons_shared_data/pipette/pipette_load_name_conversions.py +320 -0
  671. opentrons_shared_data/pipette/scripts/__init__.py +0 -0
  672. opentrons_shared_data/pipette/scripts/build_json_script.py +468 -0
  673. opentrons_shared_data/pipette/scripts/update_configuration_files.py +454 -0
  674. opentrons_shared_data/pipette/types.py +419 -0
  675. opentrons_shared_data/pipette/ul_per_mm.py +68 -0
  676. opentrons_shared_data/protocol/__init__.py +13 -0
  677. opentrons_shared_data/protocol/constants.py +98 -0
  678. opentrons_shared_data/protocol/models/__init__.py +49 -0
  679. opentrons_shared_data/protocol/models/protocol_schema_v6.py +135 -0
  680. opentrons_shared_data/protocol/models/protocol_schema_v7.py +92 -0
  681. opentrons_shared_data/protocol/models/protocol_schema_v8.py +56 -0
  682. opentrons_shared_data/protocol/models/shared_models.py +111 -0
  683. opentrons_shared_data/protocol/types.py +436 -0
  684. opentrons_shared_data/py.typed +0 -0
  685. opentrons_shared_data/robot/__init__.py +33 -0
  686. opentrons_shared_data/robot/types.py +57 -0
  687. opentrons_shared_data-8.8.0a10.dist-info/METADATA +21 -0
  688. opentrons_shared_data-8.8.0a10.dist-info/RECORD +690 -0
  689. opentrons_shared_data-8.8.0a10.dist-info/WHEEL +4 -0
  690. opentrons_shared_data-8.8.0a10.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,1308 @@
1
+ """Exception hierarchy for error codes."""
2
+
3
+ from __future__ import annotations
4
+ from typing import (
5
+ Dict,
6
+ Any,
7
+ Optional,
8
+ List,
9
+ Iterator,
10
+ Union,
11
+ Sequence,
12
+ overload,
13
+ Type,
14
+ TypeVar,
15
+ )
16
+ from logging import getLogger
17
+ from traceback import format_exception_only, format_tb
18
+ import inspect
19
+ import sys
20
+
21
+ from .codes import ErrorCodes
22
+ from .categories import ErrorCategories
23
+
24
+
25
+ log = getLogger(__name__)
26
+
27
+
28
+ class EnumeratedError(Exception):
29
+ """The root class of error-code-bearing exceptions."""
30
+
31
+ @classmethod
32
+ def ensure(cls: Type[_ET], exception: Exception) -> _ET:
33
+ """Ensure that an exception is enumerated.
34
+
35
+ If the passed exception is an EnumeratedError, returns it; otherwise, wraps it in an appropriate
36
+ child class.
37
+ """
38
+ if isinstance(exception, cls):
39
+ return exception
40
+ else:
41
+ return PythonException(exception) # type: ignore[return-value]
42
+
43
+ def __init__(
44
+ self,
45
+ code: ErrorCodes,
46
+ message: Optional[str] = None,
47
+ detail: Optional[Dict[str, str]] = None,
48
+ wrapping: Optional[Sequence["EnumeratedError"]] = None,
49
+ ) -> None:
50
+ """Build an EnumeratedError."""
51
+ self.code = code
52
+ self.message = message or ""
53
+ self.detail = detail or {}
54
+ self.wrapping = wrapping or []
55
+
56
+ def __repr__(self) -> str:
57
+ """Get a representative string for the exception."""
58
+ return f"<{self.__class__.__name__}: code=<{self.code.value.code} {self.code.name}> message={self.message} detail={str(self.detail)}"
59
+
60
+ def __str__(self) -> str:
61
+ """Get a human-readable string."""
62
+ _node = self.detail.get("node")
63
+ return f'Error {self.code.value.code} {self.code.name} ({self.__class__.__name__}){f": {self.message}" if self.message else ""}{f" ({_node})" if _node else ""}'
64
+
65
+ def __eq__(self, other: object) -> bool:
66
+ """Compare if two enumerated errors match."""
67
+ if not isinstance(other, EnumeratedError):
68
+ return NotImplemented
69
+ return (
70
+ self.code == other.code
71
+ and self.message == other.message
72
+ and self.detail == other.detail
73
+ and self.wrapping == other.wrapping
74
+ )
75
+
76
+
77
+ _ET = TypeVar("_ET", bound=EnumeratedError, covariant=True)
78
+
79
+
80
+ class CommunicationError(EnumeratedError):
81
+ """An exception indicating an unknown communications error.
82
+
83
+ This can either be used directly (by not specifying an error code, in which case
84
+ it will get the base communication error code) or as an intermediate parent in which
85
+ case you should specify the code with a super call.
86
+ """
87
+
88
+ def __init__(
89
+ self,
90
+ code: Optional[ErrorCodes] = None,
91
+ message: Optional[str] = None,
92
+ detail: Optional[Dict[str, str]] = None,
93
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
94
+ ) -> None:
95
+ """Build a CommunicationError."""
96
+ if code and code not in code.of_category(
97
+ ErrorCategories.HARDWARE_COMMUNICATION_ERROR
98
+ ):
99
+ log.error(
100
+ f"Error {code.name} is inappropriate for a CommunicationError exception"
101
+ )
102
+ super().__init__(
103
+ code or ErrorCodes.COMMUNICATION_ERROR, message, detail, wrapping
104
+ )
105
+
106
+
107
+ class RoboticsControlError(EnumeratedError):
108
+ """An exception indicating an unknown robotics control error.
109
+
110
+ This can either be used directly (by not specifying an error code, in which case
111
+ it will get the base robotics control error code) or as an intermediate parent in which
112
+ case you should specify the code with a super call.
113
+ """
114
+
115
+ def __init__(
116
+ self,
117
+ code: Optional[ErrorCodes] = None,
118
+ message: Optional[str] = None,
119
+ detail: Optional[Dict[str, str]] = None,
120
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
121
+ ) -> None:
122
+ """Build a RoboticsControlError."""
123
+ if code and code not in code.of_category(
124
+ ErrorCategories.ROBOTICS_CONTROL_ERROR
125
+ ):
126
+ log.error(
127
+ f"Error {code.name} is inappropriate for a RoboticsControlError exception"
128
+ )
129
+
130
+ super().__init__(
131
+ code or ErrorCodes.ROBOTICS_CONTROL_ERROR, message, detail, wrapping
132
+ )
133
+
134
+
135
+ class RoboticsInteractionError(EnumeratedError):
136
+ """An exception indicating an unknown robotics interacion error.
137
+
138
+ This can either be used directly (by not specifying an error code, in which case
139
+ it will get the base robotics interaction error code) or as an intermediate parent in which
140
+ case you should specify the code with a super call.
141
+ """
142
+
143
+ def __init__(
144
+ self,
145
+ code: Optional[ErrorCodes] = None,
146
+ message: Optional[str] = None,
147
+ detail: Optional[Dict[str, str]] = None,
148
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
149
+ ) -> None:
150
+ """Build a RoboticsInteractionError."""
151
+ if code and code not in code.of_category(
152
+ ErrorCategories.ROBOTICS_INTERACTION_ERROR
153
+ ):
154
+ log.error(
155
+ f"Error {code.name} is inappropriate for a RoboticsInteractionError exception"
156
+ )
157
+
158
+ super().__init__(
159
+ code or ErrorCodes.ROBOTICS_INTERACTION_ERROR, message, detail, wrapping
160
+ )
161
+
162
+
163
+ class GeneralError(EnumeratedError):
164
+ """An exception indicating an unknown general error.
165
+
166
+ This can either be used directly (by not specifying an error code, in which case
167
+ it will get the base general error code) or as an intermediate parent in which
168
+ case you should specify the code with a super call.
169
+ """
170
+
171
+ def __init__(
172
+ self,
173
+ code: Optional[ErrorCodes] = None,
174
+ message: Optional[str] = None,
175
+ detail: Optional[Dict[str, str]] = None,
176
+ wrapping: Optional[Sequence[Union[EnumeratedError, BaseException]]] = None,
177
+ ) -> None:
178
+ """Build a GeneralError."""
179
+ if code and code not in code.of_category(ErrorCategories.GENERAL_ERROR):
180
+ log.error(
181
+ f"Error {code.name} is inappropriate for a GeneralError exception"
182
+ )
183
+
184
+ def _wrapped_excs() -> Iterator[EnumeratedError]:
185
+ if not wrapping:
186
+ return
187
+ for exc in wrapping:
188
+ if isinstance(exc, EnumeratedError):
189
+ yield exc
190
+ else:
191
+ yield PythonException(exc)
192
+
193
+ super().__init__(
194
+ code or ErrorCodes.GENERAL_ERROR, message, detail, list(_wrapped_excs())
195
+ )
196
+
197
+
198
+ def _exc_harvest_predicate(v: Any) -> bool:
199
+ if inspect.isroutine(v):
200
+ return False
201
+ if inspect.ismethoddescriptor(v):
202
+ return False
203
+ # on python 3.11 and up we can check if things are method wrappers, which basic builtin
204
+ # dunders like __add__ are, but until then we can't and also don't know this is real
205
+ if sys.version_info.minor >= 11 and inspect.ismethodwrapper(v): # type: ignore[attr-defined]
206
+ return False
207
+ return True
208
+
209
+
210
+ class PythonException(GeneralError):
211
+ """An exception wrapping a base exception but with a GeneralError code and storing details."""
212
+
213
+ def __init__(self, exc: BaseException) -> None:
214
+ """Build a PythonException."""
215
+
216
+ def _descend_exc_ctx(exc: BaseException) -> List[PythonException]:
217
+ descendants: List[PythonException] = []
218
+ if exc.__context__:
219
+ descendants.append(PythonException(exc.__context__))
220
+ if exc.__cause__:
221
+ descendants.append(PythonException(exc.__cause__))
222
+ return descendants
223
+
224
+ base_details = {
225
+ k: str(v)
226
+ for k, v in inspect.getmembers(exc, _exc_harvest_predicate)
227
+ if not k.startswith("_")
228
+ }
229
+ try:
230
+ tb = exc.__traceback__
231
+ except AttributeError:
232
+ tb = None
233
+
234
+ if tb:
235
+ base_details["traceback"] = "\n".join(format_tb(tb))
236
+ base_details["class"] = type(exc).__name__
237
+
238
+ super().__init__(
239
+ message="\n".join(format_exception_only(type(exc), exc)).strip(),
240
+ detail=base_details,
241
+ wrapping=_descend_exc_ctx(exc),
242
+ )
243
+
244
+
245
+ class RobotInUseError(CommunicationError):
246
+ """An error indicating that an action cannot proceed because another is in progress."""
247
+
248
+ def __init__(
249
+ self,
250
+ message: Optional[str] = None,
251
+ detail: Optional[Dict[str, str]] = None,
252
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
253
+ ) -> None:
254
+ """Build a CanbusCommunicationError."""
255
+ super().__init__(ErrorCodes.ROBOT_IN_USE, message, detail, wrapping)
256
+
257
+
258
+ class CanbusCommunicationError(CommunicationError):
259
+ """An error indicating a problem with canbus communication."""
260
+
261
+ def __init__(
262
+ self,
263
+ message: Optional[str] = None,
264
+ detail: Optional[Dict[str, str]] = None,
265
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
266
+ ) -> None:
267
+ """Build a CanbusCommunicationError."""
268
+ super().__init__(
269
+ ErrorCodes.CANBUS_COMMUNICATION_ERROR, message, detail, wrapping
270
+ )
271
+
272
+
273
+ class InternalUSBCommunicationError(CommunicationError):
274
+ """An error indicating a problem with internal USB communication - e.g. with the rear panel."""
275
+
276
+ def __init__(
277
+ self,
278
+ message: Optional[str] = None,
279
+ detail: Optional[Dict[str, str]] = None,
280
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
281
+ ) -> None:
282
+ """Build an InternalUSBCommunicationError."""
283
+ super().__init__(
284
+ ErrorCodes.INTERNAL_USB_COMMUNICATION_ERROR, message, detail, wrapping
285
+ )
286
+
287
+
288
+ class ModuleCommunicationError(CommunicationError):
289
+ """An error indicating a problem with module communication."""
290
+
291
+ def __init__(
292
+ self,
293
+ message: Optional[str] = None,
294
+ detail: Optional[Dict[str, str]] = None,
295
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
296
+ ) -> None:
297
+ """Build a CanbusCommunicationError."""
298
+ super().__init__(
299
+ ErrorCodes.CANBUS_COMMUNICATION_ERROR, message, detail, wrapping
300
+ )
301
+
302
+
303
+ class CommandTimedOutError(CommunicationError):
304
+ """An error indicating that a command timed out."""
305
+
306
+ def __init__(
307
+ self,
308
+ message: Optional[str] = None,
309
+ detail: Optional[Dict[str, str]] = None,
310
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
311
+ ) -> None:
312
+ """Build a CommandTimedOutError."""
313
+ super().__init__(ErrorCodes.COMMAND_TIMED_OUT, message, detail, wrapping)
314
+
315
+
316
+ class FirmwareUpdateFailedError(CommunicationError):
317
+ """An error indicating that a firmware update failed."""
318
+
319
+ def __init__(
320
+ self,
321
+ message: Optional[str] = None,
322
+ detail: Optional[Dict[str, str]] = None,
323
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
324
+ ) -> None:
325
+ """Build a FirmwareUpdateFailedError."""
326
+ super().__init__(ErrorCodes.FIRMWARE_UPDATE_FAILED, message, detail, wrapping)
327
+
328
+
329
+ class InternalMessageFormatError(CommunicationError):
330
+ """An error indicating that an internal message was formatted incorrectly."""
331
+
332
+ def __init__(
333
+ self,
334
+ message: Optional[str] = None,
335
+ detail: Optional[Dict[str, str]] = None,
336
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
337
+ ) -> None:
338
+ """Build an InternalMesasgeFormatError."""
339
+ super().__init__(
340
+ ErrorCodes.INTERNAL_MESSAGE_FORMAT_ERROR, message, detail, wrapping
341
+ )
342
+
343
+
344
+ class CANBusConfigurationError(CommunicationError):
345
+ """An error indicating a misconfiguration of the CANbus."""
346
+
347
+ def __init__(
348
+ self,
349
+ message: Optional[str] = None,
350
+ detail: Optional[Dict[str, str]] = None,
351
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
352
+ ) -> None:
353
+ """Build a CANBus Configuration Error."""
354
+ super().__init__(
355
+ ErrorCodes.CANBUS_CONFIGURATION_ERROR, message, detail, wrapping
356
+ )
357
+
358
+
359
+ class CANBusBusError(CommunicationError):
360
+ """An error indicating a low-level bus error on the CANbus like an error frame."""
361
+
362
+ def __init__(
363
+ self,
364
+ message: Optional[str] = None,
365
+ detail: Optional[Dict[str, str]] = None,
366
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
367
+ ) -> None:
368
+ """Build a CANBus Bus Error."""
369
+ super().__init__(ErrorCodes.CANBUS_BUS_ERROR, message, detail, wrapping)
370
+
371
+
372
+ class MotionFailedError(RoboticsControlError):
373
+ """An error indicating that a motion failed."""
374
+
375
+ def __init__(
376
+ self,
377
+ message: Optional[str] = None,
378
+ detail: Optional[Dict[str, str]] = None,
379
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
380
+ ) -> None:
381
+ """Build a MotionFailedError."""
382
+ super().__init__(ErrorCodes.MOTION_FAILED, message, detail, wrapping)
383
+
384
+
385
+ class HomingFailedError(RoboticsControlError):
386
+ """An error indicating that a homing failed."""
387
+
388
+ def __init__(
389
+ self,
390
+ message: Optional[str] = None,
391
+ detail: Optional[Dict[str, str]] = None,
392
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
393
+ ) -> None:
394
+ """Build a HomingFailedError."""
395
+ super().__init__(ErrorCodes.HOMING_FAILED, message, detail, wrapping)
396
+
397
+
398
+ class StallOrCollisionDetectedError(RoboticsControlError):
399
+ """An error indicating that a stall or collision occurred."""
400
+
401
+ def __init__(
402
+ self,
403
+ message: Optional[str] = None,
404
+ detail: Optional[Dict[str, str]] = None,
405
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
406
+ ) -> None:
407
+ """Build a StallOrCollisionDetectedError."""
408
+ super().__init__(
409
+ ErrorCodes.STALL_OR_COLLISION_DETECTED, message, detail, wrapping
410
+ )
411
+
412
+
413
+ class FlexStackerStallError(RoboticsControlError):
414
+ """An error indicating that a stall or collision occurred in the flex stacker."""
415
+
416
+ def __init__(
417
+ self,
418
+ serial: str,
419
+ axis: str,
420
+ message: Optional[str] = None,
421
+ detail: Optional[Dict[str, str]] = None,
422
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
423
+ ) -> None:
424
+ """Build a FlexStackerStallError."""
425
+ self.serial = serial
426
+ self.axis = axis
427
+ super().__init__(
428
+ ErrorCodes.STACKER_STALL_OR_COLLISION_DETECTED,
429
+ message,
430
+ detail,
431
+ wrapping,
432
+ )
433
+
434
+
435
+ class MotionPlanningFailureError(RoboticsControlError):
436
+ """An error indicating that motion planning failed."""
437
+
438
+ def __init__(
439
+ self,
440
+ message: Optional[str] = None,
441
+ detail: Optional[Dict[str, str]] = None,
442
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
443
+ ) -> None:
444
+ """Build a MotionPlanningFailureError."""
445
+ super().__init__(ErrorCodes.MOTION_PLANNING_FAILURE, message, detail, wrapping)
446
+
447
+
448
+ class PositionEstimationInvalidError(RoboticsControlError):
449
+ """An error indicating that a command failed because position estimation was invalid."""
450
+
451
+ def __init__(
452
+ self,
453
+ message: Optional[str] = None,
454
+ detail: Optional[Dict[str, str]] = None,
455
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
456
+ ) -> None:
457
+ """Build a PositionEstimationFailedError."""
458
+ super().__init__(
459
+ ErrorCodes.POSITION_ESTIMATION_INVALID, message, detail, wrapping
460
+ )
461
+
462
+
463
+ class MoveConditionNotMetError(RoboticsControlError):
464
+ """An error indicating that a move completed without its condition being met."""
465
+
466
+ def __init__(
467
+ self,
468
+ message: Optional[str] = None,
469
+ detail: Optional[Dict[str, str]] = None,
470
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
471
+ ) -> None:
472
+ """Build a MoveConditionNotMetError."""
473
+ super().__init__(
474
+ ErrorCodes.MOVE_CONDITION_NOT_MET,
475
+ message or "Move completed without its complete condition being met",
476
+ detail,
477
+ wrapping,
478
+ )
479
+
480
+
481
+ class CalibrationStructureNotFoundError(RoboticsControlError):
482
+ """An error indicating that a calibration square was not able to be found."""
483
+
484
+ def __init__(
485
+ self,
486
+ structure_height: float,
487
+ lower_limit: float,
488
+ detail: Optional[Dict[str, str]] = None,
489
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
490
+ ) -> None:
491
+ """Build a CalibrationStructureNotFoundError."""
492
+ super().__init__(
493
+ ErrorCodes.CALIBRATION_STRUCTURE_NOT_FOUND,
494
+ f"Structure height at z={structure_height}mm beyond lower limit: {lower_limit}.",
495
+ detail,
496
+ wrapping,
497
+ )
498
+
499
+
500
+ class FailedGripperPickupError(RoboticsControlError):
501
+ """Raised when the gripper expects to be holding an object, but the jaw is closed farther than expected."""
502
+
503
+ def __init__(
504
+ self,
505
+ message: Optional[str] = None,
506
+ details: Optional[Dict[str, Any]] = None,
507
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
508
+ ) -> None:
509
+ """Build a FailedGripperPickupError."""
510
+ super().__init__(
511
+ ErrorCodes.FAILED_GRIPPER_PICKUP_ERROR,
512
+ message or "Expected to grip labware, but none found.",
513
+ details,
514
+ wrapping,
515
+ )
516
+
517
+
518
+ class EdgeNotFoundError(RoboticsControlError):
519
+ """An error indicating that a calibration square edge was not able to be found."""
520
+
521
+ def __init__(
522
+ self,
523
+ edge_name: str,
524
+ stride: float,
525
+ detail: Optional[Dict[str, str]] = None,
526
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
527
+ ) -> None:
528
+ """Build a EdgeNotFoundError."""
529
+ super().__init__(
530
+ ErrorCodes.EDGE_NOT_FOUND,
531
+ f"Edge {edge_name} could not be verified at {stride} mm resolution.",
532
+ detail,
533
+ wrapping,
534
+ )
535
+
536
+
537
+ class EarlyCapacitiveSenseTrigger(RoboticsControlError):
538
+ """An error indicating that a capacitive probe triggered too early."""
539
+
540
+ def __init__(
541
+ self,
542
+ found: float,
543
+ nominal: float,
544
+ detail: Optional[Dict[str, str]] = None,
545
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
546
+ ) -> None:
547
+ """Build a EarlyCapacitiveSenseTrigger."""
548
+ super().__init__(
549
+ ErrorCodes.EARLY_CAPACITIVE_SENSE_TRIGGER,
550
+ f"Calibration triggered early at z={found}mm, expected {nominal}",
551
+ detail,
552
+ wrapping,
553
+ )
554
+
555
+
556
+ class InaccurateNonContactSweepError(RoboticsControlError):
557
+ """An error indicating that a capacitive sweep was inaccurate."""
558
+
559
+ def __init__(
560
+ self,
561
+ found: float,
562
+ nominal: float,
563
+ detail: Optional[Dict[str, str]] = None,
564
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
565
+ ) -> None:
566
+ """Build a InaccurateNonContactSweepError."""
567
+ msg = (
568
+ f"Calibration detected a slot width of {found:.3f}mm, "
569
+ f"which is too far from the design width of {nominal:.3f}mm"
570
+ )
571
+ super().__init__(
572
+ ErrorCodes.INACCURATE_NON_CONTACT_SWEEP,
573
+ msg,
574
+ detail,
575
+ wrapping,
576
+ )
577
+
578
+
579
+ class MisalignedGantryError(RoboticsControlError):
580
+ """An error indicating that the robot's gantry and deck are misaligned."""
581
+
582
+ def __init__(
583
+ self,
584
+ detail: Optional[Dict[str, str]] = None,
585
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
586
+ ) -> None:
587
+ """Build a MisalignedGantryError."""
588
+ msg = "This machine is misaligned and requires maintenance."
589
+ if detail:
590
+ msg += str(detail)
591
+ super().__init__(
592
+ ErrorCodes.MISALIGNED_GANTRY,
593
+ msg,
594
+ detail,
595
+ wrapping,
596
+ )
597
+
598
+
599
+ class UnmatchedTipPresenceStates(RoboticsControlError):
600
+ """An error indicating that a tip presence check resulted in two differing responses."""
601
+
602
+ def __init__(
603
+ self,
604
+ states: Dict[int, int],
605
+ detail: Optional[Dict[str, str]] = None,
606
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
607
+ ) -> None:
608
+ """Build an UnmatchedTipPresenceStatesError."""
609
+ format_tip_state = {0: "not detected", 1: "detected"}
610
+ msg = (
611
+ f"Received two differing tip presence statuses."
612
+ f" Rear Sensor tips: {format_tip_state[states[0]]}."
613
+ f" Front Sensor tips: {format_tip_state[states[1]]}."
614
+ )
615
+ if detail:
616
+ msg += str(detail)
617
+ super().__init__(
618
+ ErrorCodes.UNMATCHED_TIP_PRESENCE_STATES,
619
+ msg,
620
+ detail,
621
+ wrapping,
622
+ )
623
+
624
+
625
+ class PositionUnknownError(RoboticsControlError):
626
+ """An error indicating that the robot's position is unknown."""
627
+
628
+ def __init__(
629
+ self,
630
+ message: Optional[str] = None,
631
+ detail: Optional[Dict[str, str]] = None,
632
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
633
+ ) -> None:
634
+ """Build a PositionUnknownError."""
635
+ super().__init__(ErrorCodes.POSITION_UNKNOWN, message, detail, wrapping)
636
+
637
+
638
+ class ExecutionCancelledError(RoboticsControlError):
639
+ """An error indicating that the robot's execution manager has been cancelled."""
640
+
641
+ def __init__(
642
+ self,
643
+ message: Optional[str] = None,
644
+ detail: Optional[Dict[str, str]] = None,
645
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
646
+ ) -> None:
647
+ """Build a ExecutionCancelledError."""
648
+ super().__init__(ErrorCodes.EXECUTION_CANCELLED, message, detail, wrapping)
649
+
650
+
651
+ class MotorDriverError(RoboticsControlError):
652
+ """An error indicating that a motor driver is in error state."""
653
+
654
+ def __init__(
655
+ self,
656
+ message: Optional[str] = None,
657
+ detail: Optional[Dict[str, str]] = None,
658
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
659
+ ) -> None:
660
+ """Build a MotorDriverError."""
661
+ super().__init__(ErrorCodes.MOTOR_DRIVER_ERROR, message, detail, wrapping)
662
+
663
+
664
+ class PipetteLiquidNotFoundError(RoboticsControlError):
665
+ """Error raised if liquid sensing move completes without detecting liquid."""
666
+
667
+ def __init__(
668
+ self,
669
+ message: Optional[str] = None,
670
+ detail: Optional[Dict[str, str]] = None,
671
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
672
+ ) -> None:
673
+ """Initialize PipetteLiquidNotFoundError."""
674
+ super().__init__(
675
+ ErrorCodes.PIPETTE_LIQUID_NOT_FOUND,
676
+ message,
677
+ detail,
678
+ wrapping,
679
+ )
680
+
681
+
682
+ class TipHitWellBottomError(RoboticsControlError):
683
+ """Error raised if tip hits bottom of well while trying to detect liquid level."""
684
+
685
+ def __init__(
686
+ self,
687
+ message: Optional[str] = None,
688
+ detail: Optional[Dict[str, str]] = None,
689
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
690
+ ) -> None:
691
+ """Initialize TipHitWellBottomError."""
692
+ super().__init__(
693
+ ErrorCodes.TIP_HIT_WELL_BOTTOM,
694
+ message,
695
+ detail,
696
+ wrapping,
697
+ )
698
+
699
+
700
+ class LabwareDroppedError(RoboticsInteractionError):
701
+ """An error indicating that the gripper dropped labware it was holding."""
702
+
703
+ def __init__(
704
+ self,
705
+ message: Optional[str] = None,
706
+ detail: Optional[Dict[str, str]] = None,
707
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
708
+ ) -> None:
709
+ """Build a LabwareDroppedError."""
710
+ super().__init__(ErrorCodes.LABWARE_DROPPED, message, detail, wrapping)
711
+
712
+
713
+ class TipPickupFailedError(RoboticsInteractionError):
714
+ """An error indicating that a pipette failed to pick up a tip."""
715
+
716
+ def __init__(
717
+ self,
718
+ message: Optional[str] = None,
719
+ detail: Optional[Dict[str, str]] = None,
720
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
721
+ ) -> None:
722
+ """Build a TipPickupFailedError."""
723
+ super().__init__(ErrorCodes.TIP_PICKUP_FAILED, message, detail, wrapping)
724
+
725
+
726
+ class TipDropFailedError(RoboticsInteractionError):
727
+ """An error indicating that a pipette failed to drop a tip."""
728
+
729
+ def __init__(
730
+ self,
731
+ message: Optional[str] = None,
732
+ detail: Optional[Dict[str, str]] = None,
733
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
734
+ ) -> None:
735
+ """Build a TipPickupFailedError."""
736
+ super().__init__(ErrorCodes.TIP_DROP_FAILED, message, detail, wrapping)
737
+
738
+
739
+ class UnexpectedTipRemovalError(RoboticsInteractionError):
740
+ """An error indicating that a pipette did not have a tip when it should (aka it fell off)."""
741
+
742
+ def __init__(
743
+ self,
744
+ action: str,
745
+ pipette_name: str,
746
+ mount: str,
747
+ detail: Optional[Dict[str, str]] = None,
748
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
749
+ ) -> None:
750
+ """Build an UnexpectedTipRemovalError."""
751
+ checked_detail: Dict[str, Any] = detail or {}
752
+ checked_detail["pipette_name"] = pipette_name
753
+ checked_detail["mount"] = mount
754
+ message = f"Cannot perform {action} without a tip attached."
755
+ super().__init__(
756
+ ErrorCodes.UNEXPECTED_TIP_REMOVAL, message, checked_detail, wrapping
757
+ )
758
+
759
+
760
+ class UnexpectedTipAttachError(RoboticsInteractionError):
761
+ """An error indicating that a pipette had a tip when it shouldn't."""
762
+
763
+ def __init__(
764
+ self,
765
+ action: str,
766
+ pipette_name: str,
767
+ mount: str,
768
+ message: Optional[str] = None,
769
+ detail: Optional[Dict[str, str]] = None,
770
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
771
+ ) -> None:
772
+ """Build an UnexpectedTipAttachError."""
773
+ checked_detail: Dict[str, Any] = detail or {}
774
+ checked_detail["pipette_name"] = pipette_name
775
+ checked_detail["mount"] = mount
776
+ message = f"Cannot perform {action} with a tip already attached."
777
+ super().__init__(ErrorCodes.UNEXPECTED_TIP_ATTACH, message, detail, wrapping)
778
+
779
+
780
+ class HepaUVFailedError(RoboticsInteractionError):
781
+ """An error indicating that the HEPA UV module has errored."""
782
+
783
+ def __init__(
784
+ self,
785
+ message: Optional[str] = None,
786
+ detail: Optional[Dict[str, str]] = None,
787
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
788
+ ) -> None:
789
+ """Build an HepaUVFailedError."""
790
+ super().__init__(ErrorCodes.HEPA_UV_FAILED, message, detail, wrapping)
791
+
792
+
793
+ class FlexStackerShuttleMissingError(RoboticsInteractionError):
794
+ """An error indicating the Flex Stacker shuttle cannot be detected."""
795
+
796
+ def __init__(
797
+ self,
798
+ serial: str,
799
+ expected_state: str,
800
+ shuttle_state: str,
801
+ message: Optional[str] = None,
802
+ detail: Optional[Dict[str, str]] = None,
803
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
804
+ ) -> None:
805
+ """Build a FlexStackerStallError."""
806
+ checked_detail: Dict[str, Any] = detail or {}
807
+ checked_detail["serial"] = serial
808
+ checked_detail["expected_state"] = expected_state
809
+ checked_detail["shuttle_state"] = shuttle_state
810
+ if message is not None:
811
+ checked_message = message
812
+ else:
813
+ checked_message = (
814
+ "Flex Stacker shuttle not detected in state "
815
+ f"{expected_state}, found {shuttle_state}."
816
+ )
817
+ super().__init__(
818
+ ErrorCodes.STACKER_SHUTTLE_MISSING,
819
+ checked_message,
820
+ checked_detail,
821
+ wrapping,
822
+ )
823
+
824
+
825
+ class FlexStackerShuttleLabwareError(RoboticsInteractionError):
826
+ """An error occurred during Flex Stacker shuttle labware detection."""
827
+
828
+ def __init__(
829
+ self,
830
+ serial: str,
831
+ shuttle_state: str,
832
+ labware_expected: bool,
833
+ message: Optional[str] = None,
834
+ detail: Optional[Dict[str, str]] = None,
835
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
836
+ ) -> None:
837
+ """Build a FlexStackerStallError."""
838
+ checked_detail: Dict[str, Any] = detail or {}
839
+ checked_detail["serial"] = serial
840
+ checked_detail["shuttle_state"] = shuttle_state
841
+ checked_detail["labware_expected"] = labware_expected
842
+ if message is not None:
843
+ checked_message = message
844
+ else:
845
+ checked_message = (
846
+ f"Labware {'not' if labware_expected else ''} detected on shuttle"
847
+ )
848
+ super().__init__(
849
+ ErrorCodes.STACKER_SHUTTLE_LABWARE_FAILED,
850
+ checked_message,
851
+ checked_detail,
852
+ wrapping,
853
+ )
854
+
855
+
856
+ class FlexStackerHopperLabwareError(RoboticsInteractionError):
857
+ """An error occurred when detecting labware inside the Flex Stacker hopper."""
858
+
859
+ def __init__(
860
+ self,
861
+ serial: str,
862
+ labware_expected: bool,
863
+ message: Optional[str] = None,
864
+ detail: Optional[Dict[str, str]] = None,
865
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
866
+ ) -> None:
867
+ """Build a FlexStackerStallError."""
868
+ checked_detail: Dict[str, Any] = detail or {}
869
+ checked_detail["serial"] = serial
870
+ checked_detail["labware_expected"] = labware_expected
871
+ if message is not None:
872
+ checked_message = message
873
+ else:
874
+ checked_message = f"Labware {'not' if labware_expected else ''} detected in Flex Stacker hopper"
875
+ super().__init__(
876
+ ErrorCodes.STACKER_HOPPER_LABWARE_FAILED,
877
+ checked_message,
878
+ checked_detail,
879
+ wrapping,
880
+ )
881
+
882
+
883
+ class FlexStackerShuttleNotEmptyError(RoboticsInteractionError):
884
+ """An error occurred when the Flex Stacker Shuttle is not empty when it should be."""
885
+
886
+ def __init__(
887
+ self,
888
+ serial: str,
889
+ shuttle_state: str,
890
+ labware_expected: bool,
891
+ message: Optional[str] = None,
892
+ detail: Optional[Dict[str, str]] = None,
893
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
894
+ ) -> None:
895
+ """Build a FlexStackerShuttleNotEmptyError."""
896
+ checked_detail: Dict[str, Any] = detail or {}
897
+ checked_detail["serial"] = serial
898
+ checked_detail["shuttle_state"] = shuttle_state
899
+ checked_detail["labware_expected"] = labware_expected
900
+ if message is not None:
901
+ checked_message = message
902
+ else:
903
+ checked_message = f"Flex Stacker {serial} shuttle is not empty."
904
+ super().__init__(
905
+ ErrorCodes.STACKER_SHUTTLE_OCCUPIED,
906
+ checked_message,
907
+ checked_detail,
908
+ wrapping,
909
+ )
910
+
911
+
912
+ class FirmwareUpdateRequiredError(RoboticsInteractionError):
913
+ """An error indicating that a firmware update is required."""
914
+
915
+ def __init__(
916
+ self,
917
+ action: str,
918
+ subsystems_to_update: List[Any],
919
+ message: Optional[str] = None,
920
+ detail: Optional[Dict[str, str]] = None,
921
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
922
+ ) -> None:
923
+ """Build a FirmwareUpdateRequiredError."""
924
+ checked_detail: Dict[str, Any] = detail or {}
925
+ checked_detail["identifier"] = action
926
+ checked_detail["subsystems_to_update"] = subsystems_to_update
927
+ message = f"Cannot perform {action} until {subsystems_to_update} are updated."
928
+ super().__init__(ErrorCodes.FIRMWARE_UPDATE_REQUIRED, message, detail, wrapping)
929
+
930
+
931
+ class PipetteOverpressureError(RoboticsInteractionError):
932
+ """An error indicating that a pipette experienced an overpressure event, likely because of a clog."""
933
+
934
+ def __init__(
935
+ self,
936
+ message: Optional[str] = None,
937
+ detail: Optional[Dict[str, str]] = None,
938
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
939
+ ) -> None:
940
+ """Build an PipetteOverpressureError."""
941
+ super().__init__(ErrorCodes.PIPETTE_OVERPRESSURE, message, detail, wrapping)
942
+
943
+
944
+ class EStopActivatedError(RoboticsInteractionError):
945
+ """An error indicating that the E-stop was activated."""
946
+
947
+ def __init__(
948
+ self,
949
+ message: Optional[str] = None,
950
+ detail: Optional[Dict[str, str]] = None,
951
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
952
+ ) -> None:
953
+ """Build an EStopActivatedError."""
954
+ super().__init__(ErrorCodes.E_STOP_ACTIVATED, message, detail, wrapping)
955
+
956
+
957
+ class EStopNotPresentError(RoboticsInteractionError):
958
+ """An error indicating that the E-stop is not present."""
959
+
960
+ def __init__(
961
+ self,
962
+ message: Optional[str] = None,
963
+ detail: Optional[Dict[str, str]] = None,
964
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
965
+ ) -> None:
966
+ """Build an EStopNotPresentError."""
967
+ super().__init__(ErrorCodes.E_STOP_NOT_PRESENT, message, detail, wrapping)
968
+
969
+
970
+ class PipetteNotPresentError(RoboticsInteractionError):
971
+ """An error indicating that the specified pipette is not present."""
972
+
973
+ def __init__(
974
+ self,
975
+ message: Optional[str] = None,
976
+ detail: Optional[Dict[str, str]] = None,
977
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
978
+ ) -> None:
979
+ """Build an PipetteNotPresentError."""
980
+ super().__init__(ErrorCodes.PIPETTE_NOT_PRESENT, message, detail, wrapping)
981
+
982
+
983
+ class GripperNotPresentError(RoboticsInteractionError):
984
+ """An error indicating that the specified gripper is not present."""
985
+
986
+ def __init__(
987
+ self,
988
+ message: Optional[str] = None,
989
+ detail: Optional[Dict[str, str]] = None,
990
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
991
+ ) -> None:
992
+ """Build a GripperNotPresentError."""
993
+ super().__init__(ErrorCodes.GRIPPER_NOT_PRESENT, message, detail, wrapping)
994
+
995
+
996
+ class InvalidActuator(RoboticsInteractionError):
997
+ """An error indicating that a specified actuator is not valid."""
998
+
999
+ def __init__(
1000
+ self,
1001
+ message: Optional[str] = None,
1002
+ detail: Optional[Dict[str, str]] = None,
1003
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1004
+ ) -> None:
1005
+ """Build an InvalidActuator."""
1006
+ super().__init__(ErrorCodes.INVALID_ACTUATOR, message, detail, wrapping)
1007
+
1008
+
1009
+ class ModuleNotPresent(RoboticsInteractionError):
1010
+ """An error indicating that a specific module was not present."""
1011
+
1012
+ def __init__(
1013
+ self,
1014
+ identifier: str,
1015
+ message: Optional[str] = None,
1016
+ detail: Optional[Dict[str, str]] = None,
1017
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1018
+ ) -> None:
1019
+ """Build a ModuleNotPresentError."""
1020
+ checked_detail: Dict[str, Any] = detail or {}
1021
+ checked_detail["identifier"] = identifier
1022
+ checked_message = message or f"Module {identifier} is not present"
1023
+ super().__init__(
1024
+ ErrorCodes.MODULE_NOT_PRESENT, checked_message, checked_detail, wrapping
1025
+ )
1026
+
1027
+
1028
+ class InvalidInstrumentData(RoboticsInteractionError):
1029
+ """An error indicating that instrument data is invalid."""
1030
+
1031
+ def __init__(
1032
+ self,
1033
+ message: Optional[str] = None,
1034
+ detail: Optional[Dict[str, str]] = None,
1035
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1036
+ ) -> None:
1037
+ """Build an InvalidInstrumentData."""
1038
+ super().__init__(ErrorCodes.INVALID_INSTRUMENT_DATA, message, detail, wrapping)
1039
+
1040
+
1041
+ class InvalidLiquidClassName(RoboticsInteractionError):
1042
+ """An error indicating that a liquid class name does not exist on a pipette."""
1043
+
1044
+ def __init__(
1045
+ self,
1046
+ message: Optional[str] = None,
1047
+ detail: Optional[Dict[str, str]] = None,
1048
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1049
+ ) -> None:
1050
+ """Build an InvalidLiquidClassName."""
1051
+ super().__init__(
1052
+ ErrorCodes.INVALID_LIQUID_CLASS_NAME, message, detail, wrapping
1053
+ )
1054
+
1055
+
1056
+ class TipDetectorNotFound(RoboticsInteractionError):
1057
+ """An error indicating that a tip detector has not been created for a pipette."""
1058
+
1059
+ def __init__(
1060
+ self,
1061
+ message: Optional[str] = None,
1062
+ detail: Optional[Dict[str, str]] = None,
1063
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1064
+ ) -> None:
1065
+ """Build a TipDetectorNotFound."""
1066
+ super().__init__(ErrorCodes.TIP_DETECTOR_NOT_FOUND, message, detail, wrapping)
1067
+
1068
+
1069
+ class APIRemoved(GeneralError):
1070
+ """An error indicating that a specific API is no longer available."""
1071
+
1072
+ @overload
1073
+ def __init__( # noqa: D107
1074
+ self,
1075
+ *,
1076
+ api_element: Optional[str] = None,
1077
+ since_version: Optional[str] = None,
1078
+ current_version: Optional[str] = None,
1079
+ extra_message: Optional[str] = None,
1080
+ detail: Optional[Dict[str, str]] = None,
1081
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1082
+ ) -> None:
1083
+ pass
1084
+
1085
+ @overload
1086
+ def __init__( # noqa: D107
1087
+ self,
1088
+ message: Optional[str] = None,
1089
+ *,
1090
+ detail: Optional[Dict[str, str]] = None,
1091
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1092
+ ) -> None:
1093
+ pass
1094
+
1095
+ def __init__(
1096
+ self,
1097
+ message: Optional[str] = None,
1098
+ *,
1099
+ api_element: Optional[str] = None,
1100
+ since_version: Optional[str] = None,
1101
+ current_version: Optional[str] = None,
1102
+ extra_message: Optional[str] = None,
1103
+ detail: Optional[Dict[str, str]] = None,
1104
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1105
+ ) -> None:
1106
+ """Build an APIRemoved error."""
1107
+ checked_detail: Dict[str, Any] = detail or {}
1108
+ checked_detail["identifier"] = api_element
1109
+ checked_detail["since_version"] = since_version
1110
+ checked_detail["current_version"] = current_version
1111
+
1112
+ checked_api_element = api_element if api_element is not None else "This feature"
1113
+
1114
+ if message is not None:
1115
+ checked_message = message
1116
+ else:
1117
+ if since_version is not None and current_version is not None:
1118
+ checked_message = (
1119
+ f"{checked_api_element} is not available after API version {since_version}."
1120
+ f" You are currently using API version {current_version}."
1121
+ )
1122
+ elif since_version is not None and current_version is None:
1123
+ checked_message = f"{checked_api_element} is not available after API version {since_version}."
1124
+ elif since_version is None and current_version is not None:
1125
+ checked_message = f"{checked_api_element} is not available in API version {current_version}."
1126
+ else:
1127
+ checked_message = f"{checked_api_element} is no longer available in the API version in use."
1128
+
1129
+ if extra_message is not None:
1130
+ checked_message += " " + extra_message
1131
+
1132
+ super().__init__(
1133
+ ErrorCodes.API_REMOVED, checked_message, checked_detail, wrapping
1134
+ )
1135
+
1136
+
1137
+ class IncorrectAPIVersion(GeneralError):
1138
+ """An error indicating that a command was issued that is not supported by the API version in use."""
1139
+
1140
+ @overload
1141
+ def __init__( # noqa: D107
1142
+ self,
1143
+ *,
1144
+ api_element: Optional[str] = None,
1145
+ until_version: Optional[str] = None,
1146
+ current_version: Optional[str] = None,
1147
+ extra_message: Optional[str] = None,
1148
+ detail: Optional[Dict[str, str]] = None,
1149
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1150
+ ) -> None:
1151
+ pass
1152
+
1153
+ @overload
1154
+ def __init__( # noqa: D107
1155
+ self,
1156
+ message: Optional[str] = None,
1157
+ *,
1158
+ detail: Optional[Dict[str, str]] = None,
1159
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1160
+ ) -> None:
1161
+ pass
1162
+
1163
+ def __init__(
1164
+ self,
1165
+ message: Optional[str] = None,
1166
+ *,
1167
+ api_element: Optional[str] = None,
1168
+ until_version: Optional[str] = None,
1169
+ current_version: Optional[str] = None,
1170
+ extra_message: Optional[str] = None,
1171
+ detail: Optional[Dict[str, str]] = None,
1172
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1173
+ ) -> None:
1174
+ """Build an IncorrectAPIVersion error."""
1175
+ checked_detail: Dict[str, Any] = detail or {}
1176
+ checked_detail["identifier"] = api_element
1177
+ checked_detail["until_version"] = until_version
1178
+ checked_detail["current_version"] = current_version
1179
+
1180
+ checked_api_element = api_element if api_element is not None else "This feature"
1181
+
1182
+ if message is not None:
1183
+ checked_message = message
1184
+ else:
1185
+ if until_version is not None and current_version is not None:
1186
+ checked_message = (
1187
+ f"{checked_api_element} is not available until API version {until_version}."
1188
+ f" You are currently using API version {current_version}."
1189
+ )
1190
+ elif until_version is not None and current_version is None:
1191
+ checked_message = f"{checked_api_element} is not available until API version {until_version}."
1192
+ elif until_version is None and current_version is not None:
1193
+ checked_message = f"{checked_api_element} is not available in API version {current_version}."
1194
+ else:
1195
+ checked_message = f"{checked_api_element} is not yet available in the API version in use."
1196
+
1197
+ if extra_message is not None:
1198
+ checked_message += " " + extra_message
1199
+
1200
+ super().__init__(
1201
+ ErrorCodes.INCORRECT_API_VERSION, checked_message, checked_detail, wrapping
1202
+ )
1203
+
1204
+
1205
+ class CommandPreconditionViolated(GeneralError):
1206
+ """An error indicating that a command was issued in a robot state incompatible with it."""
1207
+
1208
+ def __init__(
1209
+ self,
1210
+ message: Optional[str] = None,
1211
+ detail: Optional[Dict[str, str]] = None,
1212
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1213
+ ) -> None:
1214
+ """Build a CommandPreconditionViolated instance."""
1215
+ super().__init__(
1216
+ ErrorCodes.COMMAND_PRECONDITION_VIOLATED, message, detail, wrapping
1217
+ )
1218
+
1219
+
1220
+ class CommandParameterLimitViolated(GeneralError):
1221
+ """An error indicating that a command's parameter limit was violated."""
1222
+
1223
+ def __init__(
1224
+ self,
1225
+ command_name: str,
1226
+ parameter_name: str,
1227
+ limit_statement: str,
1228
+ actual_value: str,
1229
+ wrapping: Optional[Sequence[Union[EnumeratedError, BaseException]]] = None,
1230
+ ) -> None:
1231
+ """Build a CommandParameterLimitViolated error."""
1232
+ wrapping_checked = wrapping or []
1233
+ super().__init__(
1234
+ ErrorCodes.COMMAND_PARAMETER_LIMIT_VIOLATED,
1235
+ f"The parameter {parameter_name} of {command_name} must be {limit_statement} but is {actual_value}",
1236
+ detail={
1237
+ "command": command_name,
1238
+ "argument": parameter_name,
1239
+ "limit": limit_statement,
1240
+ "value": actual_value,
1241
+ },
1242
+ wrapping=[
1243
+ PythonException(e) if isinstance(e, BaseException) else e
1244
+ for e in wrapping_checked
1245
+ ],
1246
+ )
1247
+
1248
+
1249
+ class UnsupportedHardwareCommand(GeneralError):
1250
+ """An error indicating that a command being executed is not supported by the hardware."""
1251
+
1252
+ def __init__(
1253
+ self,
1254
+ message: Optional[str] = None,
1255
+ detail: Optional[Dict[str, str]] = None,
1256
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1257
+ ) -> None:
1258
+ """Build an UnsupportedHardwareCommand."""
1259
+ super().__init__(
1260
+ ErrorCodes.NOT_SUPPORTED_ON_ROBOT_TYPE, message, detail, wrapping
1261
+ )
1262
+
1263
+
1264
+ class InvalidProtocolData(GeneralError):
1265
+ """An error indicating that some protocol data is invalid."""
1266
+
1267
+ def __init__(
1268
+ self,
1269
+ message: Optional[str] = None,
1270
+ detail: Optional[Dict[str, str]] = None,
1271
+ wrapping: Optional[Sequence[Union[EnumeratedError, BaseException]]] = None,
1272
+ ) -> None:
1273
+ """Build an InvalidProtocolData."""
1274
+ super().__init__(ErrorCodes.INVALID_PROTOCOL_DATA, message, detail, wrapping)
1275
+
1276
+
1277
+ class InvalidStoredData(GeneralError):
1278
+ """An error indicating that some stored data is invalid.
1279
+
1280
+ This will usually be because it was saved by a future version of the software.
1281
+ """
1282
+
1283
+ def __init__(
1284
+ self,
1285
+ message: Optional[str] = None,
1286
+ detail: Optional[Dict[str, str]] = None,
1287
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1288
+ ) -> None:
1289
+ """Build an InvalidStoredData."""
1290
+ super().__init__(ErrorCodes.INVALID_STORED_DATA, message, detail, wrapping)
1291
+
1292
+
1293
+ class MissingConfigurationData(GeneralError):
1294
+ """An error indicating that provided configuration data is missing or invalid.
1295
+
1296
+ This will usually be because a pipette configuration does not match the ones provided by the pipette definition.
1297
+ """
1298
+
1299
+ def __init__(
1300
+ self,
1301
+ message: Optional[str] = None,
1302
+ detail: Optional[Dict[str, str]] = None,
1303
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1304
+ ) -> None:
1305
+ """Build an MissingConfigurationData."""
1306
+ super().__init__(
1307
+ ErrorCodes.MISSING_CONFIGURATION_DATA, message, detail, wrapping
1308
+ )