synapse-sdk 1.0.0a71__tar.gz → 1.0.0a73__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.

Potentially problematic release.


This version of synapse-sdk might be problematic. Click here for more details.

Files changed (315) hide show
  1. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/PKG-INFO +1 -1
  2. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/__init__.py +3 -2
  3. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +4 -0
  4. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/converters/__init__.py +6 -5
  5. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/converters/coco/from_dm.py +3 -3
  6. synapse_sdk-1.0.0a73/synapse_sdk/utils/converters/yolo/from_dm.py +296 -0
  7. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk.egg-info/PKG-INFO +1 -1
  8. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk.egg-info/SOURCES.txt +3 -0
  9. synapse_sdk-1.0.0a73/tests/utils/converters/fixtures/__init__.py +0 -0
  10. synapse_sdk-1.0.0a73/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_3.json +19 -0
  11. synapse_sdk-1.0.0a73/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_1.json +19 -0
  12. synapse_sdk-1.0.0a73/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_2.json +30 -0
  13. synapse_sdk-1.0.0a73/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_3.json +41 -0
  14. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/test_coco_from_dm.py +6 -6
  15. synapse_sdk-1.0.0a73/tests/utils/converters/test_yolo_from_dm.py +105 -0
  16. synapse_sdk-1.0.0a71/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_1.json +0 -17
  17. synapse_sdk-1.0.0a71/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_1.json +0 -39
  18. synapse_sdk-1.0.0a71/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_2.json +0 -221
  19. synapse_sdk-1.0.0a71/tests/utils/converters/fixtures/data_types/image/not_categorized/json/dm_3.json +0 -231
  20. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/.coverage +0 -0
  21. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/.github/workflows/lint.yml +0 -0
  22. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/.github/workflows/pypi-publish.yml +0 -0
  23. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/.gitignore +0 -0
  24. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/.pre-commit-config.yaml +0 -0
  25. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/LICENSE +0 -0
  26. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/README.md +0 -0
  27. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/clients/agent.md +0 -0
  28. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/clients/backend.md +0 -0
  29. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/clients/base.md +0 -0
  30. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/index.md +0 -0
  31. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/plugins/categories.md +0 -0
  32. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/plugins/models.md +0 -0
  33. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/plugins/utils.md +0 -0
  34. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/utils/file.md +0 -0
  35. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/utils/storage.md +0 -0
  36. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/api/utils/types.md +0 -0
  37. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/categories.md +0 -0
  38. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/changelog.md +0 -0
  39. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/concepts/index.md +0 -0
  40. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/configuration.md +0 -0
  41. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/contributing.md +0 -0
  42. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/examples/index.md +0 -0
  43. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/faq.md +0 -0
  44. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/i18n/ko/code.json +0 -0
  45. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +0 -0
  46. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +0 -0
  47. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/i18n/ko/docusaurus-theme-classic/footer.json +0 -0
  48. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/i18n/ko/docusaurus-theme-classic/navbar.json +0 -0
  49. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/installation.md +0 -0
  50. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/introduction.md +0 -0
  51. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/quickstart.md +0 -0
  52. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/troubleshooting.md +0 -0
  53. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/_category_.json +0 -0
  54. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/congratulations.md +0 -0
  55. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/create-a-blog-post.md +0 -0
  56. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/create-a-document.md +0 -0
  57. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/create-a-page.md +0 -0
  58. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/deploy-your-site.md +0 -0
  59. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-basics/markdown-features.mdx +0 -0
  60. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-extras/_category_.json +0 -0
  61. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  62. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-extras/img/localeDropdown.png +0 -0
  63. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-extras/manage-docs-versions.md +0 -0
  64. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/docs/tutorial-extras/translate-your-site.md +0 -0
  65. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/locale/en/LC_MESSAGES/messages.mo +0 -0
  66. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/locale/en/LC_MESSAGES/messages.po +0 -0
  67. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/locale/ko/LC_MESSAGES/messages.mo +0 -0
  68. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/locale/ko/LC_MESSAGES/messages.po +0 -0
  69. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/pyproject.toml +0 -0
  70. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/requirements.test.txt +0 -0
  71. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/requirements.txt +0 -0
  72. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/setup.cfg +0 -0
  73. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/__init__.py +0 -0
  74. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/__init__.py +0 -0
  75. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/__init__.py +0 -0
  76. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/create.py +0 -0
  77. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/dataclass.py +0 -0
  78. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/default.py +0 -0
  79. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/delete.py +0 -0
  80. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/list.py +0 -0
  81. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/read.py +0 -0
  82. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/update.py +0 -0
  83. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/alias/utils.py +0 -0
  84. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/config.py +0 -0
  85. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/devtools.py +0 -0
  86. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/plugin/__init__.py +0 -0
  87. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/plugin/create.py +0 -0
  88. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/plugin/publish.py +0 -0
  89. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/cli/plugin/run.py +0 -0
  90. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/__init__.py +0 -0
  91. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/agent/__init__.py +0 -0
  92. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/agent/core.py +0 -0
  93. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/agent/ray.py +0 -0
  94. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/agent/service.py +0 -0
  95. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/annotation.py +0 -0
  96. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/core.py +0 -0
  97. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/data_collection.py +0 -0
  98. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/hitl.py +0 -0
  99. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/integration.py +0 -0
  100. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/ml.py +0 -0
  101. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/backend/models.py +0 -0
  102. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/base.py +0 -0
  103. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/exceptions.py +0 -0
  104. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/ray/__init__.py +0 -0
  105. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/ray/core.py +0 -0
  106. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/ray/serve.py +0 -0
  107. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/utils.py +0 -0
  108. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/validators/__init__.py +0 -0
  109. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/clients/validators/collections.py +0 -0
  110. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/__init__.py +0 -0
  111. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/config.py +0 -0
  112. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/.gitignore +0 -0
  113. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/README.md +0 -0
  114. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +0 -0
  115. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +0 -0
  116. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +0 -0
  117. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  118. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +0 -0
  119. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/authors.yml +0 -0
  120. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/blog/tags.yml +0 -0
  121. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/docusaurus.config.ts +0 -0
  122. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/package-lock.json +0 -0
  123. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/package.json +0 -0
  124. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/sidebars.ts +0 -0
  125. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +0 -0
  126. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +0 -0
  127. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/src/css/custom.css +0 -0
  128. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/src/pages/index.module.css +0 -0
  129. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/src/pages/index.tsx +0 -0
  130. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/src/pages/markdown-page.md +0 -0
  131. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  132. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  133. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  134. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  135. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  136. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +0 -0
  137. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +0 -0
  138. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +0 -0
  139. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/docs/tsconfig.json +0 -0
  140. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/models.py +0 -0
  141. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/server.py +0 -0
  142. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/utils.py +0 -0
  143. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/.gitignore +0 -0
  144. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/README.md +0 -0
  145. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/dist/index.html +0 -0
  146. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/index.html +0 -0
  147. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/jsconfig.json +0 -0
  148. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/package-lock.json +0 -0
  149. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/package.json +0 -0
  150. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/pnpm-lock.yaml +0 -0
  151. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/App.jsx +0 -0
  152. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/App.module.css +0 -0
  153. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/assets/favicon.ico +0 -0
  154. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx +0 -0
  155. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/Layout.jsx +0 -0
  156. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/LogViewer.jsx +0 -0
  157. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/MessageViewer.jsx +0 -0
  158. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx +0 -0
  159. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx +0 -0
  160. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/components/icons.jsx +0 -0
  161. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/index.css +0 -0
  162. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/index.jsx +0 -0
  163. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/logo.svg +0 -0
  164. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/router.jsx +0 -0
  165. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/utils/api.js +0 -0
  166. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx +0 -0
  167. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/views/ApplicationsView.jsx +0 -0
  168. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/views/HomeView.jsx +0 -0
  169. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/views/JobDetailView.jsx +0 -0
  170. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/src/views/PluginView.jsx +0 -0
  171. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/devtools/web/vite.config.js +0 -0
  172. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/i18n.py +0 -0
  173. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/loggers.py +0 -0
  174. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/__init__.py +0 -0
  175. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/__init__.py +0 -0
  176. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/base.py +0 -0
  177. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/data_validation/__init__.py +0 -0
  178. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/data_validation/actions/__init__.py +0 -0
  179. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/data_validation/actions/validation.py +0 -0
  180. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/data_validation/templates/config.yaml +0 -0
  181. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/data_validation/templates/plugin/__init__.py +0 -0
  182. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +0 -0
  183. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/decorators.py +0 -0
  184. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/__init__.py +0 -0
  185. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/actions/__init__.py +0 -0
  186. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/actions/export.py +0 -0
  187. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/enums.py +0 -0
  188. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/templates/config.yaml +0 -0
  189. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +0 -0
  190. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/export/templates/plugin/export.py +0 -0
  191. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/__init__.py +0 -0
  192. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/__init__.py +0 -0
  193. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/deployment.py +0 -0
  194. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/gradio.py +0 -0
  195. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/inference.py +0 -0
  196. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/test.py +0 -0
  197. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/train.py +0 -0
  198. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/actions/tune.py +0 -0
  199. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
  200. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/base/inference.py +0 -0
  201. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/templates/config.yaml +0 -0
  202. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/templates/plugin/__init__.py +0 -0
  203. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +0 -0
  204. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/templates/plugin/test.py +0 -0
  205. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/neural_net/templates/plugin/train.py +0 -0
  206. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/post_annotation/__init__.py +0 -0
  207. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/post_annotation/actions/__init__.py +0 -0
  208. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/post_annotation/actions/post_annotation.py +0 -0
  209. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/post_annotation/templates/config.yaml +0 -0
  210. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/__init__.py +0 -0
  211. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.py +0 -0
  212. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/__init__.py +0 -0
  213. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +0 -0
  214. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py +0 -0
  215. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +0 -0
  216. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py +0 -0
  217. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py +0 -0
  218. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +0 -0
  219. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/registry.py +0 -0
  220. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/smart_tool/__init__.py +0 -0
  221. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/smart_tool/actions/__init__.py +0 -0
  222. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py +0 -0
  223. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +0 -0
  224. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py +0 -0
  225. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py +0 -0
  226. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/templates.py +0 -0
  227. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/upload/__init__.py +0 -0
  228. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
  229. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/upload/actions/upload.py +0 -0
  230. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/upload/templates/config.yaml +0 -0
  231. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +0 -0
  232. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +0 -0
  233. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/enums.py +0 -0
  234. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/exceptions.py +0 -0
  235. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/models.py +0 -0
  236. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/cookiecutter.json +0 -0
  237. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/hooks/post_gen_project.py +0 -0
  238. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/hooks/pre_prompt.py +0 -0
  239. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/plugin-config-schema.json +0 -0
  240. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/schema.json +0 -0
  241. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.gitignore +0 -0
  242. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.pre-commit-config.yaml +0 -0
  243. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/README.md +0 -0
  244. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +0 -0
  245. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/plugin/__init__.py +0 -0
  246. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/pyproject.toml +0 -0
  247. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +0 -0
  248. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/upload.py +0 -0
  249. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/plugins/utils.py +0 -0
  250. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/shared/__init__.py +0 -0
  251. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/shared/enums.py +0 -0
  252. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/types.py +0 -0
  253. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/__init__.py +0 -0
  254. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/converters/coco/__init__.py +0 -0
  255. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/converters/coco/to_dm.py +0 -0
  256. {synapse_sdk-1.0.0a71/synapse_sdk/utils/pydantic → synapse_sdk-1.0.0a73/synapse_sdk/utils/converters/yolo}/__init__.py +0 -0
  257. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/dataset.py +0 -0
  258. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/debug.py +0 -0
  259. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/file.py +0 -0
  260. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/http.py +0 -0
  261. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/module_loading.py +0 -0
  262. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/network.py +0 -0
  263. {synapse_sdk-1.0.0a71/tests → synapse_sdk-1.0.0a73/synapse_sdk/utils/pydantic}/__init__.py +0 -0
  264. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/pydantic/config.py +0 -0
  265. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/pydantic/errors.py +0 -0
  266. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/pydantic/validators.py +0 -0
  267. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/__init__.py +0 -0
  268. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/providers/__init__.py +0 -0
  269. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/providers/gcp.py +0 -0
  270. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/providers/http.py +0 -0
  271. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/providers/s3.py +0 -0
  272. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/providers/sftp.py +0 -0
  273. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/storage/registry.py +0 -0
  274. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk/utils/string.py +0 -0
  275. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk.egg-info/dependency_links.txt +0 -0
  276. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk.egg-info/entry_points.txt +0 -0
  277. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk.egg-info/requires.txt +0 -0
  278. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/synapse_sdk.egg-info/top_level.txt +0 -0
  279. {synapse_sdk-1.0.0a71/tests/clients → synapse_sdk-1.0.0a73/tests}/__init__.py +0 -0
  280. {synapse_sdk-1.0.0a71/tests/loggers → synapse_sdk-1.0.0a73/tests/clients}/__init__.py +0 -0
  281. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/clients/test_backend_models.py +0 -0
  282. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/clients/test_base_client.py +0 -0
  283. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/clients/test_collection_validators.py +0 -0
  284. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/conftest.py +0 -0
  285. {synapse_sdk-1.0.0a71/tests/utils/converters → synapse_sdk-1.0.0a73/tests/loggers}/__init__.py +0 -0
  286. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/loggers/test_base_logger.py +0 -0
  287. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/test_cli.py +0 -0
  288. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/test_cli_integration.py +0 -0
  289. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/__init__,py +0 -0
  290. {synapse_sdk-1.0.0a71/tests/utils/converters/fixtures → synapse_sdk-1.0.0a73/tests/utils/converters}/__init__.py +0 -0
  291. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/conftest.py +0 -0
  292. /synapse_sdk-1.0.0a71/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_3.json → /synapse_sdk-1.0.0a73/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_1.json +0 -0
  293. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_2.json +0 -0
  294. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/test/original_files/dm_1.jpg +0 -0
  295. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/test/original_files/dm_2.jpg +0 -0
  296. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/test/original_files/dm_3.jpg +0 -0
  297. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_4.json +0 -0
  298. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_5.json +0 -0
  299. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_6.json +0 -0
  300. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/json/dm_7.json +0 -0
  301. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_4.jpg +0 -0
  302. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_5.jpg +0 -0
  303. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_6.jpg +0 -0
  304. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/train/original_files/dm_7.jpg +0 -0
  305. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/valid/json/dm_8.json +0 -0
  306. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/valid/json/dm_9.json +0 -0
  307. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/valid/original_files/dm_8.jpg +0 -0
  308. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/categorized/valid/original_files/dm_9.jpg +0 -0
  309. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/not_categorized/original_files/dm_1.jpg +0 -0
  310. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/not_categorized/original_files/dm_2.jpg +0 -0
  311. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/data_types/image/not_categorized/original_files/dm_3.jpg +0 -0
  312. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/converters/fixtures/dm_schema.py +0 -0
  313. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/storage/test_provider_selection.py +0 -0
  314. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/tests/utils/test_debug.py +0 -0
  315. {synapse_sdk-1.0.0a71 → synapse_sdk-1.0.0a73}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a71
