rp 0.1.1385__tar.gz → 0.1.1387__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 (411) hide show
  1. {rp-0.1.1385 → rp-0.1.1387}/PKG-INFO +1 -1
  2. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/media_to_slides.py +85 -47
  3. {rp-0.1.1385 → rp-0.1.1387}/rp/r.py +109 -3
  4. rp-0.1.1387/rp/version.py +1 -0
  5. {rp-0.1.1385 → rp-0.1.1387}/rp.egg-info/PKG-INFO +1 -1
  6. rp-0.1.1387/version.py +1 -0
  7. rp-0.1.1385/rp/version.py +0 -1
  8. rp-0.1.1385/version.py +0 -1
  9. {rp-0.1.1385 → rp-0.1.1387}/.gitignore +0 -0
  10. {rp-0.1.1385 → rp-0.1.1387}/.idea/QuickPython.iml +0 -0
  11. {rp-0.1.1385 → rp-0.1.1387}/.idea/QuickPython.time +0 -0
  12. {rp-0.1.1385 → rp-0.1.1387}/.idea/encodings.xml +0 -0
  13. {rp-0.1.1385 → rp-0.1.1387}/.idea/inspectionProfiles/Project_Default.xml +0 -0
  14. {rp-0.1.1385 → rp-0.1.1387}/.idea/misc.xml +0 -0
  15. {rp-0.1.1385 → rp-0.1.1387}/.idea/modules.xml +0 -0
  16. {rp-0.1.1385 → rp-0.1.1387}/.idea/vcs.xml +0 -0
  17. {rp-0.1.1385 → rp-0.1.1387}/.idea/workspace.xml +0 -0
  18. {rp-0.1.1385 → rp-0.1.1387}/.publish.sh.un~ +0 -0
  19. {rp-0.1.1385 → rp-0.1.1387}/.setup.py.un~ +0 -0
  20. {rp-0.1.1385 → rp-0.1.1387}/.update_module_paths.py.un~ +0 -0
  21. {rp-0.1.1385 → rp-0.1.1387}/LICENSE.txt +0 -0
  22. {rp-0.1.1385 → rp-0.1.1387}/README +0 -0
  23. {rp-0.1.1385 → rp-0.1.1387}/Scrap +0 -0
  24. {rp-0.1.1385 → rp-0.1.1387}/aoisdasd +0 -0
  25. {rp-0.1.1385 → rp-0.1.1387}/increment_version.py +0 -0
  26. {rp-0.1.1385 → rp-0.1.1387}/oijio +0 -0
  27. {rp-0.1.1385 → rp-0.1.1387}/publish.sh +0 -0
  28. {rp-0.1.1385 → rp-0.1.1387}/pyqtconsoletest.py +0 -0
  29. {rp-0.1.1385 → rp-0.1.1387}/rp/__init__.py +0 -0
  30. {rp-0.1.1385 → rp-0.1.1387}/rp/__main__.py +0 -0
  31. {rp-0.1.1385 → rp-0.1.1387}/rp/documentation.py +0 -0
  32. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/Pyperclip.py +0 -0
  33. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/__init__.py +0 -0
  34. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/debug_comment.py +0 -0
  35. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/draw_code_minimap.py +0 -0
  36. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/graveyard.py +0 -0
  37. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/__init__.py +0 -0
  38. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/_compatibility.py +0 -0
  39. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/cache.py +0 -0
  40. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/file_io.py +0 -0
  41. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/grammar.py +0 -0
  42. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/normalizer.py +0 -0
  43. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/parser.py +0 -0
  44. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/pgen2/__init__.py +0 -0
  45. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/pgen2/generator.py +0 -0
  46. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/pgen2/grammar_parser.py +0 -0
  47. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/__init__.py +0 -0
  48. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/diff.py +0 -0
  49. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/errors.py +0 -0
  50. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar26.txt +0 -0
  51. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar27.txt +0 -0
  52. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar310.txt +0 -0
  53. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar311.txt +0 -0
  54. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar312.txt +0 -0
  55. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar33.txt +0 -0
  56. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar34.txt +0 -0
  57. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar35.txt +0 -0
  58. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar36.txt +0 -0
  59. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar37.txt +0 -0
  60. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar38.txt +0 -0
  61. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/grammar39.txt +0 -0
  62. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/parser.py +0 -0
  63. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/pep8.py +0 -0
  64. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/prefix.py +0 -0
  65. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/token.py +0 -0
  66. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/tokenize.py +0 -0
  67. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/python/tree.py +0 -0
  68. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/tree.py +0 -0
  69. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/parso/utils.py +0 -0
  70. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/peepdis/__init__.py +0 -0
  71. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/peepdis/core.py +0 -0
  72. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/peepdis/datastructures.py +0 -0
  73. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/peepdis/legacy.py +0 -0
  74. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/peepdis/preferences.py +0 -0
  75. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/__init__.py +0 -0
  76. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/__main__.py +0 -0
  77. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/convert_pptx_videos_to_gifs.py +0 -0
  78. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/convert_tmux.py +0 -0
  79. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/google_slides_upload.py +0 -0
  80. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint/pptx_utils.py +0 -0
  81. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/powerpoint_converter.py +0 -0
  82. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/profile_vim_plugins.py +0 -0
  83. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pw_crypt.py +0 -0
  84. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/__init__.py +0 -0
  85. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/bindings/__init__.py +0 -0
  86. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/bindings/flann_ctypes.py +0 -0
  87. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/exceptions.py +0 -0
  88. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/index.py +0 -0
  89. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/io/__init__.py +0 -0
  90. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/io/binary_dataset.py +0 -0
  91. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/io/dat_dataset.py +0 -0
  92. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/io/dataset.py +0 -0
  93. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/io/hdf5_dataset.py +0 -0
  94. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/io/npy_dataset.py +0 -0
  95. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/util/__init__.py +0 -0
  96. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyflann/util/weave_tools.py +0 -0
  97. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/__init__.py +0 -0
  98. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/__version__.py +0 -0
  99. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/app.py +0 -0
  100. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/cli.py +0 -0
  101. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/cli_utils.py +0 -0
  102. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/__init__.py +0 -0
  103. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/config.py +0 -0
  104. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/config_error.py +0 -0
  105. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/config_parser.py +0 -0
  106. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/config_transformer.py +0 -0
  107. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/validators/__init__.py +0 -0
  108. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/config/validators/options.py +0 -0
  109. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/logging.py +0 -0
  110. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/__init__.py +0 -0
  111. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/autocomplete/__init__.py +0 -0
  112. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/autocomplete/autocomplete_listener.py +0 -0
  113. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/common/__init__.py +0 -0
  114. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/common/jsonpath/JSONPathLexer.py +0 -0
  115. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/common/jsonpath/JSONPathListener.py +0 -0
  116. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/common/jsonpath/JSONPathParser.py +0 -0
  117. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/common/jsonpath/__init__.py +0 -0
  118. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/io/__init__.py +0 -0
  119. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/io/datasource.py +0 -0
  120. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/model/model.py +0 -0
  121. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/service/__init__.py +0 -0
  122. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/service/client.py +0 -0
  123. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/service/dispatcher.py +0 -0
  124. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/__init__.py +0 -0
  125. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/common/__init__.py +0 -0
  126. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/common/popup.py +0 -0
  127. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/common/selectable_text.py +0 -0
  128. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/__init__.py +0 -0
  129. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/autocomplete_popup/__init__.py +0 -0
  130. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup.py +0 -0
  131. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup_keymapper.py +0 -0
  132. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/help_bar/__init__.py +0 -0
  133. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/help_bar/help_bar.py +0 -0
  134. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/help_page/__init__.py +0 -0
  135. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/help_page/detailed_help_page.py +0 -0
  136. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/json_browser/__init__.py +0 -0
  137. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/json_browser/json_browser.py +0 -0
  138. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/json_browser/json_browser_keymapper.py +0 -0
  139. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/query_bar/__init__.py +0 -0
  140. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/query_bar/query_bar.py +0 -0
  141. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/components/query_bar/query_bar_keymapper.py +0 -0
  142. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/__init__.py +0 -0
  143. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/array/__init__.py +0 -0
  144. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/array/array_end_node.py +0 -0
  145. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/array/array_end_widget.py +0 -0
  146. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/array/array_node.py +0 -0
  147. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/array/array_start_widget.py +0 -0
  148. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/array/array_unexpanded_widget.py +0 -0
  149. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/json_composite_end_node.py +0 -0
  150. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/json_composite_node.py +0 -0
  151. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/json_listbox.py +0 -0
  152. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/json_listwalker.py +0 -0
  153. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/json_simple_node.py +0 -0
  154. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/json_widget.py +0 -0
  155. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/node_factory.py +0 -0
  156. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/object/__init__.py +0 -0
  157. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/object/object_end_node.py +0 -0
  158. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/object/object_end_widget.py +0 -0
  159. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/object/object_node.py +0 -0
  160. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/object/object_start_widget.py +0 -0
  161. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/object/object_unexpanded_widget.py +0 -0
  162. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/__init__.py +0 -0
  163. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/base.py +0 -0
  164. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/boolean.py +0 -0
  165. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/generic.py +0 -0
  166. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/integer.py +0 -0
  167. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/null.py +0 -0
  168. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/numeric.py +0 -0
  169. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/primitive/string.py +0 -0
  170. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/json_lib/selector/__init__.py +0 -0
  171. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/keymapper/__init__.py +0 -0
  172. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/keymapper/abstract_component_keymapper.py +0 -0
  173. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/keymapper/keymapper.py +0 -0
  174. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/keymapper/keymapper_config.py +0 -0
  175. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/keymapper/keymapper_config_parser.py +0 -0
  176. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/theme/__init__.py +0 -0
  177. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/theme/theme.py +0 -0
  178. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/theme/theme_config.py +0 -0
  179. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/theme/theme_config_parser.py +0 -0
  180. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/view_config.py +0 -0
  181. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/view_frame.py +0 -0
  182. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pyfx/view/view_manager.py +0 -0
  183. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pynput_recorder.py +0 -0
  184. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pypi_inspection.py +0 -0
  185. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/pytorch_module_explorer.py +0 -0
  186. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/refactor/string_format/__init__.py +0 -0
  187. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/refactor/string_format/format_to_fstring_converter.py +0 -0
  188. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/refactor/string_format/fstring_converter.py +0 -0
  189. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/refactor/string_format/test_format_to_fstring_converter.py +0 -0
  190. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/refactor/string_format/test_fstring_converter.py +0 -0
  191. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/rp_black_macchiato.py +0 -0
  192. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/stamp_tensor.py +0 -0
  193. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/stdin_python_highlighter.py +0 -0
  194. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/__init__.py +0 -0
  195. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/__main__.py +0 -0
  196. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/__init__.py +0 -0
  197. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/canvas.py +0 -0
  198. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/colors.py +0 -0
  199. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/console.py +0 -0
  200. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/funcs.py +0 -0
  201. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/nbinput.py +0 -0
  202. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/shapes.py +0 -0
  203. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/graphics/graphics/sprite.py +0 -0
  204. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/letters.py +0 -0
  205. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tetris/tetrisShapes.py +0 -0
  206. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/__init__.py +0 -0
  207. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/__main__.py +0 -0
  208. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/argparser.py +0 -0
  209. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/meta.py +0 -0
  210. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/methods/__init__.py +0 -0
  211. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/methods/ansi.py +0 -0
  212. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/methods/ansi_methods.py +0 -0
  213. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/methods/ascii.py +0 -0
  214. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/methods/method.py +0 -0
  215. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/methods/sixel.py +0 -0
  216. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/timg/renderer.py +0 -0
  217. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/torch_hooks.py +0 -0
  218. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/torch_tools.py +0 -0
  219. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tracetraptest.py +0 -0
  220. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/tweenline.py +0 -0
  221. {rp-0.1.1385 → rp-0.1.1387}/rp/libs/webeval_dataset.py +0 -0
  222. {rp-0.1.1385 → rp-0.1.1387}/rp/list_of_modules.py +0 -0
  223. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/Todo +0 -0
  224. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/__init__.py +0 -0
  225. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/blm.py +0 -0
  226. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/chainsaw.py +0 -0
  227. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/claude_bash.sh +0 -0
  228. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/claude_panel.py +0 -0
  229. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/death_of_the_mind.py +0 -0
  230. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/flappy.py +0 -0
  231. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/mario.py +0 -0
  232. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/matrix.py +0 -0
  233. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/mpi_untitled.py +0 -0
  234. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/py2048.py +0 -0
  235. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/pychess.py +0 -0
  236. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/rp_logo.svg +0 -0
  237. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/rp_mpi.py +0 -0
  238. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/ryan_zshrc.py +0 -0
  239. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/shotgun.py +0 -0
  240. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/skia_trail_interactive_paint_demo.py +0 -0
  241. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/snake.py +0 -0
  242. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/sudoku.py +0 -0
  243. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/tetris.py +0 -0
  244. {rp-0.1.1385 → rp-0.1.1387}/rp/misc/trans.py +0 -0
  245. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/__init__.py +0 -0
  246. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/application.py +0 -0
  247. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/auto_suggest.py +0 -0
  248. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/buffer.py +0 -0
  249. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/buffer_mapping.py +0 -0
  250. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/cache.py +0 -0
  251. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/clipboard/__init__.py +0 -0
  252. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/clipboard/base.py +0 -0
  253. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/clipboard/in_memory.py +0 -0
  254. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/clipboard/pyperclip.py +0 -0
  255. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/completion.py +0 -0
  256. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/__init__.py +0 -0
  257. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/completers/__init__.py +0 -0
  258. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/completers/base.py +0 -0
  259. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/completers/filesystem.py +0 -0
  260. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/completers/system.py +0 -0
  261. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/regular_languages/__init__.py +0 -0
  262. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/regular_languages/compiler.py +0 -0
  263. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/regular_languages/completion.py +0 -0
  264. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/regular_languages/lexer.py +0 -0
  265. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/regular_languages/regex_parser.py +0 -0
  266. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/regular_languages/validation.py +0 -0
  267. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/telnet/__init__.py +0 -0
  268. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/telnet/application.py +0 -0
  269. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/telnet/log.py +0 -0
  270. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/telnet/protocol.py +0 -0
  271. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/telnet/server.py +0 -0
  272. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/validators/__init__.py +0 -0
  273. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/contrib/validators/base.py +0 -0
  274. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/document.py +0 -0
  275. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/enums.py +0 -0
  276. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/__init__.py +0 -0
  277. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/asyncio_base.py +0 -0
  278. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/asyncio_posix.py +0 -0
  279. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/asyncio_win32.py +0 -0
  280. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/base.py +0 -0
  281. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/callbacks.py +0 -0
  282. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/inputhook.py +0 -0
  283. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/posix.py +0 -0
  284. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/posix_utils.py +0 -0
  285. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/select.py +0 -0
  286. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/utils.py +0 -0
  287. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/eventloop/win32.py +0 -0
  288. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/filters/__init__.py +0 -0
  289. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/filters/base.py +0 -0
  290. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/filters/cli.py +0 -0
  291. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/filters/types.py +0 -0
  292. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/filters/utils.py +0 -0
  293. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/history.py +0 -0
  294. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/input.py +0 -0
  295. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/interface.py +0 -0
  296. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/__init__.py +0 -0
  297. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/__init__.py +0 -0
  298. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/basic.py +0 -0
  299. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/completion.py +0 -0
  300. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/emacs.py +0 -0
  301. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/named_commands.py +0 -0
  302. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/scroll.py +0 -0
  303. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/bindings/vi.py +0 -0
  304. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/defaults.py +0 -0
  305. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/digraphs.py +0 -0
  306. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/input_processor.py +0 -0
  307. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/manager.py +0 -0
  308. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/registry.py +0 -0
  309. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/key_binding/vi_state.py +0 -0
  310. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/keys.py +0 -0
  311. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/__init__.py +0 -0
  312. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/containers.py +0 -0
  313. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/controls.py +0 -0
  314. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/dimension.py +0 -0
  315. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/lexers.py +0 -0
  316. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/margins.py +0 -0
  317. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/menus.py +0 -0
  318. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/mouse_handlers.py +0 -0
  319. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/processors.py +0 -0
  320. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/prompt.py +0 -0
  321. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/screen.py +0 -0
  322. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/toolbars.py +0 -0
  323. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/untitled.py +0 -0
  324. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/layout/utils.py +0 -0
  325. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/mouse_events.py +0 -0
  326. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/output.py +0 -0
  327. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/reactive.py +0 -0
  328. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/renderer.py +0 -0
  329. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/search_state.py +0 -0
  330. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/selection.py +0 -0
  331. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/shortcuts.py +0 -0
  332. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/styles/__init__.py +0 -0
  333. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/styles/base.py +0 -0
  334. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/styles/defaults.py +0 -0
  335. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/styles/from_dict.py +0 -0
  336. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/styles/from_pygments.py +0 -0
  337. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/styles/utils.py +0 -0
  338. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/terminal/__init__.py +0 -0
  339. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/terminal/conemu_output.py +0 -0
  340. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/terminal/vt100_input.py +0 -0
  341. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/terminal/vt100_output.py +0 -0
  342. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/terminal/win32_input.py +0 -0
  343. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/terminal/win32_output.py +0 -0
  344. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/token.py +0 -0
  345. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/utils.py +0 -0
  346. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/validation.py +0 -0
  347. {rp-0.1.1385 → rp-0.1.1387}/rp/prompt_toolkit/win32_types.py +0 -0
  348. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/__init__.py +0 -0
  349. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/__main__.py +0 -0
  350. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/ast_selection.py +0 -0
  351. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/async_analyzer_base.py +0 -0
  352. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/async_jedi_highlighter.py +0 -0
  353. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/backslash_commands.py +0 -0
  354. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/bash_completer.py +0 -0
  355. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/bash_extract.py +0 -0
  356. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/bash_inline.py +0 -0
  357. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/bash_rename.py +0 -0
  358. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/bash_selection.py +0 -0
  359. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/completer.py +0 -0
  360. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/completer_old.py +0 -0
  361. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/completion_ranker.py +0 -0
  362. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/completion_schema.py +0 -0
  363. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/completion_types.py +0 -0
  364. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/eventloop.py +0 -0
  365. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/filters.py +0 -0
  366. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/history_browser.py +0 -0
  367. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/ipython.py +0 -0
  368. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/jedi_highlighter.py +0 -0
  369. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/jedi_lexer.py +0 -0
  370. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/jedi_utils.py +0 -0
  371. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/key_bindings.py +0 -0
  372. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/layout.py +0 -0
  373. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/patch_linecache.py +0 -0
  374. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/path_completer_utils.py +0 -0
  375. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/prompt_style.py +0 -0
  376. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/python_input.py +0 -0
  377. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/r_iterm_comm.py +0 -0
  378. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/refactor_extract.py +0 -0
  379. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/refactor_inline.py +0 -0
  380. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/refactor_move.py +0 -0
  381. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/refactor_move_bash.py +0 -0
  382. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/refactor_rename.py +0 -0
  383. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/repl.py +0 -0
  384. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/__init__.py +0 -0
  385. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/commands.py +0 -0
  386. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/completers.py +0 -0
  387. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/completion_hints.py +0 -0
  388. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/grammar.py +0 -0
  389. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/key_bindings.py +0 -0
  390. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/layout.py +0 -0
  391. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/style.py +0 -0
  392. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/rp_ptpdb/toolbars.py +0 -0
  393. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/selection_utils.py +0 -0
  394. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/style.py +0 -0
  395. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/testable_keybindings.py +0 -0
  396. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/treesitter_selection.py +0 -0
  397. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/treesitter_semantic.py +0 -0
  398. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/unreachable_detector.py +0 -0
  399. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/utils.py +0 -0
  400. {rp-0.1.1385 → rp-0.1.1387}/rp/rp_ptpython/validator.py +0 -0
  401. {rp-0.1.1385 → rp-0.1.1387}/rp/ryan_vimrc.py +0 -0
  402. {rp-0.1.1385 → rp-0.1.1387}/rp/web_evaluator.py +0 -0
  403. {rp-0.1.1385 → rp-0.1.1387}/rp.egg-info/SOURCES.txt +0 -0
  404. {rp-0.1.1385 → rp-0.1.1387}/rp.egg-info/dependency_links.txt +0 -0
  405. {rp-0.1.1385 → rp-0.1.1387}/rp.egg-info/entry_points.txt +0 -0
  406. {rp-0.1.1385 → rp-0.1.1387}/rp.egg-info/requires.txt +0 -0
  407. {rp-0.1.1385 → rp-0.1.1387}/rp.egg-info/top_level.txt +0 -0
  408. {rp-0.1.1385 → rp-0.1.1387}/setup.cfg +0 -0
  409. {rp-0.1.1385 → rp-0.1.1387}/setup.py +0 -0
  410. {rp-0.1.1385 → rp-0.1.1387}/untitled.c +0 -0
  411. {rp-0.1.1385 → rp-0.1.1387}/update_module_paths.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: rp
