tensorneko-util 0.3.20__tar.gz → 0.3.22__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 (140) hide show
  1. tensorneko_util-0.3.22/LICENSE +21 -0
  2. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/PKG-INFO +21 -7
  3. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/README.md +38 -10
  4. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/setup.py +1 -0
  5. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/setup_util.py +1 -0
  6. tensorneko_util-0.3.22/src/tensorneko_util/io/audio/audio_writer.pyi +29 -0
  7. tensorneko_util-0.3.22/src/tensorneko_util/io/video/video_reader.pyi +38 -0
  8. tensorneko_util-0.3.22/src/tensorneko_util/io/video/video_writer.pyi +33 -0
  9. tensorneko_util-0.3.22/src/tensorneko_util/msg/__init__.py +9 -0
  10. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/msg/gotify.py +2 -2
  11. tensorneko_util-0.3.22/src/tensorneko_util/msg/postgres.py +66 -0
  12. tensorneko_util-0.3.22/src/tensorneko_util/preprocess/crop.pyi +15 -0
  13. tensorneko_util-0.3.22/src/tensorneko_util/util/dispatched_misc.pyi +23 -0
  14. tensorneko_util-0.3.22/src/tensorneko_util/util/ref.pyi +38 -0
  15. tensorneko_util-0.3.22/src/tensorneko_util/version.txt +1 -0
  16. tensorneko_util-0.3.22/src/tensorneko_util/visualization/watcher/web/dist/assets/index.5195781e.js +188 -0
  17. tensorneko_util-0.3.22/src/tensorneko_util/visualization/watcher/web/dist/assets/index.9d369ef8.css +5 -0
  18. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/watcher/web/dist/index.html +2 -2
  19. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util.egg-info/PKG-INFO +22 -8
  20. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util.egg-info/SOURCES.txt +10 -2
  21. tensorneko_util-0.3.20/src/tensorneko_util/msg/__init__.py +0 -3
  22. tensorneko_util-0.3.20/src/tensorneko_util/version.txt +0 -1
  23. tensorneko_util-0.3.20/src/tensorneko_util/visualization/watcher/web/dist/assets/index.7498e230.js +0 -188
  24. tensorneko_util-0.3.20/src/tensorneko_util/visualization/watcher/web/dist/assets/index.cf95019d.css +0 -5
  25. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/setup.cfg +0 -0
  26. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/__init__.py +0 -0
  27. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/_rich.py +0 -0
  28. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/backend/__init__.py +0 -0
  29. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/backend/audio_lib.py +0 -0
  30. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/backend/blocking.py +0 -0
  31. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/backend/parallel.py +0 -0
  32. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/backend/tqdm.py +0 -0
  33. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/backend/visual_lib.py +0 -0
  34. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/debug/__init__.py +0 -0
  35. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/debug/logger.py +0 -0
  36. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/debug/parser.py +0 -0
  37. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/__init__.py +0 -0
  38. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/_default_backends.py +0 -0
  39. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/_path_conversion.py +0 -0
  40. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/audio/__init__.py +0 -0
  41. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/audio/audio_data.py +0 -0
  42. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/audio/audio_reader.py +0 -0
  43. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/audio/audio_writer.py +0 -0
  44. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/hdf5/__init__.py +0 -0
  45. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/hdf5/hdf5_reader.py +0 -0
  46. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/hdf5/hdf5_writer.py +0 -0
  47. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/image/__init__.py +0 -0
  48. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/image/image_reader.py +0 -0
  49. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/image/image_writer.py +0 -0
  50. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/json/__init__.py +0 -0
  51. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/json/json_data.py +0 -0
  52. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/json/json_reader.py +0 -0
  53. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/json/json_writer.py +0 -0
  54. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/matlab/__init__.py +0 -0
  55. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/matlab/mat_reader.py +0 -0
  56. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/matlab/mat_writer.py +0 -0
  57. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/npy/__init__.py +0 -0
  58. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/npy/npy_reader.py +0 -0
  59. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/npy/npy_writer.py +0 -0
  60. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/pickle/__init__.py +0 -0
  61. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/pickle/pickle_reader.py +0 -0
  62. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/pickle/pickle_writer.py +0 -0
  63. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/reader.py +0 -0
  64. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/text/__init__.py +0 -0
  65. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/text/text_reader.py +0 -0
  66. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/text/text_writer.py +0 -0
  67. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/toml/__init__.py +0 -0
  68. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/toml/toml_reader.py +0 -0
  69. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/toml/toml_writer.py +0 -0
  70. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/video/__init__.py +0 -0
  71. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/video/video_data.py +0 -0
  72. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/video/video_reader.py +0 -0
  73. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/video/video_writer.py +0 -0
  74. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/writer.py +0 -0
  75. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/yaml/__init__.py +0 -0
  76. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/yaml/yaml_reader.py +0 -0
  77. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/io/yaml/yaml_writer.py +0 -0
  78. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/notebook/__init__.py +0 -0
  79. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/notebook/animation.py +0 -0
  80. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/notebook/display.py +0 -0
  81. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/__init__.py +0 -0
  82. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/crop.py +0 -0
  83. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/face_detector/__init__.py +0 -0
  84. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/face_detector/_utils.py +0 -0
  85. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/face_detector/abstract_face_detector.py +0 -0
  86. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/face_detector/anime_face_detector.py +0 -0
  87. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/face_detector/facexzoo_face_detector.py +0 -0
  88. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/face_detector/opencv_face_detector.py +0 -0
  89. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/ffmpeg.py +0 -0
  90. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/image.py +0 -0
  91. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/preprocess/video.py +0 -0
  92. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/__init__.py +0 -0
  93. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/average_meter.py +0 -0
  94. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/bimap.py +0 -0
  95. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/dispatched_misc.py +0 -0
  96. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/dispatcher.py +0 -0
  97. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/downloader.py +0 -0
  98. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/eventbus/__init__.py +0 -0
  99. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/eventbus/bus.py +0 -0
  100. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/eventbus/decorator.py +0 -0
  101. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/eventbus/event.py +0 -0
  102. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/__init__.py +0 -0
  103. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/args.py +0 -0
  104. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/array/__init__.py +0 -0
  105. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/array/abstract_seq.py +0 -0
  106. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/array/seq.py +0 -0
  107. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/array/stream.py +0 -0
  108. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/func.py +0 -0
  109. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/monad/__init__.py +0 -0
  110. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/monad/eval.py +0 -0
  111. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/monad/monad.py +0 -0
  112. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/monad/option.py +0 -0
  113. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/fp/underscore.py +0 -0
  114. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/misc.py +0 -0
  115. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/multi_layer_indexer.py +0 -0
  116. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/ref.py +0 -0
  117. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/registry.py +0 -0
  118. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/server.py +0 -0
  119. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/singleton.py +0 -0
  120. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/timer.py +0 -0
  121. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/type.py +0 -0
  122. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/util/window_merger.py +0 -0
  123. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/__init__.py +0 -0
  124. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/color.py +0 -0
  125. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/image_browser/__init__.py +0 -0
  126. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/image_browser/server.py +0 -0
  127. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/image_browser/web/index.html +0 -0
  128. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/matplotlib.py +0 -0
  129. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/multi_plots.py +0 -0
  130. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/seaborn.py +0 -0
  131. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/tensorboard.py +0 -0
  132. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/watcher/__init__.py +0 -0
  133. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/watcher/component.py +0 -0
  134. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/watcher/server.py +0 -0
  135. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util/visualization/watcher/view.py +0 -0
  136. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util.egg-info/dependency_links.txt +0 -0
  137. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util.egg-info/requires.txt +1 -1
  138. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/src/tensorneko_util.egg-info/top_level.txt +0 -0
  139. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/test/test_library_info.py +0 -0
  140. {tensorneko_util-0.3.20 → tensorneko_util-0.3.22}/test/test_version.py +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 ControlNet
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,18 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: tensorneko_util
3
- Version: 0.3.20
3
+ Version: 0.3.22
4
4
  Summary: The Utils for Library TensorNeko.
