rp 0.1.1376__tar.gz → 0.1.1378__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.1376 → rp-0.1.1378}/PKG-INFO +1 -1
  2. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/powerpoint/__main__.py +59 -2
  3. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/powerpoint/convert_pptx_videos_to_gifs.py +5 -4
  4. rp-0.1.1378/rp/libs/powerpoint/convert_tmux.py +394 -0
  5. rp-0.1.1378/rp/libs/powerpoint/media_to_slides.py +899 -0
  6. {rp-0.1.1376 → rp-0.1.1378}/rp/r.py +267 -1
  7. rp-0.1.1378/rp/version.py +1 -0
  8. {rp-0.1.1376 → rp-0.1.1378}/rp.egg-info/PKG-INFO +1 -1
  9. {rp-0.1.1376 → rp-0.1.1378}/rp.egg-info/SOURCES.txt +2 -0
  10. rp-0.1.1378/version.py +1 -0
  11. rp-0.1.1376/rp/version.py +0 -1
  12. rp-0.1.1376/version.py +0 -1
  13. {rp-0.1.1376 → rp-0.1.1378}/.gitignore +0 -0
  14. {rp-0.1.1376 → rp-0.1.1378}/.idea/QuickPython.iml +0 -0
  15. {rp-0.1.1376 → rp-0.1.1378}/.idea/QuickPython.time +0 -0
  16. {rp-0.1.1376 → rp-0.1.1378}/.idea/encodings.xml +0 -0
  17. {rp-0.1.1376 → rp-0.1.1378}/.idea/inspectionProfiles/Project_Default.xml +0 -0
  18. {rp-0.1.1376 → rp-0.1.1378}/.idea/misc.xml +0 -0
  19. {rp-0.1.1376 → rp-0.1.1378}/.idea/modules.xml +0 -0
  20. {rp-0.1.1376 → rp-0.1.1378}/.idea/vcs.xml +0 -0
  21. {rp-0.1.1376 → rp-0.1.1378}/.idea/workspace.xml +0 -0
  22. {rp-0.1.1376 → rp-0.1.1378}/.publish.sh.un~ +0 -0
  23. {rp-0.1.1376 → rp-0.1.1378}/.setup.py.un~ +0 -0
  24. {rp-0.1.1376 → rp-0.1.1378}/.update_module_paths.py.un~ +0 -0
  25. {rp-0.1.1376 → rp-0.1.1378}/LICENSE.txt +0 -0
  26. {rp-0.1.1376 → rp-0.1.1378}/README +0 -0
  27. {rp-0.1.1376 → rp-0.1.1378}/Scrap +0 -0
  28. {rp-0.1.1376 → rp-0.1.1378}/aoisdasd +0 -0
  29. {rp-0.1.1376 → rp-0.1.1378}/increment_version.py +0 -0
  30. {rp-0.1.1376 → rp-0.1.1378}/oijio +0 -0
  31. {rp-0.1.1376 → rp-0.1.1378}/publish.sh +0 -0
  32. {rp-0.1.1376 → rp-0.1.1378}/pyqtconsoletest.py +0 -0
  33. {rp-0.1.1376 → rp-0.1.1378}/rp/__init__.py +0 -0
  34. {rp-0.1.1376 → rp-0.1.1378}/rp/__main__.py +0 -0
  35. {rp-0.1.1376 → rp-0.1.1378}/rp/documentation.py +0 -0
  36. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/Pyperclip.py +0 -0
  37. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/__init__.py +0 -0
  38. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/debug_comment.py +0 -0
  39. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/draw_code_minimap.py +0 -0
  40. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/graveyard.py +0 -0
  41. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/__init__.py +0 -0
  42. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/_compatibility.py +0 -0
  43. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/cache.py +0 -0
  44. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/file_io.py +0 -0
  45. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/grammar.py +0 -0
  46. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/normalizer.py +0 -0
  47. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/parser.py +0 -0
  48. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/pgen2/__init__.py +0 -0
  49. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/pgen2/generator.py +0 -0
  50. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/pgen2/grammar_parser.py +0 -0
  51. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/__init__.py +0 -0
  52. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/diff.py +0 -0
  53. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/errors.py +0 -0
  54. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar26.txt +0 -0
  55. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar27.txt +0 -0
  56. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar310.txt +0 -0
  57. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar311.txt +0 -0
  58. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar312.txt +0 -0
  59. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar33.txt +0 -0
  60. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar34.txt +0 -0
  61. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar35.txt +0 -0
  62. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar36.txt +0 -0
  63. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar37.txt +0 -0
  64. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar38.txt +0 -0
  65. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/grammar39.txt +0 -0
  66. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/parser.py +0 -0
  67. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/pep8.py +0 -0
  68. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/prefix.py +0 -0
  69. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/token.py +0 -0
  70. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/tokenize.py +0 -0
  71. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/python/tree.py +0 -0
  72. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/tree.py +0 -0
  73. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/parso/utils.py +0 -0
  74. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/peepdis/__init__.py +0 -0
  75. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/peepdis/core.py +0 -0
  76. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/peepdis/datastructures.py +0 -0
  77. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/peepdis/legacy.py +0 -0
  78. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/peepdis/preferences.py +0 -0
  79. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/powerpoint/__init__.py +0 -0
  80. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/powerpoint/google_slides_upload.py +0 -0
  81. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/powerpoint/pptx_utils.py +0 -0
  82. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/powerpoint_converter.py +0 -0
  83. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/profile_vim_plugins.py +0 -0
  84. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pw_crypt.py +0 -0
  85. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/__init__.py +0 -0
  86. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/bindings/__init__.py +0 -0
  87. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/bindings/flann_ctypes.py +0 -0
  88. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/exceptions.py +0 -0
  89. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/index.py +0 -0
  90. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/io/__init__.py +0 -0
  91. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/io/binary_dataset.py +0 -0
  92. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/io/dat_dataset.py +0 -0
  93. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/io/dataset.py +0 -0
  94. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/io/hdf5_dataset.py +0 -0
  95. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/io/npy_dataset.py +0 -0
  96. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/util/__init__.py +0 -0
  97. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyflann/util/weave_tools.py +0 -0
  98. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/__init__.py +0 -0
  99. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/__version__.py +0 -0
  100. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/app.py +0 -0
  101. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/cli.py +0 -0
  102. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/cli_utils.py +0 -0
  103. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/__init__.py +0 -0
  104. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/config.py +0 -0
  105. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/config_error.py +0 -0
  106. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/config_parser.py +0 -0
  107. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/config_transformer.py +0 -0
  108. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/validators/__init__.py +0 -0
  109. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/config/validators/options.py +0 -0
  110. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/logging.py +0 -0
  111. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/__init__.py +0 -0
  112. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/autocomplete/__init__.py +0 -0
  113. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/autocomplete/autocomplete_listener.py +0 -0
  114. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/common/__init__.py +0 -0
  115. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/common/jsonpath/JSONPathLexer.py +0 -0
  116. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/common/jsonpath/JSONPathListener.py +0 -0
  117. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/common/jsonpath/JSONPathParser.py +0 -0
  118. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/common/jsonpath/__init__.py +0 -0
  119. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/io/__init__.py +0 -0
  120. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/io/datasource.py +0 -0
  121. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/model/model.py +0 -0
  122. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/service/__init__.py +0 -0
  123. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/service/client.py +0 -0
  124. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/service/dispatcher.py +0 -0
  125. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/__init__.py +0 -0
  126. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/common/__init__.py +0 -0
  127. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/common/popup.py +0 -0
  128. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/common/selectable_text.py +0 -0
  129. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/__init__.py +0 -0
  130. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/autocomplete_popup/__init__.py +0 -0
  131. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup.py +0 -0
  132. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup_keymapper.py +0 -0
  133. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/help_bar/__init__.py +0 -0
  134. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/help_bar/help_bar.py +0 -0
  135. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/help_page/__init__.py +0 -0
  136. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/help_page/detailed_help_page.py +0 -0
  137. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/json_browser/__init__.py +0 -0
  138. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/json_browser/json_browser.py +0 -0
  139. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/json_browser/json_browser_keymapper.py +0 -0
  140. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/query_bar/__init__.py +0 -0
  141. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/query_bar/query_bar.py +0 -0
  142. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/components/query_bar/query_bar_keymapper.py +0 -0
  143. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/__init__.py +0 -0
  144. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/array/__init__.py +0 -0
  145. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/array/array_end_node.py +0 -0
  146. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/array/array_end_widget.py +0 -0
  147. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/array/array_node.py +0 -0
  148. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/array/array_start_widget.py +0 -0
  149. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/array/array_unexpanded_widget.py +0 -0
  150. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/json_composite_end_node.py +0 -0
  151. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/json_composite_node.py +0 -0
  152. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/json_listbox.py +0 -0
  153. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/json_listwalker.py +0 -0
  154. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/json_simple_node.py +0 -0
  155. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/json_widget.py +0 -0
  156. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/node_factory.py +0 -0
  157. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/object/__init__.py +0 -0
  158. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/object/object_end_node.py +0 -0
  159. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/object/object_end_widget.py +0 -0
  160. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/object/object_node.py +0 -0
  161. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/object/object_start_widget.py +0 -0
  162. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/object/object_unexpanded_widget.py +0 -0
  163. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/__init__.py +0 -0
  164. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/base.py +0 -0
  165. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/boolean.py +0 -0
  166. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/generic.py +0 -0
  167. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/integer.py +0 -0
  168. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/null.py +0 -0
  169. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/numeric.py +0 -0
  170. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/primitive/string.py +0 -0
  171. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/json_lib/selector/__init__.py +0 -0
  172. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/keymapper/__init__.py +0 -0
  173. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/keymapper/abstract_component_keymapper.py +0 -0
  174. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/keymapper/keymapper.py +0 -0
  175. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/keymapper/keymapper_config.py +0 -0
  176. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/keymapper/keymapper_config_parser.py +0 -0
  177. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/theme/__init__.py +0 -0
  178. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/theme/theme.py +0 -0
  179. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/theme/theme_config.py +0 -0
  180. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/theme/theme_config_parser.py +0 -0
  181. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/view_config.py +0 -0
  182. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/view_frame.py +0 -0
  183. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pyfx/view/view_manager.py +0 -0
  184. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pynput_recorder.py +0 -0
  185. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pypi_inspection.py +0 -0
  186. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/pytorch_module_explorer.py +0 -0
  187. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/refactor/string_format/__init__.py +0 -0
  188. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/refactor/string_format/format_to_fstring_converter.py +0 -0
  189. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/refactor/string_format/fstring_converter.py +0 -0
  190. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/refactor/string_format/test_format_to_fstring_converter.py +0 -0
  191. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/refactor/string_format/test_fstring_converter.py +0 -0
  192. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/rp_black_macchiato.py +0 -0
  193. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/stamp_tensor.py +0 -0
  194. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/stdin_python_highlighter.py +0 -0
  195. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/__init__.py +0 -0
  196. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/__main__.py +0 -0
  197. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/__init__.py +0 -0
  198. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/canvas.py +0 -0
  199. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/colors.py +0 -0
  200. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/console.py +0 -0
  201. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/funcs.py +0 -0
  202. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/nbinput.py +0 -0
  203. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/shapes.py +0 -0
  204. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/graphics/graphics/sprite.py +0 -0
  205. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/letters.py +0 -0
  206. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tetris/tetrisShapes.py +0 -0
  207. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/__init__.py +0 -0
  208. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/__main__.py +0 -0
  209. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/argparser.py +0 -0
  210. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/meta.py +0 -0
  211. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/methods/__init__.py +0 -0
  212. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/methods/ansi.py +0 -0
  213. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/methods/ansi_methods.py +0 -0
  214. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/methods/ascii.py +0 -0
  215. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/methods/method.py +0 -0
  216. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/methods/sixel.py +0 -0
  217. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/timg/renderer.py +0 -0
  218. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/torch_hooks.py +0 -0
  219. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/torch_tools.py +0 -0
  220. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tracetraptest.py +0 -0
  221. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/tweenline.py +0 -0
  222. {rp-0.1.1376 → rp-0.1.1378}/rp/libs/webeval_dataset.py +0 -0
  223. {rp-0.1.1376 → rp-0.1.1378}/rp/list_of_modules.py +0 -0
  224. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/Todo +0 -0
  225. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/__init__.py +0 -0
  226. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/blm.py +0 -0
  227. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/chainsaw.py +0 -0
  228. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/claude_bash.sh +0 -0
  229. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/claude_panel.py +0 -0
  230. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/death_of_the_mind.py +0 -0
  231. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/flappy.py +0 -0
  232. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/mario.py +0 -0
  233. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/matrix.py +0 -0
  234. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/mpi_untitled.py +0 -0
  235. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/py2048.py +0 -0
  236. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/pychess.py +0 -0
  237. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/rp_logo.svg +0 -0
  238. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/rp_mpi.py +0 -0
  239. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/ryan_zshrc.py +0 -0
  240. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/shotgun.py +0 -0
  241. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/skia_trail_interactive_paint_demo.py +0 -0
  242. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/snake.py +0 -0
  243. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/sudoku.py +0 -0
  244. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/tetris.py +0 -0
  245. {rp-0.1.1376 → rp-0.1.1378}/rp/misc/trans.py +0 -0
  246. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/__init__.py +0 -0
  247. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/application.py +0 -0
  248. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/auto_suggest.py +0 -0
  249. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/buffer.py +0 -0
  250. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/buffer_mapping.py +0 -0
  251. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/cache.py +0 -0
  252. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/clipboard/__init__.py +0 -0
  253. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/clipboard/base.py +0 -0
  254. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/clipboard/in_memory.py +0 -0
  255. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/clipboard/pyperclip.py +0 -0
  256. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/completion.py +0 -0
  257. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/__init__.py +0 -0
  258. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/completers/__init__.py +0 -0
  259. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/completers/base.py +0 -0
  260. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/completers/filesystem.py +0 -0
  261. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/completers/system.py +0 -0
  262. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/regular_languages/__init__.py +0 -0
  263. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/regular_languages/compiler.py +0 -0
  264. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/regular_languages/completion.py +0 -0
  265. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/regular_languages/lexer.py +0 -0
  266. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/regular_languages/regex_parser.py +0 -0
  267. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/regular_languages/validation.py +0 -0
  268. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/telnet/__init__.py +0 -0
  269. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/telnet/application.py +0 -0
  270. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/telnet/log.py +0 -0
  271. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/telnet/protocol.py +0 -0
  272. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/telnet/server.py +0 -0
  273. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/validators/__init__.py +0 -0
  274. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/contrib/validators/base.py +0 -0
  275. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/document.py +0 -0
  276. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/enums.py +0 -0
  277. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/__init__.py +0 -0
  278. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/asyncio_base.py +0 -0
  279. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/asyncio_posix.py +0 -0
  280. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/asyncio_win32.py +0 -0
  281. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/base.py +0 -0
  282. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/callbacks.py +0 -0
  283. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/inputhook.py +0 -0
  284. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/posix.py +0 -0
  285. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/posix_utils.py +0 -0
  286. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/select.py +0 -0
  287. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/utils.py +0 -0
  288. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/eventloop/win32.py +0 -0
  289. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/filters/__init__.py +0 -0
  290. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/filters/base.py +0 -0
  291. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/filters/cli.py +0 -0
  292. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/filters/types.py +0 -0
  293. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/filters/utils.py +0 -0
  294. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/history.py +0 -0
  295. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/input.py +0 -0
  296. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/interface.py +0 -0
  297. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/__init__.py +0 -0
  298. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/__init__.py +0 -0
  299. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/basic.py +0 -0
  300. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/completion.py +0 -0
  301. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/emacs.py +0 -0
  302. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/named_commands.py +0 -0
  303. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/scroll.py +0 -0
  304. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/bindings/vi.py +0 -0
  305. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/defaults.py +0 -0
  306. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/digraphs.py +0 -0
  307. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/input_processor.py +0 -0
  308. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/manager.py +0 -0
  309. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/registry.py +0 -0
  310. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/key_binding/vi_state.py +0 -0
  311. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/keys.py +0 -0
  312. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/__init__.py +0 -0
  313. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/containers.py +0 -0
  314. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/controls.py +0 -0
  315. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/dimension.py +0 -0
  316. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/lexers.py +0 -0
  317. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/margins.py +0 -0
  318. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/menus.py +0 -0
  319. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/mouse_handlers.py +0 -0
  320. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/processors.py +0 -0
  321. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/prompt.py +0 -0
  322. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/screen.py +0 -0
  323. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/toolbars.py +0 -0
  324. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/untitled.py +0 -0
  325. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/layout/utils.py +0 -0
  326. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/mouse_events.py +0 -0
  327. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/output.py +0 -0
  328. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/reactive.py +0 -0
  329. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/renderer.py +0 -0
  330. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/search_state.py +0 -0
  331. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/selection.py +0 -0
  332. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/shortcuts.py +0 -0
  333. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/styles/__init__.py +0 -0
  334. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/styles/base.py +0 -0
  335. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/styles/defaults.py +0 -0
  336. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/styles/from_dict.py +0 -0
  337. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/styles/from_pygments.py +0 -0
  338. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/styles/utils.py +0 -0
  339. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/terminal/__init__.py +0 -0
  340. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/terminal/conemu_output.py +0 -0
  341. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/terminal/vt100_input.py +0 -0
  342. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/terminal/vt100_output.py +0 -0
  343. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/terminal/win32_input.py +0 -0
  344. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/terminal/win32_output.py +0 -0
  345. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/token.py +0 -0
  346. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/utils.py +0 -0
  347. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/validation.py +0 -0
  348. {rp-0.1.1376 → rp-0.1.1378}/rp/prompt_toolkit/win32_types.py +0 -0
  349. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/__init__.py +0 -0
  350. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/__main__.py +0 -0
  351. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/ast_selection.py +0 -0
  352. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/async_analyzer_base.py +0 -0
  353. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/async_jedi_highlighter.py +0 -0
  354. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/backslash_commands.py +0 -0
  355. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/bash_completer.py +0 -0
  356. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/bash_extract.py +0 -0
  357. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/bash_inline.py +0 -0
  358. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/bash_rename.py +0 -0
  359. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/bash_selection.py +0 -0
  360. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/completer.py +0 -0
  361. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/completer_old.py +0 -0
  362. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/completion_ranker.py +0 -0
  363. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/completion_schema.py +0 -0
  364. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/completion_types.py +0 -0
  365. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/eventloop.py +0 -0
  366. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/filters.py +0 -0
  367. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/history_browser.py +0 -0
  368. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/ipython.py +0 -0
  369. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/jedi_highlighter.py +0 -0
  370. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/jedi_lexer.py +0 -0
  371. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/jedi_utils.py +0 -0
  372. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/key_bindings.py +0 -0
  373. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/layout.py +0 -0
  374. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/patch_linecache.py +0 -0
  375. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/path_completer_utils.py +0 -0
  376. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/prompt_style.py +0 -0
  377. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/python_input.py +0 -0
  378. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/r_iterm_comm.py +0 -0
  379. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/refactor_extract.py +0 -0
  380. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/refactor_inline.py +0 -0
  381. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/refactor_move.py +0 -0
  382. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/refactor_move_bash.py +0 -0
  383. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/refactor_rename.py +0 -0
  384. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/repl.py +0 -0
  385. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/__init__.py +0 -0
  386. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/commands.py +0 -0
  387. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/completers.py +0 -0
  388. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/completion_hints.py +0 -0
  389. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/grammar.py +0 -0
  390. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/key_bindings.py +0 -0
  391. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/layout.py +0 -0
  392. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/style.py +0 -0
  393. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/rp_ptpdb/toolbars.py +0 -0
  394. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/selection_utils.py +0 -0
  395. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/style.py +0 -0
  396. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/testable_keybindings.py +0 -0
  397. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/treesitter_selection.py +0 -0
  398. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/treesitter_semantic.py +0 -0
  399. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/unreachable_detector.py +0 -0
  400. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/utils.py +0 -0
  401. {rp-0.1.1376 → rp-0.1.1378}/rp/rp_ptpython/validator.py +0 -0
  402. {rp-0.1.1376 → rp-0.1.1378}/rp/ryan_vimrc.py +0 -0
  403. {rp-0.1.1376 → rp-0.1.1378}/rp/web_evaluator.py +0 -0
  404. {rp-0.1.1376 → rp-0.1.1378}/rp.egg-info/dependency_links.txt +0 -0
  405. {rp-0.1.1376 → rp-0.1.1378}/rp.egg-info/entry_points.txt +0 -0
  406. {rp-0.1.1376 → rp-0.1.1378}/rp.egg-info/requires.txt +0 -0
  407. {rp-0.1.1376 → rp-0.1.1378}/rp.egg-info/top_level.txt +0 -0
  408. {rp-0.1.1376 → rp-0.1.1378}/setup.cfg +0 -0
  409. {rp-0.1.1376 → rp-0.1.1378}/setup.py +0 -0
  410. {rp-0.1.1376 → rp-0.1.1378}/untitled.c +0 -0
  411. {rp-0.1.1376 → rp-0.1.1378}/update_module_paths.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: rp
3
- Version: 0.1.1376
3
+ Version: 0.1.1378
4
4
  Summary: Ryan's Python: IDE + Library + Tools
5
5
  Home-page: https://github.com/RyannDaGreat/rp
6
6
  Author: Ryan Burgert
@@ -11,27 +11,35 @@ import rp
11
11
 
12
12
  from .convert_pptx_videos_to_gifs import convert_pptx_videos_to_gifs
13
13
  from .google_slides_upload import upload_and_merge_pptx
14
+ from .convert_tmux import convert_tmux
15
+ from .media_to_slides import cli as media_to_slides_cli
14
16
 
15
17
 
16
18
  def print_main_help():
17
19
  print("""PowerPoint tools for video-to-GIF conversion and Google Slides upload.
18
20
 
19
21
  Commands:
20
- convert Convert PowerPoint videos to GIFs
21
- upload Upload PPTX files to Google Slides and merge
22
+ convert Convert PowerPoint videos to GIFs
23
+ convert_tmux Parallel convert using tmux (faster for multi-part)
24
+ upload Upload PPTX files to Google Slides and merge
25
+ media_to_slides Upload media (videos/images) to Google Slides
22
26
 
23
27
  Examples:
24
28
  rp run ppt convert input.pptx
25
29
  rp run ppt convert input.pptx --part-size 50MB
26
30
  rp run ppt convert input.pptx --num-parts 3 --upload
31
+ rp run ppt convert_tmux input.pptx --num-parts 3
27
32
  rp run ppt upload output_folder/
28
33
  rp run ppt upload part1.pptx part2.pptx part3.pptx
34
+ rp run ppt media_to_slides video.mp4 image.png
35
+ rp run ppt media_to_slides folder/ --captions --title "My Gallery"
29
36
 
30
37
  Run 'rp run ppt <command>' for command-specific help.""")
31
38
 
32
39
 
33
40
  from .convert_pptx_videos_to_gifs import HELP as CONVERT_HELP
34
41
  from .google_slides_upload import HELP as UPLOAD_HELP
42
+ from .convert_tmux import HELP as CONVERT_TMUX_HELP
35
43
 
36
44
 
37
45
  def cmd_convert(
@@ -121,6 +129,48 @@ def main():
121
129
  i += 1
122
130
  cmd_convert(**kwargs)
123
131
 
132
+ elif cmd == 'convert_tmux':
133
+ if not rest or rest[0] in ('-h', '--help'):
134
+ print(CONVERT_TMUX_HELP)
135
+ return
136
+ # Parse args for convert-tmux
137
+ kwargs = {
138
+ 'num_parts': 3,
139
+ 'target_size': '100MB',
140
+ 'fps': 10,
141
+ 'dpi_iters': 5,
142
+ 'dither': True,
143
+ 'output_folder': None,
144
+ }
145
+ input_pptx = None
146
+ i = 0
147
+ while i < len(rest):
148
+ arg = rest[i]
149
+ if arg.startswith('--'):
150
+ key = arg[2:].replace('-', '_')
151
+ if key == 'no_dither':
152
+ kwargs['dither'] = False
153
+ elif key == 'dither':
154
+ kwargs['dither'] = True
155
+ elif i + 1 < len(rest):
156
+ val = rest[i + 1]
157
+ if key == 'part_size':
158
+ key = 'target_size'
159
+ if key in ('fps', 'dpi_iters', 'num_parts'):
160
+ kwargs[key] = int(val)
161
+ elif key == 'output':
162
+ kwargs['output_folder'] = val
163
+ else:
164
+ kwargs[key] = val
165
+ i += 1
166
+ elif input_pptx is None:
167
+ input_pptx = arg
168
+ i += 1
169
+ if input_pptx is None:
170
+ print(CONVERT_TMUX_HELP)
171
+ return
172
+ convert_tmux(input_pptx, **kwargs)
173
+
124
174
  elif cmd == 'upload':
125
175
  if not rest or rest[0] in ('-h', '--help'):
126
176
  print(UPLOAD_HELP)
@@ -143,6 +193,13 @@ def main():
143
193
  i += 1
144
194
  cmd_upload(*paths, folder_name=folder_name, merged_name=merged_name)
145
195
 
196
+ elif cmd == 'media_to_slides':
197
+ # Use fire - it handles all the arg parsing
198
+ rp.pip_import('fire')
199
+ import fire
200
+ sys.argv = ['media_to_slides'] + rest
201
+ fire.Fire(media_to_slides_cli)
202
+
146
203
  else:
147
204
  print(f"Unknown command: {cmd}")
148
205
  print()
@@ -331,11 +331,12 @@ def convert_pptx_videos_to_gifs(
331
331
  folder_name = rp.get_file_name(output_folder)
332
332
  merged_name = rp.get_file_name(input_pptx, include_file_extension=False)
333
333
  import sys
334
+ import shlex
334
335
  cmd = '%s -m rp.libs.powerpoint upload %s --folder-name %s --merged-name %s' % (
335
- rp.shlex_quote(sys.executable),
336
- rp.shlex_quote(output_folder),
337
- rp.shlex_quote(folder_name),
338
- rp.shlex_quote(merged_name),
336
+ shlex.quote(sys.executable),
337
+ shlex.quote(output_folder),
338
+ shlex.quote(folder_name),
339
+ shlex.quote(merged_name),
339
340
  )
340
341
  rp.fansi_print("Running: " + cmd, 'cyan')
341
342
  rp.r._run_sys_command(cmd)
@@ -0,0 +1,394 @@
1
+ """
2
+ Tmux-based parallel PowerPoint converter.
3
+
4
+ Spawns multiple tmux panes to convert different slide ranges in parallel,
5
+ then merges the uploaded presentations.
6
+
7
+ Usage:
8
+ python -m rp.libs.powerpoint convert-tmux input.pptx --num-parts 3
9
+ """
10
+
11
+ import os
12
+ import sys
13
+ import json
14
+ import time
15
+ import tempfile
16
+ import shlex
17
+
18
+ import rp
19
+
20
+
21
+ def get_slide_partitions(input_pptx: str, num_parts: int) -> list[tuple[int, int]]:
22
+ """
23
+ Analyze the PPTX and return slide ranges for each part.
24
+ Returns list of (start, end) tuples (1-indexed, inclusive).
25
+
26
+ For now, just splits evenly by slide count. Could be enhanced
27
+ to weight by video content later.
28
+ """
29
+ from .convert_pptx_videos_to_gifs import _count_slides
30
+
31
+ with tempfile.TemporaryDirectory() as tmpdir:
32
+ # Extract pptx
33
+ work_dir = os.path.join(tmpdir, 'work')
34
+ rp.extract_zip_file(input_pptx, work_dir)
35
+
36
+ total_slides = _count_slides(work_dir)
37
+
38
+ if total_slides == 0:
39
+ raise ValueError("No slides found in presentation")
40
+
41
+ # Split evenly
42
+ partitions = []
43
+ per_part = max(1, total_slides // num_parts)
44
+ for i in range(num_parts):
45
+ start = i * per_part + 1
46
+ if i == num_parts - 1:
47
+ end = total_slides
48
+ else:
49
+ end = (i + 1) * per_part
50
+ if start <= total_slides:
51
+ partitions.append((start, end))
52
+
53
+ return partitions
54
+
55
+
56
+ def run_worker(
57
+ input_pptx: str,
58
+ output_pptx: str,
59
+ slide_range: str,
60
+ part_num: int,
61
+ signal_dir: str,
62
+ target_size: str = '100MB',
63
+ fps: int = 10,
64
+ dpi_iters: int = 5,
65
+ dither: bool = True,
66
+ ):
67
+ """
68
+ Worker process: converts a slide range and uploads, then signals completion.
69
+ This runs in a tmux pane.
70
+ """
71
+ import rp
72
+ from .convert_pptx_videos_to_gifs import convert_pptx_videos_to_gifs, _filter_pptx_to_slides, _delete_unused_media
73
+ from . import google_slides_upload as gsu
74
+
75
+ signal_file = os.path.join(signal_dir, f'part_{part_num}.json')
76
+
77
+ try:
78
+ rp.fansi_print(f"Part {part_num}: Converting slides {slide_range}", 'cyan', 'bold')
79
+
80
+ # Parse slide range (e.g., "1-5" -> start=1, end=5)
81
+ start, end = map(int, slide_range.split('-'))
82
+
83
+ # Convert - returns input_pptx if no videos to convert
84
+ result_path = convert_pptx_videos_to_gifs(
85
+ input_pptx=input_pptx,
86
+ output_pptx=output_pptx,
87
+ target_size=target_size,
88
+ fps=fps,
89
+ dpi_iters=dpi_iters,
90
+ dither=dither,
91
+ slides=slide_range,
92
+ num_parts=1, # Single output per worker
93
+ upload=False, # We'll upload separately
94
+ )
95
+
96
+ # convert_pptx_videos_to_gifs with slides param only processes videos on those slides
97
+ # but keeps all slides in output. We need to filter to just our slide range.
98
+ if os.path.exists(output_pptx):
99
+ rp.fansi_print(f"Part {part_num}: Filtering to slides {start}-{end}...", 'cyan')
100
+ with tempfile.TemporaryDirectory() as tmpdir:
101
+ work_dir = os.path.join(tmpdir, 'work')
102
+ rp.extract_zip_file(output_pptx, work_dir)
103
+ _filter_pptx_to_slides(work_dir, start, end)
104
+ _delete_unused_media(work_dir)
105
+ # Recreate output with filtered slides
106
+ rp.make_zip_file_from_folder(work_dir, output_pptx)
107
+ else:
108
+ # No videos converted, extract just the slide range from input
109
+ rp.fansi_print(f"Part {part_num}: No videos in range, extracting slides...", 'yellow')
110
+ with tempfile.TemporaryDirectory() as tmpdir:
111
+ work_dir = os.path.join(tmpdir, 'work')
112
+ rp.extract_zip_file(input_pptx, work_dir)
113
+ _filter_pptx_to_slides(work_dir, start, end)
114
+ _delete_unused_media(work_dir)
115
+ # Create output pptx
116
+ os.makedirs(os.path.dirname(output_pptx), exist_ok=True)
117
+ rp.make_zip_file_from_folder(work_dir, output_pptx)
118
+ rp.fansi_print(f"Part {part_num}: Created {output_pptx}", 'cyan')
119
+
120
+ rp.fansi_print(f"Part {part_num}: Uploading...", 'cyan', 'bold')
121
+
122
+ # Upload
123
+ creds = gsu.get_credentials()
124
+ from googleapiclient.discovery import build
125
+ drive_service = build('drive', 'v3', credentials=creds)
126
+
127
+ result = gsu.upload_pptx_as_slides(drive_service, output_pptx, None, None)
128
+
129
+ rp.fansi_print(f"Part {part_num}: Done! {result['url']}", 'green', 'bold')
130
+
131
+ # Signal completion
132
+ with open(signal_file, 'w') as f:
133
+ json.dump({'status': 'success', 'result': result}, f)
134
+
135
+ except Exception as e:
136
+ rp.fansi_print(f"Part {part_num}: ERROR: {e}", 'red', 'bold')
137
+ with open(signal_file, 'w') as f:
138
+ json.dump({'status': 'error', 'error': str(e)}, f)
139
+ raise
140
+
141
+
142
+ def run_orchestrator(
143
+ input_pptx: str,
144
+ num_parts: int,
145
+ signal_dir: str,
146
+ folder_name: str,
147
+ merged_name: str,
148
+ ):
149
+ """
150
+ Orchestrator process: waits for all workers, then merges.
151
+ """
152
+ import rp
153
+ from . import google_slides_upload as gsu
154
+
155
+ rp.fansi_print("Orchestrator: Waiting for all parts to complete...", 'cyan', 'bold')
156
+
157
+ # Wait for all signal files
158
+ results = []
159
+ while len(results) < num_parts:
160
+ for i in range(1, num_parts + 1):
161
+ signal_file = os.path.join(signal_dir, f'part_{i}.json')
162
+ if os.path.exists(signal_file) and i not in [r.get('part') for r in results]:
163
+ with open(signal_file) as f:
164
+ data = json.load(f)
165
+ data['part'] = i
166
+ results.append(data)
167
+ if data['status'] == 'success':
168
+ rp.fansi_print(f"Orchestrator: Part {i} completed", 'green')
169
+ else:
170
+ rp.fansi_print(f"Orchestrator: Part {i} FAILED: {data.get('error')}", 'red')
171
+ time.sleep(1)
172
+
173
+ # Check for errors
174
+ errors = [r for r in results if r['status'] == 'error']
175
+ if errors:
176
+ rp.fansi_print(f"Orchestrator: {len(errors)} part(s) failed!", 'red', 'bold')
177
+ return
178
+
179
+ # Sort by part number and get presentation IDs
180
+ results.sort(key=lambda r: r['part'])
181
+ presentation_ids = [r['result']['id'] for r in results]
182
+
183
+ rp.fansi_print(f"\nOrchestrator: Merging {len(presentation_ids)} presentations...", 'cyan', 'bold')
184
+
185
+ # Get credentials and merge
186
+ creds = gsu.get_credentials()
187
+ from googleapiclient.discovery import build
188
+ drive_service = build('drive', 'v3', credentials=creds)
189
+
190
+ # Create folder
191
+ folder_id = gsu.create_folder(drive_service, folder_name)
192
+ folder_url = f"https://drive.google.com/drive/folders/{folder_id}"
193
+ rp.fansi_print(f" Folder: {folder_url}", 'white')
194
+
195
+ # Move parts to folder
196
+ for r in results:
197
+ drive_service.files().update(
198
+ fileId=r['result']['id'],
199
+ addParents=folder_id,
200
+ fields='id'
201
+ ).execute()
202
+
203
+ # Merge
204
+ merged = gsu.merge_presentations_via_webapp(presentation_ids, merged_name)
205
+
206
+ # Move merged to folder
207
+ drive_service.files().update(
208
+ fileId=merged['presentationId'],
209
+ addParents=folder_id,
210
+ fields='id'
211
+ ).execute()
212
+
213
+ # Set permissions
214
+ public_url = gsu.make_public(drive_service, merged['presentationId'])
215
+ merged_url = f"https://docs.google.com/presentation/d/{merged['presentationId']}/edit"
216
+
217
+ rp.fansi_print("\n" + "="*60, 'green')
218
+ rp.fansi_print("SUCCESS!", 'green', 'bold')
219
+ rp.fansi_print(f" Folder: {folder_url}", 'green')
220
+ rp.fansi_print(f" Total slides: {merged['slideCount']}", 'green')
221
+ if public_url:
222
+ rp.fansi_print(f" Shareable link: {public_url}", 'green', 'bold')
223
+ else:
224
+ rp.fansi_print(f" Edit link: {merged_url}", 'green')
225
+
226
+
227
+ def convert_tmux(
228
+ input_pptx: str,
229
+ num_parts: int = 3,
230
+ target_size: str = '100MB',
231
+ fps: int = 10,
232
+ dpi_iters: int = 5,
233
+ dither: bool = True,
234
+ output_folder: str = None,
235
+ ):
236
+ """
237
+ Main entry point: sets up tmux session with parallel workers.
238
+ """
239
+ if not rp.running_in_tmux():
240
+ rp.fansi_print("This command must be run inside tmux!", 'red', 'bold')
241
+ rp.fansi_print("Start tmux first, then run this command.", 'yellow')
242
+ return
243
+
244
+ input_pptx = os.path.abspath(input_pptx)
245
+ base_name = rp.get_file_name(input_pptx, include_file_extension=False)
246
+
247
+ if output_folder is None:
248
+ output_folder = f"{base_name}_gifs_{target_size}"
249
+ output_folder = os.path.abspath(output_folder)
250
+ os.makedirs(output_folder, exist_ok=True)
251
+
252
+ # Create signal directory
253
+ signal_dir = tempfile.mkdtemp(prefix='ppt_convert_')
254
+
255
+ # Get slide partitions
256
+ rp.fansi_print(f"Analyzing {input_pptx}...", 'cyan')
257
+ partitions = get_slide_partitions(input_pptx, num_parts)
258
+
259
+ # Actual number of parts may be less than requested
260
+ actual_parts = len(partitions)
261
+ if actual_parts < num_parts:
262
+ rp.fansi_print(f"Note: Only {actual_parts} parts possible (fewer slides than requested)", 'yellow')
263
+
264
+ rp.fansi_print(f"Partition plan ({actual_parts} parts):", 'cyan')
265
+ for i, (start, end) in enumerate(partitions, 1):
266
+ rp.fansi_print(f" Part {i}: slides {start}-{end}", 'white')
267
+
268
+ # Build commands for each worker pane
269
+ python = sys.executable
270
+ worker_cmds = []
271
+ for i, (start, end) in enumerate(partitions, 1):
272
+ output_pptx = os.path.join(output_folder, f"{base_name}_part{i}.pptx")
273
+ slide_range = f"{start}-{end}"
274
+
275
+ cmd = (
276
+ f"{shlex.quote(python)} -c \""
277
+ f"import sys; sys.path.insert(0, '/opt/homebrew/lib/python3.10/site-packages'); "
278
+ f"from rp.libs.powerpoint.convert_tmux import run_worker; "
279
+ f"run_worker("
280
+ f"{repr(input_pptx)}, "
281
+ f"{repr(output_pptx)}, "
282
+ f"{repr(slide_range)}, "
283
+ f"{i}, "
284
+ f"{repr(signal_dir)}, "
285
+ f"{repr(target_size)}, "
286
+ f"{fps}, "
287
+ f"{dpi_iters}, "
288
+ f"{dither}"
289
+ f")\""
290
+ )
291
+ worker_cmds.append(cmd)
292
+
293
+ # Build orchestrator command
294
+ orchestrator_cmd = (
295
+ f"{shlex.quote(python)} -c \""
296
+ f"import sys; sys.path.insert(0, '/opt/homebrew/lib/python3.10/site-packages'); "
297
+ f"from rp.libs.powerpoint.convert_tmux import run_orchestrator; "
298
+ f"run_orchestrator("
299
+ f"{repr(input_pptx)}, "
300
+ f"{actual_parts}, "
301
+ f"{repr(signal_dir)}, "
302
+ f"{repr(output_folder)}, "
303
+ f"{repr(base_name)}"
304
+ f")\""
305
+ )
306
+
307
+ # Create tmux session with workers in one window, orchestrator in another
308
+ session_name = rp.tmux_get_unique_session_name(f"ppt_{os.getpid()}")
309
+
310
+ # Window 1: All workers as panes
311
+ # Window 2: Orchestrator
312
+ windows = {
313
+ "workers": worker_cmds, # Multiple panes
314
+ "orchestrator": orchestrator_cmd, # Single pane
315
+ }
316
+
317
+ yaml = rp.tmuxp_create_session_yaml(windows, session_name=session_name)
318
+ rp.fansi_print(f"\nLaunching tmux session in background: {session_name}", 'green', 'bold')
319
+ rp.tmuxp_launch_session_from_yaml(yaml, attach=False)
320
+
321
+ rp.fansi_print(f"\nTo view progress:", 'cyan')
322
+ rp.fansi_print(f" tmux switch-client -t {session_name}", 'white')
323
+ rp.fansi_print(f"Or attach from another terminal:", 'cyan')
324
+ rp.fansi_print(f" tmux attach -t {session_name}", 'white')
325
+
326
+
327
+ HELP = """Parallel PowerPoint converter using tmux.
328
+
329
+ Usage:
330
+ rp run ppt convert-tmux <input_pptx> [options]
331
+
332
+ Spawns multiple tmux panes to convert slide ranges in parallel,
333
+ uploads each part, then merges them into one presentation.
334
+
335
+ Options:
336
+ --num-parts Number of parallel workers (default: 3)
337
+ --part-size Target file size per part (default: 100MB)
338
+ --fps Max GIF frames per second (default: 10)
339
+ --dpi-iters Binary search iterations for size (default: 5)
340
+ --dither Enable dithering (default: True)
341
+ --no-dither Disable dithering
342
+ --output Output folder name
343
+
344
+ Examples:
345
+ rp run ppt convert-tmux presentation.pptx
346
+ rp run ppt convert-tmux presentation.pptx --num-parts 5
347
+ rp run ppt convert-tmux presentation.pptx --part-size 50MB --fps 8
348
+ """
349
+
350
+
351
+ if __name__ == '__main__':
352
+ import sys
353
+ args = sys.argv[1:]
354
+
355
+ if not args or args[0] in ('-h', '--help'):
356
+ print(HELP)
357
+ sys.exit(0)
358
+
359
+ # Simple arg parsing
360
+ input_pptx = args[0]
361
+ kwargs = {
362
+ 'num_parts': 3,
363
+ 'target_size': '100MB',
364
+ 'fps': 10,
365
+ 'dpi_iters': 5,
366
+ 'dither': True,
367
+ 'output_folder': None,
368
+ }
369
+
370
+ i = 1
371
+ while i < len(args):
372
+ arg = args[i]
373
+ if arg == '--num-parts' and i + 1 < len(args):
374
+ kwargs['num_parts'] = int(args[i + 1])
375
+ i += 1
376
+ elif arg == '--part-size' and i + 1 < len(args):
377
+ kwargs['target_size'] = args[i + 1]
378
+ i += 1
379
+ elif arg == '--fps' and i + 1 < len(args):
380
+ kwargs['fps'] = int(args[i + 1])
381
+ i += 1
382
+ elif arg == '--dpi-iters' and i + 1 < len(args):
383
+ kwargs['dpi_iters'] = int(args[i + 1])
384
+ i += 1
385
+ elif arg == '--dither':
386
+ kwargs['dither'] = True
387
+ elif arg == '--no-dither':
388
+ kwargs['dither'] = False
389
+ elif arg == '--output' and i + 1 < len(args):
390
+ kwargs['output_folder'] = args[i + 1]
391
+ i += 1
392
+ i += 1
393
+
394
+ convert_tmux(input_pptx, **kwargs)