3
- Version: 0.1.1385
3
+ Version: 0.1.1387
4
4
  Summary: Ryan's Python: IDE + Library + Tools
5
5
  Home-page: https://github.com/RyannDaGreat/rp
6
6
  Author: Ryan Burgert
@@ -140,6 +140,39 @@ def is_media_path(x) -> bool:
140
140
  return ext in IMAGE_EXTENSIONS or ext in VIDEO_EXTENSIONS
141
141
 
142
142
 
143
+ def _parse_labeled_dict(d: dict) -> tuple[list, list]:
144
+ """Parse {label: path} dict. Returns (paths, labels) or raises if backwards."""
145
+ labels = []
146
+ paths = []
147
+ for label, path in d.items():
148
+ if is_media_path(path):
149
+ labels.append(label)
150
+ paths.append(path)
151
+ if not paths and d:
152
+ first_key = next(iter(d.keys()))
153
+ if is_media_path(first_key):
154
+ raise ValueError(
155
+ f"Dict has paths as keys, but expected {{label: path}}. "
156
+ f"Got {{{repr(first_key)}: ...}}. Flip your dict."
157
+ )
158
+ return paths, labels
159
+
160
+
161
+ def _parse_content(content, title=None) -> dict | None:
162
+ """Parse content into a slide dict, or None if no valid paths."""
163
+ if is_media_path(content):
164
+ return {"paths": [content], "title": title, "labels": None}
165
+ if isinstance(content, dict):
166
+ paths, labels = _parse_labeled_dict(content)
167
+ if paths:
168
+ return {"paths": paths, "title": title, "labels": labels}
169
+ elif rp.is_non_str_iterable(content):
170
+ paths = [p for p in content if is_media_path(p)]
171
+ if paths:
172
+ return {"paths": paths, "title": title, "labels": None}
173
+ return None
174
+
175
+
143
176
  def normalize_slides_input(layout) -> list[dict]:
144
177
  """
145
178
  Normalize flexible input formats into list of slide dicts.
@@ -153,58 +186,22 @@ def normalize_slides_input(layout) -> list[dict]:
153
186
  - Dict with nested labels: {'Slide 1': {'vid': 'a.mp4', 'img': 'b.png'}}
154
187
  - Single path: 'a.mp4'
155
188
  """
156
- # Single path
157
189
  if is_media_path(layout):
158
190
  return [{"paths": [layout], "title": None, "labels": None}]
159
191
 
160
- # Dict with slide titles
161
192
  if isinstance(layout, dict):
162
193
  result = []
163
194
  for title, content in layout.items():
164
- if is_media_path(content):
165
- result.append(
166
- {"paths": [content], "title": title, "labels": None}
167
- )
168
- elif isinstance(content, dict):
169
- # {'label1': 'path1', 'label2': 'path2'}
170
- labels = []
171
- paths = []
172
- for label, path in content.items():
173
- if is_media_path(path):
174
- labels.append(label)
175
- paths.append(path)
176
- if paths:
177
- result.append(
178
- {"paths": paths, "title": title, "labels": labels}
179
- )
180
- elif rp.is_non_str_iterable(content):
181
- paths = [p for p in content if is_media_path(p)]
182
- if paths:
183
- result.append(
184
- {"paths": paths, "title": title, "labels": None}
185
- )
195
+ slide = _parse_content(content, title)
196
+ if slide:
197
+ result.append(slide)
186
198
  return result