5
5
  Home-page: https://github.com/ControlNet/tensorneko
6
6
  Author: ControlNet
7
7
  Author-email: smczx@hotmail.com
8
- License: UNKNOWN
9
8
  Project-URL: Bug Tracker, https://github.com/ControlNet/tensorneko/issues
10
9
  Project-URL: Source Code, https://github.com/ControlNet/tensorneko
11
- Description:
12
- The independent util library for TensorNeko. This library doesn't require PyTorch as a dependency.
13
-
14
10
  Keywords: deep learning,pytorch,AI,data processing
15
- Platform: UNKNOWN
16
11
  Classifier: Programming Language :: Python :: 3
17
12
  Classifier: Programming Language :: Python :: 3.7
18
13
  Classifier: Programming Language :: Python :: 3.8
@@ -20,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.9
20
15
  Classifier: Programming Language :: Python :: 3.10
21
16
  Classifier: Programming Language :: Python :: 3.11
22
17
  Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
23
19
  Classifier: License :: OSI Approved :: MIT License
24
20
  Classifier: Operating System :: OS Independent
25
21
  Classifier: Intended Audience :: Developers
@@ -27,3 +23,21 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
27
23
  Classifier: Topic :: Utilities
28
24
  Requires-Python: >=3.7
29
25
  Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: numpy>=1.20.1
