radixly 0.1.0.dev0__tar.gz → 1.0.0__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 (618) hide show
  1. radixly-1.0.0/LICENSE +21 -0
  2. radixly-1.0.0/MANIFEST.in +15 -0
  3. radixly-1.0.0/PKG-INFO +139 -0
  4. radixly-1.0.0/README.md +110 -0
  5. radixly-1.0.0/pyproject.toml +163 -0
  6. radixly-1.0.0/src/radixly/__init__.py +34 -0
  7. {radixly-0.1.0.dev0 → radixly-1.0.0}/src/radixly/_about.py +1 -1
  8. radixly-1.0.0/src/radixly/_codec.py +110 -0
  9. radixly-1.0.0/src/radixly/_common/block.c +158 -0
  10. radixly-1.0.0/src/radixly/_common/block.h +28 -0
  11. radixly-1.0.0/src/radixly/_common/errors.c +248 -0
  12. radixly-1.0.0/src/radixly/_common/errors.h +30 -0
  13. radixly-1.0.0/src/radixly/_common/internal.h +39 -0
  14. radixly-1.0.0/src/radixly/_core.c +96 -0
  15. radixly-1.0.0/src/radixly/_core.pyi +30 -0
  16. radixly-1.0.0/src/radixly/base32768/__init__.py +24 -0
  17. radixly-1.0.0/src/radixly/base32768/_api.py +107 -0
  18. radixly-1.0.0/src/radixly/base32768/_tables.h +2387 -0
  19. radixly-1.0.0/src/radixly/base32768/base32768.c +317 -0
  20. radixly-1.0.0/src/radixly/base32768/base32768.h +34 -0
  21. radixly-1.0.0/src/radixly/braille/__init__.py +24 -0
  22. radixly-1.0.0/src/radixly/braille/_api.py +95 -0
  23. radixly-1.0.0/src/radixly/braille/braille.c +107 -0
  24. radixly-1.0.0/src/radixly/braille/braille.h +32 -0
  25. radixly-1.0.0/src/radixly/hexagram/__init__.py +24 -0
  26. radixly-1.0.0/src/radixly/hexagram/_api.py +107 -0
  27. radixly-1.0.0/src/radixly/hexagram/hexagram.c +109 -0
  28. radixly-1.0.0/src/radixly/hexagram/hexagram.h +32 -0
  29. radixly-1.0.0/src/radixly/py.typed +0 -0
  30. radixly-1.0.0/src/radixly/uro14/__init__.py +24 -0
  31. radixly-1.0.0/src/radixly/uro14/_api.py +112 -0
  32. radixly-1.0.0/src/radixly/uro14/uro14.c +244 -0
  33. radixly-1.0.0/src/radixly/uro14/uro14.h +32 -0
  34. radixly-1.0.0/src/radixly.egg-info/PKG-INFO +139 -0
  35. radixly-1.0.0/src/radixly.egg-info/SOURCES.txt +608 -0
  36. radixly-1.0.0/tests/__init__.py +20 -0
  37. radixly-1.0.0/tests/base32768/__init__.py +20 -0
  38. radixly-1.0.0/tests/base32768/conftest.py +48 -0
  39. radixly-1.0.0/tests/base32768/error_cases.py +70 -0
  40. radixly-1.0.0/tests/base32768/test_api.py +90 -0
  41. radixly-1.0.0/tests/base32768/test_core.py +260 -0
  42. radixly-1.0.0/tests/base32768/test_fuzz.py +122 -0
  43. radixly-1.0.0/tests/base32768/test_reference.py +183 -0
  44. radixly-1.0.0/tests/bench/__init__.py +20 -0
  45. radixly-1.0.0/tests/bench/factories.py +76 -0
  46. radixly-1.0.0/tests/bench/test_baseline.py +118 -0
  47. radixly-1.0.0/tests/bench/test_ci.py +110 -0
  48. radixly-1.0.0/tests/bench/test_cli.py +283 -0
  49. radixly-1.0.0/tests/bench/test_graphs.py +103 -0
  50. radixly-1.0.0/tests/bench/test_markdown.py +118 -0
  51. radixly-1.0.0/tests/bench/test_model.py +150 -0
  52. radixly-1.0.0/tests/bench/test_registry.py +94 -0
  53. radixly-1.0.0/tests/block/__init__.py +20 -0
  54. radixly-1.0.0/tests/block/error_cases.py +79 -0
  55. radixly-1.0.0/tests/block/test_api.py +151 -0
  56. radixly-1.0.0/tests/block/test_core.py +172 -0
  57. radixly-1.0.0/tests/block/test_reference.py +111 -0
  58. radixly-1.0.0/tests/payloads.py +45 -0
  59. radixly-1.0.0/tests/reference/__init__.py +20 -0
  60. radixly-1.0.0/tests/reference/base32768.py +152 -0
  61. radixly-1.0.0/tests/reference/block.py +90 -0
  62. radixly-1.0.0/tests/reference/braille.py +39 -0
  63. radixly-1.0.0/tests/reference/errors.py +56 -0
  64. radixly-1.0.0/tests/reference/hexagram.py +39 -0
  65. radixly-1.0.0/tests/reference/shared.py +28 -0
  66. radixly-1.0.0/tests/reference/uro14.py +90 -0
  67. radixly-1.0.0/tests/test_api.py +78 -0
  68. radixly-1.0.0/tests/test_import.py +44 -0
  69. radixly-1.0.0/tests/uro14/__init__.py +20 -0
  70. radixly-1.0.0/tests/uro14/test_api.py +97 -0
  71. radixly-1.0.0/tests/uro14/test_core.py +134 -0
  72. radixly-1.0.0/tests/uro14/test_reference.py +125 -0
  73. radixly-0.1.0.dev0/LICENSE → radixly-1.0.0/tests/vectors/base32768/LICENSE.txt +1 -1
  74. radixly-1.0.0/tests/vectors/base32768/README.md +27 -0
  75. radixly-1.0.0/tests/vectors/base32768/bad/bad-padding.txt +1 -0
  76. radixly-1.0.0/tests/vectors/base32768/bad/bad0.txt +1 -0
  77. radixly-1.0.0/tests/vectors/base32768/bad/not-base32768-char.txt +1 -0
  78. radixly-1.0.0/tests/vectors/base32768/pairs/caseDemo.bin +0 -0
  79. radixly-1.0.0/tests/vectors/base32768/pairs/caseDemo.txt +1 -0
  80. radixly-1.0.0/tests/vectors/base32768/pairs/caseEmpty.bin +0 -0
  81. radixly-1.0.0/tests/vectors/base32768/pairs/caseEmpty.txt +0 -0
  82. radixly-1.0.0/tests/vectors/base32768/pairs/every-byte.bin +0 -0
  83. radixly-1.0.0/tests/vectors/base32768/pairs/every-byte.txt +1 -0
  84. radixly-1.0.0/tests/vectors/base32768/pairs/every-pair-of-bytes.bin +0 -0
  85. radixly-1.0.0/tests/vectors/base32768/pairs/every-pair-of-bytes.txt +1 -0
  86. radixly-1.0.0/tests/vectors/base32768/pairs/hatetris-wr-rle.bin +0 -0
  87. radixly-1.0.0/tests/vectors/base32768/pairs/hatetris-wr-rle.txt +1 -0
  88. radixly-1.0.0/tests/vectors/base32768/pairs/hatetris-wr-rle2.bin +1 -0
  89. radixly-1.0.0/tests/vectors/base32768/pairs/hatetris-wr-rle2.txt +1 -0
  90. radixly-1.0.0/tests/vectors/base32768/pairs/hatetris-wr.bin +0 -0
  91. radixly-1.0.0/tests/vectors/base32768/pairs/hatetris-wr.txt +1 -0
  92. radixly-1.0.0/tests/vectors/base32768/pairs/lena_std.tif.bin +0 -0
  93. radixly-1.0.0/tests/vectors/base32768/pairs/lena_std.tif.txt +1 -0
  94. radixly-1.0.0/tests/vectors/base32768/pairs/seven-bit-final.bin +0 -0
  95. radixly-1.0.0/tests/vectors/base32768/pairs/seven-bit-final.txt +1 -0
  96. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case0.bin +0 -0
  97. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case0.txt +1 -0
  98. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case1.bin +1 -0
  99. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case1.txt +1 -0
  100. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case10.bin +1 -0
  101. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case10.txt +1 -0
  102. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case100.bin +1 -0
  103. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case100.txt +1 -0
  104. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case101.bin +1 -0
  105. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case101.txt +1 -0
  106. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case102.bin +1 -0
  107. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case102.txt +1 -0
  108. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case103.bin +1 -0
  109. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case103.txt +1 -0
  110. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case104.bin +1 -0
  111. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case104.txt +1 -0
  112. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case105.bin +1 -0
  113. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case105.txt +1 -0
  114. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case106.bin +1 -0
  115. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case106.txt +1 -0
  116. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case107.bin +1 -0
  117. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case107.txt +1 -0
  118. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case108.bin +1 -0
  119. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case108.txt +1 -0
  120. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case109.bin +1 -0
  121. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case109.txt +1 -0
  122. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case11.bin +1 -0
  123. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case11.txt +1 -0
  124. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case110.bin +1 -0
  125. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case110.txt +1 -0
  126. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case111.bin +1 -0
  127. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case111.txt +1 -0
  128. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case112.bin +1 -0
  129. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case112.txt +1 -0
  130. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case113.bin +1 -0
  131. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case113.txt +1 -0
  132. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case114.bin +1 -0
  133. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case114.txt +1 -0
  134. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case115.bin +1 -0
  135. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case115.txt +1 -0
  136. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case116.bin +1 -0
  137. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case116.txt +1 -0
  138. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case117.bin +1 -0
  139. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case117.txt +1 -0
  140. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case118.bin +1 -0
  141. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case118.txt +1 -0
  142. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case119.bin +1 -0
  143. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case119.txt +1 -0
  144. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case12.bin +1 -0
  145. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case12.txt +1 -0
  146. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case120.bin +1 -0
  147. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case120.txt +1 -0
  148. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case121.bin +1 -0
  149. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case121.txt +1 -0
  150. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case122.bin +1 -0
  151. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case122.txt +1 -0
  152. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case123.bin +1 -0
  153. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case123.txt +1 -0
  154. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case124.bin +1 -0
  155. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case124.txt +1 -0
  156. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case125.bin +1 -0
  157. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case125.txt +1 -0
  158. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case126.bin +1 -0
  159. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case126.txt +1 -0
  160. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case127.bin +1 -0
  161. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case127.txt +1 -0
  162. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case128.bin +1 -0
  163. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case128.txt +1 -0
  164. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case129.bin +1 -0
  165. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case129.txt +1 -0
  166. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case13.bin +1 -0
  167. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case13.txt +1 -0
  168. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case130.bin +1 -0
  169. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case130.txt +1 -0
  170. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case131.bin +1 -0
  171. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case131.txt +1 -0
  172. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case132.bin +1 -0
  173. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case132.txt +1 -0
  174. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case133.bin +1 -0
  175. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case133.txt +1 -0
  176. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case134.bin +1 -0
  177. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case134.txt +1 -0
  178. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case135.bin +1 -0
  179. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case135.txt +1 -0
  180. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case136.bin +1 -0
  181. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case136.txt +1 -0
  182. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case137.bin +1 -0
  183. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case137.txt +1 -0
  184. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case138.bin +1 -0
  185. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case138.txt +1 -0
  186. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case139.bin +1 -0
  187. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case139.txt +1 -0
  188. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case14.bin +1 -0
  189. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case14.txt +1 -0
  190. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case140.bin +1 -0
  191. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case140.txt +1 -0
  192. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case141.bin +1 -0
  193. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case141.txt +1 -0
  194. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case142.bin +1 -0
  195. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case142.txt +1 -0
  196. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case143.bin +1 -0
  197. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case143.txt +1 -0
  198. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case144.bin +1 -0
  199. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case144.txt +1 -0
  200. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case145.bin +1 -0
  201. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case145.txt +1 -0
  202. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case146.bin +1 -0
  203. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case146.txt +1 -0
  204. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case147.bin +1 -0
  205. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case147.txt +1 -0
  206. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case148.bin +1 -0
  207. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case148.txt +1 -0
  208. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case149.bin +1 -0
  209. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case149.txt +1 -0
  210. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case15.bin +1 -0
  211. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case15.txt +1 -0
  212. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case150.bin +1 -0
  213. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case150.txt +1 -0
  214. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case151.bin +1 -0
  215. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case151.txt +1 -0
  216. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case152.bin +1 -0
  217. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case152.txt +1 -0
  218. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case153.bin +1 -0
  219. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case153.txt +1 -0
  220. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case154.bin +1 -0
  221. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case154.txt +1 -0
  222. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case155.bin +1 -0
  223. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case155.txt +1 -0
  224. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case156.bin +1 -0
  225. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case156.txt +1 -0
  226. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case157.bin +1 -0
  227. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case157.txt +1 -0
  228. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case158.bin +1 -0
  229. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case158.txt +1 -0
  230. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case159.bin +1 -0
  231. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case159.txt +1 -0
  232. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case16.bin +1 -0
  233. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case16.txt +1 -0
  234. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case160.bin +1 -0
  235. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case160.txt +1 -0
  236. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case161.bin +1 -0
  237. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case161.txt +1 -0
  238. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case162.bin +1 -0
  239. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case162.txt +1 -0
  240. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case163.bin +1 -0
  241. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case163.txt +1 -0
  242. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case164.bin +1 -0
  243. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case164.txt +1 -0
  244. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case165.bin +1 -0
  245. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case165.txt +1 -0
  246. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case166.bin +1 -0
  247. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case166.txt +1 -0
  248. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case167.bin +1 -0
  249. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case167.txt +1 -0
  250. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case168.bin +1 -0
  251. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case168.txt +1 -0
  252. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case169.bin +1 -0
  253. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case169.txt +1 -0
  254. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case17.bin +1 -0
  255. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case17.txt +1 -0
  256. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case170.bin +1 -0
  257. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case170.txt +1 -0
  258. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case171.bin +1 -0
  259. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case171.txt +1 -0
  260. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case172.bin +1 -0
  261. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case172.txt +1 -0
  262. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case173.bin +1 -0
  263. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case173.txt +1 -0
  264. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case174.bin +1 -0
  265. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case174.txt +1 -0
  266. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case175.bin +1 -0
  267. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case175.txt +1 -0
  268. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case176.bin +1 -0
  269. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case176.txt +1 -0
  270. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case177.bin +1 -0
  271. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case177.txt +1 -0
  272. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case178.bin +1 -0
  273. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case178.txt +1 -0
  274. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case179.bin +1 -0
  275. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case179.txt +1 -0
  276. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case18.bin +1 -0
  277. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case18.txt +1 -0
  278. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case180.bin +1 -0
  279. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case180.txt +1 -0
  280. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case181.bin +1 -0
  281. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case181.txt +1 -0
  282. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case182.bin +1 -0
  283. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case182.txt +1 -0
  284. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case183.bin +1 -0
  285. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case183.txt +1 -0
  286. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case184.bin +1 -0
  287. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case184.txt +1 -0
  288. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case185.bin +1 -0
  289. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case185.txt +1 -0
  290. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case186.bin +1 -0
  291. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case186.txt +1 -0
  292. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case187.bin +1 -0
  293. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case187.txt +1 -0
  294. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case188.bin +1 -0
  295. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case188.txt +1 -0
  296. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case189.bin +1 -0
  297. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case189.txt +1 -0
  298. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case19.bin +1 -0
  299. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case19.txt +1 -0
  300. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case190.bin +1 -0
  301. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case190.txt +1 -0
  302. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case191.bin +1 -0
  303. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case191.txt +1 -0
  304. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case192.bin +1 -0
  305. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case192.txt +1 -0
  306. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case193.bin +1 -0
  307. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case193.txt +1 -0
  308. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case194.bin +1 -0
  309. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case194.txt +1 -0
  310. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case195.bin +1 -0
  311. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case195.txt +1 -0
  312. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case196.bin +1 -0
  313. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case196.txt +1 -0
  314. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case197.bin +1 -0
  315. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case197.txt +1 -0
  316. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case198.bin +1 -0
  317. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case198.txt +1 -0
  318. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case199.bin +1 -0
  319. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case199.txt +1 -0
  320. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case2.bin +1 -0
  321. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case2.txt +1 -0
  322. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case20.bin +1 -0
  323. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case20.txt +1 -0
  324. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case200.bin +1 -0
  325. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case200.txt +1 -0
  326. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case201.bin +1 -0
  327. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case201.txt +1 -0
  328. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case202.bin +1 -0
  329. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case202.txt +1 -0
  330. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case203.bin +1 -0
  331. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case203.txt +1 -0
  332. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case204.bin +1 -0
  333. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case204.txt +1 -0
  334. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case205.bin +1 -0
  335. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case205.txt +1 -0
  336. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case206.bin +1 -0
  337. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case206.txt +1 -0
  338. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case207.bin +1 -0
  339. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case207.txt +1 -0
  340. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case208.bin +1 -0
  341. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case208.txt +1 -0
  342. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case209.bin +1 -0
  343. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case209.txt +1 -0
  344. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case21.bin +1 -0
  345. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case21.txt +1 -0
  346. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case210.bin +1 -0
  347. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case210.txt +1 -0
  348. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case211.bin +1 -0
  349. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case211.txt +1 -0
  350. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case212.bin +1 -0
  351. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case212.txt +1 -0
  352. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case213.bin +1 -0
  353. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case213.txt +1 -0
  354. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case214.bin +1 -0
  355. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case214.txt +1 -0
  356. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case215.bin +1 -0
  357. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case215.txt +1 -0
  358. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case216.bin +1 -0
  359. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case216.txt +1 -0
  360. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case217.bin +1 -0
  361. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case217.txt +1 -0
  362. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case218.bin +1 -0
  363. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case218.txt +1 -0
  364. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case219.bin +1 -0
  365. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case219.txt +1 -0
  366. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case22.bin +1 -0
  367. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case22.txt +1 -0
  368. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case220.bin +1 -0
  369. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case220.txt +1 -0
  370. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case221.bin +1 -0
  371. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case221.txt +1 -0
  372. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case222.bin +1 -0
  373. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case222.txt +1 -0
  374. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case223.bin +1 -0
  375. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case223.txt +1 -0
  376. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case224.bin +1 -0
  377. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case224.txt +1 -0
  378. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case225.bin +1 -0
  379. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case225.txt +1 -0
  380. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case226.bin +1 -0
  381. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case226.txt +1 -0
  382. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case227.bin +1 -0
  383. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case227.txt +1 -0
  384. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case228.bin +1 -0
  385. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case228.txt +1 -0
  386. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case229.bin +1 -0
  387. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case229.txt +1 -0
  388. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case23.bin +1 -0
  389. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case23.txt +1 -0
  390. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case230.bin +1 -0
  391. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case230.txt +1 -0
  392. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case231.bin +1 -0
  393. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case231.txt +1 -0
  394. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case232.bin +1 -0
  395. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case232.txt +1 -0
  396. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case233.bin +1 -0
  397. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case233.txt +1 -0
  398. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case234.bin +1 -0
  399. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case234.txt +1 -0
  400. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case235.bin +1 -0
  401. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case235.txt +1 -0
  402. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case236.bin +1 -0
  403. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case236.txt +1 -0
  404. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case237.bin +1 -0
  405. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case237.txt +1 -0
  406. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case238.bin +1 -0
  407. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case238.txt +1 -0
  408. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case239.bin +1 -0
  409. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case239.txt +1 -0
  410. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case24.bin +1 -0
  411. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case24.txt +1 -0
  412. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case240.bin +1 -0
  413. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case240.txt +1 -0
  414. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case241.bin +1 -0
  415. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case241.txt +1 -0
  416. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case242.bin +1 -0
  417. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case242.txt +1 -0
  418. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case243.bin +1 -0
  419. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case243.txt +1 -0
  420. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case244.bin +1 -0
  421. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case244.txt +1 -0
  422. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case245.bin +1 -0
  423. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case245.txt +1 -0
  424. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case246.bin +1 -0
  425. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case246.txt +1 -0
  426. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case247.bin +1 -0
  427. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case247.txt +1 -0
  428. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case248.bin +1 -0
  429. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case248.txt +1 -0
  430. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case249.bin +1 -0
  431. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case249.txt +1 -0
  432. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case25.bin +1 -0
  433. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case25.txt +1 -0
  434. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case250.bin +1 -0
  435. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case250.txt +1 -0
  436. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case251.bin +1 -0
  437. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case251.txt +1 -0
  438. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case252.bin +1 -0
  439. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case252.txt +1 -0
  440. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case253.bin +1 -0
  441. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case253.txt +1 -0
  442. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case254.bin +1 -0
  443. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case254.txt +1 -0
  444. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case255.bin +1 -0
  445. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case255.txt +1 -0
  446. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case26.bin +1 -0
  447. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case26.txt +1 -0
  448. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case27.bin +1 -0
  449. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case27.txt +1 -0
  450. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case28.bin +1 -0
  451. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case28.txt +1 -0
  452. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case29.bin +1 -0
  453. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case29.txt +1 -0
  454. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case3.bin +1 -0
  455. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case3.txt +1 -0
  456. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case30.bin +1 -0
  457. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case30.txt +1 -0
  458. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case31.bin +1 -0
  459. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case31.txt +1 -0
  460. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case32.bin +1 -0
  461. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case32.txt +1 -0
  462. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case33.bin +1 -0
  463. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case33.txt +1 -0
  464. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case34.bin +1 -0
  465. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case34.txt +1 -0
  466. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case35.bin +1 -0
  467. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case35.txt +1 -0
  468. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case36.bin +1 -0
  469. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case36.txt +1 -0
  470. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case37.bin +1 -0
  471. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case37.txt +1 -0
  472. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case38.bin +1 -0
  473. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case38.txt +1 -0
  474. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case39.bin +1 -0
  475. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case39.txt +1 -0
  476. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case4.bin +1 -0
  477. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case4.txt +1 -0
  478. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case40.bin +1 -0
  479. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case40.txt +1 -0
  480. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case41.bin +1 -0
  481. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case41.txt +1 -0
  482. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case42.bin +1 -0
  483. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case42.txt +1 -0
  484. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case43.bin +1 -0
  485. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case43.txt +1 -0
  486. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case44.bin +1 -0
  487. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case44.txt +1 -0
  488. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case45.bin +1 -0
  489. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case45.txt +1 -0
  490. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case46.bin +1 -0
  491. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case46.txt +1 -0
  492. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case47.bin +1 -0
  493. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case47.txt +1 -0
  494. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case48.bin +1 -0
  495. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case48.txt +1 -0
  496. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case49.bin +1 -0
  497. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case49.txt +1 -0
  498. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case5.bin +1 -0
  499. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case5.txt +1 -0
  500. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case50.bin +1 -0
  501. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case50.txt +1 -0
  502. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case51.bin +1 -0
  503. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case51.txt +1 -0
  504. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case52.bin +1 -0
  505. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case52.txt +1 -0
  506. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case53.bin +1 -0
  507. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case53.txt +1 -0
  508. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case54.bin +1 -0
  509. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case54.txt +1 -0
  510. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case55.bin +1 -0
  511. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case55.txt +1 -0
  512. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case56.bin +1 -0
  513. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case56.txt +1 -0
  514. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case57.bin +1 -0
  515. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case57.txt +1 -0
  516. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case58.bin +1 -0
  517. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case58.txt +1 -0
  518. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case59.bin +1 -0
  519. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case59.txt +1 -0
  520. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case6.bin +1 -0
  521. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case6.txt +1 -0
  522. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case60.bin +1 -0
  523. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case60.txt +1 -0
  524. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case61.bin +1 -0
  525. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case61.txt +1 -0
  526. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case62.bin +1 -0
  527. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case62.txt +1 -0
  528. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case63.bin +1 -0
  529. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case63.txt +1 -0
  530. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case64.bin +1 -0
  531. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case64.txt +1 -0
  532. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case65.bin +1 -0
  533. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case65.txt +1 -0
  534. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case66.bin +1 -0
  535. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case66.txt +1 -0
  536. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case67.bin +1 -0
  537. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case67.txt +1 -0
  538. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case68.bin +1 -0
  539. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case68.txt +1 -0
  540. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case69.bin +1 -0
  541. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case69.txt +1 -0
  542. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case7.bin +1 -0
  543. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case7.txt +1 -0
  544. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case70.bin +1 -0
  545. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case70.txt +1 -0
  546. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case71.bin +1 -0
  547. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case71.txt +1 -0
  548. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case72.bin +1 -0
  549. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case72.txt +1 -0
  550. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case73.bin +1 -0
  551. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case73.txt +1 -0
  552. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case74.bin +1 -0
  553. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case74.txt +1 -0
  554. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case75.bin +1 -0
  555. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case75.txt +1 -0
  556. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case76.bin +1 -0
  557. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case76.txt +1 -0
  558. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case77.bin +1 -0
  559. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case77.txt +1 -0
  560. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case78.bin +1 -0
  561. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case78.txt +1 -0
  562. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case79.bin +1 -0
  563. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case79.txt +1 -0
  564. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case8.bin +1 -0
  565. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case8.txt +1 -0
  566. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case80.bin +1 -0
  567. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case80.txt +1 -0
  568. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case81.bin +1 -0
  569. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case81.txt +1 -0
  570. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case82.bin +1 -0
  571. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case82.txt +1 -0
  572. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case83.bin +1 -0
  573. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case83.txt +1 -0
  574. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case84.bin +1 -0
  575. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case84.txt +1 -0
  576. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case85.bin +1 -0
  577. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case85.txt +1 -0
  578. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case86.bin +1 -0
  579. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case86.txt +1 -0
  580. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case87.bin +1 -0
  581. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case87.txt +1 -0
  582. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case88.bin +1 -0
  583. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case88.txt +1 -0
  584. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case89.bin +1 -0
  585. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case89.txt +1 -0
  586. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case9.bin +1 -0
  587. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case9.txt +1 -0
  588. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case90.bin +1 -0
  589. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case90.txt +1 -0
  590. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case91.bin +1 -0
  591. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case91.txt +1 -0
  592. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case92.bin +1 -0
  593. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case92.txt +1 -0
  594. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case93.bin +1 -0
  595. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case93.txt +1 -0
  596. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case94.bin +1 -0
  597. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case94.txt +1 -0
  598. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case95.bin +1 -0
  599. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case95.txt +1 -0
  600. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case96.bin +1 -0
  601. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case96.txt +1 -0
  602. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case97.bin +1 -0
  603. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case97.txt +1 -0
  604. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case98.bin +1 -0
  605. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case98.txt +1 -0
  606. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case99.bin +1 -0
  607. radixly-1.0.0/tests/vectors/base32768/pairs/single-bytes/case99.txt +1 -0
  608. radixly-0.1.0.dev0/PKG-INFO +0 -17
  609. radixly-0.1.0.dev0/README.md +0 -1
  610. radixly-0.1.0.dev0/pyproject.toml +0 -51
  611. radixly-0.1.0.dev0/src/radixly/__init__.py +0 -7
  612. radixly-0.1.0.dev0/src/radixly/_core.c +0 -20
  613. radixly-0.1.0.dev0/src/radixly.egg-info/PKG-INFO +0 -17
  614. radixly-0.1.0.dev0/src/radixly.egg-info/SOURCES.txt +0 -11
  615. radixly-0.1.0.dev0/tests/test_import.py +0 -15
  616. {radixly-0.1.0.dev0 → radixly-1.0.0}/setup.cfg +0 -0
  617. {radixly-0.1.0.dev0 → radixly-1.0.0}/src/radixly.egg-info/dependency_links.txt +0 -0
  618. {radixly-0.1.0.dev0 → radixly-1.0.0}/src/radixly.egg-info/top_level.txt +0 -0