187
199
 
188
- # List input
189
200
  result = []
190
201
  for item in layout:
191
- if isinstance(item, dict):
192
- # Dict slide: {'label': 'path', ...}
193
- labels = []
194
- paths = []
195
- for label, path in item.items():
196
- if is_media_path(path):
197
- labels.append(label)
198
- paths.append(path)
199
- if paths:
200
- result.append({"paths": paths, "title": None, "labels": labels})
201
- elif rp.is_non_str_iterable(item):
202
- paths = [p for p in item if is_media_path(p)]
203
- if paths:
204
- result.append({"paths": paths, "title": None, "labels": None})
205
- elif is_media_path(item):
206
- result.append({"paths": [item], "title": None, "labels": None})
207
-
202
+ slide = _parse_content(item)
203
+ if slide:
204
+ result.append(slide)
208
205
  return result
209
206
 
210
207
 
@@ -278,6 +275,26 @@ def make_file_public(service, file_id: str) -> str:
278
275
  return DRIVE_FILE_URL.format(file_id)
279
276
 
280
277
 
278
+ def _format_eta(done: int, total: int, elapsed: float) -> str:
279
+ """Format ETA string based on progress and elapsed time."""
280
+ if done <= 0 or elapsed <= 0:
281
+ return ""
282
+ rate = done / elapsed
283
+ remaining = total - done
284
+ eta_seconds = remaining / rate
285
+ return f", ETA: {int(eta_seconds // 60)}m{int(eta_seconds % 60):02d}s"
286
+
287
+
288
+ def _format_progress(index: int, total: int, done: int, total_size: int, elapsed: float, use_bytes: bool = True) -> str:
289
+ """Format overall progress string."""
290
+ eta = _format_eta(done, total_size, elapsed)
291
+ if use_bytes:
292
+ done_str = rp.human_readable_file_size(done)
293
+ total_str = rp.human_readable_file_size(total_size)
294
+ return f"[{index}/{total}] {done_str} / {total_str}{eta}"
295
+ return f"[{index}/{total}]{eta}"
296
+
297
+
281
298
  def upload_media_sequential(
282
299
  service,
283
300
  file_paths: list[str],
@@ -285,14 +302,22 @@ def upload_media_sequential(
285
302
  ) -> list[dict]:
286
303
  """Upload multiple media files sequentially with progress bars."""
287
304
  results = []
305
+ total_bytes = sum(rp.get_file_size(fp) for fp in file_paths)
306
+ uploaded_bytes = 0
307
+ start_time = time.time()
288
308
 
289
- for fp in file_paths:
309
+ for i, fp in enumerate(file_paths):
290
310
  size = rp.get_file_size(fp)
311
+ elapsed = time.time() - start_time
312
+ progress_str = _format_progress(i + 1, len(file_paths), uploaded_bytes, total_bytes, elapsed)
313
+ rp.fansi_print(f" {progress_str}", "cyan")
314
+
291
315
  pbar = tqdm(
292
316
  total=size,
293
317
  desc=rp.get_file_name(fp),
294
318
  unit="B",
295
319
  unit_scale=True,
320
+ leave=False,
296
321
  )
297
322
  last_progress = [0]
298
323
 
@@ -302,7 +327,9 @@ def upload_media_sequential(
302
327
  last_progress[0] = current
303
328
 
304
329
  result = upload_media(service, fp, folder_id, progress_cb)
330
+ pbar.update(size - last_progress[0]) # Ensure 100%
305
331
  pbar.close()
332
+ uploaded_bytes += size
306
333
  rp.fansi_print(f" Uploaded: {result['webViewLink']}", "green")
307
334
  results.append(result)
308
335
 
@@ -687,7 +714,12 @@ def media_to_slides(
687
714
  all_paths.append(path)
688
715
 
689
716
  if not all_paths:
690
- raise ValueError("No media files provided")
717
+ raise ValueError(
718
+ f"No media files found in layout. "
719
+ f"Got {len(slides)} slides but no valid paths. "
720
+ f"Layout type: {type(layout).__name__}, "
721
+ f"Input: {repr(layout)[:500]}"
722
+ )
691
723
 
692
724
  if folder_name is None:
693
725
  folder_name = f"Media_{time.strftime('%Y%m%d_%H%M%S')}"
@@ -718,9 +750,12 @@ def media_to_slides(
718
750
  path_to_media = dict(zip(all_paths, media))
719
751
 
720
752
  rp.fansi_print("\nMaking files publicly accessible...", "cyan")
721
- for m in media:
753
+ start_time = time.time()
754
+ for i, m in enumerate(media):
755
+ elapsed = time.time() - start_time
756
+ progress_str = _format_progress(i + 1, len(media), i, len(media), elapsed, use_bytes=False)
757
+ rp.fansi_print(f" {progress_str} {m['name']}", "cyan")
722
758
  make_file_public(drive_service, m["id"])
723
- rp.fansi_print(f" {m['name']}: public", "green")
724
759
 
725
760
  # Build slides_data for create_slides_with_media_grid
726
761
  slides_data = []
@@ -868,7 +903,10 @@ def cli(
868
903
  media_paths.append(p)
869
904
 
870
905
  if not media_paths:
871
- raise ValueError("No media files found")
906
+ raise ValueError(
907
+ f"No media files found. Searched {len(paths)} paths. "
908
+ f"Supported formats: {', '.join(MEDIA_EXTENSIONS)}"
909
+ )
872
910
 
873
911
  # Split into grids if requested
874
912
  if per_slide is not None:
@@ -13748,7 +13748,7 @@ def invert_dict(d: dict, bijection=True, precedence='last') -> dict:
13748
13748
  items = list(d.items())
13749
13749
  if precedence=='first':
13750
13750
  items = items[::-1]
13751
- return {v:k for v,k in items}
13751
+ return {v:k for k,v in items}
13752
13752
  else:
13753
13753
  # {0: 'a', 1: 'a', 2: 'b'} ⟶ {'a': (0,1), 'b': (2,)}
13754
13754
  out={}
@@ -42789,9 +42789,10 @@ def _get_video_file_framerate_via_ffprobe(path, use_cache=True):
42789
42789
  import subprocess
42790
42790
  import json
42791
42791
 
42792
- if not 'ffprobe' in get_system_commands():
42792
+ if not 'ffprobe' in get_system_commands():
42793
42793
  _ensure_ffmpeg_installed()
42794
- raise RuntimeError('rp.get_video_file_framerate: Please install ffmpeg! Unable to find the ffprobe command')
42794
+ if not 'ffprobe' in get_system_commands():
42795
+ raise RuntimeError('rp.get_video_file_framerate: Please install ffmpeg! Unable to find the ffprobe command')
42795
42796
 
42796
42797
  path = get_absolute_path(path) # Important for caching
42797
42798
  if use_cache and path in _get_video_file_framerate_cache:
@@ -42828,6 +42829,111 @@ def get_video_file_framerate(path, use_cache=True):
42828
42829
  except Exception:
42829
42830
  return _get_video_file_framerate_via_ffprobe(path, use_cache)
42830
42831
 
42832
+ _video_has_audio_cache = {}
42833
+
42834
+ def video_has_audio(path, use_cache=True, strict=False, include_silent=True):
42835
+ """
42836
+ Check if a video file contains an audio track.
42837
+
42838
+ Uses ffprobe (part of ffmpeg) to detect audio streams. This is fast (~60ms)
42839
+ and does not require loading the entire video into memory. Time is O(1)
42840
+ regardless of video length.
42841
+
42842
+ Args:
42843
+ path (str): Path to the video file
42844
+ use_cache (bool): If True, caches results to avoid repeated ffprobe calls.
42845
+ Defaults to True.
42846
+ strict (bool): If False, corrupted or invalid video files return False.
42847
+ If True, raises RuntimeError on ffprobe failure.
42848
+ Defaults to False.
42849
+ include_silent (bool): If True, returns True even if the video has an audio track
42850
+ but that audio track has no audible audio.
42851
+ If False, returns True only if there is audible audio.
42852
+ Defaults to True.
42853
+
42854
+ Returns:
42855
+ bool: True if the video has an audio stream (or non-silent audio if include_silent=False)
42856
+
42857
+ Raises:
42858
+ FileNotFoundError: If the video file does not exist
42859
+ RuntimeError: If ffprobe fails or ffmpeg is not installed (only when strict=True)
42860
+
42861
+ EXAMPLE:
42862
+ >>> video_has_audio('/Users/ryan/Downloads/12071694.mp4')
42863
+ True
42864
+ >>> video_has_audio('/Users/ryan/Downloads/000000.mp4')
42865
+ False
42866
+
42867
+ See Also:
42868
+ - is_video_file: Check if a file is a video
42869
+ - is_sound_file: Check if a file is an audio file
42870
+ - get_video_file_framerate: Get framerate of a video
42871
+ """
42872
+ import subprocess
42873
+
42874
+ if not 'ffprobe' in get_system_commands():
42875
+ _ensure_ffmpeg_installed()
42876
+ if not 'ffprobe' in get_system_commands():
42877
+ raise RuntimeError('rp.video_has_audio: Please install ffmpeg! Unable to find the ffprobe command')
42878
+
42879
+ path = get_absolute_path(path)
42880
+
42881
+ if not file_exists(path):
42882
+ raise FileNotFoundError("Video file not found: " + path)
42883
+
42884
+ # Cache key includes include_silent flag
42885
+ cache_key = (path, include_silent)
42886
+ if use_cache and cache_key in _video_has_audio_cache:
42887
+ return _video_has_audio_cache[cache_key]
42888
+
42889
+ # When include_silent=True, check for stream existence (index)
42890
+ # When include_silent=False, check bitrate to detect silent tracks (<5kbps = silent)
42891
+ if include_silent:
42892
+ select_streams = "a"
42893
+ show_entries = "stream=index"
42894
+ output_format = "csv=p=0"
42895
+ else:
42896
+ select_streams = "a:0"
42897
+ show_entries = "stream=bit_rate"
42898
+ output_format = "default=noprint_wrappers=1:nokey=1"
42899
+
42900
+ result = subprocess.run(
42901
+ ["ffprobe", "-v", "error", "-select_streams", select_streams,
42902
+ "-show_entries", show_entries, "-of", output_format, path],
42903
+ capture_output=True,
42904
+ text=True,
42905
+ )
42906
+
42907
+ if result.returncode != 0:
42908
+ if strict:
42909
+ raise RuntimeError("ffprobe failed on " + path + ": " + result.stderr)
42910
+ has_audio = False
42911
+ elif not result.stdout.strip():
42912
+ has_audio = False
42913
+ elif include_silent:
42914
+ has_audio = True
42915
+ else:
42916
+ try:
42917
+ # >5kbps = real audio, <5kbps = silent (silent AAC compresses to ~3.7kbps)
42918
+ has_audio = int(result.stdout.strip()) > 5000
42919
+ except ValueError:
42920
+ # Bitrate metadata unavailable (e.g. VBR without stored bitrate, rare edge case)
42921
+ # Fallback methods in order of speed:
42922
+ # 1. packet_size (~59ms, O(1)): avg packet size >50 bytes = real audio (silent AAC ~10 bytes)
42923
+ # ffprobe -select_streams a:0 -show_entries packet=size -read_intervals %+#20
42924
+ # 2. pcm_pipe (~58ms, O(1)): pipe 0.5s of PCM, check for samples >100 amplitude
42925
+ # ffmpeg -i FILE -t 0.5 -f s16le -ac 1 -ar 8000 - | check for non-zero
42926
+ # 3. volumedetect (~104ms, O(1) with -t): check max_volume > -80dB
42927
+ # ffmpeg -i FILE -t 0.5 -af volumedetect -f null /dev/null
42928
+ # NOTE: without -t flag this would be O(n) - must decode entire audio
42929
+ fansi_print("WARNING: video_has_audio: bitrate unavailable for " + path + ", assuming has audio", "yellow")
42930
+ has_audio = True
42931
+
42932
+ if use_cache:
42933
+ _video_has_audio_cache[cache_key] = has_audio
42934
+
42935
+ return has_audio
42936
+
42831
42937
 
42832
42938
  #UNCOMMENT ONCE I USE SMART_OPEN SOMEWHERE
42833
42939
  # def _smart_open(path, mode="rb"):
@@ -0,0 +1 @@
1
+ 1387
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: rp
3
- Version: 0.1.1385
3
+ Version: 0.1.1387
4
4
  Summary: Ryan's Python: IDE + Library + Tools
5
5
  Home-page: https://github.com/RyannDaGreat/rp
6
6
  Author: Ryan Burgert
rp-0.1.1387/version.py ADDED
@@ -0,0 +1 @@
1
+ 1387
rp-0.1.1385/rp/version.py DELETED
@@ -1 +0,0 @@
1
- 1385
rp-0.1.1385/version.py DELETED
@@ -1 +0,0 @@
1
- 1385
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
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
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
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
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
File without changes