28
+ Requires-Dist: einops>=0.3.0
29
+ Dynamic: author
30
+ Dynamic: author-email
31
+ Dynamic: classifier
32
+ Dynamic: description
33
+ Dynamic: description-content-type
34
+ Dynamic: home-page
35
+ Dynamic: keywords
36
+ Dynamic: license-file
37
+ Dynamic: project-url
38
+ Dynamic: requires-dist
39
+ Dynamic: requires-python
40
+ Dynamic: summary
41
+
42
+
43
+ The independent util library for TensorNeko. This library doesn't require PyTorch as a dependency.
@@ -32,7 +32,7 @@ pip install tensorneko # for PyTorch only
32
32
  pip install tensorneko[lightning] # for PyTorch and Lightning
33
33
  ```
34
34
 
35
- To use the library without PyTorch and PyTorch Lightning, you can install the util library (support Python 3.7 ~ 3.12 with limited features) with following command.
35
+ To use the library without PyTorch and PyTorch Lightning, you can install the util library (support Python 3.7 ~ 3.13 with limited features) with following command.
36
36
  ```shell
37
37
  pip install tensorneko_util
38
38
  ```
@@ -49,7 +49,7 @@ pipx install tensorneko_tool # or `pip install tensorneko_tool`
49
49
 
50
50
  Then you can use the CLI tools `tensorneko` in the terminal.
51
51
 
52
- ## Neko Layers, Modules and Architectures
52
+ ## Layers, Modules and Architectures
53
53
 
54
54
  Build an MLP with linear layers. The activation and normalization will be placed in the hidden layers.
55
55
 
@@ -138,7 +138,7 @@ print(f(torch.rand(16)).shape)
138
138
  # torch.Size([1])
139
139
  ```
140
140
 
141
- ## Neko IO
141
+ ## IO
142
142
 
143
143
  Easily load and save different modal data.
144
144
 
@@ -188,7 +188,7 @@ neko.io.write.json("path/to/json.json", json_obj)
188
188
  Besides, the read/write for `mat` and `pickle` files is also supported.
189
189
 
190
190
 
191
- ## Neko preprocessing
191
+ ## Preprocessing
192
192
 
193
193
  ```python
194
194
  import tensorneko as neko
@@ -215,7 +215,7 @@ if `ffmpeg` is available, you can use below ffmpeg wrappers.
215
215
  - `resample_video_fps`
216
216
  - `mp32wav`
217
217
 
218
- ## Neko Visualization
218
+ ## Visualization
219
219
 
220
220
  ### Variable Web Watcher
221
221
  Start a web server to watch the variable status when the program (e.g. training, inference, data preprocessing) is running.
@@ -366,14 +366,14 @@ trainer = neko.NekoTrainer(log_every_n_steps=100, gpus=1, logger=model.name, pre
366
366
  trainer.fit(model, dm)
367
367
  ```
368
368
 
369
- ## Neko Callbacks
369
+ ## Callbacks
370
370
 
371
371
  Some simple but useful pytorch-lightning callbacks are provided.
372
372
 
373
373
  - `DisplayMetricsCallback`
374
374
  - `EarlyStoppingLR`: Early stop training when learning rate reaches threshold.
375
375
 
376
- ## Neko Notebook Helpers
376
+ ## Notebook Helpers
377
377
  Here are some helper functions to better interact with Jupyter Notebook.
378
378
  ```python
379
379
  import tensorneko as neko
@@ -385,7 +385,7 @@ neko.notebook.display.audio("path/to/audio.wav")
385
385
  neko.notebook.display.code("path/to/code.java")
386
386
  ```
387
387
 
388
- ## Neko Debug Tools
388
+ ## Debug Tools
389
389
 
390
390
  Get the default values from `ArgumentParser` args. It's convenient to use this in the notebook.