3
+ Version: 1.0.0a73
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -23,6 +23,7 @@ class BackendClient(
23
23
  authorization_token (str): The authorization token for the synapse backend API.
24
24
  tenant_token (str): The tenant token for the synapse backend API.
25
25
  agent_token (str): The agent token for the backend API.
26
+ timeout (Dict): Set reasonable default timeouts for better UX. It can receive keys called 'connect' and 'read'.
26
27
  """
27
28
 
28
29
  name = 'Backend'
@@ -31,8 +32,8 @@ class BackendClient(
31
32
  tenant_token = None
32
33
  agent_token = None
33
34
 
34
- def __init__(self, base_url, access_token=None, token=None, tenant=None, agent_token=None, **kwargs):
35
- super().__init__(base_url)
35
+ def __init__(self, base_url, access_token=None, token=None, tenant=None, agent_token=None, timeout=None, **kwargs):
36
+ super().__init__(base_url, timeout=timeout)
36
37
  self.access_token = access_token
37
38
  self.authorization_token = token
38
39
  self.tenant_token = tenant
@@ -67,9 +67,11 @@ class ToTaskParams(BaseModel):
67
67
  name (str): The name of the action.
68
68
  description (str | None): The description of the action.
69
69
  project (int): The project ID.
70
+ agent (int): The agent ID.
70
71
  task_filters (dict): The filters of tasks.
71
72
  method (AnnotationMethod): The method of annotation.
72
73
  target_specification_name (str | None): The name of the target specification.
74
+ model (int): The model ID.
73
75
  pre_processor (int | None): The pre processor ID.
74
76
  pre_processor_params (dict): The params of the pre processor.
75
77
  """
@@ -77,9 +79,11 @@ class ToTaskParams(BaseModel):
77
79
  name: Annotated[str, AfterValidator(non_blank)]
78
80
  description: Optional[str] = None
79
81
  project: int
82
+ agent: int
80
83
  task_filters: Dict[str, Any]
81
84
  method: Optional[AnnotationMethod] = None
82
85
  target_specification_name: Optional[str] = None
86
+ model: Optional[int] = None
83
87
  pre_processor: Optional[int] = None
84
88
  pre_processor_params: Dict[str, Any]
85
89
 
@@ -48,7 +48,7 @@ class BaseConverter:
48
48
  else:
49
49
  required_dirs = {
50
50
  'json': os.path.join(self.root_dir, 'json'),
51
- 'original_file': os.path.join(self.root_dir, 'original_file'),
51
+ 'original_files': os.path.join(self.root_dir, 'original_files'),
52
52
  }
53
53
  self._validate_required_dirs(required_dirs)
54
54
  splits['root'] = self.root_dir
@@ -60,10 +60,10 @@ class BaseConverter:
60
60
  if split:
61
61
  split_dir = os.path.join(self.root_dir, split)
62
62
  self.json_dir = os.path.join(split_dir, 'json')
63
- self.original_file_dir = os.path.join(split_dir, 'original_file')
63
+ self.original_file_dir = os.path.join(split_dir, 'original_files')
64
64
  else:
65
65
  self.json_dir = os.path.join(self.root_dir, 'json')
66
- self.original_file_dir = os.path.join(self.root_dir, 'original_file')
66
+ self.original_file_dir = os.path.join(self.root_dir, 'original_files')
67
67
 
68
68
 
69
69
  class FromDMConverter(BaseConverter):
@@ -185,7 +185,7 @@ class ToDMConverter(BaseConverter):
185
185
  for split, img_dict in self.converted_data.items():
186
186
  split_dir = os.path.join(output_dir, split)
187
187
  json_dir = os.path.join(split_dir, 'json')
188
- original_file_dir = os.path.join(split_dir, 'original_file')
188
+ original_file_dir = os.path.join(split_dir, 'original_files')
189
189
  self.ensure_dir(json_dir)
190
190
  self.ensure_dir(original_file_dir)
191
191
  for img_filename, (dm_json, img_src_path) in img_dict.items():
@@ -196,7 +196,7 @@ class ToDMConverter(BaseConverter):
196
196
  shutil.copy(img_src_path, os.path.join(original_file_dir, img_filename))
197
197
  else:
198
198
  json_dir = os.path.join(output_dir, 'json')
199
- original_file_dir = os.path.join(output_dir, 'original_file')
199
+ original_file_dir = os.path.join(output_dir, 'original_files')
200
200
  self.ensure_dir(json_dir)
201
201
  self.ensure_dir(original_file_dir)
202
202
  for img_filename, (dm_json, img_src_path) in self.converted_data.items():
@@ -205,4 +205,5 @@ class ToDMConverter(BaseConverter):
205
205
  json.dump(dm_json, jf, indent=2, ensure_ascii=False)
206
206
  if img_src_path and os.path.exists(img_src_path):
207
207
  shutil.copy(img_src_path, os.path.join(original_file_dir, img_filename))
208
+
208
209
  print(f'[DM] Data exported to {output_dir}')
@@ -11,7 +11,7 @@ from tqdm import tqdm
11
11
  from synapse_sdk.utils.converters import FromDMConverter
12
12
 
13
13
 
14
- class DMToCOCOConverter(FromDMConverter):
14
+ class FromDMToCOCOConverter(FromDMConverter):
15
15
  """Convert DM (Data Manager) format annotations to COCO format.
16
16
  Designed for easy future extensibility to handle various data types.
17
17
  """
@@ -242,11 +242,11 @@ class DMToCOCOConverter(FromDMConverter):
242
242
  for split, coco_data in self.converted_data.items():
243
243
  split_output_dir = os.path.join(output_dir, split)
244
244
  self._save_annotations_and_images(
245
- coco_data, split_output_dir, os.path.join(self.root_dir, split, 'original_file')
245
+ coco_data, split_output_dir, os.path.join(self.root_dir, split, 'original_files')
246
246
  )
247
247
  else:
248
248
  self._save_annotations_and_images(
249
- self.converted_data, output_dir, os.path.join(self.root_dir, 'original_file')
249
+ self.converted_data, output_dir, os.path.join(self.root_dir, 'original_files')
250
250
  )
251
251
 
252
252
  def _save_annotations_and_images(self, coco_data, output_dir, original_file_dir):
@@ -0,0 +1,296 @@
1
+ import json
2
+ import os
3
+ import shutil
4
+ from glob import glob
5
+ from typing import Any, Dict, List, Optional, Union
6
+
7
+ from PIL import Image
8
+
9
+ from synapse_sdk.utils.converters import FromDMConverter
10
+
11
+
12
+ class FromDMToYOLOConverter(FromDMConverter):
13
+ """Convert DM dataset format to YOLO format."""
14
+
15
+ IMG_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.bmp']
16
+
17
+ def __init__(self, root_dir: str, is_categorized_dataset: bool = False):
18
+ super().__init__(root_dir, is_categorized_dataset)
19
+ self.class_names: List[str] = []
20
+ self.class_map: Dict[str, int] = {}
21
+ self.dataset_yaml_content: str = ''
22
+
23
+ @staticmethod
24
+ def get_all_classes(list_of_dirs: List[str]) -> List[str]:
25
+ """Collect all unique class names from all splits or the root."""
26
+ classes = set()
27
+ for d in list_of_dirs:
28
+ if not d or not os.path.isdir(d):
29
+ continue
30
+ json_dir = os.path.join(d, 'json') if os.path.isdir(os.path.join(d, 'json')) else d
31
+ for jfile in glob(os.path.join(json_dir, '*.json')):
32
+ with open(jfile, encoding='utf-8') as jf:
33
+ data = json.load(jf)
34
+ for img_ann in data['images']:
35
+ for k in ['bounding_box', 'polygon', 'keypoint']:
36
+ if k in img_ann:
37
+ for ann in img_ann[k]:
38
+ classes.add(ann['classification'])
39
+ return sorted(list(classes))
40
+
41
+ @staticmethod
42
+ def get_image_size(image_path: str):
43
+ with Image.open(image_path) as img:
44
+ return img.size
45
+
46
+ @staticmethod
47
+ def polygon_to_bbox(polygon: list):
48
+ """Convert polygon points to bounding box [cx, cy, w, h]."""
49
+ if not polygon or len(polygon) == 0:
50
+ return None
51
+ xs = [p[0] for p in polygon]
52
+ ys = [p[1] for p in polygon]
53
+ x_min, y_min = min(xs), min(ys)
54
+ x_max, y_max = max(xs), max(ys)
55
+ cx = (x_min + x_max) / 2
56
+ cy = (y_min + y_max) / 2
57
+ w = x_max - x_min
58
+ h = y_max - y_min
59
+ return [cx, cy, w, h]
60
+
61
+ @staticmethod
62
+ def keypoints_to_yolo_string(keypoints: list, width: int, height: int):
63
+ """Convert keypoints to normalized YOLO keypoint format string (x1 y1 v1 x2 y2 v2 ...)."""
64
+ kp_strs = []
65
+ for kp in keypoints:
66
+ # kp: [x, y, visible]
67
+ x, y, v = kp
68
+ x = x / width
69
+ y = y / height
70
+ kp_strs.extend([f'{x:.6f}', f'{y:.6f}', str(v)])
71
+ return ' '.join(kp_strs)
72
+
73
+ def _convert_split_dir(self, split_dir: str, split_name: str) -> List[Dict[str, Any]]:
74
+ """Convert one split folder to YOLO format."""
75
+ if not self.class_map:
76
+ raise ValueError('class_map is not initialized. Ensure get_all_classes() is called before this method.')
77
+
78
+ json_dir = os.path.join(split_dir, 'json')
79
+ img_dir = os.path.join(split_dir, 'original_files')
80
+ entries = []
81
+ for jfile in glob(os.path.join(json_dir, '*.json')):
82
+ base = os.path.splitext(os.path.basename(jfile))[0]
83
+ found_img = None
84
+ for ext in self.IMG_EXTENSIONS:
85
+ img_path = os.path.join(img_dir, base + ext)
86
+ if os.path.exists(img_path):
87
+ found_img = img_path
88
+ break
89
+ if not found_img:
90
+ print(f'[{split_name}] Image for {base} not found, skipping.')
91
+ continue
92
+ width, height = self.get_image_size(found_img)
93
+ with open(jfile, encoding='utf-8') as jf:
94
+ data = json.load(jf)
95
+ img_ann = data['images'][0]
96
+ label_lines = []
97
+
98
+ # bbox
99
+ if 'bounding_box' in img_ann:
100
+ for box in img_ann['bounding_box']:
101
+ cidx = self.class_map[box['classification']]
102
+ x, y, w, h = box['data']
103
+ cx = x + w / 2
104
+ cy = y + h / 2
105
+ cx /= width
106
+ cy /= height
107
+ w /= width
108
+ h /= height
109
+ label_lines.append(f'{cidx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}')
110
+
111
+ # polygon
112
+ if 'polygon' in img_ann:
113
+ for poly in img_ann['polygon']:
114
+ cidx = self.class_map[poly['classification']]
115
+ bbox = self.polygon_to_bbox(poly['data'])
116
+ if bbox is None:
117
+ print(f'[{split_name}] Polygon for {base} is empty, skipping this polygon.')
118
+ continue
119
+ cx, cy, w, h = bbox
120
+ cx /= width
121
+ cy /= height
122
+ w /= width
123
+ h /= height
124
+ label_lines.append(f'{cidx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}')
125
+
126
+ # keypoint
127
+ if 'keypoint' in img_ann:
128
+ for kp in img_ann['keypoint']:
129
+ cidx = self.class_map[kp['classification']]
130
+ # Assume bounding box exists for keypoint, or fallback to full image
131
+ if 'bounding_box' in kp:
132
+ x, y, w, h = kp['bounding_box']
133
+ cx = x + w / 2
134
+ cy = y + h / 2
135
+ cx /= width
136
+ cy /= height
137
+ w /= width
138
+ h /= height
139
+ else:
140
+ # fallback to the whole image
141
+ cx, cy, w, h = 0.5, 0.5, 1.0, 1.0
142
+ kp_str = self.keypoints_to_yolo_string(kp['data'], width, height)
143
+ label_lines.append(f'{cidx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f} {kp_str}')
144
+
145
+ entries.append({
146
+ 'img_path': found_img,
147
+ 'img_name': os.path.basename(found_img),
148
+ 'label_name': base + '.txt',
149
+ 'label_lines': label_lines,
150
+ })
151
+ return entries
152
+
153
+ def _convert_root_dir(self) -> List[Dict[str, Any]]:
154
+ """Convert non-categorized dataset to YOLO format."""
155
+ json_dir = os.path.join(self.root_dir, 'json')
156
+ img_dir = os.path.join(self.root_dir, 'original_files')
157
+ entries = []
158
+ for jfile in glob(os.path.join(json_dir, '*.json')):
159
+ base = os.path.splitext(os.path.basename(jfile))[0]
160
+ found_img = None
161
+ for ext in self.IMG_EXTENSIONS:
162
+ img_path = os.path.join(img_dir, base + ext)
163
+ if os.path.exists(img_path):
164
+ found_img = img_path
165
+ break
166
+ if not found_img:
167
+ print(f'[single] Image for {base} not found, skipping.')
168
+ continue
169
+ width, height = self.get_image_size(found_img)
170
+ with open(jfile, encoding='utf-8') as jf:
171
+ data = json.load(jf)
172
+ img_ann = data['images'][0]
173
+ label_lines = []
174
+
175
+ # bbox
176
+ if 'bounding_box' in img_ann:
177
+ for box in img_ann['bounding_box']:
178
+ cidx = self.class_map[box['classification']]
179
+ x, y, w, h = box['data']
180
+ cx = x + w / 2
181
+ cy = y + h / 2
182
+ cx /= width
183
+ cy /= height
184
+ w /= width
185
+ h /= height
186
+ label_lines.append(f'{cidx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}')
187
+
188
+ # polygon
189
+ if 'polygon' in img_ann:
190
+ for poly in img_ann['polygon']:
191
+ cidx = self.class_map[poly['classification']]
192
+ bbox = self.polygon_to_bbox(poly['data'])
193
+ if bbox is None:
194
+ print(f'[single] Polygon for {base} is empty, skipping this polygon.')
195
+ continue
196
+ cx, cy, w, h = bbox
197
+ cx /= width
198
+ cy /= height
199
+ w /= width
200
+ h /= height
201
+ label_lines.append(f'{cidx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}')
202
+
203
+ # keypoint
204
+ if 'keypoint' in img_ann:
205
+ for kp in img_ann['keypoint']:
206
+ cidx = self.class_map[kp['classification']]
207
+ if 'bounding_box' in kp:
208
+ x, y, w, h = kp['bounding_box']
209
+ cx = x + w / 2
210
+ cy = y + h / 2
211
+ cx /= width
212
+ cy /= height
213
+ w /= width
214
+ h /= height
215
+ else:
216
+ cx, cy, w, h = 0.5, 0.5, 1.0, 1.0
217
+ kp_str = self.keypoints_to_yolo_string(kp['data'], width, height)
218
+ label_lines.append(f'{cidx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f} {kp_str}')
219
+
220
+ entries.append({
221
+ 'img_path': found_img,
222
+ 'img_name': os.path.basename(found_img),
223
+ 'label_name': base + '.txt',
224
+ 'label_lines': label_lines,
225
+ })
226
+ return entries
227
+
228
+ def convert(self) -> Union[Dict[str, List[Dict[str, Any]]], List[Dict[str, Any]]]:
229
+ """Convert DM format to YOLO format (categorized split or not).
230
+
231
+ Returns:
232
+ - If categorized: dict {split: list of entries}
233
+ - If not: list of entries
234
+ """
235
+ # Prepare dataset.yaml content (for save_to_folder)
236
+ yaml_lines = [
237
+ 'path: ' + self.root_dir,
238
+ ]
239
+
240
+ if self.is_categorized_dataset:
241
+ splits = self._validate_splits(required_splits=['train', 'valid'], optional_splits=['test'])
242
+ self.class_names = self.get_all_classes(list(splits.values()))
243
+ self.class_map = {name: idx for idx, name in enumerate(self.class_names)}
244
+ result = {}
245
+ for split, split_dir in splits.items():
246
+ result[split] = self._convert_split_dir(split_dir, split)
247
+ self.converted_data = result
248
+
249
+ yaml_lines.append('train: train/images')
250
+ yaml_lines.append('val: valid/images')
251
+ if 'test' in splits:
252
+ yaml_lines.append('test: test/images')
253
+ else:
254
+ self._validate_splits(required_splits=[], optional_splits=[])
255
+ self.class_names = self.get_all_classes([self.root_dir])
256
+ self.class_map = {name: idx for idx, name in enumerate(self.class_names)}
257
+ result = self._convert_root_dir()
258
+ self.converted_data = result
259
+
260
+ yaml_lines += ['', f'nc: {len(self.class_names)}', f'names: {self.class_names}', '']
261
+ self.dataset_yaml_content = '\n'.join(yaml_lines)
262
+ return result
263
+
264
+ def save_to_folder(self, output_dir: Optional[str] = None) -> None:
265
+ """Save converted YOLO data to the specified folder."""
266
+ output_dir = output_dir or self.root_dir
267
+ self.ensure_dir(output_dir)
268
+ if self.converted_data is None:
269
+ self.converted_data = self.convert()
270
+
271
+ if self.is_categorized_dataset:
272
+ for split, entries in self.converted_data.items():
273
+ split_imgs = os.path.join(output_dir, split, 'images')
274
+ split_labels = os.path.join(output_dir, split, 'labels')
275
+ self.ensure_dir(split_imgs)
276
+ self.ensure_dir(split_labels)
277
+ for entry in entries:
278
+ shutil.copy(entry['img_path'], os.path.join(split_imgs, entry['img_name']))
279
+ with open(os.path.join(split_labels, entry['label_name']), 'w', encoding='utf-8') as f:
280
+ f.write('\n'.join(entry['label_lines']))
281
+ else:
282
+ imgs_dir = os.path.join(output_dir, 'images')
283
+ labels_dir = os.path.join(output_dir, 'labels')
284
+ self.ensure_dir(imgs_dir)
285
+ self.ensure_dir(labels_dir)
286
+ for entry in self.converted_data:
287
+ shutil.copy(entry['img_path'], os.path.join(imgs_dir, entry['img_name']))
288
+ with open(os.path.join(labels_dir, entry['label_name']), 'w', encoding='utf-8') as f:
289
+ f.write('\n'.join(entry['label_lines']))
290
+
291
+ with open(os.path.join(output_dir, 'dataset.yaml'), 'w', encoding='utf-8') as f:
292
+ f.write(self.dataset_yaml_content)
293
+ with open(os.path.join(output_dir, 'classes.txt'), 'w', encoding='utf-8') as f:
294
+ for c in self.class_names:
295
+ f.write(f'{c}\n')
296
+ print(f'YOLO data exported to {output_dir}')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a71
3
+ Version: 1.0.0a73
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -253,6 +253,8 @@ synapse_sdk/utils/converters/__init__.py
253
253
  synapse_sdk/utils/converters/coco/__init__.py
254
254
  synapse_sdk/utils/converters/coco/from_dm.py
255
255
  synapse_sdk/utils/converters/coco/to_dm.py
256
+ synapse_sdk/utils/converters/yolo/__init__.py
257
+ synapse_sdk/utils/converters/yolo/from_dm.py
256
258
  synapse_sdk/utils/pydantic/__init__.py
257
259
  synapse_sdk/utils/pydantic/config.py
258
260
  synapse_sdk/utils/pydantic/errors.py
@@ -279,6 +281,7 @@ tests/utils/test_debug.py
279
281
  tests/utils/converters/__init__.py
280
282
  tests/utils/converters/conftest.py
281
283
  tests/utils/converters/test_coco_from_dm.py
284
+ tests/utils/converters/test_yolo_from_dm.py
282
285
  tests/utils/converters/fixtures/__init__.py
283
286
  tests/utils/converters/fixtures/dm_schema.py
284
287
  tests/utils/converters/fixtures/data_types/image/categorized/test/json/dm_1.json
@@ -0,0 +1,19 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "bounding_box": [
5
+ {
6
+ "id": "mt3bxoZmo_",
7
+ "classification": "a",
8
+ "attrs": [],
9
+ "data": [
10
+ 971,
11
+ 357,
12
+ 439,
13
+ 326
14
+ ]
15
+ }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "bounding_box": [
5
+ {
6
+ "id": "dZL-g7SYsR",
7
+ "classification": "a",
8
+ "attrs": [],
9
+ "data": [
10
+ 348,
11
+ 196,
12
+ 321,
13
+ 244
14
+ ]
15
+ }
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "bounding_box": [
5
+ {
6
+ "id": "y0-rEC1Uir",
7
+ "classification": "a",
8
+ "attrs": [],
9
+ "data": [
10
+ 430,
11
+ 200,
12
+ 342,
13
+ 273
14
+ ]
15
+ },
16
+ {
17
+ "id": "KuZcgzsc_s",
18
+ "classification": "a",
19
+ "attrs": [],
20
+ "data": [
21
+ 1208,
22
+ 504,
23
+ 232,
24
+ 209
25
+ ]
26
+ }
27
+ ]
28
+ }
29
+ ]
30
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "bounding_box": [
5
+ {
6
+ "id": "r91yP2YJvJ",
7
+ "classification": "a",
8
+ "attrs": [],
9
+ "data": [
10
+ 109,
11
+ 166,
12
+ 223,
13
+ 178
14
+ ]
15
+ },
16
+ {
17
+ "id": "B31gzHZQ_T",
18
+ "classification": "a",
19
+ "attrs": [],
20
+ "data": [
21
+ 690,
22
+ 371,
23
+ 230,
24
+ 239
25
+ ]
26
+ },
27
+ {
28
+ "id": "Ao-Brlj6dd",
29
+ "classification": "a",
30
+ "attrs": [],
31
+ "data": [
32
+ 1269,
33
+ 760,
34
+ 210,
35
+ 143
36
+ ]
37
+ }
38
+ ]
39
+ }
40
+ ]
41
+ }
@@ -241,18 +241,18 @@ class TestDMToCOCOConverter:
241
241
 
