maxframe 1.3.1__cp37-cp37m-win32.whl → 2.0.0b2__cp37-cp37m-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maxframe might be problematic. Click here for more details.

Files changed (640) hide show
  1. maxframe/_utils.cp37-win32.pyd +0 -0
  2. maxframe/_utils.pyi +21 -0
  3. maxframe/_utils.pyx +4 -3
  4. maxframe/codegen/__init__.py +27 -0
  5. maxframe/{codegen.py → codegen/core.py} +49 -43
  6. maxframe/codegen/spe/__init__.py +16 -0
  7. maxframe/codegen/spe/core.py +307 -0
  8. maxframe/codegen/spe/dataframe/__init__.py +37 -0
  9. maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
  10. maxframe/codegen/spe/dataframe/accessors/base.py +53 -0
  11. maxframe/codegen/spe/dataframe/accessors/dict_.py +194 -0
  12. maxframe/codegen/spe/dataframe/accessors/list_.py +80 -0
  13. maxframe/codegen/spe/dataframe/arithmetic.py +84 -0
  14. maxframe/codegen/spe/dataframe/datasource.py +181 -0
  15. maxframe/codegen/spe/dataframe/datastore.py +204 -0
  16. maxframe/codegen/spe/dataframe/extensions.py +63 -0
  17. maxframe/codegen/spe/dataframe/fetch.py +26 -0
  18. maxframe/codegen/spe/dataframe/groupby.py +224 -0
  19. maxframe/codegen/spe/dataframe/indexing.py +238 -0
  20. maxframe/codegen/spe/dataframe/merge.py +73 -0
  21. maxframe/codegen/spe/dataframe/misc.py +286 -0
  22. maxframe/codegen/spe/dataframe/missing.py +64 -0
  23. maxframe/codegen/spe/dataframe/reduction.py +160 -0
  24. maxframe/codegen/spe/dataframe/sort.py +83 -0
  25. maxframe/codegen/spe/dataframe/statistics.py +46 -0
  26. maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
  27. maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
  28. maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
  29. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +310 -0
  30. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +137 -0
  31. maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
  32. maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
  33. maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
  34. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +76 -0
  35. maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
  36. maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
  37. maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
  38. maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
  39. maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
  40. maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
  41. maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
  42. maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
  43. maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
  44. maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
  45. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +234 -0
  46. maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
  47. maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
  48. maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
  49. maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
  50. maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
  51. maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
  52. maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
  53. maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
  54. maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
  55. maxframe/codegen/spe/dataframe/tests/test_groupby.py +225 -0
  56. maxframe/codegen/spe/dataframe/tests/test_merge.py +400 -0
  57. maxframe/codegen/spe/dataframe/tests/test_reduction.py +104 -0
  58. maxframe/codegen/spe/dataframe/tests/test_sort.py +159 -0
  59. maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
  60. maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
  61. maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
  62. maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
  63. maxframe/codegen/spe/dataframe/tseries.py +46 -0
  64. maxframe/codegen/spe/dataframe/udf.py +62 -0
  65. maxframe/codegen/spe/dataframe/value_counts.py +31 -0
  66. maxframe/codegen/spe/dataframe/window.py +65 -0
  67. maxframe/codegen/spe/learn/__init__.py +15 -0
  68. maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
  69. maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
  70. maxframe/codegen/spe/learn/contrib/models.py +41 -0
  71. maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
  72. maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
  73. maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
  74. maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
  75. maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
  76. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +98 -0
  77. maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
  78. maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
  79. maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
  80. maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
  81. maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
  82. maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
  83. maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
  84. maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
  85. maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
  86. maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
  87. maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
  88. maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
  89. maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
  90. maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
  91. maxframe/codegen/spe/learn/utils/__init__.py +15 -0
  92. maxframe/codegen/spe/learn/utils/checks.py +55 -0
  93. maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
  94. maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
  95. maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
  96. maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
  97. maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
  98. maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
  99. maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
  100. maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
  101. maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
  102. maxframe/codegen/spe/learn/utils/validation.py +35 -0
  103. maxframe/codegen/spe/objects.py +26 -0
  104. maxframe/codegen/spe/remote.py +29 -0
  105. maxframe/codegen/spe/tensor/__init__.py +28 -0
  106. maxframe/codegen/spe/tensor/arithmetic.py +95 -0
  107. maxframe/codegen/spe/tensor/core.py +41 -0
  108. maxframe/codegen/spe/tensor/datasource.py +165 -0
  109. maxframe/codegen/spe/tensor/extensions.py +35 -0
  110. maxframe/codegen/spe/tensor/fetch.py +26 -0
  111. maxframe/codegen/spe/tensor/indexing.py +63 -0
  112. maxframe/codegen/spe/tensor/linalg.py +63 -0
  113. maxframe/codegen/spe/tensor/merge.py +31 -0
  114. maxframe/codegen/spe/tensor/misc.py +121 -0
  115. maxframe/codegen/spe/tensor/random.py +29 -0
  116. maxframe/codegen/spe/tensor/reduction.py +39 -0
  117. maxframe/codegen/spe/tensor/reshape.py +26 -0
  118. maxframe/codegen/spe/tensor/sort.py +42 -0
  119. maxframe/codegen/spe/tensor/special.py +35 -0
  120. maxframe/codegen/spe/tensor/statistics.py +24 -0
  121. maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
  122. maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
  123. maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
  124. maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
  125. maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
  126. maxframe/codegen/spe/tensor/tests/test_linalg.py +38 -0
  127. maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
  128. maxframe/codegen/spe/tensor/tests/test_misc.py +94 -0
  129. maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
  130. maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
  131. maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
  132. maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
  133. maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
  134. maxframe/codegen/spe/tensor/tests/test_statistics.py +29 -0
  135. maxframe/codegen/spe/tests/__init__.py +13 -0
  136. maxframe/codegen/spe/tests/test_remote.py +29 -0
  137. maxframe/codegen/spe/tests/test_spe_codegen.py +141 -0
  138. maxframe/codegen/spe/utils.py +54 -0
  139. maxframe/codegen/tests/__init__.py +13 -0
  140. maxframe/{tests → codegen/tests}/test_codegen.py +3 -5
  141. maxframe/config/__init__.py +1 -1
  142. maxframe/config/config.py +50 -23
  143. maxframe/config/tests/test_config.py +4 -12
  144. maxframe/config/validators.py +5 -0
  145. maxframe/conftest.py +38 -10
  146. maxframe/core/__init__.py +1 -0
  147. maxframe/core/context.py +110 -0
  148. maxframe/core/entity/__init__.py +1 -0
  149. maxframe/core/entity/core.py +0 -7
  150. maxframe/core/entity/objects.py +19 -5
  151. maxframe/core/entity/output_types.py +11 -0
  152. maxframe/core/entity/tests/test_objects.py +11 -12
  153. maxframe/core/entity/tileables.py +3 -1
  154. maxframe/core/entity/utils.py +15 -0
  155. maxframe/core/graph/__init__.py +6 -1
  156. maxframe/core/graph/builder/base.py +5 -1
  157. maxframe/core/graph/core.cp37-win32.pyd +0 -0
  158. maxframe/core/graph/core.pyx +17 -6
  159. maxframe/core/graph/entity.py +18 -6
  160. maxframe/core/operator/__init__.py +8 -3
  161. maxframe/core/operator/base.py +35 -12
  162. maxframe/core/operator/core.py +37 -14
  163. maxframe/core/operator/fetch.py +5 -18
  164. maxframe/core/operator/objects.py +0 -20
  165. maxframe/core/operator/shuffle.py +6 -72
  166. maxframe/dataframe/__init__.py +1 -0
  167. maxframe/dataframe/accessors/datetime_/core.py +7 -4
  168. maxframe/dataframe/accessors/string_/core.py +9 -6
  169. maxframe/dataframe/arithmetic/core.py +31 -20
  170. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +6 -0
  171. maxframe/dataframe/core.py +98 -91
  172. maxframe/dataframe/datasource/core.py +8 -1
  173. maxframe/dataframe/datasource/date_range.py +8 -0
  174. maxframe/dataframe/datasource/from_index.py +9 -5
  175. maxframe/dataframe/datasource/from_records.py +9 -2
  176. maxframe/dataframe/datasource/from_tensor.py +32 -21
  177. maxframe/dataframe/datasource/read_csv.py +8 -2
  178. maxframe/dataframe/datasource/read_odps_query.py +109 -19
  179. maxframe/dataframe/datasource/read_odps_table.py +20 -5
  180. maxframe/dataframe/datasource/read_parquet.py +8 -3
  181. maxframe/dataframe/datasource/tests/test_datasource.py +80 -1
  182. maxframe/dataframe/datastore/tests/test_to_odps.py +52 -1
  183. maxframe/dataframe/datastore/to_csv.py +7 -3
  184. maxframe/dataframe/datastore/to_odps.py +42 -6
  185. maxframe/dataframe/extensions/__init__.py +6 -1
  186. maxframe/dataframe/extensions/apply_chunk.py +96 -136
  187. maxframe/dataframe/extensions/flatjson.py +3 -2
  188. maxframe/dataframe/extensions/flatmap.py +15 -7
  189. maxframe/dataframe/fetch/core.py +12 -1
  190. maxframe/dataframe/groupby/__init__.py +7 -0
  191. maxframe/dataframe/groupby/aggregation.py +9 -8
  192. maxframe/dataframe/groupby/apply.py +50 -74
  193. maxframe/dataframe/groupby/apply_chunk.py +393 -0
  194. maxframe/dataframe/groupby/core.py +80 -17
  195. maxframe/dataframe/groupby/extensions.py +26 -0
  196. maxframe/dataframe/groupby/fill.py +9 -4
  197. maxframe/dataframe/groupby/sample.py +7 -7
  198. maxframe/dataframe/groupby/tests/test_groupby.py +3 -3
  199. maxframe/dataframe/groupby/transform.py +57 -54
  200. maxframe/dataframe/indexing/align.py +7 -6
  201. maxframe/dataframe/indexing/getitem.py +9 -8
  202. maxframe/dataframe/indexing/iloc.py +28 -23
  203. maxframe/dataframe/indexing/insert.py +7 -3
  204. maxframe/dataframe/indexing/loc.py +9 -8
  205. maxframe/dataframe/indexing/reindex.py +36 -30
  206. maxframe/dataframe/indexing/rename_axis.py +18 -10
  207. maxframe/dataframe/indexing/reset_index.py +0 -2
  208. maxframe/dataframe/indexing/sample.py +13 -9
  209. maxframe/dataframe/indexing/set_axis.py +9 -6
  210. maxframe/dataframe/indexing/setitem.py +8 -5
  211. maxframe/dataframe/indexing/where.py +12 -9
  212. maxframe/dataframe/merge/__init__.py +0 -1
  213. maxframe/dataframe/merge/concat.py +10 -31
  214. maxframe/dataframe/merge/merge.py +2 -24
  215. maxframe/dataframe/misc/__init__.py +6 -0
  216. maxframe/dataframe/misc/_duplicate.py +7 -3
  217. maxframe/dataframe/misc/apply.py +106 -139
  218. maxframe/dataframe/misc/astype.py +3 -2
  219. maxframe/dataframe/misc/case_when.py +11 -7
  220. maxframe/dataframe/misc/cut.py +11 -10
  221. maxframe/dataframe/misc/describe.py +7 -3
  222. maxframe/dataframe/misc/drop.py +13 -11
  223. maxframe/dataframe/misc/eval.py +0 -2
  224. maxframe/dataframe/misc/get_dummies.py +78 -49
  225. maxframe/dataframe/misc/isin.py +13 -10
  226. maxframe/dataframe/misc/map.py +21 -6
  227. maxframe/dataframe/misc/melt.py +8 -1
  228. maxframe/dataframe/misc/pivot.py +232 -0
  229. maxframe/dataframe/misc/pivot_table.py +52 -40
  230. maxframe/dataframe/misc/rechunk.py +59 -0
  231. maxframe/dataframe/misc/shift.py +7 -4
  232. maxframe/dataframe/misc/stack.py +5 -3
  233. maxframe/dataframe/misc/tests/test_misc.py +167 -1
  234. maxframe/dataframe/misc/transform.py +63 -65
  235. maxframe/dataframe/misc/value_counts.py +7 -4
  236. maxframe/dataframe/missing/dropna.py +16 -7
  237. maxframe/dataframe/missing/fillna.py +18 -10
  238. maxframe/dataframe/missing/replace.py +10 -6
  239. maxframe/dataframe/missing/tests/test_missing.py +2 -2
  240. maxframe/dataframe/operators.py +1 -27
  241. maxframe/dataframe/reduction/aggregation.py +65 -3
  242. maxframe/dataframe/reduction/core.py +3 -1
  243. maxframe/dataframe/reduction/median.py +1 -1
  244. maxframe/dataframe/reduction/tests/test_reduction.py +33 -0
  245. maxframe/dataframe/reduction/unique.py +53 -7
  246. maxframe/dataframe/statistics/corr.py +9 -6
  247. maxframe/dataframe/statistics/quantile.py +9 -6
  248. maxframe/dataframe/tseries/to_datetime.py +6 -4
  249. maxframe/dataframe/utils.py +219 -31
  250. maxframe/dataframe/window/rolling.py +7 -4
  251. maxframe/env.py +1 -0
  252. maxframe/errors.py +9 -0
  253. maxframe/extension.py +13 -2
  254. maxframe/io/objects/core.py +67 -51
  255. maxframe/io/objects/tensor.py +73 -17
  256. maxframe/io/objects/tests/test_object_io.py +10 -55
  257. maxframe/io/odpsio/arrow.py +15 -2
  258. maxframe/io/odpsio/schema.py +43 -13
  259. maxframe/io/odpsio/tableio.py +63 -11
  260. maxframe/io/odpsio/tests/test_arrow.py +1 -2
  261. maxframe/io/odpsio/tests/test_schema.py +114 -1
  262. maxframe/io/odpsio/tests/test_tableio.py +42 -0
  263. maxframe/io/odpsio/tests/test_volumeio.py +21 -58
  264. maxframe/io/odpsio/volumeio.py +23 -8
  265. maxframe/learn/__init__.py +2 -2
  266. maxframe/learn/contrib/__init__.py +2 -2
  267. maxframe/learn/contrib/graph/connected_components.py +2 -1
  268. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  269. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  270. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  271. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  272. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  273. maxframe/learn/contrib/lightgbm/core.py +372 -0
  274. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  275. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  276. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  277. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  278. maxframe/learn/contrib/models.py +38 -9
  279. maxframe/learn/contrib/utils.py +55 -0
  280. maxframe/learn/contrib/xgboost/callback.py +86 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +26 -30
  282. maxframe/learn/contrib/xgboost/core.py +54 -42
  283. maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
  284. maxframe/learn/contrib/xgboost/predict.py +16 -9
  285. maxframe/learn/contrib/xgboost/regressor.py +28 -27
  286. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  287. maxframe/learn/contrib/xgboost/train.py +59 -16
  288. maxframe/learn/core.py +252 -0
  289. maxframe/learn/datasets/__init__.py +20 -0
  290. maxframe/learn/datasets/samples_generator.py +628 -0
  291. maxframe/learn/linear_model/__init__.py +15 -0
  292. maxframe/learn/linear_model/_base.py +163 -0
  293. maxframe/learn/linear_model/_lin_reg.py +175 -0
  294. maxframe/learn/metrics/__init__.py +25 -0
  295. maxframe/learn/metrics/_check_targets.py +95 -0
  296. maxframe/learn/metrics/_classification.py +1121 -0
  297. maxframe/learn/metrics/_regression.py +256 -0
  298. maxframe/learn/model_selection/__init__.py +15 -0
  299. maxframe/learn/model_selection/_split.py +451 -0
  300. maxframe/learn/model_selection/tests/__init__.py +13 -0
  301. maxframe/learn/model_selection/tests/test_split.py +156 -0
  302. maxframe/learn/preprocessing/__init__.py +16 -0
  303. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  304. maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
  305. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  306. maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
  307. maxframe/learn/preprocessing/_data/utils.py +79 -0
  308. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  309. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  310. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  311. maxframe/learn/utils/__init__.py +4 -0
  312. maxframe/learn/utils/_encode.py +314 -0
  313. maxframe/learn/utils/checks.py +161 -0
  314. maxframe/learn/utils/core.py +33 -0
  315. maxframe/learn/utils/extmath.py +176 -0
  316. maxframe/learn/utils/multiclass.py +292 -0
  317. maxframe/learn/utils/shuffle.py +114 -0
  318. maxframe/learn/utils/sparsefuncs.py +87 -0
  319. maxframe/learn/utils/validation.py +775 -0
  320. maxframe/lib/__init__.py +0 -2
  321. maxframe/lib/compat.py +145 -0
  322. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  323. maxframe/lib/mmh3.cp37-win32.pyd +0 -0
  324. maxframe/lib/sparse/__init__.py +10 -15
  325. maxframe/lib/sparse/array.py +45 -33
  326. maxframe/lib/sparse/core.py +0 -2
  327. maxframe/lib/sparse/linalg.py +31 -0
  328. maxframe/lib/sparse/matrix.py +5 -2
  329. maxframe/lib/sparse/tests/__init__.py +0 -2
  330. maxframe/lib/sparse/tests/test_sparse.py +53 -53
  331. maxframe/lib/sparse/vector.py +0 -2
  332. maxframe/mixin.py +59 -2
  333. maxframe/opcodes.py +13 -5
  334. maxframe/protocol.py +67 -14
  335. maxframe/remote/core.py +16 -14
  336. maxframe/remote/run_script.py +6 -3
  337. maxframe/serialization/__init__.py +2 -0
  338. maxframe/serialization/core.cp37-win32.pyd +0 -0
  339. maxframe/serialization/core.pxd +3 -0
  340. maxframe/serialization/core.pyi +3 -1
  341. maxframe/serialization/core.pyx +82 -4
  342. maxframe/serialization/pandas.py +5 -1
  343. maxframe/serialization/serializables/core.py +6 -5
  344. maxframe/serialization/serializables/field.py +2 -2
  345. maxframe/serialization/serializables/tests/test_field_type.py +3 -5
  346. maxframe/serialization/tests/test_serial.py +27 -0
  347. maxframe/session.py +4 -71
  348. maxframe/sperunner.py +165 -0
  349. maxframe/tensor/__init__.py +35 -2
  350. maxframe/tensor/arithmetic/__init__.py +2 -4
  351. maxframe/tensor/arithmetic/abs.py +0 -2
  352. maxframe/tensor/arithmetic/absolute.py +0 -2
  353. maxframe/tensor/arithmetic/add.py +34 -4
  354. maxframe/tensor/arithmetic/angle.py +0 -2
  355. maxframe/tensor/arithmetic/arccos.py +1 -4
  356. maxframe/tensor/arithmetic/arccosh.py +1 -3
  357. maxframe/tensor/arithmetic/arcsin.py +0 -2
  358. maxframe/tensor/arithmetic/arcsinh.py +0 -2
  359. maxframe/tensor/arithmetic/arctan.py +0 -2
  360. maxframe/tensor/arithmetic/arctan2.py +0 -2
  361. maxframe/tensor/arithmetic/arctanh.py +0 -2
  362. maxframe/tensor/arithmetic/around.py +0 -2
  363. maxframe/tensor/arithmetic/bitand.py +0 -2
  364. maxframe/tensor/arithmetic/bitor.py +1 -3
  365. maxframe/tensor/arithmetic/bitxor.py +1 -3
  366. maxframe/tensor/arithmetic/cbrt.py +0 -2
  367. maxframe/tensor/arithmetic/ceil.py +0 -2
  368. maxframe/tensor/arithmetic/clip.py +13 -13
  369. maxframe/tensor/arithmetic/conj.py +0 -2
  370. maxframe/tensor/arithmetic/copysign.py +0 -2
  371. maxframe/tensor/arithmetic/core.py +47 -39
  372. maxframe/tensor/arithmetic/cos.py +1 -3
  373. maxframe/tensor/arithmetic/cosh.py +0 -2
  374. maxframe/tensor/arithmetic/deg2rad.py +0 -2
  375. maxframe/tensor/arithmetic/degrees.py +0 -2
  376. maxframe/tensor/arithmetic/divide.py +0 -2
  377. maxframe/tensor/arithmetic/equal.py +0 -2
  378. maxframe/tensor/arithmetic/exp.py +1 -3
  379. maxframe/tensor/arithmetic/exp2.py +0 -2
  380. maxframe/tensor/arithmetic/expm1.py +0 -2
  381. maxframe/tensor/arithmetic/fabs.py +0 -2
  382. maxframe/tensor/arithmetic/fix.py +0 -2
  383. maxframe/tensor/arithmetic/float_power.py +0 -2
  384. maxframe/tensor/arithmetic/floor.py +0 -2
  385. maxframe/tensor/arithmetic/floordiv.py +0 -2
  386. maxframe/tensor/arithmetic/fmax.py +0 -2
  387. maxframe/tensor/arithmetic/fmin.py +0 -2
  388. maxframe/tensor/arithmetic/fmod.py +0 -2
  389. maxframe/tensor/arithmetic/frexp.py +6 -2
  390. maxframe/tensor/arithmetic/greater.py +0 -2
  391. maxframe/tensor/arithmetic/greater_equal.py +0 -2
  392. maxframe/tensor/arithmetic/hypot.py +0 -2
  393. maxframe/tensor/arithmetic/i0.py +1 -3
  394. maxframe/tensor/arithmetic/imag.py +0 -2
  395. maxframe/tensor/arithmetic/invert.py +1 -3
  396. maxframe/tensor/arithmetic/isclose.py +0 -2
  397. maxframe/tensor/arithmetic/iscomplex.py +0 -2
  398. maxframe/tensor/arithmetic/isfinite.py +1 -3
  399. maxframe/tensor/arithmetic/isinf.py +0 -2
  400. maxframe/tensor/arithmetic/isnan.py +0 -2
  401. maxframe/tensor/arithmetic/isreal.py +0 -2
  402. maxframe/tensor/arithmetic/ldexp.py +0 -2
  403. maxframe/tensor/arithmetic/less.py +0 -2
  404. maxframe/tensor/arithmetic/less_equal.py +0 -2
  405. maxframe/tensor/arithmetic/log.py +1 -3
  406. maxframe/tensor/arithmetic/log10.py +1 -3
  407. maxframe/tensor/arithmetic/log1p.py +1 -3
  408. maxframe/tensor/arithmetic/log2.py +1 -3
  409. maxframe/tensor/arithmetic/logaddexp.py +0 -2
  410. maxframe/tensor/arithmetic/logaddexp2.py +0 -2
  411. maxframe/tensor/arithmetic/logical_and.py +0 -2
  412. maxframe/tensor/arithmetic/logical_not.py +1 -3
  413. maxframe/tensor/arithmetic/logical_or.py +0 -2
  414. maxframe/tensor/arithmetic/logical_xor.py +0 -2
  415. maxframe/tensor/arithmetic/lshift.py +0 -2
  416. maxframe/tensor/arithmetic/maximum.py +0 -2
  417. maxframe/tensor/arithmetic/minimum.py +0 -2
  418. maxframe/tensor/arithmetic/mod.py +0 -2
  419. maxframe/tensor/arithmetic/modf.py +6 -2
  420. maxframe/tensor/arithmetic/multiply.py +37 -4
  421. maxframe/tensor/arithmetic/nan_to_num.py +0 -2
  422. maxframe/tensor/arithmetic/negative.py +0 -2
  423. maxframe/tensor/arithmetic/nextafter.py +0 -2
  424. maxframe/tensor/arithmetic/not_equal.py +0 -2
  425. maxframe/tensor/arithmetic/positive.py +0 -2
  426. maxframe/tensor/arithmetic/power.py +0 -2
  427. maxframe/tensor/arithmetic/rad2deg.py +0 -2
  428. maxframe/tensor/arithmetic/radians.py +0 -2
  429. maxframe/tensor/arithmetic/real.py +0 -2
  430. maxframe/tensor/arithmetic/reciprocal.py +5 -3
  431. maxframe/tensor/arithmetic/rint.py +1 -3
  432. maxframe/tensor/arithmetic/rshift.py +0 -2
  433. maxframe/tensor/arithmetic/setimag.py +0 -2
  434. maxframe/tensor/arithmetic/setreal.py +0 -2
  435. maxframe/tensor/arithmetic/sign.py +0 -2
  436. maxframe/tensor/arithmetic/signbit.py +0 -2
  437. maxframe/tensor/arithmetic/sin.py +0 -2
  438. maxframe/tensor/arithmetic/sinc.py +1 -3
  439. maxframe/tensor/arithmetic/sinh.py +0 -2
  440. maxframe/tensor/arithmetic/spacing.py +0 -2
  441. maxframe/tensor/arithmetic/sqrt.py +0 -2
  442. maxframe/tensor/arithmetic/square.py +0 -2
  443. maxframe/tensor/arithmetic/subtract.py +4 -2
  444. maxframe/tensor/arithmetic/tan.py +0 -2
  445. maxframe/tensor/arithmetic/tanh.py +0 -2
  446. maxframe/tensor/arithmetic/tests/__init__.py +0 -2
  447. maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
  448. maxframe/tensor/arithmetic/truediv.py +0 -2
  449. maxframe/tensor/arithmetic/trunc.py +0 -2
  450. maxframe/tensor/arithmetic/utils.py +32 -6
  451. maxframe/tensor/array_utils.py +3 -25
  452. maxframe/tensor/core.py +6 -6
  453. maxframe/tensor/datasource/__init__.py +10 -2
  454. maxframe/tensor/datasource/arange.py +0 -2
  455. maxframe/tensor/datasource/array.py +3 -22
  456. maxframe/tensor/datasource/core.py +15 -10
  457. maxframe/tensor/datasource/diag.py +140 -0
  458. maxframe/tensor/datasource/diagflat.py +69 -0
  459. maxframe/tensor/datasource/empty.py +0 -2
  460. maxframe/tensor/datasource/eye.py +95 -0
  461. maxframe/tensor/datasource/from_dataframe.py +0 -2
  462. maxframe/tensor/datasource/from_dense.py +0 -17
  463. maxframe/tensor/datasource/from_sparse.py +0 -2
  464. maxframe/tensor/datasource/full.py +0 -2
  465. maxframe/tensor/datasource/identity.py +54 -0
  466. maxframe/tensor/datasource/indices.py +115 -0
  467. maxframe/tensor/datasource/linspace.py +140 -0
  468. maxframe/tensor/datasource/meshgrid.py +135 -0
  469. maxframe/tensor/datasource/ones.py +8 -3
  470. maxframe/tensor/datasource/tests/test_datasource.py +32 -1
  471. maxframe/tensor/datasource/tri_array.py +107 -0
  472. maxframe/tensor/datasource/zeros.py +7 -3
  473. maxframe/tensor/extensions/__init__.py +31 -0
  474. maxframe/tensor/extensions/accessor.py +25 -0
  475. maxframe/tensor/extensions/apply_chunk.py +137 -0
  476. maxframe/tensor/indexing/__init__.py +1 -1
  477. maxframe/tensor/indexing/choose.py +8 -6
  478. maxframe/tensor/indexing/compress.py +0 -2
  479. maxframe/tensor/indexing/extract.py +0 -2
  480. maxframe/tensor/indexing/fill_diagonal.py +9 -6
  481. maxframe/tensor/indexing/flatnonzero.py +1 -3
  482. maxframe/tensor/indexing/getitem.py +10 -43
  483. maxframe/tensor/indexing/nonzero.py +2 -4
  484. maxframe/tensor/indexing/setitem.py +19 -9
  485. maxframe/tensor/indexing/slice.py +6 -3
  486. maxframe/tensor/indexing/take.py +0 -2
  487. maxframe/tensor/indexing/tests/__init__.py +0 -2
  488. maxframe/tensor/indexing/tests/test_indexing.py +0 -2
  489. maxframe/tensor/indexing/unravel_index.py +6 -6
  490. maxframe/tensor/lib/__init__.py +16 -0
  491. maxframe/tensor/lib/index_tricks.py +404 -0
  492. maxframe/tensor/linalg/__init__.py +36 -0
  493. maxframe/tensor/linalg/dot.py +145 -0
  494. maxframe/tensor/linalg/inner.py +36 -0
  495. maxframe/tensor/linalg/inv.py +83 -0
  496. maxframe/tensor/linalg/lu.py +115 -0
  497. maxframe/tensor/linalg/matmul.py +225 -0
  498. maxframe/tensor/linalg/qr.py +124 -0
  499. maxframe/tensor/linalg/solve_triangular.py +103 -0
  500. maxframe/tensor/linalg/svd.py +167 -0
  501. maxframe/tensor/linalg/tensordot.py +213 -0
  502. maxframe/tensor/linalg/vdot.py +73 -0
  503. maxframe/tensor/merge/__init__.py +4 -0
  504. maxframe/tensor/merge/append.py +74 -0
  505. maxframe/tensor/merge/column_stack.py +63 -0
  506. maxframe/tensor/merge/concatenate.py +3 -2
  507. maxframe/tensor/merge/dstack.py +71 -0
  508. maxframe/tensor/merge/hstack.py +70 -0
  509. maxframe/tensor/merge/stack.py +0 -2
  510. maxframe/tensor/merge/tests/test_merge.py +0 -2
  511. maxframe/tensor/misc/__init__.py +18 -5
  512. maxframe/tensor/misc/astype.py +10 -8
  513. maxframe/tensor/misc/broadcast_to.py +1 -1
  514. maxframe/tensor/misc/copy.py +64 -0
  515. maxframe/tensor/misc/diff.py +115 -0
  516. maxframe/tensor/misc/flatten.py +63 -0
  517. maxframe/tensor/misc/in1d.py +94 -0
  518. maxframe/tensor/misc/isin.py +130 -0
  519. maxframe/tensor/misc/ndim.py +53 -0
  520. maxframe/tensor/misc/ravel.py +0 -2
  521. maxframe/tensor/misc/repeat.py +129 -0
  522. maxframe/tensor/misc/searchsorted.py +147 -0
  523. maxframe/tensor/misc/setdiff1d.py +58 -0
  524. maxframe/tensor/misc/squeeze.py +117 -0
  525. maxframe/tensor/misc/swapaxes.py +113 -0
  526. maxframe/tensor/misc/tests/test_misc.py +0 -2
  527. maxframe/tensor/misc/transpose.py +8 -4
  528. maxframe/tensor/misc/trapezoid.py +123 -0
  529. maxframe/tensor/misc/unique.py +0 -1
  530. maxframe/tensor/misc/where.py +10 -8
  531. maxframe/tensor/operators.py +0 -34
  532. maxframe/tensor/random/__init__.py +3 -5
  533. maxframe/tensor/random/binomial.py +0 -2
  534. maxframe/tensor/random/bytes.py +0 -2
  535. maxframe/tensor/random/chisquare.py +0 -2
  536. maxframe/tensor/random/choice.py +9 -8
  537. maxframe/tensor/random/core.py +20 -5
  538. maxframe/tensor/random/dirichlet.py +0 -2
  539. maxframe/tensor/random/exponential.py +0 -2
  540. maxframe/tensor/random/f.py +2 -4
  541. maxframe/tensor/random/gamma.py +0 -2
  542. maxframe/tensor/random/geometric.py +0 -2
  543. maxframe/tensor/random/gumbel.py +0 -2
  544. maxframe/tensor/random/hypergeometric.py +0 -2
  545. maxframe/tensor/random/laplace.py +2 -4
  546. maxframe/tensor/random/logistic.py +0 -2
  547. maxframe/tensor/random/lognormal.py +0 -2
  548. maxframe/tensor/random/logseries.py +0 -2
  549. maxframe/tensor/random/multinomial.py +0 -2
  550. maxframe/tensor/random/multivariate_normal.py +0 -2
  551. maxframe/tensor/random/negative_binomial.py +0 -2
  552. maxframe/tensor/random/noncentral_chisquare.py +0 -2
  553. maxframe/tensor/random/noncentral_f.py +1 -3
  554. maxframe/tensor/random/normal.py +0 -2
  555. maxframe/tensor/random/pareto.py +0 -2
  556. maxframe/tensor/random/permutation.py +6 -3
  557. maxframe/tensor/random/poisson.py +0 -2
  558. maxframe/tensor/random/power.py +0 -2
  559. maxframe/tensor/random/rand.py +0 -2
  560. maxframe/tensor/random/randint.py +0 -2
  561. maxframe/tensor/random/randn.py +0 -2
  562. maxframe/tensor/random/random_integers.py +0 -2
  563. maxframe/tensor/random/random_sample.py +0 -2
  564. maxframe/tensor/random/rayleigh.py +0 -2
  565. maxframe/tensor/random/standard_cauchy.py +0 -2
  566. maxframe/tensor/random/standard_exponential.py +0 -2
  567. maxframe/tensor/random/standard_gamma.py +0 -2
  568. maxframe/tensor/random/standard_normal.py +0 -2
  569. maxframe/tensor/random/standard_t.py +0 -2
  570. maxframe/tensor/random/tests/__init__.py +0 -2
  571. maxframe/tensor/random/tests/test_random.py +0 -2
  572. maxframe/tensor/random/triangular.py +0 -2
  573. maxframe/tensor/random/uniform.py +0 -2
  574. maxframe/tensor/random/vonmises.py +0 -2
  575. maxframe/tensor/random/wald.py +0 -2
  576. maxframe/tensor/random/weibull.py +0 -2
  577. maxframe/tensor/random/zipf.py +0 -2
  578. maxframe/tensor/reduction/__init__.py +0 -2
  579. maxframe/tensor/reduction/all.py +0 -2
  580. maxframe/tensor/reduction/allclose.py +0 -2
  581. maxframe/tensor/reduction/any.py +0 -2
  582. maxframe/tensor/reduction/argmax.py +1 -3
  583. maxframe/tensor/reduction/argmin.py +1 -3
  584. maxframe/tensor/reduction/array_equal.py +0 -2
  585. maxframe/tensor/reduction/core.py +0 -2
  586. maxframe/tensor/reduction/count_nonzero.py +0 -2
  587. maxframe/tensor/reduction/cumprod.py +0 -2
  588. maxframe/tensor/reduction/cumsum.py +0 -2
  589. maxframe/tensor/reduction/max.py +0 -2
  590. maxframe/tensor/reduction/mean.py +0 -2
  591. maxframe/tensor/reduction/min.py +0 -2
  592. maxframe/tensor/reduction/nanargmax.py +0 -2
  593. maxframe/tensor/reduction/nanargmin.py +0 -2
  594. maxframe/tensor/reduction/nancumprod.py +0 -2
  595. maxframe/tensor/reduction/nancumsum.py +0 -2
  596. maxframe/tensor/reduction/nanmax.py +0 -2
  597. maxframe/tensor/reduction/nanmean.py +0 -2
  598. maxframe/tensor/reduction/nanmin.py +0 -2
  599. maxframe/tensor/reduction/nanprod.py +0 -2
  600. maxframe/tensor/reduction/nanstd.py +0 -2
  601. maxframe/tensor/reduction/nansum.py +0 -2
  602. maxframe/tensor/reduction/nanvar.py +0 -2
  603. maxframe/tensor/reduction/prod.py +0 -2
  604. maxframe/tensor/reduction/std.py +0 -2
  605. maxframe/tensor/reduction/sum.py +0 -2
  606. maxframe/tensor/reduction/tests/test_reduction.py +1 -4
  607. maxframe/tensor/reduction/var.py +0 -2
  608. maxframe/tensor/reshape/__init__.py +0 -2
  609. maxframe/tensor/reshape/reshape.py +6 -5
  610. maxframe/tensor/reshape/tests/__init__.py +0 -2
  611. maxframe/tensor/reshape/tests/test_reshape.py +0 -2
  612. maxframe/tensor/sort/__init__.py +16 -0
  613. maxframe/tensor/sort/argsort.py +150 -0
  614. maxframe/tensor/sort/sort.py +295 -0
  615. maxframe/tensor/special/__init__.py +37 -0
  616. maxframe/tensor/special/core.py +38 -0
  617. maxframe/tensor/special/misc.py +142 -0
  618. maxframe/tensor/special/statistical.py +56 -0
  619. maxframe/tensor/statistics/__init__.py +5 -0
  620. maxframe/tensor/statistics/average.py +143 -0
  621. maxframe/tensor/statistics/bincount.py +133 -0
  622. maxframe/tensor/statistics/quantile.py +10 -8
  623. maxframe/tensor/ufunc/__init__.py +0 -2
  624. maxframe/tensor/ufunc/ufunc.py +0 -2
  625. maxframe/tensor/utils.py +21 -3
  626. maxframe/tests/test_protocol.py +3 -3
  627. maxframe/tests/test_utils.py +210 -1
  628. maxframe/tests/utils.py +59 -1
  629. maxframe/udf.py +76 -6
  630. maxframe/utils.py +418 -17
  631. {maxframe-1.3.1.dist-info → maxframe-2.0.0b2.dist-info}/METADATA +4 -1
  632. maxframe-2.0.0b2.dist-info/RECORD +939 -0
  633. maxframe_client/clients/framedriver.py +19 -3
  634. maxframe_client/fetcher.py +113 -6
  635. maxframe_client/session/odps.py +173 -38
  636. maxframe_client/session/task.py +3 -1
  637. maxframe_client/tests/test_session.py +41 -5
  638. maxframe-1.3.1.dist-info/RECORD +0 -705
  639. {maxframe-1.3.1.dist-info → maxframe-2.0.0b2.dist-info}/WHEEL +0 -0
  640. {maxframe-1.3.1.dist-info → maxframe-2.0.0b2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,599 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import List
16
+
17
+ import numpy as np
18
+ import scipy.sparse as sps
19
+
20
+ from ....udf import builtin_function
21
+
22
+ try:
23
+ from sklearn.utils.multiclass import type_of_target as sk_type_of_target
24
+ except ImportError:
25
+ sk_type_of_target = lambda _: None
26
+
27
+ from .... import opcodes
28
+ from .... import tensor as mt
29
+ from ....core import ENTITY_TYPE, OutputType
30
+ from ....core.operator import Operator
31
+ from ....serialization.serializables import AnyField, BoolField, Int32Field
32
+ from ....tensor.core import TensorOrder
33
+ from ....typing_ import EntityType, TileableType
34
+ from ...core import BaseEstimator, LearnOperatorMixin, TransformerMixin
35
+ from ...utils.multiclass import type_of_target, unique_labels
36
+ from ...utils.validation import _num_samples, check_array, check_is_fitted
37
+
38
+
39
+ class LabelBinarizer(TransformerMixin, BaseEstimator):
40
+ """Binarize labels in a one-vs-all fashion.
41
+
42
+ Several regression and binary classification algorithms are
43
+ available in scikit-learn. A simple way to extend these algorithms
44
+ to the multi-class classification case is to use the so-called
45
+ one-vs-all scheme.
46
+
47
+ At learning time, this simply consists in learning one regressor
48
+ or binary classifier per class. In doing so, one needs to convert
49
+ multi-class labels to binary labels (belong or does not belong
50
+ to the class). LabelBinarizer makes this process easy with the
51
+ transform method.
52
+
53
+ At prediction time, one assigns the class for which the corresponding
54
+ model gave the greatest confidence. LabelBinarizer makes this easy
55
+ with the inverse_transform method.
56
+
57
+ Read more in the :ref:`User Guide <preprocessing_targets>`.
58
+
59
+ Parameters
60
+ ----------
61
+
62
+ neg_label : int, default=0
63
+ Value with which negative labels must be encoded.
64
+
65
+ pos_label : int, default=1
66
+ Value with which positive labels must be encoded.
67
+
68
+ sparse_output : bool, default=False
69
+ True if the returned array from transform is desired to be in sparse
70
+ CSR format.
71
+
72
+ Attributes
73
+ ----------
74
+
75
+ classes_ : ndarray of shape (n_classes,)
76
+ Holds the label for each class.
77
+
78
+ y_type_ : str
79
+ Represents the type of the target data as evaluated by
80
+ utils.multiclass.type_of_target. Possible type are 'continuous',
81
+ 'continuous-multioutput', 'binary', 'multiclass',
82
+ 'multiclass-multioutput', 'multilabel-indicator', and 'unknown'.
83
+
84
+ sparse_input_ : bool
85
+ True if the input data to transform is given as a sparse matrix, False
86
+ otherwise.
87
+
88
+ Examples
89
+ --------
90
+ >>> from maxframe.learn import preprocessing
91
+ >>> lb = preprocessing.LabelBinarizer()
92
+ >>> lb.fit([1, 2, 6, 4, 2])
93
+ LabelBinarizer()
94
+ >>> lb.classes_.execute()
95
+ array([1, 2, 4, 6])
96
+ >>> lb.transform([1, 6]).execute()
97
+ array([[1, 0, 0, 0],
98
+ [0, 0, 0, 1]])
99
+
100
+ Binary targets transform to a column vector
101
+
102
+ >>> lb = preprocessing.LabelBinarizer()
103
+ >>> lb.fit_transform(['yes', 'no', 'no', 'yes']).execute()
104
+ array([[1],
105
+ [0],
106
+ [0],
107
+ [1]])
108
+
109
+ Passing a 2D matrix for multilabel classification
110
+
111
+ >>> import numpy as np
112
+ >>> lb.fit(np.array([[0, 1, 1], [1, 0, 0]]))
113
+ LabelBinarizer()
114
+ >>> lb.classes_.execute()
115
+ array([0, 1, 2])
116
+ >>> lb.transform([0, 1, 2, 1]).execute()
117
+ array([[1, 0, 0],
118
+ [0, 1, 0],
119
+ [0, 0, 1],
120
+ [0, 1, 0]])
121
+
122
+ See Also
123
+ --------
124
+ label_binarize : Function to perform the transform operation of
125
+ LabelBinarizer with fixed classes.
126
+ OneHotEncoder : Encode categorical features using a one-hot aka one-of-K
127
+ scheme.
128
+ """
129
+
130
+ def __init__(self, *, neg_label=0, pos_label=1, sparse_output=False):
131
+ if neg_label >= pos_label:
132
+ raise ValueError(
133
+ "neg_label={0} must be strictly less than "
134
+ "pos_label={1}.".format(neg_label, pos_label)
135
+ )
136
+
137
+ if sparse_output and (pos_label == 0 or neg_label != 0):
138
+ raise ValueError(
139
+ "Sparse binarization is only supported with non "
140
+ "zero pos_label and zero neg_label, got "
141
+ "pos_label={0} and neg_label={1}"
142
+ "".format(pos_label, neg_label)
143
+ )
144
+
145
+ self.neg_label = neg_label
146
+ self.pos_label = pos_label
147
+ self.sparse_output = sparse_output
148
+
149
+ @staticmethod
150
+ @builtin_function
151
+ def _check_y_type(value, y):
152
+ if isinstance(y, np.ndarray):
153
+ y = y.item()
154
+ if "multioutput" in y:
155
+ raise ValueError(
156
+ "Multioutput target data is not supported with label binarization"
157
+ )
158
+ return value
159
+
160
+ def fit(self, y, check=True, execute=False, session=None, run_kwargs=None):
161
+ """Fit label binarizer.
162
+
163
+ Parameters
164
+ ----------
165
+ y : ndarray of shape (n_samples,) or (n_samples, n_classes)
166
+ Target values. The 2-d matrix should only contain 0 and 1,
167
+ represents multilabel classification.
168
+
169
+ Returns
170
+ -------
171
+ self : returns an instance of self.
172
+ """
173
+ y = mt.tensor(y)
174
+ self.y_type_ = type_of_target(y)
175
+
176
+ if _num_samples(y) == 0: # pragma: no cover
177
+ raise ValueError("y has 0 samples: %r" % y)
178
+
179
+ if check:
180
+ y = y.mf.apply_chunk(
181
+ self._check_y_type,
182
+ args=(self.y_type_,),
183
+ shape=y.shape,
184
+ dtype=y.dtype,
185
+ sparse=y.issparse(),
186
+ )
187
+
188
+ self.sparse_input_ = mt.tensor(y).issparse()
189
+ self.classes_ = unique_labels(y)
190
+ if execute:
191
+ self.execute(session=session, **(run_kwargs or {}))
192
+ return self
193
+
194
+ def fit_transform(
195
+ self, y, check=True, execute=False, session=None, run_kwargs=None
196
+ ):
197
+ """Fit label binarizer and transform multi-class labels to binary
198
+ labels.
199
+
200
+ The output of transform is sometimes referred to as
201
+ the 1-of-K coding scheme.
202
+
203
+ Parameters
204
+ ----------
205
+ y : {ndarray, sparse matrix} of shape (n_samples,) or \
206
+ (n_samples, n_classes)
207
+ Target values. The 2-d matrix should only contain 0 and 1,
208
+ represents multilabel classification. Sparse matrix can be
209
+ CSR, CSC, COO, DOK, or LIL.
210
+
211
+ Returns
212
+ -------
213
+ Y : {ndarray, sparse matrix} of shape (n_samples, n_classes)
214
+ Shape will be (n_samples, 1) for binary problems. Sparse matrix
215
+ will be of CSR format.
216
+ """
217
+ return self.fit(
218
+ y, check=check, execute=execute, session=session, run_kwargs=run_kwargs
219
+ ).transform(
220
+ y, check=check, execute=execute, session=session, run_kwargs=run_kwargs
221
+ )
222
+
223
+ @staticmethod
224
+ @builtin_function
225
+ def _check_y_type_src_target(val, yt_src, yt_target):
226
+ if isinstance(yt_src, np.ndarray):
227
+ yt_src = yt_src.item()
228
+ if isinstance(yt_target, np.ndarray):
229
+ yt_target = yt_target.item()
230
+ y_is_multilabel = yt_target.startswith("multilabel")
231
+ if y_is_multilabel and not yt_src.startswith("multilabel"):
232
+ raise ValueError("The object was not fitted with multilabel input.")
233
+ return val
234
+
235
+ def transform(self, y, check=True, execute=False, session=None, run_kwargs=None):
236
+ """Transform multi-class labels to binary labels.
237
+
238
+ The output of transform is sometimes referred to by some authors as
239
+ the 1-of-K coding scheme.
240
+
241
+ Parameters
242
+ ----------
243
+ y : {array, sparse matrix} of shape (n_samples,) or \
244
+ (n_samples, n_classes)
245
+ Target values. The 2-d matrix should only contain 0 and 1,
246
+ represents multilabel classification. Sparse matrix can be
247
+ CSR, CSC, COO, DOK, or LIL.
248
+
249
+ Returns
250
+ -------
251
+ Y : {ndarray, sparse matrix} of shape (n_samples, n_classes)
252
+ Shape will be (n_samples, 1) for binary problems. Sparse matrix
253
+ will be of CSR format.
254
+ """
255
+ check_is_fitted(self)
256
+
257
+ y = mt.tensor(y)
258
+ target = type_of_target(y)
259
+
260
+ if check:
261
+ y = y.mf.apply_chunk(
262
+ self._check_y_type_src_target,
263
+ args=(self.y_type_, target),
264
+ shape=y.shape,
265
+ dtype=y.dtype,
266
+ )
267
+
268
+ return label_binarize(
269
+ y,
270
+ classes=self.classes_,
271
+ pos_label=self.pos_label,
272
+ neg_label=self.neg_label,
273
+ sparse_output=self.sparse_output,
274
+ execute=execute,
275
+ session=session,
276
+ run_kwargs=run_kwargs,
277
+ )
278
+
279
+ def inverse_transform(self, Y, threshold=None):
280
+ """Transform binary labels back to multi-class labels.
281
+
282
+ Parameters
283
+ ----------
284
+ Y : {ndarray, sparse matrix} of shape (n_samples, n_classes)
285
+ Target values. All sparse matrices are converted to CSR before
286
+ inverse transformation.
287
+
288
+ threshold : float, default=None
289
+ Threshold used in the binary and multi-label cases.
290
+
291
+ Use 0 when ``Y`` contains the output of decision_function
292
+ (classifier).
293
+ Use 0.5 when ``Y`` contains the output of predict_proba.
294
+
295
+ If None, the threshold is assumed to be half way between
296
+ neg_label and pos_label.
297
+
298
+ Returns
299
+ -------
300
+ y : {ndarray, sparse matrix} of shape (n_samples,)
301
+ Target values. Sparse matrix will be of CSR format.
302
+
303
+ Notes
304
+ -----
305
+ In the case when the binary labels are fractional
306
+ (probabilistic), inverse_transform chooses the class with the
307
+ greatest value. Typically, this allows to use the output of a
308
+ linear model's decision_function method directly as the input
309
+ of inverse_transform.
310
+ """
311
+ check_is_fitted(self)
312
+
313
+ if threshold is None:
314
+ threshold = (self.pos_label + self.neg_label) / 2.0
315
+
316
+ Y = mt.tensor(Y)
317
+ shape = (Y.shape[0],) if self.y_type_ != "multilabel-indicator" else Y.shape
318
+ y_inv = Y.mf.apply_chunk(
319
+ _inverse_binarize,
320
+ args=(self.y_type_, self.classes_, threshold),
321
+ dtype=self.classes_.dtype,
322
+ shape=shape,
323
+ sparse=False,
324
+ )
325
+ if self.sparse_input_:
326
+ y_inv = y_inv.tosparse()
327
+ elif y_inv.issparse():
328
+ y_inv = y_inv.todense()
329
+
330
+ return y_inv
331
+
332
+
333
+ class LabelBinarizeOp(Operator, LearnOperatorMixin):
334
+ _op_type_ = opcodes.LABEL_BINARIZE
335
+
336
+ y = AnyField("y")
337
+ classes = AnyField("classes", default=None)
338
+ n_classes = Int32Field("n_classes", default=None)
339
+ neg_label = Int32Field("neg_label", default=None)
340
+ pos_label = Int32Field("pos_label", default=None)
341
+ sparse_output = BoolField("sparse_output", default=None)
342
+ y_type = AnyField("y_type", default=None)
343
+ # for chunk
344
+ pos_switch = BoolField("pos_switch", default=None)
345
+
346
+ def __call__(
347
+ self,
348
+ y: TileableType,
349
+ classes: TileableType,
350
+ y_type: TileableType = None,
351
+ check: bool = True,
352
+ ):
353
+ inputs = []
354
+ if check and not isinstance(y, list):
355
+ # XXX Workaround that will be removed when list of list format is
356
+ # dropped
357
+ self.y = y = check_array(y, accept_sparse=True, ensure_2d=False, dtype=None)
358
+
359
+ for arg in (y, classes, y_type):
360
+ if isinstance(arg, ENTITY_TYPE):
361
+ inputs.append(arg)
362
+
363
+ self.sparse = self.sparse_output
364
+ self.output_types = [OutputType.tensor]
365
+ n_classes = len(classes) if classes is not None else self.n_classes
366
+ if n_classes == 2:
367
+ n_dim1 = 1
368
+ else:
369
+ n_dim1 = n_classes
370
+ return self.new_tileable(
371
+ inputs,
372
+ shape=(mt.asarray(y).shape[0], n_dim1),
373
+ dtype=np.dtype(int),
374
+ order=TensorOrder.C_ORDER,
375
+ )
376
+
377
+ @classmethod
378
+ def _set_inputs(cls, op: "LabelBinarizeOp", inputs: List[EntityType]):
379
+ super()._set_inputs(op, inputs)
380
+ input_it = iter(op.inputs)
381
+ if isinstance(op.y, ENTITY_TYPE):
382
+ op.y = next(input_it)
383
+ if isinstance(op.classes, ENTITY_TYPE):
384
+ op.classes = next(input_it)
385
+ if isinstance(op.y_type, ENTITY_TYPE):
386
+ op.y_type = next(input_it)
387
+
388
+
389
+ def _label_binarize(
390
+ y,
391
+ *,
392
+ classes=None,
393
+ n_classes=None,
394
+ neg_label=0,
395
+ pos_label=1,
396
+ sparse_output=False,
397
+ y_type=None,
398
+ ):
399
+ """
400
+ Internal label binarize function with additional arguments.
401
+
402
+ Special Parameters
403
+ ------------------
404
+ n_classes : int
405
+ Number of classes. If provided, will use 0..n_classes - 1 as classes.
406
+ y_type : str
407
+ Type of label. If provided, the OP will use the value directly to reduce
408
+ potential execution.
409
+ """
410
+ op = LabelBinarizeOp(
411
+ y=y,
412
+ classes=classes,
413
+ n_classes=n_classes,
414
+ neg_label=neg_label,
415
+ pos_label=pos_label,
416
+ sparse_output=sparse_output,
417
+ y_type=y_type,
418
+ )
419
+ return op(y, classes)
420
+
421
+
422
+ def label_binarize(
423
+ y,
424
+ *,
425
+ classes,
426
+ neg_label=0,
427
+ pos_label=1,
428
+ sparse_output=False,
429
+ execute=False,
430
+ session=None,
431
+ run_kwargs=None,
432
+ ):
433
+ """Binarize labels in a one-vs-all fashion.
434
+
435
+ Several regression and binary classification algorithms are
436
+ available in scikit-learn. A simple way to extend these algorithms
437
+ to the multi-class classification case is to use the so-called
438
+ one-vs-all scheme.
439
+
440
+ This function makes it possible to compute this transformation for a
441
+ fixed set of class labels known ahead of time.
442
+
443
+ Parameters
444
+ ----------
445
+ y : array-like
446
+ Sequence of integer labels or multilabel data to encode.
447
+
448
+ classes : array-like of shape (n_classes,)
449
+ Uniquely holds the label for each class.
450
+
451
+ neg_label : int, default=0
452
+ Value with which negative labels must be encoded.
453
+
454
+ pos_label : int, default=1
455
+ Value with which positive labels must be encoded.
456
+
457
+ sparse_output : bool, default=False,
458
+ Set to true if output binary array is desired in CSR sparse format.
459
+
460
+ Returns
461
+ -------
462
+ Y : {tensor, sparse tensor} of shape (n_samples, n_classes)
463
+ Shape will be (n_samples, 1) for binary problems.
464
+
465
+ Examples
466
+ --------
467
+ >>> from maxframe.learn.preprocessing import label_binarize
468
+ >>> label_binarize([1, 6], classes=[1, 2, 4, 6])
469
+ array([[1, 0, 0, 0],
470
+ [0, 0, 0, 1]])
471
+
472
+ The class ordering is preserved:
473
+
474
+ >>> label_binarize([1, 6], classes=[1, 6, 4, 2])
475
+ array([[1, 0, 0, 0],
476
+ [0, 1, 0, 0]])
477
+
478
+ Binary targets transform to a column vector
479
+
480
+ >>> label_binarize(['yes', 'no', 'no', 'yes'], classes=['no', 'yes'])
481
+ array([[1],
482
+ [0],
483
+ [0],
484
+ [1]])
485
+
486
+ See Also
487
+ --------
488
+ LabelBinarizer : Class used to wrap the functionality of label_binarize and
489
+ allow for fitting to classes independently of the transform operation.
490
+ """
491
+ result = _label_binarize(
492
+ y,
493
+ classes=classes,
494
+ neg_label=neg_label,
495
+ pos_label=pos_label,
496
+ sparse_output=sparse_output,
497
+ )
498
+ if not execute:
499
+ return result
500
+ return result.execute(session=session, **(run_kwargs or {}))
501
+
502
+
503
+ @builtin_function
504
+ def _inverse_binarize(y, output_type, classes, threshold):
505
+ if output_type == "multiclass":
506
+ return _inverse_binarize_multiclass(y, classes)
507
+ else:
508
+ return _inverse_binarize_thresholding(y, output_type, classes, threshold)
509
+
510
+
511
+ def _inverse_binarize_multiclass(y, classes): # pragma: no cover
512
+ """Inverse label binarization transformation for multiclass.
513
+
514
+ Multiclass uses the maximal score instead of a threshold.
515
+ """
516
+ from sklearn.utils.sparsefuncs import min_max_axis
517
+
518
+ classes = np.asarray(classes)
519
+
520
+ if sps.issparse(y):
521
+ # Find the argmax for each row in y where y is a CSR matrix
522
+
523
+ y = y.tocsr()
524
+ n_samples, n_outputs = y.shape
525
+ outputs = np.arange(n_outputs)
526
+ row_max = min_max_axis(y, 1)[1]
527
+ row_nnz = np.diff(y.indptr)
528
+
529
+ y_data_repeated_max = np.repeat(row_max, row_nnz)
530
+ # picks out all indices obtaining the maximum per row
531
+ y_i_all_argmax = np.flatnonzero(y_data_repeated_max == y.data)
532
+
533
+ # For corner case where last row has a max of 0
534
+ if row_max[-1] == 0:
535
+ y_i_all_argmax = np.append(y_i_all_argmax, [len(y.data)])
536
+
537
+ # Gets the index of the first argmax in each row from y_i_all_argmax
538
+ index_first_argmax = np.searchsorted(y_i_all_argmax, y.indptr[:-1])
539
+ # first argmax of each row
540
+ y_ind_ext = np.append(y.indices, [0])
541
+ y_i_argmax = y_ind_ext[y_i_all_argmax[index_first_argmax]]
542
+ # Handle rows of all 0
543
+ y_i_argmax[np.where(row_nnz == 0)[0]] = 0
544
+
545
+ # Handles rows with max of 0 that contain negative numbers
546
+ samples = np.arange(n_samples)[(row_nnz > 0) & (row_max.ravel() == 0)]
547
+ for i in samples:
548
+ ind = y.indices[y.indptr[i] : y.indptr[i + 1]]
549
+ y_i_argmax[i] = classes[np.setdiff1d(outputs, ind)][0]
550
+
551
+ return classes[y_i_argmax]
552
+ else:
553
+ return classes.take(y.argmax(axis=1), mode="clip")
554
+
555
+
556
+ def _inverse_binarize_thresholding(
557
+ y, output_type, classes, threshold
558
+ ): # pragma: no cover
559
+ """Inverse label binarization transformation using thresholding."""
560
+
561
+ if output_type == "binary" and y.ndim == 2 and y.shape[1] > 2:
562
+ raise ValueError("output_type='binary', but y.shape = {0}".format(y.shape))
563
+
564
+ if output_type != "binary" and y.shape[1] != len(classes):
565
+ raise ValueError(
566
+ "The number of class is not equal to the number of dimension of y."
567
+ )
568
+
569
+ classes = np.asarray(classes)
570
+
571
+ # Perform thresholding
572
+ if sps.issparse(y):
573
+ if threshold > 0:
574
+ if y.format not in ("csr", "csc"):
575
+ y = y.tocsr()
576
+ y.data = np.array(y.data > threshold, dtype=int)
577
+ y.eliminate_zeros()
578
+ else:
579
+ y = np.array(y.toarray() > threshold, dtype=int)
580
+ else:
581
+ y = np.array(y > threshold, dtype=int)
582
+
583
+ # Inverse transform data
584
+ if output_type == "binary":
585
+ if sps.issparse(y):
586
+ y = y.toarray()
587
+ if y.ndim == 2 and y.shape[1] == 2:
588
+ return classes[y[:, 1]]
589
+ else:
590
+ if len(classes) == 1:
591
+ return np.repeat(classes[0], len(y))
592
+ else:
593
+ return classes[y.ravel()]
594
+
595
+ elif output_type == "multilabel-indicator":
596
+ return y
597
+
598
+ else:
599
+ raise ValueError("{0} format is not supported".format(output_type))