391
391
  ```python
@@ -401,7 +401,7 @@ print(args.integers) # [1, 2, 3]
401
401
  print(args.accumulate) # <function sum at ...>
402
402
  ```
403
403
 
404
- ## Neko Evaluation
404
+ ## Evaluation
405
405
 
406
406
  Some metrics function for evaluation are provided.
407
407
 
@@ -412,8 +412,36 @@ Some metrics function for evaluation are provided.
412
412
  - `ssim_video`
413
413
  - `ssim_image`
414
414
 
415
+ ## Message (Access to other services)
415
416
 
416
- ## Neko Utilities
417
+ ### Gotify
418
+
419
+ Send a message to the Gotify server.
420
+
421
+ The title, URL and APP_TOKEN is the environment variable `GOTIFY_TITLE`, `GOTIFY_URL` and `GOTIFY_TOKEN`, or overwritten
422
+ in the function arguments.
423
+
424
+ ```python
425
+ from tensorneko.msg import gotify
426
+ gotify.push("This is a test message", "<URL>", "<APP_TOKEN>")
427
+ # then the message will be sent to the Gotify server.
428
+ # title = "<HOST_NAME>", message = "This is a test message", priority = 0
429
+ ```
430
+
431
+ ### Postgres
432
+
433
+ Require the `psycopg` package. Provide one single function to execute one SQL query with a temp connection.
434
+
435
+ The database URL is the environment variable `DB_URL`, or overwritten in the function arguments.
436
+ ```python
437
+ from tensorneko.msg import postgres
438
+ result = postgres.execute("<SQL>", "<DB_URL>")
439
+ # also async version is provided
440
+ result = await postgres.execute_async("<SQL>", "<DB_URL>")
441
+ ```
442
+
443
+
444
+ ## Utilities
417
445
 
418
446
  ### Misc functions
419
447
 
