metaflow 2.18.7__tar.gz → 2.18.9__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 (447) hide show
  1. {metaflow-2.18.7/metaflow.egg-info → metaflow-2.18.9}/PKG-INFO +3 -2
  2. {metaflow-2.18.7 → metaflow-2.18.9}/README.md +1 -0
  3. {metaflow-2.18.7 → metaflow-2.18.9}/devtools/Tiltfile +76 -2
  4. {metaflow-2.18.7 → metaflow-2.18.9}/devtools/pick_services.sh +1 -0
  5. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cards.py +1 -0
  6. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/includefile.py +25 -3
  7. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/__init__.py +1 -0
  8. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/bundle.css +1 -1
  9. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/components.py +228 -0
  10. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/main.js +28 -28
  11. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/s3/s3.py +3 -0
  12. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/s3/s3op.py +13 -0
  13. metaflow-2.18.9/metaflow/plugins/parsers.py +16 -0
  14. metaflow-2.18.9/metaflow/version.py +1 -0
  15. {metaflow-2.18.7 → metaflow-2.18.9/metaflow.egg-info}/PKG-INFO +3 -2
  16. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow.egg-info/SOURCES.txt +1 -0
  17. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow.egg-info/requires.txt +1 -1
  18. metaflow-2.18.7/metaflow/version.py +0 -1
  19. {metaflow-2.18.7 → metaflow-2.18.9}/LICENSE +0 -0
  20. {metaflow-2.18.7 → metaflow-2.18.9}/MANIFEST.in +0 -0
  21. {metaflow-2.18.7 → metaflow-2.18.9}/devtools/Makefile +0 -0
  22. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/R.py +0 -0
  23. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/__init__.py +0 -0
  24. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/__init__.py +0 -0
  25. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/__init__.py +0 -0
  26. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  27. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/_compat.py +0 -0
  28. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/_termui_impl.py +0 -0
  29. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/_textwrap.py +0 -0
  30. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/_unicodefun.py +0 -0
  31. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/_winconsole.py +0 -0
  32. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/core.py +0 -0
  33. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/decorators.py +0 -0
  34. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/exceptions.py +0 -0
  35. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/formatting.py +0 -0
  36. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/globals.py +0 -0
  37. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/parser.py +0 -0
  38. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/termui.py +0 -0
  39. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/testing.py +0 -0
  40. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/types.py +0 -0
  41. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/click/utils.py +0 -0
  42. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/imghdr/__init__.py +0 -0
  43. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  44. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  45. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  46. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  47. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  48. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  49. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  50. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  51. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  52. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/__init__.py +0 -0
  53. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/_elffile.py +0 -0
  54. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  55. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  56. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/_parser.py +0 -0
  57. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/_structures.py +0 -0
  58. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  59. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/markers.py +0 -0
  60. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/py.typed +0 -0
  61. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/requirements.py +0 -0
  62. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/specifiers.py +0 -0
  63. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/tags.py +0 -0
  64. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/utils.py +0 -0
  65. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/packaging/version.py +0 -0
  66. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/__init__.py +0 -0
  67. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  68. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_config.py +0 -0
  69. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  70. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  71. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_functions.py +0 -0
  72. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  73. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_memo.py +0 -0
  74. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  75. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  76. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  77. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  78. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/_utils.py +0 -0
  79. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typeguard/py.typed +0 -0
  80. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/typing_extensions.py +0 -0
  81. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/__init__.py +0 -0
  82. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  83. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  84. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  85. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  86. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  87. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  88. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  89. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  90. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  91. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  92. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_6/zipp.py +0 -0
  93. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/__init__.py +0 -0
  94. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/__init__.py +0 -0
  95. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_adapters.py +0 -0
  96. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_collections.py +0 -0
  97. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_compat.py +0 -0
  98. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_functools.py +0 -0
  99. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_itertools.py +0 -0
  100. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_meta.py +0 -0
  101. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/_text.py +0 -0
  102. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/importlib_metadata/py.typed +0 -0
  103. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/__init__.py +0 -0
  104. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_checkers.py +0 -0
  105. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_config.py +0 -0
  106. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_decorators.py +0 -0
  107. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_exceptions.py +0 -0
  108. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_functions.py +0 -0
  109. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_importhook.py +0 -0
  110. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_memo.py +0 -0
  111. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_pytest_plugin.py +0 -0
  112. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_suppression.py +0 -0
  113. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_transformer.py +0 -0
  114. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_union_transformer.py +0 -0
  115. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/_utils.py +0 -0
  116. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typeguard/py.typed +0 -0
  117. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/typing_extensions.py +0 -0
  118. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/v3_7/zipp.py +0 -0
  119. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/__init__.py +0 -0
  120. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/composer.py +0 -0
  121. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/constructor.py +0 -0
  122. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/cyaml.py +0 -0
  123. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/dumper.py +0 -0
  124. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/emitter.py +0 -0
  125. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/error.py +0 -0
  126. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/events.py +0 -0
  127. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/loader.py +0 -0
  128. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/nodes.py +0 -0
  129. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/parser.py +0 -0
  130. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/reader.py +0 -0
  131. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/representer.py +0 -0
  132. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/resolver.py +0 -0
  133. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/scanner.py +0 -0
  134. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/serializer.py +0 -0
  135. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/yaml/tokens.py +0 -0
  136. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/_vendor/zipp.py +0 -0
  137. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli.py +0 -0
  138. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_args.py +0 -0
  139. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_components/__init__.py +0 -0
  140. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_components/dump_cmd.py +0 -0
  141. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_components/init_cmd.py +0 -0
  142. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_components/run_cmds.py +0 -0
  143. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_components/step_cmd.py +0 -0
  144. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cli_components/utils.py +0 -0
  145. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/client/__init__.py +0 -0
  146. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/client/core.py +0 -0
  147. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/client/filecache.py +0 -0
  148. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/clone_util.py +0 -0
  149. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/__init__.py +0 -0
  150. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/code/__init__.py +0 -0
  151. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/configure_cmd.py +0 -0
  152. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/develop/__init__.py +0 -0
  153. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/develop/stub_generator.py +0 -0
  154. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/develop/stubs.py +0 -0
  155. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/main_cli.py +0 -0
  156. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/make_wrapper.py +0 -0
  157. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/tutorials_cmd.py +0 -0
  158. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd/util.py +0 -0
  159. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/cmd_with_io.py +0 -0
  160. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/__init__.py +0 -0
  161. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/content_addressed_store.py +0 -0
  162. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/datastore_set.py +0 -0
  163. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/datastore_storage.py +0 -0
  164. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/exceptions.py +0 -0
  165. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/flow_datastore.py +0 -0
  166. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/inputs.py +0 -0
  167. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/datastore/task_datastore.py +0 -0
  168. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/debug.py +0 -0
  169. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/decorators.py +0 -0
  170. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/event_logger.py +0 -0
  171. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/events.py +0 -0
  172. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/exception.py +0 -0
  173. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/extension_support/__init__.py +0 -0
  174. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/extension_support/_empty_file.py +0 -0
  175. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/extension_support/cmd.py +0 -0
  176. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/extension_support/integrations.py +0 -0
  177. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/extension_support/plugins.py +0 -0
  178. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/flowspec.py +0 -0
  179. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/graph.py +0 -0
  180. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/integrations.py +0 -0
  181. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/lint.py +0 -0
  182. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/meta_files.py +0 -0
  183. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metadata_provider/__init__.py +0 -0
  184. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metadata_provider/heartbeat.py +0 -0
  185. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metadata_provider/metadata.py +0 -0
  186. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metadata_provider/util.py +0 -0
  187. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_config.py +0 -0
  188. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_config_funcs.py +0 -0
  189. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_current.py +0 -0
  190. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_environment.py +0 -0
  191. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_git.py +0 -0
  192. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_profile.py +0 -0
  193. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/metaflow_version.py +0 -0
  194. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/mflog/__init__.py +0 -0
  195. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/mflog/mflog.py +0 -0
  196. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/mflog/save_logs.py +0 -0
  197. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/mflog/save_logs_periodically.py +0 -0
  198. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/mflog/tee.py +0 -0
  199. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/monitor.py +0 -0
  200. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/multicore_utils.py +0 -0
  201. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/package/__init__.py +0 -0
  202. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/packaging_sys/__init__.py +0 -0
  203. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/packaging_sys/backend.py +0 -0
  204. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/packaging_sys/distribution_support.py +0 -0
  205. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/packaging_sys/tar_backend.py +0 -0
  206. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/packaging_sys/utils.py +0 -0
  207. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/packaging_sys/v1.py +0 -0
  208. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/parameters.py +0 -0
  209. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/__init__.py +0 -0
  210. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/airflow.py +0 -0
  211. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  212. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  213. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  214. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/dag.py +0 -0
  215. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/exception.py +0 -0
  216. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  217. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  218. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  219. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  220. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  221. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  222. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/__init__.py +0 -0
  223. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_client.py +0 -0
  224. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_events.py +0 -0
  225. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_workflows.py +0 -0
  226. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  227. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  228. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  229. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  230. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/capture_error.py +0 -0
  231. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/conditional_input_paths.py +0 -0
  232. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/exit_hooks.py +0 -0
  233. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  234. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  235. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/__init__.py +0 -0
  236. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/aws_client.py +0 -0
  237. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/aws_utils.py +0 -0
  238. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/batch/__init__.py +0 -0
  239. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/batch/batch.py +0 -0
  240. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  241. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  242. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  243. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  244. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  245. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  246. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  247. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  248. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  249. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  250. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  251. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  252. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  253. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  254. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  255. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  256. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
  257. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/__init__.py +0 -0
  258. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/azure_credential.py +0 -0
  259. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  260. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  261. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/azure_tail.py +0 -0
  262. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/azure_utils.py +0 -0
  263. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  264. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/azure/includefile_support.py +0 -0
  265. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/__init__.py +0 -0
  266. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_cli.py +0 -0
  267. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_client.py +0 -0
  268. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_creator.py +0 -0
  269. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_datastore.py +0 -0
  270. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_decorator.py +0 -0
  271. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  272. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/base.html +0 -0
  273. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  274. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/card.py +0 -0
  275. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  276. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  277. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  278. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  279. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  280. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  281. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/main.css +0 -0
  282. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  283. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  284. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_resolver.py +0 -0
  285. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_server.py +0 -0
  286. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  287. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/component_serializer.py +0 -0
  288. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/exception.py +0 -0
  289. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/cards/metadata.py +0 -0
  290. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/catch_decorator.py +0 -0
  291. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datastores/__init__.py +0 -0
  292. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datastores/azure_storage.py +0 -0
  293. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datastores/gs_storage.py +0 -0
  294. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datastores/local_storage.py +0 -0
  295. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datastores/s3_storage.py +0 -0
  296. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/__init__.py +0 -0
  297. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/local.py +0 -0
  298. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  299. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  300. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  301. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/debug_logger.py +0 -0
  302. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/debug_monitor.py +0 -0
  303. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/__init__.py +0 -0
  304. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/client.py +0 -0
  305. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/client_modules.py +0 -0
  306. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  307. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  308. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  309. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  310. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  311. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  312. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  313. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  314. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  315. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  316. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/consts.py +0 -0
  317. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  318. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  319. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  320. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/server.py +0 -0
  321. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/stub.py +0 -0
  322. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/env_escape/utils.py +0 -0
  323. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/environment_decorator.py +0 -0
  324. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/events_decorator.py +0 -0
  325. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/exit_hook/__init__.py +0 -0
  326. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/exit_hook/exit_hook_decorator.py +0 -0
  327. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/exit_hook/exit_hook_script.py +0 -0
  328. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/frameworks/__init__.py +0 -0
  329. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/frameworks/pytorch.py +0 -0
  330. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/__init__.py +0 -0
  331. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  332. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  333. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  334. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/gs_tail.py +0 -0
  335. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/gs_utils.py +0 -0
  336. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/gcp/includefile_support.py +0 -0
  337. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/__init__.py +0 -0
  338. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  339. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  340. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  341. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  342. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  343. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  344. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  345. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/spot_metadata_cli.py +0 -0
  346. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/kubernetes/spot_monitor_sidecar.py +0 -0
  347. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/logs_cli.py +0 -0
  348. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  349. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/metadata_providers/local.py +0 -0
  350. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/metadata_providers/service.py +0 -0
  351. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/package_cli.py +0 -0
  352. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/parallel_decorator.py +0 -0
  353. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/project_decorator.py +0 -0
  354. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/__init__.py +0 -0
  355. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/bootstrap.py +0 -0
  356. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  357. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/conda_environment.py +0 -0
  358. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/micromamba.py +0 -0
  359. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/parsers.py +0 -0
  360. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/pip.py +0 -0
  361. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  362. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  363. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/pypi/utils.py +0 -0
  364. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/resources_decorator.py +0 -0
  365. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/retry_decorator.py +0 -0
  366. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/secrets/__init__.py +0 -0
  367. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  368. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  369. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/secrets/secrets_func.py +0 -0
  370. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/secrets/secrets_spec.py +0 -0
  371. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/secrets/utils.py +0 -0
  372. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/storage_executor.py +0 -0
  373. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/tag_cli.py +0 -0
  374. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  375. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/timeout_decorator.py +0 -0
  376. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/uv/__init__.py +0 -0
  377. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/uv/bootstrap.py +0 -0
  378. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/plugins/uv/uv_environment.py +0 -0
  379. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/procpoll.py +0 -0
  380. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/py.typed +0 -0
  381. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/pylint_wrapper.py +0 -0
  382. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/__init__.py +0 -0
  383. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/click_api.py +0 -0
  384. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/deployer.py +0 -0
  385. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/deployer_impl.py +0 -0
  386. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/metaflow_runner.py +0 -0
  387. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/nbdeploy.py +0 -0
  388. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/nbrun.py +0 -0
  389. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/subprocess_manager.py +0 -0
  390. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runner/utils.py +0 -0
  391. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/runtime.py +0 -0
  392. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/sidecar/__init__.py +0 -0
  393. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/sidecar/sidecar.py +0 -0
  394. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/sidecar/sidecar_messages.py +0 -0
  395. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  396. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/sidecar/sidecar_worker.py +0 -0
  397. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/system/__init__.py +0 -0
  398. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/system/system_logger.py +0 -0
  399. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/system/system_monitor.py +0 -0
  400. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/system/system_utils.py +0 -0
  401. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tagging_util.py +0 -0
  402. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/task.py +0 -0
  403. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tracing/__init__.py +0 -0
  404. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tracing/propagator.py +0 -0
  405. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tracing/span_exporter.py +0 -0
  406. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tracing/tracing_modules.py +0 -0
  407. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tuple_util.py +0 -0
  408. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/00-helloworld/README.md +0 -0
  409. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  410. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/01-playlist/README.md +0 -0
  411. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  412. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  413. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  414. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/02-statistics/README.md +0 -0
  415. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  416. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  417. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/02-statistics/stats.py +0 -0
  418. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  419. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  420. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  421. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  422. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  423. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  424. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  425. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  426. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  427. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/07-worldview/README.md +0 -0
  428. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  429. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/08-autopilot/README.md +0 -0
  430. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  431. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/unbounded_foreach.py +0 -0
  432. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_configs/__init__.py +0 -0
  433. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_configs/config_options.py +0 -0
  434. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_configs/config_parameters.py +0 -0
  435. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_decorators/__init__.py +0 -0
  436. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_decorators/common.py +0 -0
  437. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_decorators/mutable_flow.py +0 -0
  438. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_decorators/mutable_step.py +0 -0
  439. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_decorators/user_flow_decorator.py +0 -0
  440. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/user_decorators/user_step_decorator.py +0 -0
  441. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/util.py +0 -0
  442. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow/vendor.py +0 -0
  443. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow.egg-info/dependency_links.txt +0 -0
  444. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow.egg-info/entry_points.txt +0 -0
  445. {metaflow-2.18.7 → metaflow-2.18.9}/metaflow.egg-info/top_level.txt +0 -0
  446. {metaflow-2.18.7 → metaflow-2.18.9}/setup.cfg +0 -0
  447. {metaflow-2.18.7 → metaflow-2.18.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaflow
3
- Version: 2.18.7
3
+ Version: 2.18.9
4
4
  Summary: Metaflow: More AI and ML, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.18.7; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.18.9; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -102,3 +102,4 @@ We'd love to hear from you. Join our community [Slack workspace](http://slack.ou
102
102
  ## Contributing
103
103
  We welcome contributions to Metaflow. Please see our [contribution guide](https://docs.metaflow.org/introduction/contributing-to-metaflow) for more details.
104
104
 
105
+
@@ -61,3 +61,4 @@ We'd love to hear from you. Join our community [Slack workspace](http://slack.ou
61
61
  ## Contributing
62
62
  We welcome contributions to Metaflow. Please see our [contribution guide](https://docs.metaflow.org/introduction/contributing-to-metaflow) for more details.
63
63
 
64
+
@@ -14,6 +14,17 @@
14
14
  version_settings(constraint='>=0.22.2')
15
15
  allow_k8s_contexts('minikube')
16
16
 
17
+ # Version configuration for components
18
+ JOBSET_VERSION = os.getenv("JOBSET_VERSION", "v0.8.2")
19
+
20
+ # Argo Workflows versions
21
+ ARGO_WORKFLOWS_HELM_CHART_VERSION = os.getenv("ARGO_WORKFLOWS_HELM_CHART_VERSION", "0.45.2") # Helm chart version
22
+ ARGO_WORKFLOWS_IMAGE_TAG = os.getenv("ARGO_WORKFLOWS_IMAGE_TAG", "v3.6.0") # Argo Workflows application version
23
+
24
+ # Argo Events versions
25
+ ARGO_EVENTS_HELM_CHART_VERSION = os.getenv("ARGO_EVENTS_HELM_CHART_VERSION", "2.4.8") # Helm chart version
26
+ ARGO_EVENTS_IMAGE_TAG = os.getenv("ARGO_EVENTS_IMAGE_TAG", "v1.9.2") # Argo Events application version
27
+
17
28
  components = {
18
29
  "metadata-service": ["postgresql"],
19
30
  "ui": ["postgresql", "minio"],
@@ -21,9 +32,10 @@ components = {
21
32
  "postgresql": [],
22
33
  "argo-workflows": [],
23
34
  "argo-events": ["argo-workflows"],
35
+ "jobset": [],
24
36
  }
25
37
 
26
- services_env = os.getenv("SERVICES", "").strip().lower()
38
+ services_env = os.getenv("SERVICES", "all").strip().lower()
27
39
 
28
40
  if services_env:
29
41
  if services_env == "all":
@@ -205,6 +217,7 @@ if "postgresql" in enabled_components:
205
217
  if "argo-workflows" in enabled_components:
206
218
  helm_remote(
207
219
  'argo-workflows',
220
+ version=ARGO_WORKFLOWS_HELM_CHART_VERSION,
208
221
  repo_name='argo',
209
222
  repo_url='https://argoproj.github.io/argo-helm',
210
223
  set=[
@@ -220,7 +233,9 @@ if "argo-workflows" in enabled_components:
220
233
  'controller.resources.requests.memory=128Mi',
221
234
  'controller.resources.requests.cpu=50m',
222
235
  'controller.resources.limits.memory=256Mi',
223
- 'controller.resources.limits.cpu=100m'
236
+ 'controller.resources.limits.cpu=100m',
237
+ # Image version overrides
238
+ 'images.tag=%s' % ARGO_WORKFLOWS_IMAGE_TAG,
224
239
  ]
225
240
  )
226
241
 
@@ -307,6 +322,7 @@ if "argo-workflows" in enabled_components:
307
322
  if "argo-events" in enabled_components:
308
323
  helm_remote(
309
324
  'argo-events',
325
+ version=ARGO_EVENTS_HELM_CHART_VERSION,
310
326
  repo_name='argo',
311
327
  repo_url='https://argoproj.github.io/argo-helm',
312
328
  set=[
@@ -334,6 +350,8 @@ if "argo-events" in enabled_components:
334
350
  'configs.jetstream.versions[1].natsImage=nats:2.9.15',
335
351
  'configs.jetstream.versions[1].startCommand=/nats-server',
336
352
  'configs.jetstream.versions[1].version=2.9.15',
353
+ # Image version overrides
354
+ 'global.image.tag=%s' % ARGO_EVENTS_IMAGE_TAG,
337
355
  ]
338
356
  )
339
357
 
@@ -541,6 +559,62 @@ if "argo-events" in enabled_components:
541
559
  config_resources.append('argo-events-controller-manager')
542
560
  config_resources.append('argo-events-webhook-eventsource-svc')
543
561
 
562
+ #################################################
563
+ # JOBSET
564
+ #################################################
565
+ if "jobset" in enabled_components:
566
+ # Apply JobSet manifests directly from GitHub releases
567
+ jobset_manifest_url = "https://github.com/kubernetes-sigs/jobset/releases/download/%s/manifests.yaml" % JOBSET_VERSION
568
+
569
+ cmd = "curl -sSL %s" % (jobset_manifest_url)
570
+ k8s_yaml(
571
+ local(
572
+ cmd,
573
+ )
574
+ )
575
+
576
+ k8s_resource(
577
+ 'jobset-controller-manager',
578
+ labels=['jobset'],
579
+ )
580
+
581
+ metaflow_config["METAFLOW_KUBERNETES_JOBSET_ENABLED"] = "true"
582
+
583
+ config_resources.append('jobset-controller-manager')
584
+
585
+ # ClusterRole for jobset operations
586
+ k8s_yaml(encode_yaml({
587
+ 'apiVersion': 'rbac.authorization.k8s.io/v1',
588
+ 'kind': 'ClusterRole',
589
+ 'metadata': {
590
+ 'name': 'jobset-full-access'
591
+ },
592
+ 'rules': [{
593
+ 'apiGroups': ['jobset.x-k8s.io'],
594
+ 'resources': ['jobsets'],
595
+ 'verbs': ['*']
596
+ }]
597
+ }))
598
+
599
+ # ClusterRoleBinding for default service account to access jobsets
600
+ k8s_yaml(encode_yaml({
601
+ 'apiVersion': 'rbac.authorization.k8s.io/v1',
602
+ 'kind': 'ClusterRoleBinding',
603
+ 'metadata': {
604
+ 'name': 'default-jobset-binding'
605
+ },
606
+ 'subjects': [{
607
+ 'kind': 'ServiceAccount',
608
+ 'name': 'default',
609
+ 'namespace': 'default'
610
+ }],
611
+ 'roleRef': {
612
+ 'kind': 'ClusterRole',
613
+ 'name': 'jobset-full-access',
614
+ 'apiGroup': 'rbac.authorization.k8s.io'
615
+ }
616
+ }))
617
+
544
618
  #################################################
545
619
  # METADATA SERVICE
546
620
  #################################################
@@ -18,6 +18,7 @@ SERVICE_OPTIONS=(
18
18
  "ui"
19
19
  "argo-workflows"
20
20
  "argo-events"
21
+ "jobset"
21
22
  )
22
23
 
23
24
  gum style "$LOGO" \
@@ -8,6 +8,7 @@ from metaflow.plugins.cards.card_modules.components import (
8
8
  Markdown,
9
9
  VegaChart,
10
10
  ProgressBar,
11
+ ValueBox,
11
12
  PythonCode,
12
13
  )
13
14
  from metaflow.plugins.cards.card_modules.basic import (
@@ -7,9 +7,10 @@ import json
7
7
  import os
8
8
 
9
9
  from hashlib import sha1
10
- from typing import Any, Callable, Dict, Optional
10
+ from typing import Any, Callable, Dict, Optional, Union
11
11
 
12
12
  from metaflow._vendor import click
13
+ from metaflow._vendor import yaml
13
14
 
14
15
  from .exception import MetaflowException
15
16
  from .parameters import (
@@ -20,7 +21,7 @@ from .parameters import (
20
21
  )
21
22
 
22
23
  from .plugins import DATACLIENTS
23
- from .user_configs.config_parameters import ConfigValue
24
+ from .user_configs.config_options import ConfigInput
24
25
  from .util import get_username
25
26
 
26
27
  import functools
@@ -261,6 +262,12 @@ class IncludeFile(Parameter):
261
262
  show_default : bool, default True
262
263
  If True, show the default value in the help text. A value of None is equivalent
263
264
  to True.
265
+ parser : Union[str, Callable[[str], Any]], optional, default None
266
+ If a callable, it is a function that can parse the file contents
267
+ into any desired format. If a string, the string should refer to
268
+ a function (like "my_parser_package.my_parser.my_parser_function") which should
269
+ be able to parse the file contents. If the name starts with a ".", it is assumed
270
+ to be relative to "metaflow".
264
271
  """
265
272
 
266
273
  def __init__(
@@ -270,6 +277,7 @@ class IncludeFile(Parameter):
270
277
  is_text: Optional[bool] = None,
271
278
  encoding: Optional[str] = None,
272
279
  help: Optional[str] = None,
280
+ parser: Optional[Union[str, Callable[[str], Any]]] = None,
273
281
  **kwargs: Dict[str, str]
274
282
  ):
275
283
  self._includefile_overrides = {}
@@ -277,6 +285,7 @@ class IncludeFile(Parameter):
277
285
  self._includefile_overrides["is_text"] = is_text
278
286
  if encoding is not None:
279
287
  self._includefile_overrides["encoding"] = encoding
288
+ self._parser = parser
280
289
  # NOTA: Right now, there is an issue where these can't be overridden by config
281
290
  # in all circumstances. Ignoring for now.
282
291
  super(IncludeFile, self).__init__(
@@ -336,7 +345,20 @@ class IncludeFile(Parameter):
336
345
  def load_parameter(self, v):
337
346
  if v is None:
338
347
  return v
339
- return v.decode(self.name, var_type="Parameter")
348
+
349
+ # Get the raw content from the file
350
+ content = v.decode(self.name, var_type="Parameter")
351
+ # If a parser is specified, use it to parse the content
352
+ if self._parser is not None:
353
+ try:
354
+ return ConfigInput._call_parser(self._parser, content)
355
+ except Exception as e:
356
+ raise MetaflowException(
357
+ "Failed to parse content in parameter '%s' using parser: %s"
358
+ % (self.name, str(e))
359
+ ) from e
360
+
361
+ return content
340
362
 
341
363
  @staticmethod
342
364
  def _eval_default(is_text, encoding, default_path):
@@ -170,6 +170,7 @@ DEPLOYER_IMPL_PROVIDERS_DESC = [
170
170
  ]
171
171
 
172
172
  TL_PLUGINS_DESC = [
173
+ ("yaml_parser", ".parsers.yaml_parser"),
173
174
  ("requirements_txt_parser", ".pypi.parsers.requirements_txt_parser"),
174
175
  ("pyproject_toml_parser", ".pypi.parsers.pyproject_toml_parser"),
175
176
  ("conda_environment_yml_parser", ".pypi.parsers.conda_environment_yml_parser"),
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap";code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--bg: #ffffff;--black: #333;--blue: #0c66de;--dk-grey: #767676;--dk-primary: #ef863b;--dk-secondary: #13172d;--dk-tertiary: #0f426e;--error: #cf483e;--grey: rgba(0, 0, 0, .125);--highlight: #f8d9d8;--lt-blue: #4fa7ff;--lt-grey: #f3f3f3;--lt-lt-grey: #f9f9f9;--lt-primary: #ffcb8b;--lt-secondary: #434d81;--lt-tertiary: #4189c9;--primary: #faab4a;--quadrary: #f8d9d8;--secondary: #2e3454;--tertiary: #2a679d;--white: #ffffff;--component-spacer: 3rem;--aside-width: 20rem;--embed-card-min-height: 12rem;--mono-font: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace}html,body{margin:0;min-height:100vh;overflow-y:visible;padding:0;width:100%}.card_app{width:100%;min-height:100vh}.embed .card_app{min-height:var(--embed-card-min-height)}.mf-card *{box-sizing:border-box}.mf-card{background:var(--bg);color:var(--black);font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;font-weight:400;line-height:1.5;text-size-adjust:100%;margin:0;min-height:100vh;overflow-y:visible;padding:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;width:100%}.embed .mf-card{min-height:var(--embed-card-min-height)}.mf-card :is(.mono,code.mono,pre.mono){font-family:var(--mono-font);font-weight:lighter}.mf-card :is(table,th,td){border-spacing:1px;text-align:center;color:var(--black)}.mf-card table{position:relative;min-width:100%;table-layout:inherit!important}.mf-card td{padding:.66rem 1.25rem;background:var(--lt-lt-grey);border:none}.mf-card th{border:none;color:var(--dk-grey);font-weight:400;padding:.5rem}.mf-card :is(h1,h2,h3,h4,h5){font-weight:700;margin:.5rem 0}.mf-card ul{margin:0;padding:0}.mf-card p{margin:0 0 1rem}.mf-card p:last-of-type{margin:0}.mf-card button{font-size:1rem}.mf-card .textButton{cursor:pointer;text-align:left;background:none;border:1px solid transparent;outline:none;padding:0}.mf-card :is(button.textButton:focus,a:focus,button.textButton:active){border:1px dashed var(--grey);background:transparent}.mf-card button.textButton:hover{color:var(--blue);text-decoration:none}.mf-card :is(:not(pre)>code[class*=language-],pre[class*=language-]){background:transparent!important;text-shadow:none;-webkit-user-select:auto;user-select:auto}aside.svelte-1okdv0e{display:none;line-height:2;text-align:left}@media (min-width: 60rem){aside.svelte-1okdv0e{display:flex;flex-direction:column;height:100vh;justify-content:space-between;padding:2.5rem 0 1.5rem 1.5rem;position:fixed;width:var(--aside-width)}}.embed aside{display:none}aside ul{list-style-type:none}aside a,aside button,aside a:visited{text-decoration:none;cursor:pointer;font-weight:700;color:var(--black)}aside a:hover,aside button:hover{text-decoration:underline}.logoContainer svg{width:100%;max-width:140px;margin-bottom:3.75rem;height:auto}.idCell.svelte-pt8vzv{font-weight:700;text-align:right;background:var(--lt-grey);width:12%}.codeCell.svelte-pt8vzv{text-align:left;-webkit-user-select:all;user-select:all}.container.svelte-ubs992{width:100%;overflow:auto}table.svelte-ubs992{width:100%}:root{--dag-border: #282828;--dag-bg-static: var(--lt-grey);--dag-bg-success: #a5d46a;--dag-bg-running: #ffdf80;--dag-bg-error: #ffa080;--dag-connector: #cccccc;--dag-gap: 5rem;--dag-step-height: 6.25rem;--dag-step-width: 11.25rem;--dag-selected: #ffd700}.connectorwrapper.svelte-19jpdwh{transform-origin:0 0;position:absolute;z-index:0;min-width:var(--strokeWidth)}.flip.svelte-19jpdwh{transform:scaleX(-1)}.path.svelte-19jpdwh{--strokeWidth:.5rem;--strokeColor:var(--dag-connector);--borderRadius:1.25rem;box-sizing:border-box}.straightLine.svelte-19jpdwh{position:absolute;top:0;bottom:0;left:0;right:0;border-left:var(--strokeWidth) solid var(--strokeColor)}.loop.svelte-19jpdwh{position:absolute;top:-50%;left:0;width:100%;height:100%;border-radius:var(--borderRadius);border:var(--strokeWidth) solid var(--strokeColor)}.topLeft.svelte-19jpdwh{position:absolute;top:0;left:0;right:50%;bottom:calc(var(--dag-gap) / 2 - var(--strokeWidth) / 2);border-radius:0 0 0 var(--borderRadius);border-left:var(--strokeWidth) solid var(--strokeColor);border-bottom:var(--strokeWidth) solid var(--strokeColor)}.bottomRight.svelte-19jpdwh{position:absolute;top:calc(100% - (var(--dag-gap) / 2 + var(--strokeWidth) / 2));left:50%;right:0;bottom:0;border-radius:0 var(--borderRadius) 0 0;border-top:var(--strokeWidth) solid var(--strokeColor);border-right:var(--strokeWidth) solid var(--strokeColor)}.wrapper.svelte-117ceti.svelte-117ceti{position:relative;z-index:1}.step.svelte-117ceti.svelte-117ceti{font-size:.75rem;padding:.5rem;color:var(--dk-grey)}.rectangle.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-static);border:1px solid var(--dag-border);box-sizing:border-box;position:relative;height:var(--dag-step-height);width:var(--dag-step-width)}.rectangle.error.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-error)}.rectangle.success.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-success)}.rectangle.running.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-running)}.level.svelte-117ceti.svelte-117ceti{z-index:-1;filter:contrast(.5);position:absolute}.inner.svelte-117ceti.svelte-117ceti{position:relative;height:100%;width:100%}.name.svelte-117ceti.svelte-117ceti{font-weight:700;overflow:hidden;text-overflow:ellipsis;display:block}.description.svelte-117ceti.svelte-117ceti{position:absolute;max-height:4rem;bottom:0;left:0;right:0;overflow:hidden;-webkit-line-clamp:4;line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical}.overflown.description.svelte-117ceti.svelte-117ceti{cursor:help}.current.svelte-117ceti .rectangle.svelte-117ceti{box-shadow:0 0 10px var(--dag-selected)}.levelstoshow.svelte-117ceti.svelte-117ceti{position:absolute;bottom:100%;right:0;font-size:.75rem;font-weight:100;text-align:right}.stepwrapper.svelte-18aex7a{display:flex;align-items:center;flex-direction:column;width:100%;position:relative;min-width:var(--dag-step-width)}.childwrapper.svelte-18aex7a{display:flex;width:100%}.gap.svelte-18aex7a{height:var(--dag-gap)}.title.svelte-117s0ws{text-align:left}.subtitle.svelte-lu9pnn{font-size:1rem;text-align:left}header.svelte-1ugmt5d{margin-bottom:var(--component-spacer)}figure.svelte-1x96yvr{background:var(--lt-grey);padding:1rem;border-radius:5px;text-align:center;margin:0 auto var(--component-spacer)}@media (min-width: 60rem){figure.svelte-1x96yvr{margin-bottom:0}}img.svelte-1x96yvr{max-width:100%;max-height:500px}.label.svelte-1x96yvr{font-weight:700;margin:.5rem 0}.description.svelte-1x96yvr{font-size:.9rem;font-style:italic;text-align:center;margin:.5rem 0}.log.svelte-1jhmsu{background:var(--lt-grey)!important;font-size:.9rem;padding:2rem}.page.svelte-v7ihqd:last-of-type{margin-bottom:var(--component-spacer)}.page:last-of-type section:last-of-type hr{display:none}progress.svelte-ljrmzp::-webkit-progress-bar{background-color:#fff!important;min-width:100%}progress.svelte-ljrmzp{background-color:#fff;color:#326cded9!important}progress.svelte-ljrmzp::-moz-progress-bar{background-color:#326cde!important}table .container{background:transparent!important;font-size:10px!important;padding:0!important}table progress{height:4px!important}.container.svelte-ljrmzp{display:flex;align-items:center;justify-content:center;font-size:12px;border-radius:3px;background:#edf5ff;padding:3rem}.inner.svelte-ljrmzp{max-width:410px;width:100%;text-align:center}.info.svelte-ljrmzp{display:flex;justify-content:space-between}table .info{text-align:left;flex-direction:column}label.svelte-ljrmzp{font-weight:700}.labelValue.svelte-ljrmzp{border-left:1px solid rgba(0,0,0,.1);margin-left:.25rem;padding-left:.5rem}.details.svelte-ljrmzp{font-family:var(--mono-font);font-size:8px;color:#333433;line-height:18px;overflow:hidden;white-space:nowrap}progress.svelte-ljrmzp{width:100%;border:none;border-radius:5px;height:8px;background:#fff}.heading.svelte-17n0qr8{margin-bottom:1.5rem}.sectionItems.svelte-17n0qr8{display:block}.sectionItems .imageContainer{max-height:500px}.container.svelte-17n0qr8{scroll-margin:var(--component-spacer)}hr.svelte-17n0qr8{background:var(--grey);border:none;height:1px;margin:var(--component-spacer) 0;padding:0}@media (min-width: 60rem){.sectionItems.svelte-17n0qr8{display:grid;grid-gap:2rem}}td.svelte-gl9h79{text-align:left}td.labelColumn.svelte-gl9h79{text-align:right;background-color:var(--lt-grey);font-weight:700;width:12%;white-space:nowrap}.tableContainer.svelte-q3hq57{overflow:auto}th.svelte-q3hq57{position:sticky;top:-1px;z-index:2;white-space:nowrap;background:var(--white)}.mainContainer.svelte-mqeomk{max-width:110rem}main.svelte-mqeomk{flex:0 1 auto;max-width:100rem;padding:1.5rem}@media (min-width: 60rem){main.svelte-mqeomk{margin-left:var(--aside-width)}}.embed main{margin:0 auto;min-width:80%}.modal.svelte-1hhf5ym{align-items:center;background:#00000080;bottom:0;cursor:pointer;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100}.modalContainer>*{background-color:#fff;border-radius:5px;cursor:default;flex:0 1 auto;padding:1rem;position:relative}.modal img{max-height:80vh!important}.cancelButton.svelte-1hhf5ym{color:#fff;cursor:pointer;font-size:2rem;position:absolute;right:1rem;top:1rem}.cancelButton.svelte-1hhf5ym:hover{color:var(--blue)}.nav.svelte-1kdpgko.svelte-1kdpgko{border-radius:0 0 5px;display:none;margin:0;top:0}ul.navList.svelte-1kdpgko.svelte-1kdpgko{list-style-type:none}ul.navList.svelte-1kdpgko ul.svelte-1kdpgko{margin:.5rem 1rem 2rem}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:0}.navItem.svelte-1kdpgko li.svelte-1kdpgko:hover{color:var(--blue)}.pageId.svelte-1kdpgko.svelte-1kdpgko{display:block;border-bottom:1px solid var(--grey);padding:0 .5rem;margin-bottom:1rem}@media (min-width: 60rem){.nav.svelte-1kdpgko.svelte-1kdpgko{display:block}ul.navList.svelte-1kdpgko.svelte-1kdpgko{text-align:left}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:.5rem 0}}.container.svelte-teyund{width:100%;display:flex;flex-direction:column;position:relative}
1
+ @import"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap";code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:#ffffff80}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--bg: #ffffff;--black: #333;--blue: #0c66de;--dk-grey: #767676;--dk-primary: #ef863b;--dk-secondary: #13172d;--dk-tertiary: #0f426e;--error: #cf483e;--grey: rgba(0, 0, 0, .125);--highlight: #f8d9d8;--lt-blue: #4fa7ff;--lt-grey: #f3f3f3;--lt-lt-grey: #f9f9f9;--lt-primary: #ffcb8b;--lt-secondary: #434d81;--lt-tertiary: #4189c9;--primary: #faab4a;--quadrary: #f8d9d8;--secondary: #2e3454;--tertiary: #2a679d;--white: #ffffff;--component-spacer: 3rem;--aside-width: 20rem;--embed-card-min-height: 12rem;--mono-font: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace}html,body{margin:0;min-height:100vh;overflow-y:visible;padding:0;width:100%}.card_app{width:100%;min-height:100vh}.embed .card_app{min-height:var(--embed-card-min-height)}.mf-card *{box-sizing:border-box}.mf-card{background:var(--bg);color:var(--black);font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;font-weight:400;line-height:1.5;text-size-adjust:100%;margin:0;min-height:100vh;overflow-y:visible;padding:0;text-align:left;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;width:100%}.embed .mf-card{min-height:var(--embed-card-min-height)}.mf-card :is(.mono,code.mono,pre.mono){font-family:var(--mono-font);font-weight:lighter}.mf-card :is(table,th,td){border-spacing:1px;text-align:center;color:var(--black)}.mf-card table{position:relative;min-width:100%;table-layout:inherit!important}.mf-card td{padding:.66rem 1.25rem;background:var(--lt-lt-grey);border:none}.mf-card th{border:none;color:var(--dk-grey);font-weight:400;padding:.5rem}.mf-card :is(h1,h2,h3,h4,h5){font-weight:700;margin:.5rem 0}.mf-card ul{margin:0;padding:0}.mf-card p{margin:0 0 1rem}.mf-card p:last-of-type{margin:0}.mf-card button{font-size:1rem}.mf-card .textButton{cursor:pointer;text-align:left;background:none;border:1px solid transparent;outline:none;padding:0}.mf-card :is(button.textButton:focus,a:focus,button.textButton:active){border:1px dashed var(--grey);background:transparent}.mf-card button.textButton:hover{color:var(--blue);text-decoration:none}.mf-card :is(:not(pre)>code[class*=language-],pre[class*=language-]){background:transparent!important;text-shadow:none;-webkit-user-select:auto;user-select:auto}aside.svelte-1okdv0e{display:none;line-height:2;text-align:left}@media (min-width: 60rem){aside.svelte-1okdv0e{display:flex;flex-direction:column;height:100vh;justify-content:space-between;padding:2.5rem 0 1.5rem 1.5rem;position:fixed;width:var(--aside-width)}}.embed aside{display:none}aside ul{list-style-type:none}aside a,aside button,aside a:visited{text-decoration:none;cursor:pointer;font-weight:700;color:var(--black)}aside a:hover,aside button:hover{text-decoration:underline}.logoContainer svg{width:100%;max-width:140px;margin-bottom:3.75rem;height:auto}.idCell.svelte-pt8vzv{font-weight:700;text-align:right;background:var(--lt-grey);width:12%}.codeCell.svelte-pt8vzv{text-align:left;-webkit-user-select:all;user-select:all}.container.svelte-ubs992{width:100%;overflow:auto}table.svelte-ubs992{width:100%}:root{--dag-border: #282828;--dag-bg-static: var(--lt-grey);--dag-bg-success: #a5d46a;--dag-bg-running: #ffdf80;--dag-bg-error: #ffa080;--dag-connector: #cccccc;--dag-gap: 5rem;--dag-step-height: 6.25rem;--dag-step-width: 11.25rem;--dag-selected: #ffd700}.connectorwrapper.svelte-19jpdwh{transform-origin:0 0;position:absolute;z-index:0;min-width:var(--strokeWidth)}.flip.svelte-19jpdwh{transform:scaleX(-1)}.path.svelte-19jpdwh{--strokeWidth:.5rem;--strokeColor:var(--dag-connector);--borderRadius:1.25rem;box-sizing:border-box}.straightLine.svelte-19jpdwh{position:absolute;top:0;bottom:0;left:0;right:0;border-left:var(--strokeWidth) solid var(--strokeColor)}.loop.svelte-19jpdwh{position:absolute;top:-50%;left:0;width:100%;height:100%;border-radius:var(--borderRadius);border:var(--strokeWidth) solid var(--strokeColor)}.topLeft.svelte-19jpdwh{position:absolute;top:0;left:0;right:50%;bottom:calc(var(--dag-gap) / 2 - var(--strokeWidth) / 2);border-radius:0 0 0 var(--borderRadius);border-left:var(--strokeWidth) solid var(--strokeColor);border-bottom:var(--strokeWidth) solid var(--strokeColor)}.bottomRight.svelte-19jpdwh{position:absolute;top:calc(100% - (var(--dag-gap) / 2 + var(--strokeWidth) / 2));left:50%;right:0;bottom:0;border-radius:0 var(--borderRadius) 0 0;border-top:var(--strokeWidth) solid var(--strokeColor);border-right:var(--strokeWidth) solid var(--strokeColor)}.wrapper.svelte-117ceti.svelte-117ceti{position:relative;z-index:1}.step.svelte-117ceti.svelte-117ceti{font-size:.75rem;padding:.5rem;color:var(--dk-grey)}.rectangle.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-static);border:1px solid var(--dag-border);box-sizing:border-box;position:relative;height:var(--dag-step-height);width:var(--dag-step-width)}.rectangle.error.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-error)}.rectangle.success.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-success)}.rectangle.running.svelte-117ceti.svelte-117ceti{background-color:var(--dag-bg-running)}.level.svelte-117ceti.svelte-117ceti{z-index:-1;filter:contrast(.5);position:absolute}.inner.svelte-117ceti.svelte-117ceti{position:relative;height:100%;width:100%}.name.svelte-117ceti.svelte-117ceti{font-weight:700;overflow:hidden;text-overflow:ellipsis;display:block}.description.svelte-117ceti.svelte-117ceti{position:absolute;max-height:4rem;bottom:0;left:0;right:0;overflow:hidden;-webkit-line-clamp:4;line-clamp:4;display:-webkit-box;-webkit-box-orient:vertical}.overflown.description.svelte-117ceti.svelte-117ceti{cursor:help}.current.svelte-117ceti .rectangle.svelte-117ceti{box-shadow:0 0 10px var(--dag-selected)}.levelstoshow.svelte-117ceti.svelte-117ceti{position:absolute;bottom:100%;right:0;font-size:.75rem;font-weight:100;text-align:right}.stepwrapper.svelte-18aex7a{display:flex;align-items:center;flex-direction:column;width:100%;position:relative;min-width:var(--dag-step-width)}.childwrapper.svelte-18aex7a{display:flex;width:100%}.gap.svelte-18aex7a{height:var(--dag-gap)}.title.svelte-117s0ws{text-align:left}.subtitle.svelte-lu9pnn{font-size:1rem;text-align:left}header.svelte-1ugmt5d{margin-bottom:var(--component-spacer)}figure.svelte-1x96yvr{background:var(--lt-grey);padding:1rem;border-radius:5px;text-align:center;margin:0 auto var(--component-spacer)}@media (min-width: 60rem){figure.svelte-1x96yvr{margin-bottom:0}}img.svelte-1x96yvr{max-width:100%;max-height:500px}.label.svelte-1x96yvr{font-weight:700;margin:.5rem 0}.description.svelte-1x96yvr{font-size:.9rem;font-style:italic;text-align:center;margin:.5rem 0}.log.svelte-1jhmsu{background:var(--lt-grey)!important;font-size:.9rem;padding:2rem}.page.svelte-v7ihqd:last-of-type{margin-bottom:var(--component-spacer)}.page:last-of-type section:last-of-type hr{display:none}progress.svelte-ljrmzp::-webkit-progress-bar{background-color:#fff!important;min-width:100%}progress.svelte-ljrmzp{background-color:#fff;color:#326cded9!important}progress.svelte-ljrmzp::-moz-progress-bar{background-color:#326cde!important}table .container{background:transparent!important;font-size:10px!important;padding:0!important}table progress{height:4px!important}.container.svelte-ljrmzp{display:flex;align-items:center;justify-content:center;font-size:12px;border-radius:3px;background:#edf5ff;padding:3rem}.inner.svelte-ljrmzp{max-width:410px;width:100%;text-align:center}.info.svelte-ljrmzp{display:flex;justify-content:space-between}table .info{text-align:left;flex-direction:column}label.svelte-ljrmzp{font-weight:700}.labelValue.svelte-ljrmzp{border-left:1px solid rgba(0,0,0,.1);margin-left:.25rem;padding-left:.5rem}.details.svelte-ljrmzp{font-family:var(--mono-font);font-size:8px;color:#333433;line-height:18px;overflow:hidden;white-space:nowrap}progress.svelte-ljrmzp{width:100%;border:none;border-radius:5px;height:8px;background:#fff}.heading.svelte-17n0qr8{margin-bottom:1.5rem}.sectionItems.svelte-17n0qr8{display:block}.sectionItems .imageContainer{max-height:500px}.container.svelte-17n0qr8{scroll-margin:var(--component-spacer)}hr.svelte-17n0qr8{background:var(--grey);border:none;height:1px;margin:var(--component-spacer) 0;padding:0}@media (min-width: 60rem){.sectionItems.svelte-17n0qr8{display:grid;grid-gap:2rem}}.value-box.svelte-175x1n5.svelte-175x1n5{border-radius:.5rem;padding:1.5rem;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;border:1px solid #e5e7eb;background:#fff;min-height:120px;display:flex;align-items:center}.value-box-content.svelte-175x1n5.svelte-175x1n5{width:100%}.value-box-title.svelte-175x1n5.svelte-175x1n5{font-size:.875rem;font-weight:500;color:#6b7280;margin:0 0 .5rem;text-transform:uppercase;letter-spacing:.025em}.value-box-value.svelte-175x1n5.svelte-175x1n5{font-size:2rem;font-weight:700;color:#111827;line-height:1.2;margin:0 0 .5rem}.value-box-subtitle.svelte-175x1n5.svelte-175x1n5{font-size:.875rem;color:#6b7280;margin:0 0 .5rem}.value-box-change.svelte-175x1n5.svelte-175x1n5{font-size:.75rem;font-weight:500;color:#059669;text-transform:uppercase;letter-spacing:.025em}.value-box.default.svelte-175x1n5.svelte-175x1n5{background:#fff;border-color:#e5e7eb}.value-box.bg-gradient-indigo-purple.svelte-175x1n5.svelte-175x1n5{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none}.value-box.bg-gradient-indigo-purple.svelte-175x1n5 .value-box-title.svelte-175x1n5,.value-box.bg-gradient-indigo-purple.svelte-175x1n5 .value-box-subtitle.svelte-175x1n5{color:#fffc}.value-box.bg-gradient-indigo-purple.svelte-175x1n5 .value-box-value.svelte-175x1n5{color:#fff}.value-box.bg-gradient-indigo-purple.svelte-175x1n5 .value-box-change.svelte-175x1n5{color:#ffffffe6}.value-box.success.svelte-175x1n5.svelte-175x1n5{background:#f0fdf4;border-color:#bbf7d0}.value-box.success.svelte-175x1n5 .value-box-value.svelte-175x1n5{color:#065f46}.value-box.success.svelte-175x1n5 .value-box-change.svelte-175x1n5{color:#059669}.value-box.warning.svelte-175x1n5.svelte-175x1n5{background:#fffbeb;border-color:#fed7aa}.value-box.warning.svelte-175x1n5 .value-box-value.svelte-175x1n5{color:#92400e}.value-box.warning.svelte-175x1n5 .value-box-change.svelte-175x1n5{color:#d97706}.value-box.danger.svelte-175x1n5.svelte-175x1n5{background:#fef2f2;border-color:#fecaca}.value-box.danger.svelte-175x1n5 .value-box-value.svelte-175x1n5{color:#991b1b}.value-box.danger.svelte-175x1n5 .value-box-change.svelte-175x1n5{color:#dc2626}@media (max-width: 640px){.value-box.svelte-175x1n5.svelte-175x1n5{padding:1rem;min-height:100px}.value-box-value.svelte-175x1n5.svelte-175x1n5{font-size:1.5rem}}table .value-box{min-height:auto;padding:.75rem;margin:.25rem 0}table .value-box-value{font-size:1.25rem}td.svelte-gl9h79{text-align:left}td.labelColumn.svelte-gl9h79{text-align:right;background-color:var(--lt-grey);font-weight:700;width:12%;white-space:nowrap}.tableContainer.svelte-q3hq57{overflow:auto}th.svelte-q3hq57{position:sticky;top:-1px;z-index:2;white-space:nowrap;background:var(--white)}.mainContainer.svelte-mqeomk{max-width:110rem}main.svelte-mqeomk{flex:0 1 auto;max-width:100rem;padding:1.5rem}@media (min-width: 60rem){main.svelte-mqeomk{margin-left:var(--aside-width)}}.embed main{margin:0 auto;min-width:80%}.modal.svelte-1hhf5ym{align-items:center;background:#00000080;bottom:0;cursor:pointer;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100}.modalContainer>*{background-color:#fff;border-radius:5px;cursor:default;flex:0 1 auto;padding:1rem;position:relative}.modal img{max-height:80vh!important}.cancelButton.svelte-1hhf5ym{color:#fff;cursor:pointer;font-size:2rem;position:absolute;right:1rem;top:1rem}.cancelButton.svelte-1hhf5ym:hover{color:var(--blue)}.nav.svelte-1kdpgko.svelte-1kdpgko{border-radius:0 0 5px;display:none;margin:0;top:0}ul.navList.svelte-1kdpgko.svelte-1kdpgko{list-style-type:none}ul.navList.svelte-1kdpgko ul.svelte-1kdpgko{margin:.5rem 1rem 2rem}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:0}.navItem.svelte-1kdpgko li.svelte-1kdpgko:hover{color:var(--blue)}.pageId.svelte-1kdpgko.svelte-1kdpgko{display:block;border-bottom:1px solid var(--grey);padding:0 .5rem;margin-bottom:1rem}@media (min-width: 60rem){.nav.svelte-1kdpgko.svelte-1kdpgko{display:block}ul.navList.svelte-1kdpgko.svelte-1kdpgko{text-align:left}.navList.svelte-1kdpgko li.svelte-1kdpgko{display:block;margin:.5rem 0}}.container.svelte-teyund{width:100%;display:flex;flex-direction:column;position:relative}
@@ -753,6 +753,234 @@ class ProgressBar(UserComponent):
753
753
  return data
754
754
 
755
755
 
756
+ class ValueBox(UserComponent):
757
+ """
758
+ A Value Box component for displaying key metrics with styling and change indicators.
759
+
760
+ Inspired by Shiny's value box component, this displays a primary value with optional
761
+ title, subtitle, theme, and change indicators.
762
+
763
+ Example:
764
+ ```
765
+ # Basic value box
766
+ value_box = ValueBox(
767
+ title="Revenue",
768
+ value="$1.2M",
769
+ subtitle="Monthly Revenue",
770
+ change_indicator="Up 15% from last month"
771
+ )
772
+ current.card.append(value_box)
773
+
774
+ # Themed value box
775
+ value_box = ValueBox(
776
+ title="Total Savings",
777
+ value=50000,
778
+ theme="success",
779
+ change_indicator="Up 30% from last month"
780
+ )
781
+ current.card.append(value_box)
782
+
783
+ # Updatable value box for real-time metrics
784
+ metrics_box = ValueBox(
785
+ title="Processing Progress",
786
+ value=0,
787
+ subtitle="Items processed"
788
+ )
789
+ current.card.append(metrics_box)
790
+
791
+ for i in range(1000):
792
+ metrics_box.update(value=i, change_indicator=f"Rate: {i*2}/sec")
793
+ ```
794
+
795
+ Parameters
796
+ ----------
797
+ title : str, optional
798
+ The title/label for the value box (usually displayed above the value).
799
+ Must be 200 characters or less.
800
+ value : Union[str, int, float]
801
+ The main value to display prominently. Required parameter.
802
+ subtitle : str, optional
803
+ Additional descriptive text displayed below the title.
804
+ Must be 300 characters or less.
805
+ theme : str, optional
806
+ CSS class name for styling the value box. Supported themes: 'default', 'success',
807
+ 'warning', 'danger', 'bg-gradient-indigo-purple'. Custom themes must be valid CSS class names.
808
+ change_indicator : str, optional
809
+ Text indicating change or additional context (e.g., "Up 30% VS PREVIOUS 30 DAYS").
810
+ Must be 200 characters or less.
811
+ """
812
+
813
+ type = "valueBox"
814
+
815
+ REALTIME_UPDATABLE = True
816
+
817
+ # Valid built-in themes
818
+ VALID_THEMES = {
819
+ "default",
820
+ "success",
821
+ "warning",
822
+ "danger",
823
+ "bg-gradient-indigo-purple",
824
+ }
825
+
826
+ def __init__(
827
+ self,
828
+ title: Optional[str] = None,
829
+ value: Union[str, int, float] = "",
830
+ subtitle: Optional[str] = None,
831
+ theme: Optional[str] = None,
832
+ change_indicator: Optional[str] = None,
833
+ ):
834
+ # Validate inputs
835
+ self._validate_title(title)
836
+ self._validate_value(value)
837
+ self._validate_subtitle(subtitle)
838
+ self._validate_theme(theme)
839
+ self._validate_change_indicator(change_indicator)
840
+
841
+ self._title = title
842
+ self._value = value
843
+ self._subtitle = subtitle
844
+ self._theme = theme
845
+ self._change_indicator = change_indicator
846
+
847
+ def update(
848
+ self,
849
+ title: Optional[str] = None,
850
+ value: Optional[Union[str, int, float]] = None,
851
+ subtitle: Optional[str] = None,
852
+ theme: Optional[str] = None,
853
+ change_indicator: Optional[str] = None,
854
+ ):
855
+ """
856
+ Update the value box with new data.
857
+
858
+ Parameters
859
+ ----------
860
+ title : str, optional
861
+ New title for the value box.
862
+ value : Union[str, int, float], optional
863
+ New value to display.
864
+ subtitle : str, optional
865
+ New subtitle text.
866
+ theme : str, optional
867
+ New theme/styling class.
868
+ change_indicator : str, optional
869
+ New change indicator text.
870
+ """
871
+ if title is not None:
872
+ self._validate_title(title)
873
+ self._title = title
874
+ if value is not None:
875
+ self._validate_value(value)
876
+ self._value = value
877
+ if subtitle is not None:
878
+ self._validate_subtitle(subtitle)
879
+ self._subtitle = subtitle
880
+ if theme is not None:
881
+ self._validate_theme(theme)
882
+ self._theme = theme
883
+ if change_indicator is not None:
884
+ self._validate_change_indicator(change_indicator)
885
+ self._change_indicator = change_indicator
886
+
887
+ def _validate_title(self, title: Optional[str]) -> None:
888
+ """Validate title parameter."""
889
+ if title is not None:
890
+ if not isinstance(title, str):
891
+ raise TypeError(f"Title must be a string, got {type(title).__name__}")
892
+ if len(title) > 200:
893
+ raise ValueError(
894
+ f"Title must be 200 characters or less, got {len(title)} characters"
895
+ )
896
+ if not title.strip():
897
+ raise ValueError("Title cannot be empty or whitespace only")
898
+
899
+ def _validate_value(self, value: Union[str, int, float]) -> None:
900
+ """Validate value parameter."""
901
+ if value is None:
902
+ raise ValueError("Value is required and cannot be None")
903
+ if not isinstance(value, (str, int, float)):
904
+ raise TypeError(
905
+ f"Value must be str, int, or float, got {type(value).__name__}"
906
+ )
907
+ if isinstance(value, str):
908
+ if len(value) > 100:
909
+ raise ValueError(
910
+ f"String value must be 100 characters or less, got {len(value)} characters"
911
+ )
912
+ if not value.strip():
913
+ raise ValueError("String value cannot be empty or whitespace only")
914
+ if isinstance(value, (int, float)):
915
+ if not (-1e15 <= value <= 1e15):
916
+ raise ValueError(
917
+ f"Numeric value must be between -1e15 and 1e15, got {value}"
918
+ )
919
+
920
+ def _validate_subtitle(self, subtitle: Optional[str]) -> None:
921
+ """Validate subtitle parameter."""
922
+ if subtitle is not None:
923
+ if not isinstance(subtitle, str):
924
+ raise TypeError(
925
+ f"Subtitle must be a string, got {type(subtitle).__name__}"
926
+ )
927
+ if len(subtitle) > 300:
928
+ raise ValueError(
929
+ f"Subtitle must be 300 characters or less, got {len(subtitle)} characters"
930
+ )
931
+ if not subtitle.strip():
932
+ raise ValueError("Subtitle cannot be empty or whitespace only")
933
+
934
+ def _validate_theme(self, theme: Optional[str]) -> None:
935
+ """Validate theme parameter."""
936
+ if theme is not None:
937
+ if not isinstance(theme, str):
938
+ raise TypeError(f"Theme must be a string, got {type(theme).__name__}")
939
+ if not theme.strip():
940
+ raise ValueError("Theme cannot be empty or whitespace only")
941
+ # Allow custom themes but warn if not in valid set
942
+ if theme not in self.VALID_THEMES:
943
+ import re
944
+
945
+ # Basic CSS class name validation
946
+ if not re.match(r"^[a-zA-Z][a-zA-Z0-9_-]*$", theme):
947
+ raise ValueError(
948
+ f"Theme must be a valid CSS class name, got '{theme}'"
949
+ )
950
+
951
+ def _validate_change_indicator(self, change_indicator: Optional[str]) -> None:
952
+ """Validate change_indicator parameter."""
953
+ if change_indicator is not None:
954
+ if not isinstance(change_indicator, str):
955
+ raise TypeError(
956
+ f"Change indicator must be a string, got {type(change_indicator).__name__}"
957
+ )
958
+ if len(change_indicator) > 200:
959
+ raise ValueError(
960
+ f"Change indicator must be 200 characters or less, got {len(change_indicator)} characters"
961
+ )
962
+ if not change_indicator.strip():
963
+ raise ValueError("Change indicator cannot be empty or whitespace only")
964
+
965
+ @with_default_component_id
966
+ @render_safely
967
+ def render(self):
968
+ data = {
969
+ "type": self.type,
970
+ "id": self.component_id,
971
+ "value": self._value,
972
+ }
973
+ if self._title is not None:
974
+ data["title"] = self._title
975
+ if self._subtitle is not None:
976
+ data["subtitle"] = self._subtitle
977
+ if self._theme is not None:
978
+ data["theme"] = self._theme
979
+ if self._change_indicator is not None:
980
+ data["change_indicator"] = self._change_indicator
981
+ return data
982
+
983
+
756
984
  class VegaChart(UserComponent):
757
985
  type = "vegaChart"
758
986