metaflow 2.12.35__tar.gz → 2.12.36__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 (363) hide show
  1. {metaflow-2.12.35/metaflow.egg-info → metaflow-2.12.36}/PKG-INFO +2 -2
  2. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/parallel_decorator.py +4 -1
  3. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runtime.py +88 -32
  4. metaflow-2.12.36/metaflow/version.py +1 -0
  5. {metaflow-2.12.35 → metaflow-2.12.36/metaflow.egg-info}/PKG-INFO +2 -2
  6. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow.egg-info/requires.txt +1 -1
  7. metaflow-2.12.35/metaflow/version.py +0 -1
  8. {metaflow-2.12.35 → metaflow-2.12.36}/LICENSE +0 -0
  9. {metaflow-2.12.35 → metaflow-2.12.36}/MANIFEST.in +0 -0
  10. {metaflow-2.12.35 → metaflow-2.12.36}/README.md +0 -0
  11. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/R.py +0 -0
  12. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/__init__.py +0 -0
  13. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/__init__.py +0 -0
  14. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/__init__.py +0 -0
  15. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/_bashcomplete.py +0 -0
  16. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/_compat.py +0 -0
  17. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/_termui_impl.py +0 -0
  18. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/_textwrap.py +0 -0
  19. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/_unicodefun.py +0 -0
  20. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/_winconsole.py +0 -0
  21. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/core.py +0 -0
  22. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/decorators.py +0 -0
  23. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/exceptions.py +0 -0
  24. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/formatting.py +0 -0
  25. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/globals.py +0 -0
  26. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/parser.py +0 -0
  27. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/termui.py +0 -0
  28. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/testing.py +0 -0
  29. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/types.py +0 -0
  30. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/click/utils.py +0 -0
  31. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/__init__.py +0 -0
  32. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_adapters.py +0 -0
  33. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_collections.py +0 -0
  34. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_compat.py +0 -0
  35. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_functools.py +0 -0
  36. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_itertools.py +0 -0
  37. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_meta.py +0 -0
  38. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/_text.py +0 -0
  39. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/importlib_metadata/py.typed +0 -0
  40. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/__init__.py +0 -0
  41. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/_elffile.py +0 -0
  42. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/_manylinux.py +0 -0
  43. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/_musllinux.py +0 -0
  44. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/_parser.py +0 -0
  45. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/_structures.py +0 -0
  46. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/_tokenizer.py +0 -0
  47. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/markers.py +0 -0
  48. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/py.typed +0 -0
  49. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/requirements.py +0 -0
  50. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/specifiers.py +0 -0
  51. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/tags.py +0 -0
  52. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/utils.py +0 -0
  53. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/packaging/version.py +0 -0
  54. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/__init__.py +0 -0
  55. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_checkers.py +0 -0
  56. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_config.py +0 -0
  57. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_decorators.py +0 -0
  58. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_exceptions.py +0 -0
  59. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_functions.py +0 -0
  60. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_importhook.py +0 -0
  61. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_memo.py +0 -0
  62. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_pytest_plugin.py +0 -0
  63. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_suppression.py +0 -0
  64. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_transformer.py +0 -0
  65. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_union_transformer.py +0 -0
  66. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/_utils.py +0 -0
  67. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typeguard/py.typed +0 -0
  68. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/typing_extensions.py +0 -0
  69. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_5/__init__.py +0 -0
  70. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_5/importlib_metadata/__init__.py +0 -0
  71. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_5/importlib_metadata/_compat.py +0 -0
  72. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_5/zipp.py +0 -0
  73. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/__init__.py +0 -0
  74. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/__init__.py +0 -0
  75. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_adapters.py +0 -0
  76. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_collections.py +0 -0
  77. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_compat.py +0 -0
  78. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_functools.py +0 -0
  79. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_itertools.py +0 -0
  80. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_meta.py +0 -0
  81. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/_text.py +0 -0
  82. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/importlib_metadata/py.typed +0 -0
  83. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/typing_extensions.py +0 -0
  84. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/v3_6/zipp.py +0 -0
  85. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/_vendor/zipp.py +0 -0
  86. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cards.py +0 -0
  87. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cli.py +0 -0
  88. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cli_args.py +0 -0
  89. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/client/__init__.py +0 -0
  90. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/client/core.py +0 -0
  91. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/client/filecache.py +0 -0
  92. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/clone_util.py +0 -0
  93. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/__init__.py +0 -0
  94. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/configure_cmd.py +0 -0
  95. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/develop/__init__.py +0 -0
  96. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/develop/stub_generator.py +0 -0
  97. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/develop/stubs.py +0 -0
  98. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/main_cli.py +0 -0
  99. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/tutorials_cmd.py +0 -0
  100. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd/util.py +0 -0
  101. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/cmd_with_io.py +0 -0
  102. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/__init__.py +0 -0
  103. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/content_addressed_store.py +0 -0
  104. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/datastore_set.py +0 -0
  105. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/datastore_storage.py +0 -0
  106. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/exceptions.py +0 -0
  107. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/flow_datastore.py +0 -0
  108. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/inputs.py +0 -0
  109. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/datastore/task_datastore.py +0 -0
  110. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/debug.py +0 -0
  111. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/decorators.py +0 -0
  112. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/event_logger.py +0 -0
  113. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/events.py +0 -0
  114. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/exception.py +0 -0
  115. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/extension_support/__init__.py +0 -0
  116. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/extension_support/_empty_file.py +0 -0
  117. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/extension_support/cmd.py +0 -0
  118. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/extension_support/integrations.py +0 -0
  119. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/extension_support/plugins.py +0 -0
  120. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/flowspec.py +0 -0
  121. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/graph.py +0 -0
  122. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/includefile.py +0 -0
  123. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/info_file.py +0 -0
  124. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/integrations.py +0 -0
  125. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/lint.py +0 -0
  126. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metadata_provider/__init__.py +0 -0
  127. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metadata_provider/heartbeat.py +0 -0
  128. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metadata_provider/metadata.py +0 -0
  129. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metadata_provider/util.py +0 -0
  130. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metaflow_config.py +0 -0
  131. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metaflow_config_funcs.py +0 -0
  132. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metaflow_current.py +0 -0
  133. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metaflow_environment.py +0 -0
  134. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metaflow_profile.py +0 -0
  135. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/metaflow_version.py +0 -0
  136. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/mflog/__init__.py +0 -0
  137. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/mflog/mflog.py +0 -0
  138. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/mflog/save_logs.py +0 -0
  139. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/mflog/save_logs_periodically.py +0 -0
  140. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/mflog/tee.py +0 -0
  141. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/monitor.py +0 -0
  142. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/multicore_utils.py +0 -0
  143. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/package.py +0 -0
  144. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/parameters.py +0 -0
  145. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/__init__.py +0 -0
  146. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/__init__.py +0 -0
  147. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/airflow.py +0 -0
  148. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/airflow_cli.py +0 -0
  149. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/airflow_decorator.py +0 -0
  150. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/airflow_utils.py +0 -0
  151. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/dag.py +0 -0
  152. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/exception.py +0 -0
  153. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/plumbing/__init__.py +0 -0
  154. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/plumbing/set_parameters.py +0 -0
  155. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/sensors/__init__.py +0 -0
  156. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/sensors/base_sensor.py +0 -0
  157. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/sensors/external_task_sensor.py +0 -0
  158. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/airflow/sensors/s3_sensor.py +0 -0
  159. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/__init__.py +0 -0
  160. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_client.py +0 -0
  161. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_events.py +0 -0
  162. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_workflows.py +0 -0
  163. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_workflows_cli.py +0 -0
  164. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_workflows_decorator.py +0 -0
  165. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_workflows_deployer.py +0 -0
  166. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/argo_workflows_deployer_objects.py +0 -0
  167. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/capture_error.py +0 -0
  168. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/generate_input_paths.py +0 -0
  169. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/argo/jobset_input_paths.py +0 -0
  170. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/__init__.py +0 -0
  171. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/aws_client.py +0 -0
  172. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/aws_utils.py +0 -0
  173. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/batch/__init__.py +0 -0
  174. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/batch/batch.py +0 -0
  175. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/batch/batch_cli.py +0 -0
  176. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/batch/batch_client.py +0 -0
  177. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/batch/batch_decorator.py +0 -0
  178. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/secrets_manager/__init__.py +0 -0
  179. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +0 -0
  180. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/__init__.py +0 -0
  181. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -0
  182. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/event_bridge_client.py +0 -0
  183. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/production_token.py +0 -0
  184. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/schedule_decorator.py +0 -0
  185. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/set_batch_environment.py +0 -0
  186. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/step_functions.py +0 -0
  187. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -0
  188. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/step_functions_client.py +0 -0
  189. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -0
  190. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/step_functions_deployer.py +0 -0
  191. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -0
  192. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/__init__.py +0 -0
  193. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/azure_credential.py +0 -0
  194. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/azure_exceptions.py +0 -0
  195. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +0 -0
  196. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/azure_tail.py +0 -0
  197. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/azure_utils.py +0 -0
  198. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/blob_service_client_factory.py +0 -0
  199. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/azure/includefile_support.py +0 -0
  200. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/__init__.py +0 -0
  201. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_cli.py +0 -0
  202. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_client.py +0 -0
  203. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_creator.py +0 -0
  204. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_datastore.py +0 -0
  205. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_decorator.py +0 -0
  206. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/__init__.py +0 -0
  207. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/base.html +0 -0
  208. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/basic.py +0 -0
  209. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/bundle.css +0 -0
  210. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/card.py +0 -0
  211. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/chevron/__init__.py +0 -0
  212. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/chevron/main.py +0 -0
  213. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/chevron/metadata.py +0 -0
  214. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/chevron/renderer.py +0 -0
  215. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/chevron/tokenizer.py +0 -0
  216. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/components.py +0 -0
  217. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/convert_to_native_type.py +0 -0
  218. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/main.js +0 -0
  219. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/renderer_tools.py +0 -0
  220. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_modules/test_cards.py +0 -0
  221. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_resolver.py +0 -0
  222. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_server.py +0 -0
  223. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/card_viewer/viewer.html +0 -0
  224. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/component_serializer.py +0 -0
  225. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/cards/exception.py +0 -0
  226. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/catch_decorator.py +0 -0
  227. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datastores/__init__.py +0 -0
  228. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datastores/azure_storage.py +0 -0
  229. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datastores/gs_storage.py +0 -0
  230. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datastores/local_storage.py +0 -0
  231. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datastores/s3_storage.py +0 -0
  232. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/__init__.py +0 -0
  233. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/local.py +0 -0
  234. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/s3/__init__.py +0 -0
  235. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/s3/s3.py +0 -0
  236. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/s3/s3op.py +0 -0
  237. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/s3/s3tail.py +0 -0
  238. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/datatools/s3/s3util.py +0 -0
  239. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/debug_logger.py +0 -0
  240. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/debug_monitor.py +0 -0
  241. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/__init__.py +0 -0
  242. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/client.py +0 -0
  243. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/client_modules.py +0 -0
  244. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/communication/__init__.py +0 -0
  245. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/communication/bytestream.py +0 -0
  246. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/communication/channel.py +0 -0
  247. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/communication/socket_bytestream.py +0 -0
  248. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/communication/utils.py +0 -0
  249. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/configurations/emulate_test_lib/__init__.py +0 -0
  250. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/configurations/emulate_test_lib/overrides.py +0 -0
  251. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/configurations/emulate_test_lib/server_mappings.py +0 -0
  252. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py +0 -0
  253. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py +0 -0
  254. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/consts.py +0 -0
  255. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/data_transferer.py +0 -0
  256. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/exception_transferer.py +0 -0
  257. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/override_decorators.py +0 -0
  258. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/server.py +0 -0
  259. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/stub.py +0 -0
  260. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/env_escape/utils.py +0 -0
  261. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/environment_decorator.py +0 -0
  262. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/events_decorator.py +0 -0
  263. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/frameworks/__init__.py +0 -0
  264. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/frameworks/pytorch.py +0 -0
  265. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/__init__.py +0 -0
  266. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +0 -0
  267. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/gs_exceptions.py +0 -0
  268. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/gs_storage_client_factory.py +0 -0
  269. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/gs_tail.py +0 -0
  270. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/gs_utils.py +0 -0
  271. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/gcp/includefile_support.py +0 -0
  272. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/__init__.py +0 -0
  273. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kube_utils.py +0 -0
  274. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kubernetes.py +0 -0
  275. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kubernetes_cli.py +0 -0
  276. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kubernetes_client.py +0 -0
  277. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kubernetes_decorator.py +0 -0
  278. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kubernetes_job.py +0 -0
  279. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/kubernetes/kubernetes_jobsets.py +0 -0
  280. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/logs_cli.py +0 -0
  281. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/metadata_providers/__init__.py +0 -0
  282. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/metadata_providers/local.py +0 -0
  283. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/metadata_providers/service.py +0 -0
  284. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/package_cli.py +0 -0
  285. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/project_decorator.py +0 -0
  286. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/__init__.py +0 -0
  287. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/bootstrap.py +0 -0
  288. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/conda_decorator.py +0 -0
  289. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/conda_environment.py +0 -0
  290. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/micromamba.py +0 -0
  291. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/pip.py +0 -0
  292. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/pypi_decorator.py +0 -0
  293. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/pypi_environment.py +0 -0
  294. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/pypi/utils.py +0 -0
  295. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/resources_decorator.py +0 -0
  296. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/retry_decorator.py +0 -0
  297. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/secrets/__init__.py +0 -0
  298. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/secrets/inline_secrets_provider.py +0 -0
  299. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/secrets/secrets_decorator.py +0 -0
  300. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/storage_executor.py +0 -0
  301. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/tag_cli.py +0 -0
  302. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/test_unbounded_foreach_decorator.py +0 -0
  303. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/plugins/timeout_decorator.py +0 -0
  304. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/procpoll.py +0 -0
  305. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/py.typed +0 -0
  306. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/pylint_wrapper.py +0 -0
  307. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/__init__.py +0 -0
  308. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/click_api.py +0 -0
  309. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/deployer.py +0 -0
  310. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/deployer_impl.py +0 -0
  311. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/metaflow_runner.py +0 -0
  312. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/nbdeploy.py +0 -0
  313. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/nbrun.py +0 -0
  314. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/subprocess_manager.py +0 -0
  315. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/runner/utils.py +0 -0
  316. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/sidecar/__init__.py +0 -0
  317. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/sidecar/sidecar.py +0 -0
  318. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/sidecar/sidecar_messages.py +0 -0
  319. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/sidecar/sidecar_subprocess.py +0 -0
  320. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/sidecar/sidecar_worker.py +0 -0
  321. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/system/__init__.py +0 -0
  322. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/system/system_logger.py +0 -0
  323. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/system/system_monitor.py +0 -0
  324. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/system/system_utils.py +0 -0
  325. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tagging_util.py +0 -0
  326. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/task.py +0 -0
  327. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tracing/__init__.py +0 -0
  328. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tracing/propagator.py +0 -0
  329. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tracing/span_exporter.py +0 -0
  330. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tracing/tracing_modules.py +0 -0
  331. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tuple_util.py +0 -0
  332. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/00-helloworld/README.md +0 -0
  333. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/00-helloworld/helloworld.py +0 -0
  334. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/01-playlist/README.md +0 -0
  335. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/01-playlist/movies.csv +0 -0
  336. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/01-playlist/playlist.ipynb +0 -0
  337. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/01-playlist/playlist.py +0 -0
  338. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/02-statistics/README.md +0 -0
  339. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/02-statistics/movies.csv +0 -0
  340. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/02-statistics/stats.ipynb +0 -0
  341. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/02-statistics/stats.py +0 -0
  342. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/03-playlist-redux/README.md +0 -0
  343. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/03-playlist-redux/playlist.py +0 -0
  344. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/04-playlist-plus/README.md +0 -0
  345. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/04-playlist-plus/playlist.py +0 -0
  346. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/05-hello-cloud/README.md +0 -0
  347. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/05-hello-cloud/hello-cloud.ipynb +0 -0
  348. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/05-hello-cloud/hello-cloud.py +0 -0
  349. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/06-statistics-redux/README.md +0 -0
  350. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/06-statistics-redux/stats.ipynb +0 -0
  351. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/07-worldview/README.md +0 -0
  352. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/07-worldview/worldview.ipynb +0 -0
  353. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/08-autopilot/README.md +0 -0
  354. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/tutorials/08-autopilot/autopilot.ipynb +0 -0
  355. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/unbounded_foreach.py +0 -0
  356. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/util.py +0 -0
  357. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow/vendor.py +0 -0
  358. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow.egg-info/SOURCES.txt +0 -0
  359. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow.egg-info/dependency_links.txt +0 -0
  360. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow.egg-info/entry_points.txt +0 -0
  361. {metaflow-2.12.35 → metaflow-2.12.36}/metaflow.egg-info/top_level.txt +0 -0
  362. {metaflow-2.12.35 → metaflow-2.12.36}/setup.cfg +0 -0
  363. {metaflow-2.12.35 → metaflow-2.12.36}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.12.35