radixly-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026-present rayakame
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.
@@ -0,0 +1,15 @@
1
+ # Ship the complete test suite in the sdist: the reference oracle and the
2
+ # conformance vectors are what let a from-source builder (distro packager,
3
+ # --no-binary install) actually validate the compiled extension. Without
4
+ # graft, setuptools ships the top-level test files but not reference/ or
5
+ # vectors/, leaving an uncollectable suite.
6
+ graft tests
7
+ # Headers are not auto-collected the way ext-modules .c sources are; without
8
+ # this line an sdist cannot compile.
9
+ recursive-include src/radixly *.h
10
+ # Stubs are source too; py.typed is the PEP 561 marker (both also ship in
11
+ # wheels via package-data — decided M9).
12
+ recursive-include src/radixly *.pyi
13
+ include src/radixly/py.typed
14
+ prune changes
15
+ global-exclude __pycache__ *.py[cod]
radixly-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,139 @@
1
+ Metadata-Version: 2.4
2
+ Name: radixly
3
+ Version: 1.0.0
4
+ Summary: Fast binary-to-text codecs for Python: base32768, uro14, braille and hexagram in C
5
+ Author-email: rayakame <github.android206@passmail.net>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://radixly.rayakame.dev
8
+ Project-URL: Documentation, https://radixly.rayakame.dev/en/latest/
9
+ Project-URL: Source, https://github.com/rayakame/radixly
10
+ Project-URL: Issues, https://github.com/rayakame/radixly/issues
11
+ Keywords: base32768,binary-to-text,codec,encoding,unicode,c-extension
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: C
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Programming Language :: Python :: Implementation :: CPython
22
+ Classifier: Topic :: Software Development :: Libraries
23
+ Classifier: Topic :: Text Processing
24
+ Classifier: Typing :: Typed
25
+ Requires-Python: >=3.11
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Dynamic: license-file
29
+
30
+ <p align="center">
31
+ <a href="https://radixly.rayakame.dev/en/latest/">
32
+ <picture>
33
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rayakame/radixly/main/docs/_static/logo-wordmark-dark.svg">
34
+ <img src="https://raw.githubusercontent.com/rayakame/radixly/main/docs/_static/logo-wordmark-light.svg" alt="radixly" width="420">
35
+ </picture>
36
+ </a>
37
+ </p>
38
+
39
+ <p align="center">
40
+ <a href="https://pypi.org/project/radixly/"><img src="https://img.shields.io/pypi/v/radixly" alt="PyPI"></a>
41
+ <a href="https://radixly.rayakame.dev/en/latest/"><img src="https://readthedocs.org/projects/radixly/badge/?version=latest" alt="Documentation"></a>
42
+ <a href="https://github.com/rayakame/radixly/actions/workflows/ci.yml"><img src="https://github.com/rayakame/radixly/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
43
+ <a href="https://github.com/rayakame/radixly/actions/workflows/wheels.yml"><img src="https://github.com/rayakame/radixly/actions/workflows/wheels.yml/badge.svg" alt="Wheels"></a>
44
+ <a href="https://pypi.org/project/radixly/"><img src="https://img.shields.io/pypi/pyversions/radixly" alt="Python versions"></a>
45
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT license"></a>
46
+ </p>
47
+
48
+ Fast binary-to-text codecs for Python. Every codec is a hand-written C
49
+ extension behind one small interface: `encode`, `decode` and the size math to
50
+ plan around a length limit. Decoding is strict, the package has no
51
+ dependencies and ships type stubs.
52
+
53
+ Documentation: <https://radixly.rayakame.dev/en/latest/>
54
+
55
+ ## Install
56
+
57
+ ```bash
58
+ pip install radixly
59
+ ```
60
+
61
+ Releases ship wheels for CPython 3.11 to 3.14 on Linux, macOS and Windows.
62
+ There is no pure-Python fallback; anywhere else pip builds from source and
63
+ needs a C compiler.
64
+
65
+ ## Usage
66
+
67
+ ```python
68
+ import radixly
69
+
70
+ text = radixly.base32768.encode(b"hello") # str, 3 characters
71
+ radixly.base32768.decode(text) # b'hello'
72
+
73
+ radixly.base32768.max_bytes(100) # 187: largest payload that fits 100 characters
74
+
75
+ try:
76
+ radixly.base32768.decode("hello")
77
+ except radixly.DecodeError as error: # a ValueError with the position
78
+ error.position # 0
79
+ ```
80
+
81
+ Every codec module has the same four functions; `radixly.get_codec(name)` and
82
+ `radixly.CODECS` pick one at runtime.
83
+
84
+ ## Codecs
85
+
86
+ | codec | bits per char | 100 chars hold | alphabet | catches truncation |
87
+ |---|---|---|---|---|
88
+ | [base32768](https://radixly.rayakame.dev/en/latest/codecs/base32768.html) | 15 | 187 bytes | qntm's 32,768 BMP code points | no |
89
+ | [uro14](https://radixly.rayakame.dev/en/latest/codecs/uro14.html) | 14 | 173 bytes | one CJK block, plus a length prefix | below 16,384 bytes |
90
+ | [braille](https://radixly.rayakame.dev/en/latest/codecs/braille.html) | 8 | 100 bytes | 256 Braille patterns | no |
91
+ | [hexagram](https://radixly.rayakame.dev/en/latest/codecs/hexagram.html) | 6 | 75 bytes | 64 Yijing hexagrams | partly |
92
+
93
+ [Choosing a codec](https://radixly.rayakame.dev/en/latest/guides/choosing-a-codec.html) walks through the
94
+ trade-offs.
95
+
96
+ ## Performance
97
+
98
+ Generated from the committed record run by the benchmark suite in
99
+ [`benchmarks/`](benchmarks/); no number here is typed by hand. Sizes below
100
+ 64 KiB show per-call latency, larger ones sustained throughput; "vs reference"
101
+ is the speedup over the pure-Python oracle in `tests/reference/`.
102
+
103
+ <!-- radixly-bench:begin -->
104
+ *Measured on Intel(R) Core(TM) i9-14900KF (performance governor), CachyOS, kernel 7.2.3-1-cachyos, CPython 3.13.14, gcc 16.2.1 20260810, radixly 0.1.0.dev0 @ cefe701, 2026-09-08T18:59:26+00:00.*
105
+
106
+ | codec | direction | 1 B | 200 B | 64 KiB | 1 MiB | vs reference |
107
+ |---|---|---|---|---|---|---|
108
+ | base32768 | encode | 0.019 μs | 0.114 μs | 1,963 MB/s | 1,963 MB/s | 117x at 200 B |
109
+ | base32768 | decode | 0.014 μs | 0.173 μs | 1,275 MB/s | 1,269 MB/s | 127x at 200 B |
110
+ | braille | encode | 0.019 μs | 0.168 μs | 1,397 MB/s | 1,404 MB/s | 95x at 200 B |
111
+ | braille | decode | 0.016 μs | 0.269 μs | 800 MB/s | 799 MB/s | 77x at 200 B |
112
+ | hexagram | encode | 0.019 μs | 0.201 μs | 1,137 MB/s | 1,126 MB/s | 108x at 200 B |
113
+ | hexagram | decode | 0.016 μs | 0.328 μs | 616 MB/s | 641 MB/s | 84x at 200 B |
114
+ | uro14 | encode | 0.018 μs | 0.118 μs | 2,020 MB/s | 2,007 MB/s | 122x at 200 B |
115
+ | uro14 | decode | 0.015 μs | 0.242 μs | 899 MB/s | 896 MB/s | 91x at 200 B |
116
+ <!-- radixly-bench:end -->
117
+
118
+ <picture>
119
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/throughput.dark.svg">
120
+ <img src="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/throughput.svg" alt="Sustained throughput per codec, encode and decode, 1 MiB payloads">
121
+ </picture>
122
+
123
+ <picture>
124
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/latency.dark.svg">
125
+ <img src="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/latency.svg" alt="Per-call latency per codec, encode and decode, 200 B payloads">
126
+ </picture>
127
+
128
+ Reproduce with `uv run python -m benchmarks` from the repository root.
129
+
130
+ ## Limits
131
+
132
+ - CPython only, 3.11 and later.
133
+ - No subinterpreters: on 3.12+ the import raises `ImportError` inside one.
134
+ Free-threaded builds import but switch the GIL back on. Details in
135
+ [Subinterpreters and threads](https://radixly.rayakame.dev/en/latest/guides/subinterpreters.html).
136
+
137
+ ## License
138
+
139
+ MIT, see [LICENSE](LICENSE).
@@ -0,0 +1,110 @@
1
+ <p align="center">
2
+ <a href="https://radixly.rayakame.dev/en/latest/">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rayakame/radixly/main/docs/_static/logo-wordmark-dark.svg">
5
+ <img src="https://raw.githubusercontent.com/rayakame/radixly/main/docs/_static/logo-wordmark-light.svg" alt="radixly" width="420">
6
+ </picture>
7
+ </a>
8
+ </p>
9
+
10
+ <p align="center">
11
+ <a href="https://pypi.org/project/radixly/"><img src="https://img.shields.io/pypi/v/radixly" alt="PyPI"></a>
12
+ <a href="https://radixly.rayakame.dev/en/latest/"><img src="https://readthedocs.org/projects/radixly/badge/?version=latest" alt="Documentation"></a>
13
+ <a href="https://github.com/rayakame/radixly/actions/workflows/ci.yml"><img src="https://github.com/rayakame/radixly/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
14
+ <a href="https://github.com/rayakame/radixly/actions/workflows/wheels.yml"><img src="https://github.com/rayakame/radixly/actions/workflows/wheels.yml/badge.svg" alt="Wheels"></a>
15
+ <a href="https://pypi.org/project/radixly/"><img src="https://img.shields.io/pypi/pyversions/radixly" alt="Python versions"></a>
16
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT license"></a>
17
+ </p>
18
+
19
+ Fast binary-to-text codecs for Python. Every codec is a hand-written C
20
+ extension behind one small interface: `encode`, `decode` and the size math to
21
+ plan around a length limit. Decoding is strict, the package has no
22
+ dependencies and ships type stubs.
23
+
24
+ Documentation: <https://radixly.rayakame.dev/en/latest/>
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ pip install radixly
30
+ ```
31
+
32
+ Releases ship wheels for CPython 3.11 to 3.14 on Linux, macOS and Windows.
33
+ There is no pure-Python fallback; anywhere else pip builds from source and
34
+ needs a C compiler.
35
+
36
+ ## Usage
37
+
38
+ ```python
39
+ import radixly
40
+
41
+ text = radixly.base32768.encode(b"hello") # str, 3 characters
42
+ radixly.base32768.decode(text) # b'hello'
43
+
44
+ radixly.base32768.max_bytes(100) # 187: largest payload that fits 100 characters
45
+
46
+ try:
47
+ radixly.base32768.decode("hello")
48
+ except radixly.DecodeError as error: # a ValueError with the position
49
+ error.position # 0
50
+ ```
51
+
52
+ Every codec module has the same four functions; `radixly.get_codec(name)` and
53
+ `radixly.CODECS` pick one at runtime.
54
+
55
+ ## Codecs
56
+
57
+ | codec | bits per char | 100 chars hold | alphabet | catches truncation |
58
+ |---|---|---|---|---|
59
+ | [base32768](https://radixly.rayakame.dev/en/latest/codecs/base32768.html) | 15 | 187 bytes | qntm's 32,768 BMP code points | no |
60
+ | [uro14](https://radixly.rayakame.dev/en/latest/codecs/uro14.html) | 14 | 173 bytes | one CJK block, plus a length prefix | below 16,384 bytes |
61
+ | [braille](https://radixly.rayakame.dev/en/latest/codecs/braille.html) | 8 | 100 bytes | 256 Braille patterns | no |
62
+ | [hexagram](https://radixly.rayakame.dev/en/latest/codecs/hexagram.html) | 6 | 75 bytes | 64 Yijing hexagrams | partly |
63
+
64
+ [Choosing a codec](https://radixly.rayakame.dev/en/latest/guides/choosing-a-codec.html) walks through the
65
+ trade-offs.
66
+
67
+ ## Performance
68
+
69
+ Generated from the committed record run by the benchmark suite in
70
+ [`benchmarks/`](benchmarks/); no number here is typed by hand. Sizes below
71
+ 64 KiB show per-call latency, larger ones sustained throughput; "vs reference"
72
+ is the speedup over the pure-Python oracle in `tests/reference/`.
73
+
74
+ <!-- radixly-bench:begin -->
75
+ *Measured on Intel(R) Core(TM) i9-14900KF (performance governor), CachyOS, kernel 7.2.3-1-cachyos, CPython 3.13.14, gcc 16.2.1 20260810, radixly 0.1.0.dev0 @ cefe701, 2026-09-08T18:59:26+00:00.*
76
+
77
+ | codec | direction | 1 B | 200 B | 64 KiB | 1 MiB | vs reference |
78
+ |---|---|---|---|---|---|---|
79
+ | base32768 | encode | 0.019 μs | 0.114 μs | 1,963 MB/s | 1,963 MB/s | 117x at 200 B |
80
+ | base32768 | decode | 0.014 μs | 0.173 μs | 1,275 MB/s | 1,269 MB/s | 127x at 200 B |
81
+ | braille | encode | 0.019 μs | 0.168 μs | 1,397 MB/s | 1,404 MB/s | 95x at 200 B |
82
+ | braille | decode | 0.016 μs | 0.269 μs | 800 MB/s | 799 MB/s | 77x at 200 B |
83
+ | hexagram | encode | 0.019 μs | 0.201 μs | 1,137 MB/s | 1,126 MB/s | 108x at 200 B |
84
+ | hexagram | decode | 0.016 μs | 0.328 μs | 616 MB/s | 641 MB/s | 84x at 200 B |
85
+ | uro14 | encode | 0.018 μs | 0.118 μs | 2,020 MB/s | 2,007 MB/s | 122x at 200 B |
86
+ | uro14 | decode | 0.015 μs | 0.242 μs | 899 MB/s | 896 MB/s | 91x at 200 B |
87
+ <!-- radixly-bench:end -->
88
+
89
+ <picture>
90
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/throughput.dark.svg">
91
+ <img src="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/throughput.svg" alt="Sustained throughput per codec, encode and decode, 1 MiB payloads">
92
+ </picture>
93
+
94
+ <picture>
95
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/latency.dark.svg">
96
+ <img src="https://raw.githubusercontent.com/rayakame/radixly/main/benchmarks/charts/latency.svg" alt="Per-call latency per codec, encode and decode, 200 B payloads">
97
+ </picture>
98
+
99
+ Reproduce with `uv run python -m benchmarks` from the repository root.
100
+
101
+ ## Limits
102
+
103
+ - CPython only, 3.11 and later.
104
+ - No subinterpreters: on 3.12+ the import raises `ImportError` inside one.
105
+ Free-threaded builds import but switch the GIL back on. Details in
106
+ [Subinterpreters and threads](https://radixly.rayakame.dev/en/latest/guides/subinterpreters.html).
107
+
108
+ ## License
109
+
110
+ MIT, see [LICENSE](LICENSE).
@@ -0,0 +1,163 @@
1
+ [project]
2
+ name = "radixly"
3
+ dynamic = ["version"]
4
+ description = "Fast binary-to-text codecs for Python: base32768, uro14, braille and hexagram in C"
5
+ readme = "README.md"
6
+ authors = [
7
+ { name = "rayakame", email = "github.android206@passmail.net" }
8
+ ]
9
+ requires-python = ">=3.11"
10
+ dependencies = []
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ keywords = ["base32768", "binary-to-text", "codec", "encoding", "unicode", "c-extension"]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Intended Audience :: Developers",
17
+ "Operating System :: OS Independent",
18
+ "Programming Language :: C",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Programming Language :: Python :: 3.14",
24
+ "Programming Language :: Python :: Implementation :: CPython",
25
+ "Topic :: Software Development :: Libraries",
26
+ "Topic :: Text Processing",
27
+ "Typing :: Typed",
28
+ ]
29
+
30
+ [project.urls]
31
+ Homepage = "https://radixly.rayakame.dev"
32
+ Documentation = "https://radixly.rayakame.dev/en/latest/"
33
+ Source = "https://github.com/rayakame/radixly"
34
+ Issues = "https://github.com/rayakame/radixly/issues"
35
+
36
+ [build-system]
37
+ requires = ["setuptools >= 77.0.3"]
38
+ build-backend = "setuptools.build_meta"
39
+
40
+ [dependency-groups]
41
+ dev = [
42
+ { include-group = "bench" },
43
+ { include-group = "clang" },
44
+ { include-group = "docs" },
45
+ { include-group = "nox" },
46
+ { include-group = "pyright" },
47
+ { include-group = "pytest" },
48
+ { include-group = "ruff" },
49
+ ]
50
+ bench = [
51
+ "matplotlib>=3.10",
52
+ ]
53
+ clang = [
54
+ "clang-format>=19",
55
+ "clang-tidy>=19",
56
+ ]
57
+ release = [
58
+ "towncrier>=24.8",
59
+ ]
60
+ docs = [
61
+ "sphinx>=9.0",
62
+ "furo>=2025.12",
63
+ "myst-parser>=5.0",
64
+ "sphinx-design>=0.7",
65
+ "sphinx-copybutton>=0.5",
66
+ "sphinx-autodoc-typehints>=3.0",
67
+ "sphinx-autobuild>=2024.10",
68
+ ]
69
+ nox = [
70
+ "nox>=2026.8.17",
71
+ ]
72
+ pytest = [
73
+ "pytest>=9.1.1",
74
+ "hypothesis>=6.100",
75
+ ]
76
+ ruff = [
77
+ "ruff>=0.16.3",
78
+ ]
79
+ pyright = [
80
+ "basedpyright>=1.39.10",
81
+ ]
82
+
83
+ [tool.basedpyright]
84
+ typeCheckingMode = "recommended"
85
+ include = ["noxfile.py", "src", "tests", "scripts", "benchmarks"]
86
+ # Resolve radixly from src/ so the checker sees the working tree, not the
87
+ # installed copy; consumers get types via py.typed + the verifytypes gate.
88
+ extraPaths = ["src"]
89
+ executionEnvironments = [
90
+ { root = "tests", extraPaths = [".", "src"], pythonVersion = "3.11" },
91
+ { root = "src", pythonVersion = "3.11" },
92
+ { root = "scripts", pythonVersion = "3.14" },
93
+ { root = "benchmarks", extraPaths = [".", "src"], pythonVersion = "3.11" },
94
+ ]
95
+
96
+ reportUnusedCallResult = "none" # every nox.session() triggers this
97
+
98
+ [tool.towncrier]
99
+ package = "radixly"
100
+ directory = "changes"
101
+ filename = "CHANGELOG.md"
102
+ start_string = "<!-- towncrier release notes start -->\n"
103
+ title_format = "## {version} ({project_date})"
104
+ issue_format = "[#{issue}](https://github.com/rayakame/radixly/pull/{issue})"
105
+ underlines = ["", "", ""]
106
+ ignore = ["README.md"]
107
+
108
+ [[tool.towncrier.type]]
109
+ directory = "feature"
110
+ name = "Added"
111
+ showcontent = true
112
+
113
+ [[tool.towncrier.type]]
114
+ directory = "bugfix"
115
+ name = "Fixed"
116
+ showcontent = true
117
+
118
+ [[tool.towncrier.type]]
119
+ directory = "removal"
120
+ name = "Removed"
121
+ showcontent = true
122
+
123
+ [[tool.towncrier.type]]
124
+ directory = "doc"
125
+ name = "Documentation"
126
+ showcontent = true
127
+
128
+ [[tool.towncrier.type]]
129
+ directory = "misc"
130
+ name = "Other"
131
+ showcontent = true
132
+
133
+ [tool.setuptools.dynamic]
134
+ version = { attr = "radixly._about.__version__" }
135
+
136
+ [tool.setuptools]
137
+ ext-modules = [
138
+ {name = "radixly._core", sources=["src/radixly/_core.c", "src/radixly/base32768/base32768.c", "src/radixly/braille/braille.c", "src/radixly/hexagram/hexagram.c", "src/radixly/uro14/uro14.c", "src/radixly/_common/block.c", "src/radixly/_common/errors.c"], include-dirs=["src/radixly"], extra-compile-args=["-std=c11"]}
139
+ ]
140
+
141
+ # Keep C sources and headers out of binary wheels for every (sub)package;
142
+ # sdists still ship them (ext-modules sources + MANIFEST.in headers).
143
+ [tool.setuptools.exclude-package-data]
144
+ "*" = ["*.c", "*.h"]
145
+
146
+ # PEP 561: the marker and the _core stub must ride the wheel, or installed
147
+ # consumers see an untyped package no matter how typed the source is.
148
+ [tool.setuptools.package-data]
149
+ radixly = ["py.typed", "*.pyi"]
150
+
151
+ # CPython-only (C-API internals), no free-threading (static globals).
152
+ # Warning flags (-Wall/-Wextra) are dev-only: MSVC rejects them, and the
153
+ # Linux CI matrix already enforces them. 64-bit only; no win32.
154
+ [tool.cibuildwheel]
155
+ build = "cp311-* cp312-* cp313-* cp314-*"
156
+ skip = "*t-* *-win32 *_i686"
157
+ build-verbosity = 1
158
+ test-requires = ["pytest>=9.1.1", "hypothesis>=6.100"]
159
+ # No `cd`: Windows cmd does not switch drives without /d.
160
+ test-command = "python -m pytest {project}/tests --ignore={project}/tests/bench -q"
161
+
162
+ [tool.pytest.ini_options]
163
+ testpaths = ["tests"]
@@ -0,0 +1,34 @@
1
+ # Copyright (c) 2026-present rayakame
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+ """Fast binary-to-text codecs."""
21
+
22
+ from __future__ import annotations
23
+
24
+ from radixly import base32768 as base32768
25
+ from radixly import braille as braille
26
+ from radixly import hexagram as hexagram
27
+ from radixly import uro14 as uro14
28
+ from radixly._about import __author__ as __author__
29
+ from radixly._about import __copyright__ as __copyright__
30
+ from radixly._about import __license__ as __license__
31
+ from radixly._about import __url__ as __url__
32
+ from radixly._about import __version__ as __version__
33
+ from radixly._codec import *
34
+ from radixly._core import DecodeError as DecodeError
@@ -24,5 +24,5 @@ import typing
24
24
  __author__: typing.Final[str] = "rayakame"
25
25
  __copyright__: typing.Final[str] = "2026-present, Rayakame"
26
26
  __url__: typing.Final[str] = "https://github.com/rayakame/radixly"
27
- __version__: typing.Final[str] = "0.1.0"
27
+ __version__: typing.Final[str] = "1.0.0"
28
28
  __license__: typing.Final[str] = "MIT"
@@ -0,0 +1,110 @@
1
+ # Copyright (c) 2026-present rayakame
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+ """The Codec value type and the name registry shared by every codec."""
21
+
22
+ from __future__ import annotations
23
+
24
+ import dataclasses
25
+ import types
26
+ import typing
27
+
28
+ if typing.TYPE_CHECKING:
29
+ import collections.abc
30
+
31
+ from _typeshed import ReadableBuffer
32
+
33
+ __all__ = ("CODECS", "Codec", "get_codec", "register")
34
+
35
+
36
+ @dataclasses.dataclass(frozen=True, slots=True)
37
+ class Codec:
38
+ """One codec as a value: the C functions bound as attributes, plus its numbers.
39
+
40
+ codec.encode(data) is one attribute load and the C call, no Python frame.
41
+
42
+ Attributes
43
+ ----------
44
+ name
45
+ The registry key, e.g. ``"base32768"``.
46
+ bits_per_char
47
+ Payload bits per output character.
48
+ """
49
+
50
+ name: str
51
+ bits_per_char: int
52
+ encode: collections.abc.Callable[[ReadableBuffer], str]
53
+ decode: collections.abc.Callable[[str], bytes]
54
+ encoded_len: collections.abc.Callable[[int], int]
55
+ max_bytes: collections.abc.Callable[[int], int]
56
+
57
+
58
+ _registry: dict[str, Codec] = {}
59
+ CODECS = types.MappingProxyType(_registry)
60
+
61
+
62
+ def register(codec: Codec) -> None:
63
+ """Add ``codec`` under its name; a taken name is refused.
64
+
65
+ Parameters
66
+ ----------
67
+ codec
68
+ The codec to register.
69
+
70
+ Raises
71
+ ------
72
+ ValueError
73
+ If the name is already registered.
74
+ """
75
+ if codec.name in _registry:
76
+ msg = f"codec {codec.name!r} is already registered"
77
+ raise ValueError(msg)
78
+
79
+ _registry[codec.name] = codec
80
+
81
+
82
+ def get_codec(name: str) -> Codec:
83
+ """Look up a registered codec by name.
84
+
85
+ Parameters
86
+ ----------
87
+ name
88
+ The registry key.
89
+
90
+ Returns
91
+ -------
92
+ Codec
93
+ The registered codec.
94
+
95
+ Raises
96
+ ------
97
+ KeyError
98
+ Unknown name; the message lists what is registered.
99
+
100
+ Examples
101
+ --------
102
+ >>> import radixly
103
+ >>> radixly.get_codec("uro14").bits_per_char
104
+ 14
105
+ """
106
+ codec = _registry.get(name)
107
+ if codec is None:
108
+ msg = f"unknown codec {name!r}; registered: {', '.join(sorted(_registry))}"
109
+ raise KeyError(msg)
110
+ return codec