@@ -51,6 +51,7 @@ setuptools.setup(
51
51
  "Programming Language :: Python :: 3.10",
52
52
  "Programming Language :: Python :: 3.11",
53
53
  "Programming Language :: Python :: 3.12",
54
+ "Programming Language :: Python :: 3.13",
54
55
  "License :: OSI Approved :: MIT License",
55
56
  "Operating System :: OS Independent",
56
57
  "Intended Audience :: Developers",
@@ -47,6 +47,7 @@ setuptools.setup(
47
47
  "Programming Language :: Python :: 3.10",
48
48
  "Programming Language :: Python :: 3.11",
49
49
  "Programming Language :: Python :: 3.12",
50
+ "Programming Language :: Python :: 3.13",
50
51
  "License :: OSI Approved :: MIT License",
51
52
  "Operating System :: OS Independent",
52
53
  "Intended Audience :: Developers",
@@ -0,0 +1,29 @@
1
+ from typing import overload, Union
2
+ from pathlib import Path
3
+
4
+ from .audio_data import AudioData
5
+ from ...backend.audio_lib import AudioLib
6
+ from ...util.type import T_ARRAY
7
+
8
+
9
+ class AudioWriter:
10
+
11
+ @classmethod
12
+ @overload
13
+ def to(cls, path: Union[str, Path], audio: AudioData, channel_first: bool = True, backend: AudioLib = None
14
+ ) -> None: ...
15
+
16
+ @classmethod
17
+ @overload
18
+ def to(cls, path: Union[str, Path], audio: T_ARRAY, sample_rate: int = 16000, channel_first: bool = True,
19
+ backend: AudioLib = None
20
+ ): ...
21
+
22
+ @overload
23
+ def __new__(cls, path: Union[str, Path], audio: AudioData, channel_first: bool = True, backend: AudioLib = None
24
+ ) -> None: ...
25
+
26
+ @overload
27
+ def __new__(cls, path: Union[str, Path], audio: T_ARRAY, sample_rate: int = 16000, channel_first: bool = True,
28
+ backend: AudioLib = None
29
+ ): ...
@@ -0,0 +1,38 @@
1
+ from typing import Optional, overload, Union
2
+ from pathlib import Path
3
+
4
+ from numpy import ndarray
5
+
6
+ from .video_data import VideoData
7
+ from ...backend.visual_lib import VisualLib
8
+
9
+
10
+ class VideoReader:
11
+
12
+ @classmethod
13
+ def of(cls, path: Union[str, Path], channel_first: bool = True, backend: Optional[VisualLib] = None) -> VideoData:
14
+ ...
15
+
16
+ @classmethod
17
+ def with_indexes(cls, path: Union[str, Path], indexes: ndarray,
18
+ channel_first: bool = True, backend: Optional[VisualLib] = None
19
+ ) -> VideoData:
20
+ ...
21
+
22
+ @classmethod
23
+ @overload
24
+ def with_range(cls, path: Union[str, Path], start: int, end: int, step: int, channel_first: bool = True,
25
+ backend: Optional[VisualLib] = None
26
+ ) -> VideoData:
27
+ ...
28
+
29
+ @classmethod
30
+ @overload
31
+ def with_range(cls, path: Union[str, Path], end: int, channel_first: bool = True,
32
+ backend: Optional[VisualLib] = None
33
+ ) -> VideoData:
34
+ ...
35
+
36
+ def __new__(cls, path: Union[str, Path], channel_first: bool = True, backend: Optional[VisualLib] = None
37
+ ) -> VideoData:
38
+ ...
@@ -0,0 +1,33 @@
1
+ from typing import overload, Optional, Union
2
+ from pathlib import Path
3
+
4
+ from .video_data import VideoData
5
+ from ...backend.visual_lib import VisualLib
6
+ from ...util.type import T_ARRAY
7
+
8
+
9
+ class VideoWriter:
10
+
11
+ @classmethod
12
+ @overload
13
+ def to(cls, path: Union[str, Path], video: VideoData, audio_codec: str = None, channel_first: bool = False,
14
+ backend: VisualLib = None
15
+ ) -> None: ...
16
+
17
+ @classmethod
18
+ @overload
19
+ def to(cls, path: Union[str, Path], video: T_ARRAY, video_fps: float, audio: T_ARRAY = None,
20
+ audio_fps: Optional[int] = None, audio_codec: str = None, channel_first: bool = False,
21
+ backend: VisualLib = None
22
+ ) -> None: ...
23
+
24
+ @overload
25
+ def __new__(cls, path: Union[str, Path], video: VideoData, audio_codec: str = None, channel_first: bool = False,
26
+ backend: VisualLib = None
27
+ ) -> None: ...
28
+
29
+ @overload
30
+ def __new__(cls, path: Union[str, Path], video: T_ARRAY, video_fps: float, audio: T_ARRAY = None,
31
+ audio_fps: Optional[int] = None, audio_codec: str = None, channel_first: bool = False,
32
+ backend: VisualLib = None
33
+ ) -> None: ...
@@ -0,0 +1,9 @@
1
+ from . import gotify
2
+
3
+ __all__ = ["gotify"]
4
+
5
+ try:
6
+ from . import postgres
7
+ __all__.append("postgres")
8
+ except ImportError:
9
+ pass
@@ -6,7 +6,7 @@ from typing import Optional
6
6
  from urllib.error import HTTPError
7
7
 
8
8
 
9
- def push_gotify(message: str, url: Optional[str] = None, token: Optional[str] = None, title: Optional[str] = None,
9
+ def push(message: str, url: Optional[str] = None, token: Optional[str] = None, title: Optional[str] = None,
10
10
  priority: int = 0
11
11
  ):
12
12
  """
@@ -21,7 +21,7 @@ def push_gotify(message: str, url: Optional[str] = None, token: Optional[str] =
21
21
 
22
22
  Examples::
23
23
 
24
- push_gotify("This is a test message", "<URL>", "<APP_TOKEN>")
24
+ push("This is a test message", "<URL>", "<APP_TOKEN>")
25
25
  # then the message will be sent to the Gotify server.
26
26
  # title = "<HOST_NAME>", message = "This is a test message", priority = 0
27
27
 
@@ -0,0 +1,66 @@
1
+ import os
2
+ from typing import Any, List, Optional, Tuple
3
+
4
+ import psycopg
5
+
6
+
7
+ def execute(sql: str, db_url: Optional[str] = None) -> Optional[List[Tuple[Any, ...]]]:
8
+ """
9
+ Execute a PostgreSQL database SQL query.
10
+
11
+ Args:
12
+ sql (``str``): The SQL query to be executed.
13
+ db_url (``str``, optional): The URL of the PostgreSQL database. The default value is environment variable DB_URL.
14
+
15
+ Returns:
16
+ ``list[tuple] | None``: The result of the query. If the query is not a SELECT query, then it will return None.
17
+
18
+ Examples::
19
+
20
+ result = execute("SELECT * FROM table_name", "postgresql://user:password@localhost:5432/db_name")
21
+ # then the result will be a list of tuples.
22
+
23
+ execute("INSERT INTO table_name (column1, column2) VALUES (value1, value2)", "postgresql://user:password@localhost:5432/db_name")
24
+ # then the execute will be executed and committed.
25
+ """
26
+ db_url = db_url or os.environ.get("DB_URL")
27
+
28
+ with psycopg.Connection.connect(db_url) as conn:
29
+ with conn.cursor() as cur:
30
+ cur.execute(sql)
31
+ conn.commit()
32
+ if cur.description:
33
+ return cur.fetchall()
34
+ return None
35
+
36
+
37
+ async def execute_async(sql: str, db_url: Optional[str] = None) -> Optional[List[Tuple[Any, ...]]]:
38
+ """
39
+ Execute a PostgreSQL database SQL query with async.
40
+
41
+ Args:
42
+ sql (``str``): The SQL query to be executed.
43
+ db_url (``str``, optional): The URL of the PostgreSQL database. The default value is environment variable DB_URL.
44
+
45
+ Returns:
46
+ ``list[tuple] | None``: The result of the query. If the query is not a SELECT query, then it will return None.
47
+
48
+ Examples::
49
+
50
+ result = await execute_async("SELECT * FROM table_name", "postgresql://user:password@localhost:5432/db_name")
51
+ # then the result will be a list of tuples.
52
+
53
+ await execute_async("INSERT INTO table_name (column1, column2) VALUES (value1, value2)")
54
+ # then the execute will be executed
55
+ """
56
+ db_url = db_url or os.environ.get("DB_URL")
57
+
58
+ if db_url is None:
59
+ raise ValueError("DB_URL environment variable is not set.")
60
+
61
+ async with await psycopg.AsyncConnection.connect(db_url, autocommit=True) as conn:
62
+ async with conn.cursor() as cur:
63
+ await cur.execute(sql)
64
+ if cur.description:
65
+ return await cur.fetchall()
66
+ return None
@@ -0,0 +1,15 @@
1
+ from typing import overload, Union
2
+
3
+ from numpy import ndarray
4
+
5
+
6
+ @overload
7
+ def crop_with_padding(image: ndarray, x1: int, x2: int, y1: int, y2: int, pad_value: Union[int, float] = 0.,
8
+ batch: bool = False
9
+ ) -> ndarray: ...
10
+
11
+
12
+ @overload
13
+ def crop_with_padding(image: ndarray, x1: ndarray, x2: ndarray, y1: ndarray, y2: ndarray,
14
+ pad_value: Union[int, float] = 0., batch: bool = False
15
+ ) -> ndarray: ...
@@ -0,0 +1,23 @@
1
+ from typing import overload, List
2
+
3
+ from numpy import ndarray
4
+
5
+
6
+ @overload
7
+ def sparse2binary(x: ndarray, length: int = None) -> ndarray:
8
+ ...
9
+
10
+
11
+ @overload
12
+ def sparse2binary(x: List[int], length: int = None) -> List[int]:
13
+ ...
14
+
15
+
16
+ @overload
17
+ def binary2sparse(x: ndarray) -> ndarray:
18
+ ...
19
+
20
+
21
+ @overload
22
+ def binary2sparse(x: List[int]) -> List[int]:
23
+ ...
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Generic, overload
4
+
5
+ from .type import P
6
+
7
+
8
+ class Ref(Generic[P]):
9
+ value: P
10
+ @overload
11
+ def __new__(cls, value: str) -> StringRef: ...
12
+ @overload
13
+ def __new__(cls, value: int) -> IntRef: ...
14
+ @overload
15
+ def __new__(cls, value: float) -> FloatRef: ...
16
+ @overload
17
+ def __new__(cls, value: bool) -> BoolRef: ...
18
+
19
+ class StringRef(Ref[str]):
20
+ def __str__(self) -> str: ...
21
+
22
+ class IntRef(Ref[int]):
23
+ def __int__(self) -> int: ...
24
+
25
+ class FloatRef(Ref[float]):
26
+ def __float__(self) -> float: ...
27
+
28
+ class BoolRef(Ref[bool]):
29
+ def __bool__(self) -> bool: ...
30
+
31
+ @overload
32
+ def ref(value: str) -> StringRef: ...
33
+ @overload
34
+ def ref(value: int) -> IntRef: ...
35
+ @overload
36
+ def ref(value: float) -> FloatRef: ...
37
+ @overload
38
+ def ref(value: bool) -> BoolRef: ...