3
+ Version: 2.12.36
4
4
  Summary: Metaflow: More Data Science, 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.12.35; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.12.36; extra == "stubs"
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -45,6 +45,8 @@ class ParallelDecorator(StepDecorator):
45
45
  if ubf_context == UBF_CONTROL:
46
46
  num_parallel = cli_args.task.ubf_iter.num_parallel
47
47
  cli_args.command_options["num-parallel"] = str(num_parallel)
48
+ if os.environ.get("METAFLOW_RUNTIME_ENVIRONMENT", "local") == "local":
49
+ cli_args.command_options["split_index"] = "0"
48
50
 
49
51
  def step_init(
50
52
  self, flow, graph, step_name, decorators, environment, flow_datastore, logger
@@ -126,6 +128,8 @@ class ParallelDecorator(StepDecorator):
126
128
  tags=["attempt_id:{0}".format(0)],
127
129
  )
128
130
  ]
131
+ flow._control_task_is_mapper_zero = True
132
+
129
133
  metadata.register_metadata(run_id, step_name, task_id, task_metadata_list)
130
134
 
131
135
  def task_decorate(
@@ -221,7 +225,6 @@ def _local_multinode_control_task_step_func(
221
225
  "%s/%s/%s" % (run_id, step_name, mapper_task_id)
222
226
  for mapper_task_id in mapper_task_ids
223
227
  ]
224
- flow._control_task_is_mapper_zero = True
225
228
 
226
229
  # run the step function ourselves
227
230
  os.environ["MF_PARALLEL_NODE_INDEX"] = "0"
@@ -9,6 +9,7 @@ from __future__ import print_function
9
9
  import os
10
10
  import sys
11
11
  import fcntl
12
+ import re
12
13
  import time
13
14
  import subprocess
14
15
  from datetime import datetime
@@ -49,7 +50,13 @@ PROGRESS_INTERVAL = 300 # s
49
50
  # The following is a list of the (data) artifacts used by the runtime while
50
51
  # executing a flow. These are prefetched during the resume operation by
51
52
  # leveraging the TaskDataStoreSet.
52
- PREFETCH_DATA_ARTIFACTS = ["_foreach_stack", "_task_ok", "_transition"]
53
+ PREFETCH_DATA_ARTIFACTS = [
54
+ "_foreach_stack",
55
+ "_task_ok",
56
+ "_transition",
57
+ "_control_mapper_tasks",
58
+ "_control_task_is_mapper_zero",
59
+ ]
53
60
  RESUME_POLL_SECONDS = 60
54
61
 
55
62
  # Runtime must use logsource=RUNTIME_LOG_SOURCE for all loglines that it
@@ -269,6 +276,8 @@ class NativeRuntime(object):
269
276
  step_name,
270
277
  task_id,
271
278
  pathspec_index,
279
+ cloned_task_pathspec_index,
280
+ finished_tuple,
272
281
  ubf_context,
273
282
  generate_task_obj,
274
283
  verbose=False,
@@ -281,8 +290,13 @@ class NativeRuntime(object):
281
290
  task.ubf_context = ubf_context
282
291
  new_task_id = task.task_id
283
292
  self._cloned_tasks.append(task)
284
- self._cloned_task_index.add(task.task_index)
285
-
293
+ self._cloned_task_index.add(cloned_task_pathspec_index)
294
+ task_pathspec = "{}/{}/{}".format(self._run_id, step_name, new_task_id)
295
+ else:
296
+ task_pathspec = "{}/{}/{}".format(self._run_id, step_name, new_task_id)
297
+ Task.clone_pathspec_mapping[task_pathspec] = "{}/{}/{}".format(
298
+ self._clone_run_id, step_name, task_id
299
+ )
286
300
  if verbose:
287
301
  self._logger(
288
302
  "Cloning task from {}/{}/{}/{} to {}/{}/{}/{}".format(
@@ -308,6 +322,8 @@ class NativeRuntime(object):
308
322
  self._metadata,
309
323
  origin_ds_set=self._origin_ds_set,
310
324
  )
325
+ self._finished[(step_name, finished_tuple)] = task_pathspec
326
+ self._is_cloned[task_pathspec] = True
311
327
  except Exception as e:
312
328
  self._logger(
313
329
  "Cloning {}/{}/{}/{} failed with error: {}".format(
@@ -323,7 +339,8 @@ class NativeRuntime(object):
323
339
 
324
340
  inputs = []
325
341
 
326
- ubf_mapper_tasks_to_clone = []
342
+ ubf_mapper_tasks_to_clone = set()
343
+ ubf_control_tasks = set()
327
344
  # We only clone ubf mapper tasks if the control task is complete.
328
345
  # Here we need to check which control tasks are complete, and then get the corresponding
329
346
  # mapper tasks.
@@ -331,13 +348,25 @@ class NativeRuntime(object):
331
348
  _, step_name, task_id = task_ds.pathspec.split("/")
332
349
  pathspec_index = task_ds.pathspec_index
333
350
  if task_ds["_task_ok"] and step_name != "_parameters":
334
- # Only control task can have _control_mapper_tasks. We then store the corresponding mapepr task pathspecs.
351
+ # Control task contains "_control_mapper_tasks" but, in the case of
352
+ # @parallel decorator, the control task is also a mapper task so we
353
+ # need to distinguish this using _control_task_is_mapper_zero
335
354
  control_mapper_tasks = (
336
355
  []
337
356
  if "_control_mapper_tasks" not in task_ds
338
357
  else task_ds["_control_mapper_tasks"]
339
358
  )
340
- ubf_mapper_tasks_to_clone.extend(control_mapper_tasks)
359
+ if control_mapper_tasks:
360
+ if task_ds.get("_control_task_is_mapper_zero", False):
361
+ # Strip out the control task of list of mapper tasks
362
+ ubf_control_tasks.add(control_mapper_tasks[0])
363
+ ubf_mapper_tasks_to_clone.update(control_mapper_tasks[1:])
364
+ else:
365
+ ubf_mapper_tasks_to_clone.update(control_mapper_tasks)
366
+ # Since we only add mapper tasks here, if we are not in the list
367
+ # we are a control task
368
+ if task_ds.pathspec not in ubf_mapper_tasks_to_clone:
369
+ ubf_control_tasks.add(task_ds.pathspec)
341
370
 
342
371
  for task_ds in self._origin_ds_set:
343
372
  _, step_name, task_id = task_ds.pathspec.split("/")
@@ -350,33 +379,54 @@ class NativeRuntime(object):
350
379
  ):
351
380
  # "_unbounded_foreach" is a special flag to indicate that the transition is an unbounded foreach.
352
381
  # Both parent and splitted children tasks will have this flag set. The splitted control/mapper tasks
353
- # have no "foreach_param" because UBF is always followed by a join step.
382
+ # are not foreach types because UBF is always followed by a join step.
354
383
  is_ubf_task = (
355
384
  "_unbounded_foreach" in task_ds and task_ds["_unbounded_foreach"]
356
- ) and (self._graph[step_name].foreach_param is None)
385
+ ) and (self._graph[step_name].type != "foreach")
357
386
 
358
- # Only the control task has "_control_mapper_tasks" artifact.
359
- is_ubf_control_task = (
360
- is_ubf_task
361
- and ("_control_mapper_tasks" in task_ds)
362
- and task_ds["_control_mapper_tasks"]
363
- )
364
- is_ubf_mapper_tasks = is_ubf_task and (not is_ubf_control_task)
365
- if is_ubf_mapper_tasks and (
387
+ is_ubf_control_task = task_ds.pathspec in ubf_control_tasks
388
+
389
+ is_ubf_mapper_task = is_ubf_task and (not is_ubf_control_task)
390
+
391
+ if is_ubf_mapper_task and (
366
392
  task_ds.pathspec not in ubf_mapper_tasks_to_clone
367
393
  ):
368
- # Skip copying UBF mapper tasks if control tasks is incomplete.
394
+ # Skip copying UBF mapper tasks if control task is incomplete.
369
395
  continue
370
396
 
371
397
  ubf_context = None
372
398
  if is_ubf_task:
373
- ubf_context = "ubf_test" if is_ubf_mapper_tasks else "ubf_control"
399
+ ubf_context = "ubf_test" if is_ubf_mapper_task else "ubf_control"
400
+
401
+ finished_tuple = tuple(
402
+ [s._replace(value=0) for s in task_ds.get("_foreach_stack", ())]
403
+ )
404
+ cloned_task_pathspec_index = pathspec_index.split("/")[1]
405
+ if task_ds.get("_control_task_is_mapper_zero", False):
406
+ # Replace None with index 0 for control task as it is part of the
407
+ # UBF (as a mapper as well)
408
+ finished_tuple = finished_tuple[:-1] + (
409
+ finished_tuple[-1]._replace(index=0),
410
+ )
411
+ # We need this reverse override though because when we check
412
+ # if a task has been cloned in _queue_push, the index will be None
413
+ # because the _control_task_is_mapper_zero is set in the control
414
+ # task *itself* and *not* in the one that is launching the UBF nest.
415
+ # This means that _translate_index will use None.
416
+ cloned_task_pathspec_index = re.sub(
417
+ r"(\[(?:\d+, ?)*)0\]",
418
+ lambda m: (m.group(1) or "[") + "None]",
419
+ cloned_task_pathspec_index,
420
+ )
421
+
374
422
  inputs.append(
375
423
  (
376
424
  step_name,
377
425
  task_id,
378
426
  pathspec_index,
379
- is_ubf_mapper_tasks,
427
+ cloned_task_pathspec_index,
428
+ finished_tuple,
429
+ is_ubf_mapper_task,
380
430
  ubf_context,
381
431
  )
382
432
  )
@@ -388,15 +438,19 @@ class NativeRuntime(object):
388
438
  step_name,
389
439
  task_id,
390
440
  pathspec_index,
441
+ cloned_task_pathspec_index,
442
+ finished_tuple,
391
443
  ubf_context=ubf_context,
392
- generate_task_obj=generate_task_obj and (not is_ubf_mapper_tasks),
444
+ generate_task_obj=generate_task_obj and (not is_ubf_mapper_task),
393
445
  verbose=verbose,
394
446
  )
395
447
  for (
396
448
  step_name,
397
449
  task_id,
398
450
  pathspec_index,
399
- is_ubf_mapper_tasks,
451
+ cloned_task_pathspec_index,
452
+ finished_tuple,
453
+ is_ubf_mapper_task,
400
454
  ubf_context,
401
455
  ) in inputs
402
456
  ]
@@ -546,7 +600,6 @@ class NativeRuntime(object):
546
600
  # Given the current task information (task_index), the type of transition,
547
601
  # and the split index, return the new task index.
548
602
  def _translate_index(self, task, next_step, type, split_index=None):
549
- import re
550
603
 
551
604
  match = re.match(r"^(.+)\[(.*)\]$", task.task_index)
552
605
  if match:
@@ -640,15 +693,18 @@ class NativeRuntime(object):
640
693
  # If the control task is cloned, all mapper tasks should have been cloned
641
694
  # as well, so we no longer need to handle cloning of mapper tasks in runtime.
642
695
 
643
- # Update _finished since these tasks were successfully
644
- # run elsewhere so that join will be unblocked.
645
- _, foreach_stack = task.finished_id
646
- top = foreach_stack[-1]
647
- bottom = list(foreach_stack[:-1])
648
- for i in range(num_splits):
649
- s = tuple(bottom + [top._replace(index=i)])
650
- self._finished[(task.step, s)] = mapper_tasks[i]
651
- self._is_cloned[mapper_tasks[i]] = False
696
+ # Update _finished if we are not cloned. If we were cloned, we already
697
+ # updated _finished with the new tasks. Note that the *value* of mapper
698
+ # tasks is incorrect and contains the pathspec of the *cloned* run
699
+ # but we don't use it for anything. We could look to clean it up though
700
+ if not task.is_cloned:
701
+ _, foreach_stack = task.finished_id
702
+ top = foreach_stack[-1]
703
+ bottom = list(foreach_stack[:-1])
704
+ for i in range(num_splits):
705
+ s = tuple(bottom + [top._replace(index=i)])
706
+ self._finished[(task.step, s)] = mapper_tasks[i]
707
+ self._is_cloned[mapper_tasks[i]] = False
652
708
 
653
709
  # Find and check status of control task and retrieve its pathspec
654
710
  # for retrieving unbounded foreach cardinality.
@@ -1080,7 +1136,7 @@ class Task(object):
1080
1136
  # To avoid the edge case where the resume leader is selected but has not
1081
1137
  # yet written the _resume_leader metadata, we will wait for a few seconds.
1082
1138
  # We will wait for resume leader for at most 3 times.
1083
- for resume_leader_wait_retry in range(3):
1139
+ for _ in range(3):
1084
1140
  if ds.has_metadata("_resume_leader", add_attempt=False):
1085
1141
  resume_leader = ds.load_metadata(
1086
1142
  ["_resume_leader"], add_attempt=False
@@ -0,0 +1 @@
1
+ metaflow_version = "2.12.36"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.12.35
3
+ Version: 2.12.36
4
4
  Summary: Metaflow: More Data Science, 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.12.35; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.12.36; extra == "stubs"
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -2,4 +2,4 @@ requests
2
2
  boto3
3
3
 
4
4
  [stubs]
5
- metaflow-stubs==2.12.35
5
+ metaflow-stubs==2.12.36
@@ -1 +0,0 @@
1
- metaflow_version = "2.12.35"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes