mink 0.0.11__tar.gz → 0.0.12__tar.gz

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.
Files changed (356) hide show
  1. {mink-0.0.11 → mink-0.0.12}/PKG-INFO +2 -1
  2. {mink-0.0.11 → mink-0.0.12}/README.md +1 -0
  3. {mink-0.0.11 → mink-0.0.12}/mink/__init__.py +2 -0
  4. {mink-0.0.11 → mink-0.0.12}/mink/configuration.py +9 -1
  5. {mink-0.0.11 → mink-0.0.12}/mink/exceptions.py +7 -0
  6. {mink-0.0.11 → mink-0.0.12}/mink/lie/se3.py +31 -0
  7. {mink-0.0.11 → mink-0.0.12}/mink/lie/so3.py +23 -1
  8. {mink-0.0.11 → mink-0.0.12}/mink/solve_ik.py +25 -6
  9. {mink-0.0.11 → mink-0.0.12}/mink/tasks/com_task.py +8 -1
  10. {mink-0.0.11 → mink-0.0.12}/mink/tasks/damping_task.py +12 -12
  11. {mink-0.0.11 → mink-0.0.12}/mink/tasks/frame_task.py +2 -2
  12. {mink-0.0.11 → mink-0.0.12}/mink/tasks/kinetic_energy_regularization_task.py +11 -12
  13. {mink-0.0.11 → mink-0.0.12}/mink/tasks/posture_task.py +6 -5
  14. {mink-0.0.11 → mink-0.0.12}/pyproject.toml +8 -8
  15. {mink-0.0.11 → mink-0.0.12}/LICENSE +0 -0
  16. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/.gitignore +0 -0
  17. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/@plugins_snapshot.json +0 -0
  18. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/__future__.data.json +0 -0
  19. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/__future__.meta.json +0 -0
  20. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_ast.data.json +0 -0
  21. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_ast.meta.json +0 -0
  22. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_codecs.data.json +0 -0
  23. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_codecs.meta.json +0 -0
  24. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_collections_abc.data.json +0 -0
  25. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_collections_abc.meta.json +0 -0
  26. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_ctypes.data.json +0 -0
  27. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_ctypes.meta.json +0 -0
  28. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_thread.data.json +0 -0
  29. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_thread.meta.json +0 -0
  30. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_typeshed/__init__.data.json +0 -0
  31. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_typeshed/__init__.meta.json +0 -0
  32. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_warnings.data.json +0 -0
  33. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/_warnings.meta.json +0 -0
  34. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/abc.data.json +0 -0
  35. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/abc.meta.json +0 -0
  36. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/array.data.json +0 -0
  37. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/array.meta.json +0 -0
  38. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/ast.data.json +0 -0
  39. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/ast.meta.json +0 -0
  40. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/builtins.data.json +0 -0
  41. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/builtins.meta.json +0 -0
  42. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/codecs.data.json +0 -0
  43. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/codecs.meta.json +0 -0
  44. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/collections/__init__.data.json +0 -0
  45. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/collections/__init__.meta.json +0 -0
  46. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/collections/abc.data.json +0 -0
  47. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/collections/abc.meta.json +0 -0
  48. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/contextlib.data.json +0 -0
  49. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/contextlib.meta.json +0 -0
  50. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/ctypes/__init__.data.json +0 -0
  51. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/ctypes/__init__.meta.json +0 -0
  52. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/dataclasses.data.json +0 -0
  53. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/dataclasses.meta.json +0 -0
  54. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/datetime.data.json +0 -0
  55. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/datetime.meta.json +0 -0
  56. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/__init__.data.json +0 -0
  57. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/__init__.meta.json +0 -0
  58. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/charset.data.json +0 -0
  59. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/charset.meta.json +0 -0
  60. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/contentmanager.data.json +0 -0
  61. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/contentmanager.meta.json +0 -0
  62. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/errors.data.json +0 -0
  63. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/errors.meta.json +0 -0
  64. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/header.data.json +0 -0
  65. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/header.meta.json +0 -0
  66. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/message.data.json +0 -0
  67. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/message.meta.json +0 -0
  68. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/policy.data.json +0 -0
  69. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/email/policy.meta.json +0 -0
  70. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/enum.data.json +0 -0
  71. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/enum.meta.json +0 -0
  72. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/genericpath.data.json +0 -0
  73. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/genericpath.meta.json +0 -0
  74. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/__init__.data.json +0 -0
  75. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/__init__.meta.json +0 -0
  76. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/abc.data.json +0 -0
  77. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/abc.meta.json +0 -0
  78. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/machinery.data.json +0 -0
  79. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/machinery.meta.json +0 -0
  80. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/metadata/__init__.data.json +0 -0
  81. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/metadata/__init__.meta.json +0 -0
  82. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/metadata/_meta.data.json +0 -0
  83. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/metadata/_meta.meta.json +0 -0
  84. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/readers.data.json +0 -0
  85. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/readers.meta.json +0 -0
  86. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/resources/__init__.data.json +0 -0
  87. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/resources/__init__.meta.json +0 -0
  88. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/resources/abc.data.json +0 -0
  89. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/importlib/resources/abc.meta.json +0 -0
  90. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/io.data.json +0 -0
  91. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/io.meta.json +0 -0
  92. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/logging/__init__.data.json +0 -0
  93. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/logging/__init__.meta.json +0 -0
  94. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/math.data.json +0 -0
  95. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/math.meta.json +0 -0
  96. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/mink/limits/limit.data.json +0 -0
  97. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/mink/limits/limit.meta.json +0 -0
  98. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/mmap.data.json +0 -0
  99. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/mmap.meta.json +0 -0
  100. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/__init__.data.json +0 -0
  101. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/__init__.meta.json +0 -0
  102. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_pytesttester.data.json +0 -0
  103. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_pytesttester.meta.json +0 -0
  104. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/__init__.data.json +0 -0
  105. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/__init__.meta.json +0 -0
  106. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_add_docstring.data.json +0 -0
  107. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_add_docstring.meta.json +0 -0
  108. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_array_like.data.json +0 -0
  109. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_array_like.meta.json +0 -0
  110. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_callable.data.json +0 -0
  111. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_callable.meta.json +0 -0
  112. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_char_codes.data.json +0 -0
  113. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_char_codes.meta.json +0 -0
  114. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_dtype_like.data.json +0 -0
  115. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_dtype_like.meta.json +0 -0
  116. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_extended_precision.data.json +0 -0
  117. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_extended_precision.meta.json +0 -0
  118. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_nbit.data.json +0 -0
  119. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_nbit.meta.json +0 -0
  120. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_nested_sequence.data.json +0 -0
  121. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_nested_sequence.meta.json +0 -0
  122. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_scalars.data.json +0 -0
  123. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_scalars.meta.json +0 -0
  124. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_shape.data.json +0 -0
  125. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_shape.meta.json +0 -0
  126. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_ufunc.data.json +0 -0
  127. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_typing/_ufunc.meta.json +0 -0
  128. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_utils/__init__.data.json +0 -0
  129. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_utils/__init__.meta.json +0 -0
  130. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_utils/_convertions.data.json +0 -0
  131. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/_utils/_convertions.meta.json +0 -0
  132. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/__init__.data.json +0 -0
  133. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/__init__.meta.json +0 -0
  134. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_asarray.data.json +0 -0
  135. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_asarray.meta.json +0 -0
  136. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_internal.data.json +0 -0
  137. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_internal.meta.json +0 -0
  138. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_type_aliases.data.json +0 -0
  139. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_type_aliases.meta.json +0 -0
  140. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_ufunc_config.data.json +0 -0
  141. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/_ufunc_config.meta.json +0 -0
  142. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/arrayprint.data.json +0 -0
  143. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/arrayprint.meta.json +0 -0
  144. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/defchararray.data.json +0 -0
  145. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/defchararray.meta.json +0 -0
  146. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/einsumfunc.data.json +0 -0
  147. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/einsumfunc.meta.json +0 -0
  148. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/fromnumeric.data.json +0 -0
  149. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/fromnumeric.meta.json +0 -0
  150. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/function_base.data.json +0 -0
  151. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/function_base.meta.json +0 -0
  152. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/multiarray.data.json +0 -0
  153. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/multiarray.meta.json +0 -0
  154. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/numeric.data.json +0 -0
  155. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/numeric.meta.json +0 -0
  156. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/numerictypes.data.json +0 -0
  157. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/numerictypes.meta.json +0 -0
  158. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/records.data.json +0 -0
  159. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/records.meta.json +0 -0
  160. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/shape_base.data.json +0 -0
  161. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/shape_base.meta.json +0 -0
  162. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/umath.data.json +0 -0
  163. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/core/umath.meta.json +0 -0
  164. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ctypeslib.data.json +0 -0
  165. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ctypeslib.meta.json +0 -0
  166. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/dtypes.data.json +0 -0
  167. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/dtypes.meta.json +0 -0
  168. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/exceptions.data.json +0 -0
  169. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/exceptions.meta.json +0 -0
  170. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/fft/__init__.data.json +0 -0
  171. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/fft/__init__.meta.json +0 -0
  172. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/fft/_pocketfft.data.json +0 -0
  173. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/fft/_pocketfft.meta.json +0 -0
  174. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/fft/helper.data.json +0 -0
  175. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/fft/helper.meta.json +0 -0
  176. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/__init__.data.json +0 -0
  177. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/__init__.meta.json +0 -0
  178. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/_version.data.json +0 -0
  179. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/_version.meta.json +0 -0
  180. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/arraypad.data.json +0 -0
  181. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/arraypad.meta.json +0 -0
  182. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/arraysetops.data.json +0 -0
  183. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/arraysetops.meta.json +0 -0
  184. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/arrayterator.data.json +0 -0
  185. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/arrayterator.meta.json +0 -0
  186. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/format.data.json +0 -0
  187. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/format.meta.json +0 -0
  188. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/function_base.data.json +0 -0
  189. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/function_base.meta.json +0 -0
  190. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/histograms.data.json +0 -0
  191. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/histograms.meta.json +0 -0
  192. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/index_tricks.data.json +0 -0
  193. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/index_tricks.meta.json +0 -0
  194. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/mixins.data.json +0 -0
  195. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/mixins.meta.json +0 -0
  196. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/nanfunctions.data.json +0 -0
  197. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/nanfunctions.meta.json +0 -0
  198. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/npyio.data.json +0 -0
  199. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/npyio.meta.json +0 -0
  200. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/polynomial.data.json +0 -0
  201. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/polynomial.meta.json +0 -0
  202. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/scimath.data.json +0 -0
  203. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/scimath.meta.json +0 -0
  204. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/shape_base.data.json +0 -0
  205. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/shape_base.meta.json +0 -0
  206. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/stride_tricks.data.json +0 -0
  207. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/stride_tricks.meta.json +0 -0
  208. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/twodim_base.data.json +0 -0
  209. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/twodim_base.meta.json +0 -0
  210. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/type_check.data.json +0 -0
  211. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/type_check.meta.json +0 -0
  212. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/ufunclike.data.json +0 -0
  213. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/ufunclike.meta.json +0 -0
  214. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/utils.data.json +0 -0
  215. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/lib/utils.meta.json +0 -0
  216. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/linalg/__init__.data.json +0 -0
  217. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/linalg/__init__.meta.json +0 -0
  218. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/linalg/linalg.data.json +0 -0
  219. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/linalg/linalg.meta.json +0 -0
  220. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/__init__.data.json +0 -0
  221. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/__init__.meta.json +0 -0
  222. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/core.data.json +0 -0
  223. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/core.meta.json +0 -0
  224. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/extras.data.json +0 -0
  225. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/extras.meta.json +0 -0
  226. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/mrecords.data.json +0 -0
  227. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/ma/mrecords.meta.json +0 -0
  228. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/matrixlib/__init__.data.json +0 -0
  229. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/matrixlib/__init__.meta.json +0 -0
  230. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/matrixlib/defmatrix.data.json +0 -0
  231. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/matrixlib/defmatrix.meta.json +0 -0
  232. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/__init__.data.json +0 -0
  233. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/__init__.meta.json +0 -0
  234. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/_polybase.data.json +0 -0
  235. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/_polybase.meta.json +0 -0
  236. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/chebyshev.data.json +0 -0
  237. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/chebyshev.meta.json +0 -0
  238. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/hermite.data.json +0 -0
  239. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/hermite.meta.json +0 -0
  240. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/hermite_e.data.json +0 -0
  241. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/hermite_e.meta.json +0 -0
  242. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/laguerre.data.json +0 -0
  243. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/laguerre.meta.json +0 -0
  244. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/legendre.data.json +0 -0
  245. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/legendre.meta.json +0 -0
  246. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/polynomial.data.json +0 -0
  247. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/polynomial.meta.json +0 -0
  248. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/polyutils.data.json +0 -0
  249. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/polynomial/polyutils.meta.json +0 -0
  250. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/__init__.data.json +0 -0
  251. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/__init__.meta.json +0 -0
  252. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_generator.data.json +0 -0
  253. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_generator.meta.json +0 -0
  254. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_mt19937.data.json +0 -0
  255. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_mt19937.meta.json +0 -0
  256. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_pcg64.data.json +0 -0
  257. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_pcg64.meta.json +0 -0
  258. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_philox.data.json +0 -0
  259. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_philox.meta.json +0 -0
  260. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_sfc64.data.json +0 -0
  261. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/_sfc64.meta.json +0 -0
  262. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/bit_generator.data.json +0 -0
  263. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/bit_generator.meta.json +0 -0
  264. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/mtrand.data.json +0 -0
  265. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/random/mtrand.meta.json +0 -0
  266. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/testing/__init__.data.json +0 -0
  267. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/testing/__init__.meta.json +0 -0
  268. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/testing/_private/__init__.data.json +0 -0
  269. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/testing/_private/__init__.meta.json +0 -0
  270. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/testing/_private/utils.data.json +0 -0
  271. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/testing/_private/utils.meta.json +0 -0
  272. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/typing/__init__.data.json +0 -0
  273. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/typing/__init__.meta.json +0 -0
  274. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/version.data.json +0 -0
  275. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/numpy/version.meta.json +0 -0
  276. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/os/__init__.data.json +0 -0
  277. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/os/__init__.meta.json +0 -0
  278. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/os/path.data.json +0 -0
  279. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/os/path.meta.json +0 -0
  280. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/pathlib.data.json +0 -0
  281. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/pathlib.meta.json +0 -0
  282. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/posixpath.data.json +0 -0
  283. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/posixpath.meta.json +0 -0
  284. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/re.data.json +0 -0
  285. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/re.meta.json +0 -0
  286. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sre_compile.data.json +0 -0
  287. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sre_compile.meta.json +0 -0
  288. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sre_constants.data.json +0 -0
  289. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sre_constants.meta.json +0 -0
  290. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sre_parse.data.json +0 -0
  291. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sre_parse.meta.json +0 -0
  292. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/string.data.json +0 -0
  293. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/string.meta.json +0 -0
  294. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/subprocess.data.json +0 -0
  295. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/subprocess.meta.json +0 -0
  296. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sys/__init__.data.json +0 -0
  297. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sys/__init__.meta.json +0 -0
  298. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sys/_monitoring.data.json +0 -0
  299. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/sys/_monitoring.meta.json +0 -0
  300. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/textwrap.data.json +0 -0
  301. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/textwrap.meta.json +0 -0
  302. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/threading.data.json +0 -0
  303. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/threading.meta.json +0 -0
  304. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/time.data.json +0 -0
  305. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/time.meta.json +0 -0
  306. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/types.data.json +0 -0
  307. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/types.meta.json +0 -0
  308. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/typing.data.json +0 -0
  309. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/typing.meta.json +0 -0
  310. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/typing_extensions.data.json +0 -0
  311. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/typing_extensions.meta.json +0 -0
  312. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/__init__.data.json +0 -0
  313. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/__init__.meta.json +0 -0
  314. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/_log.data.json +0 -0
  315. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/_log.meta.json +0 -0
  316. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/async_case.data.json +0 -0
  317. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/async_case.meta.json +0 -0
  318. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/case.data.json +0 -0
  319. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/case.meta.json +0 -0
  320. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/loader.data.json +0 -0
  321. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/loader.meta.json +0 -0
  322. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/main.data.json +0 -0
  323. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/main.meta.json +0 -0
  324. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/result.data.json +0 -0
  325. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/result.meta.json +0 -0
  326. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/runner.data.json +0 -0
  327. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/runner.meta.json +0 -0
  328. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/signals.data.json +0 -0
  329. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/signals.meta.json +0 -0
  330. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/suite.data.json +0 -0
  331. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/unittest/suite.meta.json +0 -0
  332. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/warnings.data.json +0 -0
  333. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/warnings.meta.json +0 -0
  334. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/zipfile.data.json +0 -0
  335. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/3.12/zipfile.meta.json +0 -0
  336. {mink-0.0.11 → mink-0.0.12}/mink/.mypy_cache/CACHEDIR.TAG +0 -0
  337. {mink-0.0.11 → mink-0.0.12}/mink/constants.py +0 -0
  338. {mink-0.0.11 → mink-0.0.12}/mink/contrib/__init__.py +0 -0
  339. {mink-0.0.11 → mink-0.0.12}/mink/contrib/keyboard_teleop/KEYBOARD.md +0 -0
  340. {mink-0.0.11 → mink-0.0.12}/mink/contrib/keyboard_teleop/__init__.py +0 -0
  341. {mink-0.0.11 → mink-0.0.12}/mink/contrib/keyboard_teleop/keycodes.py +0 -0
  342. {mink-0.0.11 → mink-0.0.12}/mink/contrib/keyboard_teleop/teleop_mocap.py +0 -0
  343. {mink-0.0.11 → mink-0.0.12}/mink/lie/__init__.py +0 -0
  344. {mink-0.0.11 → mink-0.0.12}/mink/lie/base.py +0 -0
  345. {mink-0.0.11 → mink-0.0.12}/mink/lie/utils.py +0 -0
  346. {mink-0.0.11 → mink-0.0.12}/mink/limits/__init__.py +0 -0
  347. {mink-0.0.11 → mink-0.0.12}/mink/limits/collision_avoidance_limit.py +0 -0
  348. {mink-0.0.11 → mink-0.0.12}/mink/limits/configuration_limit.py +0 -0
  349. {mink-0.0.11 → mink-0.0.12}/mink/limits/limit.py +0 -0
  350. {mink-0.0.11 → mink-0.0.12}/mink/limits/velocity_limit.py +0 -0
  351. {mink-0.0.11 → mink-0.0.12}/mink/py.typed +0 -0
  352. {mink-0.0.11 → mink-0.0.12}/mink/tasks/__init__.py +0 -0
  353. {mink-0.0.11 → mink-0.0.12}/mink/tasks/equality_constraint_task.py +0 -0
  354. {mink-0.0.11 → mink-0.0.12}/mink/tasks/relative_frame_task.py +0 -0
  355. {mink-0.0.11 → mink-0.0.12}/mink/tasks/task.py +0 -0
  356. {mink-0.0.11 → mink-0.0.12}/mink/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mink
3
- Version: 0.0.11
3
+ Version: 0.0.12
4
4
  Summary: mink: MuJoCo inverse kinematics.
5
5
  Keywords: inverse,kinematics,mujoco
6
6
  Author-email: Kevin Zakka <zakka@berkeley.edu>
@@ -59,6 +59,7 @@ Features include:
59
59
  * Task specification in configuration or operational space;
60
60
  * Limits on joint positions and velocities;
61
61
  * Collision avoidance between any geom pair;
62
+ * Support for closed-chain kinematics (loop closures) via [equality constraints](https://mujoco.readthedocs.io/en/stable/computation/index.html#coequality);
62
63
  * Lie group interface for rigid body transformations.
63
64
 
64
65
  For usage and API reference, see the [documentation](https://kevinzakka.github.io/mink/).
@@ -12,6 +12,7 @@ Features include:
12
12
  * Task specification in configuration or operational space;
13
13
  * Limits on joint positions and velocities;
14
14
  * Collision avoidance between any geom pair;
15
+ * Support for closed-chain kinematics (loop closures) via [equality constraints](https://mujoco.readthedocs.io/en/stable/computation/index.html#coequality);
15
16
  * Lie group interface for rigid body transformations.
16
17
 
17
18
  For usage and API reference, see the [documentation](https://kevinzakka.github.io/mink/).
@@ -19,6 +19,7 @@ from .exceptions import (
19
19
  InvalidTarget,
20
20
  LimitDefinitionError,
21
21
  MinkError,
22
+ NoSolutionFound,
22
23
  NotWithinConfigurationLimits,
23
24
  TargetNotSet,
24
25
  TaskDefinitionError,
@@ -88,6 +89,7 @@ __all__ = (
88
89
  "LimitDefinitionError",
89
90
  "TaskDefinitionError",
90
91
  "IntegrationTimestepNotSet",
92
+ "NoSolutionFound",
91
93
  "SUPPORTED_FRAMES",
92
94
  "FRAME_TO_ENUM",
93
95
  "FRAME_TO_JAC_FUNC",
@@ -30,6 +30,7 @@ class Configuration:
30
30
  * Running forward kinematics to update the state.
31
31
  * Checking configuration limits.
32
32
  * Computing Jacobians for different frames.
33
+ * Computing the joint-space inertia matrix.
33
34
  * Retrieving frame transforms relative to the world frame.
34
35
  * Integrating velocities to update configurations.
35
36
  """
@@ -84,6 +85,10 @@ class Configuration:
84
85
  safety_break: If True, stop execution and raise an exception if the current
85
86
  configuration is outside limits. If False, print a warning and continue
86
87
  execution.
88
+
89
+ Raises:
90
+ NotWithinConfigurationLimits: If the current configuration is outside
91
+ the joint limits.
87
92
  """
88
93
  for jnt in range(self.model.njnt):
89
94
  jnt_type = self.model.jnt_type[jnt]
@@ -245,7 +250,10 @@ class Configuration:
245
250
  """
246
251
  # Run the composite rigid body inertia (CRB) algorithm to populate the joint
247
252
  # space inertia matrix data.qM.
248
- mujoco.mj_crb(self.model, self.data)
253
+ if mujoco.mj_version() >= 334:
254
+ mujoco.mj_makeM(self.model, self.data)
255
+ else:
256
+ mujoco.mj_crb(self.model, self.data)
249
257
  # data.qM is stored in a custom sparse format and can be converted to dense
250
258
  # format using mujoco.mj_fullM.
251
259
  M = np.empty((self.nv, self.nv), dtype=np.float64)
@@ -9,6 +9,13 @@ class MinkError(Exception):
9
9
  """Base class for Mink exceptions."""
10
10
 
11
11
 
12
+ class NoSolutionFound(MinkError):
13
+ """Exception raised when the QP solver fails to find a solution."""
14
+
15
+ def __init__(self, solver_name: str):
16
+ super().__init__(f"QP solver {solver_name} failed to find a solution.")
17
+
18
+
12
19
  class UnsupportedFrame(MinkError):
13
20
  """Exception raised when a frame type is unsupported."""
14
21
 
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
+ from typing import Tuple
4
5
 
5
6
  import mujoco
6
7
  import numpy as np
@@ -221,6 +222,36 @@ class SE3(MatrixLieGroup):
221
222
  ljacinv_se3[3:, 3:] = ljacinv_so3
222
223
  return ljacinv_se3
223
224
 
225
+ def clamp(
226
+ self,
227
+ x_translation: Tuple[float, float] = (-np.inf, np.inf),
228
+ y_translation: Tuple[float, float] = (-np.inf, np.inf),
229
+ z_translation: Tuple[float, float] = (-np.inf, np.inf),
230
+ roll_radians: Tuple[float, float] = (-np.inf, np.inf),
231
+ pitch_radians: Tuple[float, float] = (-np.inf, np.inf),
232
+ yaw_radians: Tuple[float, float] = (-np.inf, np.inf),
233
+ ) -> SE3:
234
+ """Clamp a SE3 within translation and RPY limits.
235
+
236
+ Args:
237
+ x_translation: The (lower, upper) limits for translation along the x axis.
238
+ y_translation: The (lower, upper) limits for translation along the y axis.
239
+ z_translation: The (lower, upper) limits for translation along the z axis.
240
+ roll_radians: The (lower, upper) limits for the roll.
241
+ pitch_radians: The (lower, upper) limits for the pitch.
242
+ yaw_radians: The (lower, upper) limits for the yaw.
243
+
244
+ Returns:
245
+ A SE3 within the translation and RPY limits.
246
+ """
247
+ translation_limits = np.array([x_translation, y_translation, z_translation])
248
+ return SE3.from_rotation_and_translation(
249
+ rotation=self.rotation().clamp(roll_radians, pitch_radians, yaw_radians),
250
+ translation=np.clip(
251
+ self.translation(), translation_limits[:, 0], translation_limits[:, 1]
252
+ ),
253
+ )
254
+
224
255
 
225
256
  # Eqn 180.
226
257
  def _getQ(c) -> np.ndarray:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import NamedTuple
4
+ from typing import NamedTuple, Tuple
5
5
 
6
6
  import mujoco
7
7
  import numpy as np
@@ -260,3 +260,25 @@ class SO3(MatrixLieGroup):
260
260
  ljacinv[1, 1] += 1.0
261
261
  ljacinv[2, 2] += 1.0
262
262
  return ljacinv
263
+
264
+ def clamp(
265
+ self,
266
+ roll_radians: Tuple[float, float] = (-np.inf, np.inf),
267
+ pitch_radians: Tuple[float, float] = (-np.inf, np.inf),
268
+ yaw_radians: Tuple[float, float] = (-np.inf, np.inf),
269
+ ) -> SO3:
270
+ """Clamp a SO3 within RPY limits.
271
+
272
+ Args:
273
+ roll_radians: The (lower, upper) limits for the roll.
274
+ pitch_radians: The (lower, upper) limits for the pitch.
275
+ yaw_radians: The (lower, upper) limits for the yaw.
276
+
277
+ Returns:
278
+ A SO3 within the RPY limits.
279
+ """
280
+ return SO3.from_rpy_radians(
281
+ roll=np.clip(self.compute_roll_radians(), *roll_radians),
282
+ pitch=np.clip(self.compute_pitch_radians(), *pitch_radians),
283
+ yaw=np.clip(self.compute_yaw_radians(), *yaw_radians),
284
+ )
@@ -6,6 +6,7 @@ import numpy as np
6
6
  import qpsolvers
7
7
 
8
8
  from .configuration import Configuration
9
+ from .exceptions import NoSolutionFound
9
10
  from .limits import ConfigurationLimit, Limit
10
11
  from .tasks import BaseTask, Objective
11
12
 
@@ -47,7 +48,18 @@ def build_ik(
47
48
  damping: float = 1e-12,
48
49
  limits: Optional[Sequence[Limit]] = None,
49
50
  ) -> qpsolvers.Problem:
50
- """Build quadratic program from current configuration and tasks.
51
+ r"""Build the quadratic program given the current configuration and tasks.
52
+
53
+ The quadratic program is defined as:
54
+
55
+ .. math::
56
+
57
+ \begin{align*}
58
+ \min_{\Delta q} & \frac{1}{2} \Delta q^T H \Delta q + c^T \Delta q \\
59
+ \text{s.t.} \quad & G \Delta q \leq h
60
+ \end{align*}
61
+
62
+ where :math:`\Delta q = v / dt` is the vector of joint displacements.
51
63
 
52
64
  Args:
53
65
  configuration: Robot configuration.
@@ -77,7 +89,7 @@ def solve_ik(
77
89
  limits: Optional[Sequence[Limit]] = None,
78
90
  **kwargs,
79
91
  ) -> np.ndarray:
80
- """Solve the differential inverse kinematics problem.
92
+ r"""Solve the differential inverse kinematics problem.
81
93
 
82
94
  Computes a velocity tangent to the current robot configuration. The computed
83
95
  velocity satisfies at (weighted) best the set of provided kinematic tasks.
@@ -97,13 +109,20 @@ def solve_ik(
97
109
  defaults to a configuration limit.
98
110
  kwargs: Keyword arguments to forward to the backend QP solver.
99
111
 
112
+ Raises:
113
+ NotWithinConfigurationLimits: If the current configuration is outside
114
+ the joint limits and `safety_break` is True.
115
+ NoSolutionFound: If the QP solver fails to find a solution.
116
+
100
117
  Returns:
101
- Velocity `v` in tangent space.
118
+ Velocity :math:`v` in tangent space.
102
119
  """
103
120
  configuration.check_limits(safety_break=safety_break)
104
121
  problem = build_ik(configuration, tasks, dt, damping, limits)
105
122
  result = qpsolvers.solve_problem(problem, solver=solver, **kwargs)
106
- dq = result.x
107
- assert dq is not None
108
- v: np.ndarray = dq / dt
123
+ if not result.found:
124
+ raise NoSolutionFound(solver)
125
+ delta_q = result.x
126
+ assert delta_q is not None
127
+ v: np.ndarray = delta_q / dt
109
128
  return v
@@ -49,6 +49,12 @@ class ComTask(Task):
49
49
  self.set_cost(cost)
50
50
 
51
51
  def set_cost(self, cost: npt.ArrayLike) -> None:
52
+ """Set the cost of the CoM task.
53
+
54
+ Args:
55
+ cost: A vector of shape (1,) (aka identical cost for all coordinates),
56
+ or (3,) (aka different costs for each coordinate).
57
+ """
52
58
  cost = np.atleast_1d(cost)
53
59
  if cost.ndim != 1 or cost.shape[0] not in (1, self.k):
54
60
  raise TaskDefinitionError(
@@ -64,7 +70,8 @@ class ComTask(Task):
64
70
  """Set the target CoM position in the world frame.
65
71
 
66
72
  Args:
67
- target_com: Desired center-of-mass position in the world frame.
73
+ target_com: A vector of shape (3,) representing the desired
74
+ center-of-mass position in the world frame.
68
75
  """
69
76
  target_com = np.atleast_1d(target_com)
70
77
  if target_com.ndim != 1 or target_com.shape[0] != (self.k):
@@ -11,26 +11,26 @@ from .posture_task import PostureTask
11
11
  class DampingTask(PostureTask):
12
12
  r"""L2-regularization on joint velocities (a.k.a. *velocity damping*).
13
13
 
14
- This low-priority task adds a Tikhonov/Levenberg-Marquardt term to the
15
- quadratic program, making the Hessian strictly positive-definite and
16
- selecting the **minimum-norm joint velocity** in any redundant or
17
- near-singular situation. Formally it contributes:
14
+ This task, typically used with a low priority in the task stack, adds a
15
+ Levenberg-Marquardt term to the quadratic program, favoring **minimum-norm
16
+ joint velocities** in redundant or near-singular situations. Formally, it
17
+ contributes the following term to the quadratic program:
18
18
 
19
19
  .. math::
20
20
  \frac{1}{2}\,\Delta \mathbf{q}^\top \Lambda\,\Delta \mathbf{q},
21
21
 
22
22
  where :math:`\Delta \mathbf{q}\in\mathbb{R}^{n_v}` is the vector of joint
23
23
  displacements and :math:`\Lambda = \mathrm{diag}(\lambda_1, \ldots, \lambda_{n_v})`
24
- is a diagonal matrix of per-DoF weights provided by ``cost``. A larger
25
- :math:`\lambda_i` reduces motion in DoF :math:`i`; with no other active
26
- tasks the robot remains at rest.
27
-
28
- This task does not favor a particular posture—only small instantaneous
29
- motion. If you need a posture bias, use an explicit :class:`~.PostureTask`.
24
+ is a diagonal matrix of per-DoF damping weights specified via ``cost``. A larger
25
+ :math:`\lambda_i` reduces motion in DoF :math:`i`. With no other active
26
+ tasks, the robot remains at rest. Unlike the `damping` parameter in
27
+ :func:`~.solve_ik`, which is uniformly applied to all DoFs, this task does
28
+ not affect the floating-base coordinates.
30
29
 
31
30
  .. note::
32
31
 
33
- Floating-base coordinates are not affected by this task.
32
+ This task does not favor a particular posture, only small instantaneous motion.
33
+ If you need a posture bias, use :class:`~.PostureTask` instead.
34
34
 
35
35
  Example:
36
36
 
@@ -53,7 +53,7 @@ class DampingTask(PostureTask):
53
53
  r"""Compute the damping task error.
54
54
 
55
55
  The damping task does not chase a reference; its desired joint velocity
56
- is identically **zero**, so the error vector is always
56
+ is identically **zero**, so the task error is always:
57
57
 
58
58
  .. math:: e = \mathbf 0 \in \mathbb R^{n_v}.
59
59
 
@@ -14,13 +14,13 @@ from .task import Task
14
14
 
15
15
 
16
16
  class FrameTask(Task):
17
- """Regulate the position and orientation of a frame expressed in the world frame.
17
+ """Regulate the position and orientation of a frame of interest on the robot.
18
18
 
19
19
  Attributes:
20
20
  frame_name: Name of the frame to regulate, typically the name of body, geom
21
21
  or site in the robot model.
22
22
  frame_type: The frame type: `body`, `geom` or `site`.
23
- transform_frame_to_world: Target pose of the frame.
23
+ transform_target_to_world: Target pose of the frame in the world frame.
24
24
 
25
25
  Example:
26
26
 
@@ -12,30 +12,29 @@ from .task import BaseTask, Objective
12
12
 
13
13
 
14
14
  class KineticEnergyRegularizationTask(BaseTask):
15
- r"""Kinetic-energy regularization task.
15
+ r"""Kinetic-energy regularization.
16
16
 
17
- This low-priority task adds a configuration-dependent quadratic term to the
18
- QP objective that penalizes the system's kinetic energy. Formally, it contributes:
17
+ This task, often used with a low priority in the task stack, penalizes the system's
18
+ kinetic energy. Formally, it contributes the following term to the quadratic
19
+ program:
19
20
 
20
21
  .. math::
21
22
  \frac{1}{2}\, \lambda\, \Delta \mathbf{q}^\top M(\mathbf{q})\,\Delta \mathbf{q},
22
23
 
23
24
  where :math:`\Delta \mathbf{q}\in\mathbb{R}^{n_v}` is the vector of joint
24
- displacements, :math:`M(\mathbf{q})` is the joint-space inertia matrix
25
- (dependent on the current configuration), and :math:`\lambda` is the scalar
26
- strength of the regularization.
25
+ displacements, :math:`M(\mathbf{q})` is the joint-space inertia matrix, and
26
+ :math:`\lambda` is the scalar strength of the regularization.
27
27
 
28
28
  .. note::
29
29
 
30
- This task penalizes DoFs in proportion to their joint-space inertia, so
31
- higher-inertia (i.e., heavier) links will move less. This is in contrast to
32
- :class:`~.L2RegularizationTask`, which uniformly damps all DoFs.
30
+ This task can be seen as an inertia-weighted version of the
31
+ :class:`~.DampingTask`. Degrees of freedom with higher inertia will move less
32
+ for the same cost.
33
33
 
34
34
  .. warning::
35
35
 
36
- The timestep :math:`\Delta t` must be set via :meth:`set_dt` before use.
37
- This task penalizes velocity via displacement, and omitting `dt` will raise
38
- a runtime error.
36
+ The integration timestep :math:`\Delta t` must be set via :meth:`set_dt`
37
+ before use. This ensures the cost is expressed in units of energy (Joules).
39
38
 
40
39
  Example:
41
40
 
@@ -15,10 +15,10 @@ from .task import Task
15
15
 
16
16
 
17
17
  class PostureTask(Task):
18
- """Regulate the joint angles of the robot towards a desired posture.
18
+ """Regulate joint angles towards a target posture.
19
19
 
20
- Using this task with a low cost value is useful as a regularizer when the problem
21
- is under-constrained.
20
+ Often used with a low priority in the task stack, this task acts like a regularizer,
21
+ biasing the solution toward a specific joint configuration.
22
22
 
23
23
  Attributes:
24
24
  target_q: Target configuration :math:`q^*`, of shape :math:`(n_q,)`. Units are
@@ -83,7 +83,8 @@ class PostureTask(Task):
83
83
  """Set the target posture.
84
84
 
85
85
  Args:
86
- target_q: Desired joint configuration.
86
+ target_q: A vector of shape (nq,) representing the desired joint
87
+ configuration.
87
88
  """
88
89
  target_q = np.atleast_1d(target_q)
89
90
  if target_q.ndim != 1 or target_q.shape[0] != (self.nq):
@@ -94,7 +95,7 @@ class PostureTask(Task):
94
95
  self.target_q = target_q.copy()
95
96
 
96
97
  def set_target_from_configuration(self, configuration: Configuration) -> None:
97
- """Set the target posture from the current configuration.
98
+ """Set the target posture by extracting it from the current configuration.
98
99
 
99
100
  Args:
100
101
  configuration: Robot configuration :math:`q`.
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "mink"
7
- version = "0.0.11"
7
+ version = "0.0.12"
8
8
  readme = "README.md"
9
9
  authors = [
10
10
  {name = "Kevin Zakka", email = "zakka@berkeley.edu"},
@@ -68,27 +68,27 @@ name = "mink"
68
68
 
69
69
  [tool.ruff]
70
70
  lint.select = [
71
- "E", # pycodestyle errors.
72
- "F", # Pyflakes rules.
71
+ "E", # pycodestyle errors.
72
+ "F", # Pyflakes rules.
73
73
  "PLC", # Pylint convention warnings.
74
74
  "PLE", # Pylint errors.
75
75
  "PLR", # Pylint refactor recommendations.
76
76
  "PLW", # Pylint warnings.
77
- "I" # Import sorting.
77
+ "I", # Import sorting.
78
78
  ]
79
79
  lint.ignore = [
80
- "E741", # Ambiguous variable name. (l, O, or I)
81
- "E501", # Line too long.
80
+ "E741", # Ambiguous variable name. (l, O, or I)
81
+ "E501", # Line too long.
82
82
  "PLR2004", # Magic value used in comparison.
83
83
  "PLR0915", # Too many statements.
84
84
  "PLR0913", # Too many arguments.
85
- "PLC0414", # Import alias does not rename variable. (this is used for exporting names)
85
+ "PLC0414", # Import alias does not rename variable.
86
86
  "PLC1901", # Use falsey strings.
87
87
  "PLR5501", # Use `elif` instead of `else if`.
88
88
  "PLR0911", # Too many return statements.
89
89
  "PLR0912", # Too many branches.
90
90
  "PLW0603", # Global statement updates are discouraged.
91
- "PLW2901" # For loop variable overwritten.
91
+ "PLW2901", # For loop variable overwritten.
92
92
  ]
93
93
 
94
94
  [tool.mypy]
File without changes
File without changes