242
242
  # Create test files
243
243
  os.makedirs(os.path.join(temp_output_dir, 'json'), exist_ok=True)
244
- os.makedirs(os.path.join(temp_output_dir, 'original_file'), exist_ok=True)
244
+ os.makedirs(os.path.join(temp_output_dir, 'original_files'), exist_ok=True)
245
245
 
246
246
  # Create matching files
247
247
  with open(os.path.join(temp_output_dir, 'json', 'test1.json'), 'w') as f:
248
248
  f.write('{}')
249
- with open(os.path.join(temp_output_dir, 'original_file', 'test1.jpg'), 'w') as f:
249
+ with open(os.path.join(temp_output_dir, 'original_files', 'test1.jpg'), 'w') as f:
250
250
  f.write('test')
251
251
 
252
252
  # Create non-matching files
253
253
  with open(os.path.join(temp_output_dir, 'json', 'test2.json'), 'w') as f:
254
254
  f.write('{}')
255
- with open(os.path.join(temp_output_dir, 'original_file', 'test3.jpg'), 'w') as f:
255
+ with open(os.path.join(temp_output_dir, 'original_files', 'test3.jpg'), 'w') as f:
256
256
  f.write('test')
257
257
 
258
258
  pairs = converter._find_json_file_pairs()
@@ -282,18 +282,18 @@ class TestDMToCOCOConverterIntegration:
282
282
 
283
283
  # Create invalid JSON file
284
284
  os.makedirs(os.path.join(temp_output_dir, 'json'), exist_ok=True)
285
- os.makedirs(os.path.join(temp_output_dir, 'original_file'), exist_ok=True)
285
+ os.makedirs(os.path.join(temp_output_dir, 'original_files'), exist_ok=True)
286
286
 
287
287
  with open(os.path.join(temp_output_dir, 'json', 'invalid.json'), 'w') as f:
288
288
  f.write('invalid json content')
289
- with open(os.path.join(temp_output_dir, 'original_file', 'invalid.jpg'), 'w') as f:
289
+ with open(os.path.join(temp_output_dir, 'original_files', 'invalid.jpg'), 'w') as f:
290
290
  f.write('test')
291
291
 
292
292
  with patch.object(converter, '_find_json_file_pairs') as mock_find_pairs:
293
293
  mock_find_pairs.return_value = [
294
294
  (
295
295
  os.path.join(temp_output_dir, 'json', 'invalid.json'),
296
- os.path.join(temp_output_dir, 'original_file', 'invalid.jpg'),
296
+ os.path.join(temp_output_dir, 'original_files', 'invalid.jpg'),
297
297
  )
298
298
  ]
299
299