maxframe 2.0.0b2__cp37-cp37m-win32.whl → 2.3.0rc1__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 (443) hide show
  1. maxframe/__init__.py +1 -0
  2. maxframe/_utils.cp37-win32.pyd +0 -0
  3. maxframe/_utils.pyx +14 -1
  4. maxframe/codegen/core.py +9 -8
  5. maxframe/codegen/spe/core.py +1 -1
  6. maxframe/codegen/spe/dataframe/__init__.py +1 -0
  7. maxframe/codegen/spe/dataframe/accessors/base.py +18 -0
  8. maxframe/codegen/spe/dataframe/accessors/dict_.py +25 -130
  9. maxframe/codegen/spe/dataframe/accessors/list_.py +12 -48
  10. maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
  11. maxframe/codegen/spe/dataframe/arithmetic.py +7 -2
  12. maxframe/codegen/spe/dataframe/groupby.py +88 -0
  13. maxframe/codegen/spe/dataframe/indexing.py +99 -4
  14. maxframe/codegen/spe/dataframe/merge.py +38 -1
  15. maxframe/codegen/spe/dataframe/misc.py +11 -33
  16. maxframe/codegen/spe/dataframe/reduction.py +32 -9
  17. maxframe/codegen/spe/dataframe/reshape.py +46 -0
  18. maxframe/codegen/spe/dataframe/sort.py +39 -18
  19. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +9 -15
  20. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +4 -7
  21. maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -0
  22. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +20 -1
  23. maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -0
  24. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +0 -32
  25. maxframe/codegen/spe/dataframe/tests/test_groupby.py +81 -18
  26. maxframe/codegen/spe/dataframe/tests/test_merge.py +27 -1
  27. maxframe/codegen/spe/dataframe/tests/test_reduction.py +13 -0
  28. maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
  29. maxframe/codegen/spe/dataframe/tests/test_sort.py +20 -0
  30. maxframe/codegen/spe/dataframe/tseries.py +9 -0
  31. maxframe/codegen/spe/learn/contrib/lightgbm.py +4 -3
  32. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +2 -1
  33. maxframe/codegen/spe/learn/metrics/__init__.py +1 -1
  34. maxframe/codegen/spe/learn/metrics/_ranking.py +76 -0
  35. maxframe/codegen/spe/learn/metrics/pairwise.py +51 -0
  36. maxframe/codegen/spe/learn/metrics/tests/test_pairwise.py +36 -0
  37. maxframe/codegen/spe/learn/metrics/tests/test_ranking.py +59 -0
  38. maxframe/codegen/spe/tensor/__init__.py +3 -0
  39. maxframe/codegen/spe/tensor/datasource.py +1 -0
  40. maxframe/codegen/spe/tensor/fft.py +74 -0
  41. maxframe/codegen/spe/tensor/linalg.py +29 -2
  42. maxframe/codegen/spe/tensor/misc.py +79 -25
  43. maxframe/codegen/spe/tensor/spatial.py +45 -0
  44. maxframe/codegen/spe/tensor/statistics.py +44 -0
  45. maxframe/codegen/spe/tensor/tests/test_fft.py +64 -0
  46. maxframe/codegen/spe/tensor/tests/test_linalg.py +15 -1
  47. maxframe/codegen/spe/tensor/tests/test_misc.py +52 -2
  48. maxframe/codegen/spe/tensor/tests/test_spatial.py +33 -0
  49. maxframe/codegen/spe/tensor/tests/test_statistics.py +15 -1
  50. maxframe/codegen/spe/tests/test_spe_codegen.py +6 -12
  51. maxframe/codegen/spe/utils.py +2 -0
  52. maxframe/config/config.py +73 -9
  53. maxframe/config/tests/test_validators.py +13 -1
  54. maxframe/config/validators.py +49 -0
  55. maxframe/conftest.py +54 -17
  56. maxframe/core/accessor.py +2 -2
  57. maxframe/core/base.py +2 -1
  58. maxframe/core/entity/core.py +5 -0
  59. maxframe/core/entity/tileables.py +3 -1
  60. maxframe/core/graph/core.cp37-win32.pyd +0 -0
  61. maxframe/core/graph/entity.py +8 -3
  62. maxframe/core/mode.py +6 -1
  63. maxframe/core/operator/base.py +9 -2
  64. maxframe/core/operator/core.py +10 -2
  65. maxframe/core/operator/utils.py +13 -0
  66. maxframe/dataframe/__init__.py +12 -5
  67. maxframe/dataframe/accessors/__init__.py +1 -1
  68. maxframe/dataframe/accessors/compat.py +45 -0
  69. maxframe/dataframe/accessors/datetime_/__init__.py +4 -1
  70. maxframe/dataframe/accessors/dict_/contains.py +7 -16
  71. maxframe/dataframe/accessors/dict_/core.py +48 -0
  72. maxframe/dataframe/accessors/dict_/getitem.py +17 -21
  73. maxframe/dataframe/accessors/dict_/length.py +7 -16
  74. maxframe/dataframe/accessors/dict_/remove.py +6 -18
  75. maxframe/dataframe/accessors/dict_/setitem.py +8 -18
  76. maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +62 -22
  77. maxframe/dataframe/accessors/list_/__init__.py +2 -2
  78. maxframe/dataframe/accessors/list_/core.py +48 -0
  79. maxframe/dataframe/accessors/list_/getitem.py +12 -19
  80. maxframe/dataframe/accessors/list_/length.py +7 -16
  81. maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +11 -9
  82. maxframe/dataframe/accessors/string_/__init__.py +4 -1
  83. maxframe/dataframe/accessors/struct_/__init__.py +37 -0
  84. maxframe/dataframe/accessors/struct_/accessor.py +39 -0
  85. maxframe/dataframe/accessors/struct_/core.py +43 -0
  86. maxframe/dataframe/accessors/struct_/dtypes.py +53 -0
  87. maxframe/dataframe/accessors/struct_/field.py +123 -0
  88. maxframe/dataframe/accessors/struct_/tests/__init__.py +13 -0
  89. maxframe/dataframe/accessors/struct_/tests/test_struct_accessor.py +91 -0
  90. maxframe/dataframe/arithmetic/__init__.py +18 -4
  91. maxframe/dataframe/arithmetic/between.py +106 -0
  92. maxframe/dataframe/arithmetic/dot.py +237 -0
  93. maxframe/dataframe/arithmetic/maximum.py +33 -0
  94. maxframe/dataframe/arithmetic/minimum.py +33 -0
  95. maxframe/dataframe/arithmetic/{around.py → round.py} +11 -7
  96. maxframe/dataframe/core.py +161 -224
  97. maxframe/dataframe/datasource/__init__.py +18 -0
  98. maxframe/dataframe/datasource/core.py +6 -0
  99. maxframe/dataframe/datasource/direct.py +57 -0
  100. maxframe/dataframe/datasource/from_dict.py +124 -0
  101. maxframe/dataframe/datasource/from_index.py +1 -1
  102. maxframe/dataframe/datasource/from_records.py +77 -0
  103. maxframe/dataframe/datasource/from_tensor.py +109 -41
  104. maxframe/dataframe/datasource/read_csv.py +21 -14
  105. maxframe/dataframe/datasource/read_odps_query.py +29 -6
  106. maxframe/dataframe/datasource/read_odps_table.py +32 -10
  107. maxframe/dataframe/datasource/read_parquet.py +38 -39
  108. maxframe/dataframe/datasource/tests/test_datasource.py +37 -0
  109. maxframe/dataframe/datastore/__init__.py +11 -1
  110. maxframe/dataframe/datastore/direct.py +268 -0
  111. maxframe/dataframe/datastore/to_csv.py +29 -41
  112. maxframe/dataframe/datastore/to_odps.py +36 -4
  113. maxframe/dataframe/extensions/__init__.py +20 -4
  114. maxframe/dataframe/extensions/apply_chunk.py +32 -6
  115. maxframe/dataframe/extensions/cartesian_chunk.py +153 -0
  116. maxframe/dataframe/extensions/collect_kv.py +126 -0
  117. maxframe/dataframe/extensions/extract_kv.py +177 -0
  118. maxframe/dataframe/extensions/flatjson.py +2 -1
  119. maxframe/dataframe/extensions/map_reduce.py +263 -0
  120. maxframe/dataframe/extensions/rebalance.py +62 -0
  121. maxframe/dataframe/extensions/tests/test_apply_chunk.py +9 -2
  122. maxframe/dataframe/extensions/tests/test_extensions.py +54 -0
  123. maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
  124. maxframe/dataframe/groupby/__init__.py +17 -2
  125. maxframe/dataframe/groupby/aggregation.py +86 -49
  126. maxframe/dataframe/groupby/apply.py +1 -1
  127. maxframe/dataframe/groupby/apply_chunk.py +19 -5
  128. maxframe/dataframe/groupby/core.py +116 -16
  129. maxframe/dataframe/groupby/cum.py +4 -25
  130. maxframe/dataframe/groupby/expanding.py +264 -0
  131. maxframe/dataframe/groupby/fill.py +1 -1
  132. maxframe/dataframe/groupby/getitem.py +12 -5
  133. maxframe/dataframe/groupby/head.py +11 -1
  134. maxframe/dataframe/groupby/rank.py +136 -0
  135. maxframe/dataframe/groupby/rolling.py +206 -0
  136. maxframe/dataframe/groupby/shift.py +114 -0
  137. maxframe/dataframe/groupby/tests/test_groupby.py +0 -5
  138. maxframe/dataframe/indexing/__init__.py +22 -2
  139. maxframe/dataframe/indexing/droplevel.py +195 -0
  140. maxframe/dataframe/indexing/filter.py +169 -0
  141. maxframe/dataframe/indexing/get_level_values.py +76 -0
  142. maxframe/dataframe/indexing/iat.py +45 -0
  143. maxframe/dataframe/indexing/iloc.py +152 -12
  144. maxframe/dataframe/indexing/insert.py +46 -18
  145. maxframe/dataframe/indexing/loc.py +287 -7
  146. maxframe/dataframe/indexing/reindex.py +14 -5
  147. maxframe/dataframe/indexing/rename.py +6 -0
  148. maxframe/dataframe/indexing/rename_axis.py +2 -2
  149. maxframe/dataframe/indexing/reorder_levels.py +143 -0
  150. maxframe/dataframe/indexing/reset_index.py +33 -6
  151. maxframe/dataframe/indexing/sample.py +8 -0
  152. maxframe/dataframe/indexing/setitem.py +3 -3
  153. maxframe/dataframe/indexing/swaplevel.py +185 -0
  154. maxframe/dataframe/indexing/take.py +99 -0
  155. maxframe/dataframe/indexing/truncate.py +140 -0
  156. maxframe/dataframe/indexing/where.py +0 -11
  157. maxframe/dataframe/indexing/xs.py +148 -0
  158. maxframe/dataframe/merge/__init__.py +15 -1
  159. maxframe/dataframe/merge/append.py +97 -98
  160. maxframe/dataframe/merge/combine.py +244 -0
  161. maxframe/dataframe/merge/combine_first.py +120 -0
  162. maxframe/dataframe/merge/compare.py +387 -0
  163. maxframe/dataframe/merge/concat.py +183 -0
  164. maxframe/dataframe/merge/update.py +271 -0
  165. maxframe/dataframe/misc/__init__.py +28 -11
  166. maxframe/dataframe/misc/_duplicate.py +10 -4
  167. maxframe/dataframe/misc/apply.py +1 -1
  168. maxframe/dataframe/misc/check_unique.py +82 -0
  169. maxframe/dataframe/misc/clip.py +145 -0
  170. maxframe/dataframe/misc/describe.py +175 -9
  171. maxframe/dataframe/misc/drop.py +31 -0
  172. maxframe/dataframe/misc/drop_duplicates.py +2 -2
  173. maxframe/dataframe/misc/duplicated.py +2 -2
  174. maxframe/dataframe/misc/get_dummies.py +5 -1
  175. maxframe/dataframe/misc/infer_dtypes.py +251 -0
  176. maxframe/dataframe/misc/isin.py +2 -2
  177. maxframe/dataframe/misc/map.py +125 -18
  178. maxframe/dataframe/misc/repeat.py +159 -0
  179. maxframe/dataframe/misc/tests/test_misc.py +48 -3
  180. maxframe/dataframe/misc/to_numeric.py +3 -0
  181. maxframe/dataframe/misc/transform.py +12 -5
  182. maxframe/dataframe/misc/transpose.py +13 -1
  183. maxframe/dataframe/misc/valid_index.py +115 -0
  184. maxframe/dataframe/misc/value_counts.py +38 -4
  185. maxframe/dataframe/missing/checkna.py +14 -6
  186. maxframe/dataframe/missing/dropna.py +5 -0
  187. maxframe/dataframe/missing/fillna.py +1 -1
  188. maxframe/dataframe/missing/replace.py +7 -4
  189. maxframe/dataframe/reduction/__init__.py +35 -16
  190. maxframe/dataframe/reduction/aggregation.py +43 -14
  191. maxframe/dataframe/reduction/all.py +2 -2
  192. maxframe/dataframe/reduction/any.py +2 -2
  193. maxframe/dataframe/reduction/argmax.py +103 -0
  194. maxframe/dataframe/reduction/argmin.py +103 -0
  195. maxframe/dataframe/reduction/core.py +80 -24
  196. maxframe/dataframe/reduction/count.py +13 -9
  197. maxframe/dataframe/reduction/cov.py +166 -0
  198. maxframe/dataframe/reduction/cummax.py +2 -2
  199. maxframe/dataframe/reduction/cummin.py +2 -2
  200. maxframe/dataframe/reduction/cumprod.py +2 -2
  201. maxframe/dataframe/reduction/cumsum.py +2 -2
  202. maxframe/dataframe/reduction/custom_reduction.py +2 -2
  203. maxframe/dataframe/reduction/idxmax.py +185 -0
  204. maxframe/dataframe/reduction/idxmin.py +185 -0
  205. maxframe/dataframe/reduction/kurtosis.py +37 -30
  206. maxframe/dataframe/reduction/max.py +2 -2
  207. maxframe/dataframe/reduction/mean.py +9 -7
  208. maxframe/dataframe/reduction/median.py +2 -2
  209. maxframe/dataframe/reduction/min.py +2 -2
  210. maxframe/dataframe/reduction/mode.py +144 -0
  211. maxframe/dataframe/reduction/nunique.py +19 -11
  212. maxframe/dataframe/reduction/prod.py +18 -13
  213. maxframe/dataframe/reduction/reduction_size.py +2 -2
  214. maxframe/dataframe/reduction/sem.py +13 -9
  215. maxframe/dataframe/reduction/skew.py +31 -27
  216. maxframe/dataframe/reduction/str_concat.py +10 -7
  217. maxframe/dataframe/reduction/sum.py +18 -14
  218. maxframe/dataframe/reduction/tests/test_reduction.py +12 -0
  219. maxframe/dataframe/reduction/unique.py +20 -3
  220. maxframe/dataframe/reduction/var.py +16 -12
  221. maxframe/dataframe/reshape/__init__.py +38 -0
  222. maxframe/dataframe/{misc → reshape}/pivot.py +1 -0
  223. maxframe/dataframe/{misc → reshape}/pivot_table.py +1 -0
  224. maxframe/dataframe/reshape/unstack.py +114 -0
  225. maxframe/dataframe/sort/__init__.py +16 -1
  226. maxframe/dataframe/sort/argsort.py +68 -0
  227. maxframe/dataframe/sort/core.py +2 -1
  228. maxframe/dataframe/sort/nlargest.py +238 -0
  229. maxframe/dataframe/sort/nsmallest.py +228 -0
  230. maxframe/dataframe/sort/rank.py +147 -0
  231. maxframe/dataframe/statistics/__init__.py +3 -3
  232. maxframe/dataframe/statistics/corr.py +1 -0
  233. maxframe/dataframe/statistics/quantile.py +2 -2
  234. maxframe/dataframe/tests/test_typing.py +104 -0
  235. maxframe/dataframe/tests/test_utils.py +66 -2
  236. maxframe/dataframe/tseries/__init__.py +19 -0
  237. maxframe/dataframe/tseries/at_time.py +61 -0
  238. maxframe/dataframe/tseries/between_time.py +122 -0
  239. maxframe/dataframe/typing_.py +185 -0
  240. maxframe/dataframe/utils.py +125 -52
  241. maxframe/dataframe/window/aggregation.py +8 -4
  242. maxframe/dataframe/window/core.py +14 -1
  243. maxframe/dataframe/window/ewm.py +1 -3
  244. maxframe/dataframe/window/expanding.py +37 -35
  245. maxframe/dataframe/window/rolling.py +49 -39
  246. maxframe/dataframe/window/tests/test_expanding.py +1 -7
  247. maxframe/dataframe/window/tests/test_rolling.py +1 -1
  248. maxframe/env.py +7 -4
  249. maxframe/errors.py +2 -2
  250. maxframe/io/odpsio/schema.py +9 -3
  251. maxframe/io/odpsio/tableio.py +7 -2
  252. maxframe/io/odpsio/tests/test_schema.py +198 -83
  253. maxframe/learn/__init__.py +10 -2
  254. maxframe/learn/cluster/__init__.py +15 -0
  255. maxframe/learn/cluster/_kmeans.py +782 -0
  256. maxframe/learn/contrib/llm/core.py +18 -7
  257. maxframe/learn/contrib/llm/deploy/__init__.py +13 -0
  258. maxframe/learn/contrib/llm/deploy/config.py +221 -0
  259. maxframe/learn/contrib/llm/deploy/core.py +247 -0
  260. maxframe/learn/contrib/llm/deploy/framework.py +35 -0
  261. maxframe/learn/contrib/llm/deploy/loader.py +360 -0
  262. maxframe/learn/contrib/llm/deploy/tests/__init__.py +13 -0
  263. maxframe/learn/contrib/llm/deploy/tests/test_register_models.py +359 -0
  264. maxframe/learn/contrib/llm/models/__init__.py +1 -0
  265. maxframe/learn/contrib/llm/models/dashscope.py +12 -6
  266. maxframe/learn/contrib/llm/models/managed.py +76 -11
  267. maxframe/learn/contrib/llm/models/openai.py +72 -0
  268. maxframe/learn/contrib/llm/tests/__init__.py +13 -0
  269. maxframe/learn/contrib/llm/tests/test_core.py +34 -0
  270. maxframe/learn/contrib/llm/tests/test_openai.py +187 -0
  271. maxframe/learn/contrib/llm/tests/test_text_gen.py +155 -0
  272. maxframe/learn/contrib/llm/text.py +348 -42
  273. maxframe/learn/contrib/models.py +4 -1
  274. maxframe/learn/contrib/xgboost/classifier.py +2 -0
  275. maxframe/learn/contrib/xgboost/core.py +113 -4
  276. maxframe/learn/contrib/xgboost/predict.py +4 -2
  277. maxframe/learn/contrib/xgboost/regressor.py +5 -0
  278. maxframe/learn/contrib/xgboost/train.py +7 -2
  279. maxframe/learn/core.py +66 -0
  280. maxframe/learn/linear_model/_base.py +58 -1
  281. maxframe/learn/linear_model/_lin_reg.py +1 -1
  282. maxframe/learn/metrics/__init__.py +6 -0
  283. maxframe/learn/metrics/_classification.py +145 -0
  284. maxframe/learn/metrics/_ranking.py +477 -0
  285. maxframe/learn/metrics/_scorer.py +60 -0
  286. maxframe/learn/metrics/pairwise/__init__.py +21 -0
  287. maxframe/learn/metrics/pairwise/core.py +77 -0
  288. maxframe/learn/metrics/pairwise/cosine.py +115 -0
  289. maxframe/learn/metrics/pairwise/euclidean.py +176 -0
  290. maxframe/learn/metrics/pairwise/haversine.py +96 -0
  291. maxframe/learn/metrics/pairwise/manhattan.py +80 -0
  292. maxframe/learn/metrics/pairwise/pairwise.py +127 -0
  293. maxframe/learn/metrics/pairwise/pairwise_distances_topk.py +121 -0
  294. maxframe/learn/metrics/pairwise/rbf_kernel.py +51 -0
  295. maxframe/learn/metrics/tests/__init__.py +13 -0
  296. maxframe/learn/metrics/tests/test_scorer.py +26 -0
  297. maxframe/learn/preprocessing/_data/min_max_scaler.py +34 -23
  298. maxframe/learn/preprocessing/_data/standard_scaler.py +34 -25
  299. maxframe/learn/utils/__init__.py +2 -1
  300. maxframe/learn/utils/checks.py +1 -2
  301. maxframe/learn/utils/core.py +59 -0
  302. maxframe/learn/utils/extmath.py +79 -9
  303. maxframe/learn/utils/odpsio.py +262 -0
  304. maxframe/learn/utils/validation.py +2 -2
  305. maxframe/lib/compat.py +40 -0
  306. maxframe/lib/dtypes_extension/__init__.py +16 -1
  307. maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +604 -0
  308. maxframe/lib/dtypes_extension/blob.py +304 -0
  309. maxframe/lib/dtypes_extension/dtypes.py +40 -0
  310. maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
  311. maxframe/lib/dtypes_extension/tests/test_dtypes.py +16 -1
  312. maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
  313. maxframe/lib/filesystem/_oss_lib/common.py +124 -50
  314. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  315. maxframe/lib/filesystem/_oss_lib/handle.py +21 -25
  316. maxframe/lib/filesystem/base.py +1 -1
  317. maxframe/lib/filesystem/core.py +1 -1
  318. maxframe/lib/filesystem/oss.py +115 -46
  319. maxframe/lib/filesystem/tests/test_oss.py +74 -36
  320. maxframe/lib/mmh3.cp37-win32.pyd +0 -0
  321. maxframe/lib/wrapped_pickle.py +10 -0
  322. maxframe/opcodes.py +41 -15
  323. maxframe/protocol.py +12 -0
  324. maxframe/remote/core.py +4 -0
  325. maxframe/serialization/__init__.py +11 -2
  326. maxframe/serialization/arrow.py +38 -13
  327. maxframe/serialization/blob.py +32 -0
  328. maxframe/serialization/core.cp37-win32.pyd +0 -0
  329. maxframe/serialization/core.pyx +39 -1
  330. maxframe/serialization/exception.py +2 -4
  331. maxframe/serialization/numpy.py +11 -0
  332. maxframe/serialization/pandas.py +46 -9
  333. maxframe/serialization/serializables/core.py +2 -2
  334. maxframe/serialization/tests/test_serial.py +31 -4
  335. maxframe/tensor/__init__.py +38 -8
  336. maxframe/tensor/arithmetic/__init__.py +19 -10
  337. maxframe/tensor/arithmetic/core.py +2 -2
  338. maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
  339. maxframe/tensor/arithmetic/tests/test_arithmetic.py +6 -9
  340. maxframe/tensor/core.py +6 -2
  341. maxframe/tensor/datasource/tests/test_datasource.py +2 -1
  342. maxframe/tensor/extensions/__init__.py +2 -0
  343. maxframe/tensor/extensions/apply_chunk.py +3 -3
  344. maxframe/tensor/extensions/rebalance.py +65 -0
  345. maxframe/tensor/fft/__init__.py +32 -0
  346. maxframe/tensor/fft/core.py +168 -0
  347. maxframe/tensor/fft/fft.py +112 -0
  348. maxframe/tensor/fft/fft2.py +118 -0
  349. maxframe/tensor/fft/fftfreq.py +80 -0
  350. maxframe/tensor/fft/fftn.py +123 -0
  351. maxframe/tensor/fft/fftshift.py +79 -0
  352. maxframe/tensor/fft/hfft.py +112 -0
  353. maxframe/tensor/fft/ifft.py +114 -0
  354. maxframe/tensor/fft/ifft2.py +115 -0
  355. maxframe/tensor/fft/ifftn.py +123 -0
  356. maxframe/tensor/fft/ifftshift.py +73 -0
  357. maxframe/tensor/fft/ihfft.py +93 -0
  358. maxframe/tensor/fft/irfft.py +118 -0
  359. maxframe/tensor/fft/irfft2.py +62 -0
  360. maxframe/tensor/fft/irfftn.py +114 -0
  361. maxframe/tensor/fft/rfft.py +116 -0
  362. maxframe/tensor/fft/rfft2.py +63 -0
  363. maxframe/tensor/fft/rfftfreq.py +87 -0
  364. maxframe/tensor/fft/rfftn.py +113 -0
  365. maxframe/tensor/indexing/fill_diagonal.py +1 -7
  366. maxframe/tensor/linalg/__init__.py +7 -0
  367. maxframe/tensor/linalg/_einsumfunc.py +1025 -0
  368. maxframe/tensor/linalg/cholesky.py +117 -0
  369. maxframe/tensor/linalg/einsum.py +339 -0
  370. maxframe/tensor/linalg/lstsq.py +100 -0
  371. maxframe/tensor/linalg/matrix_norm.py +75 -0
  372. maxframe/tensor/linalg/norm.py +249 -0
  373. maxframe/tensor/linalg/solve.py +72 -0
  374. maxframe/tensor/linalg/solve_triangular.py +2 -2
  375. maxframe/tensor/linalg/vector_norm.py +113 -0
  376. maxframe/tensor/misc/__init__.py +24 -1
  377. maxframe/tensor/misc/argwhere.py +72 -0
  378. maxframe/tensor/misc/array_split.py +46 -0
  379. maxframe/tensor/misc/broadcast_arrays.py +57 -0
  380. maxframe/tensor/misc/copyto.py +130 -0
  381. maxframe/tensor/misc/delete.py +104 -0
  382. maxframe/tensor/misc/dsplit.py +68 -0
  383. maxframe/tensor/misc/ediff1d.py +74 -0
  384. maxframe/tensor/misc/expand_dims.py +85 -0
  385. maxframe/tensor/misc/flip.py +90 -0
  386. maxframe/tensor/misc/fliplr.py +64 -0
  387. maxframe/tensor/misc/flipud.py +68 -0
  388. maxframe/tensor/misc/hsplit.py +85 -0
  389. maxframe/tensor/misc/insert.py +139 -0
  390. maxframe/tensor/misc/moveaxis.py +83 -0
  391. maxframe/tensor/misc/result_type.py +88 -0
  392. maxframe/tensor/misc/roll.py +124 -0
  393. maxframe/tensor/misc/rollaxis.py +77 -0
  394. maxframe/tensor/misc/shape.py +89 -0
  395. maxframe/tensor/misc/split.py +190 -0
  396. maxframe/tensor/misc/tile.py +109 -0
  397. maxframe/tensor/misc/vsplit.py +74 -0
  398. maxframe/tensor/reduction/array_equal.py +2 -1
  399. maxframe/tensor/sort/__init__.py +2 -0
  400. maxframe/tensor/sort/argpartition.py +98 -0
  401. maxframe/tensor/sort/partition.py +228 -0
  402. maxframe/tensor/spatial/__init__.py +15 -0
  403. maxframe/tensor/spatial/distance/__init__.py +17 -0
  404. maxframe/tensor/spatial/distance/cdist.py +421 -0
  405. maxframe/tensor/spatial/distance/pdist.py +398 -0
  406. maxframe/tensor/spatial/distance/squareform.py +153 -0
  407. maxframe/tensor/special/__init__.py +159 -21
  408. maxframe/tensor/special/airy.py +55 -0
  409. maxframe/tensor/special/bessel.py +199 -0
  410. maxframe/tensor/special/core.py +65 -4
  411. maxframe/tensor/special/ellip_func_integrals.py +155 -0
  412. maxframe/tensor/special/ellip_harm.py +55 -0
  413. maxframe/tensor/special/err_fresnel.py +223 -0
  414. maxframe/tensor/special/gamma_funcs.py +303 -0
  415. maxframe/tensor/special/hypergeometric_funcs.py +69 -0
  416. maxframe/tensor/special/info_theory.py +189 -0
  417. maxframe/tensor/special/misc.py +21 -0
  418. maxframe/tensor/statistics/__init__.py +6 -0
  419. maxframe/tensor/statistics/corrcoef.py +77 -0
  420. maxframe/tensor/statistics/cov.py +222 -0
  421. maxframe/tensor/statistics/digitize.py +126 -0
  422. maxframe/tensor/statistics/histogram.py +520 -0
  423. maxframe/tensor/statistics/median.py +85 -0
  424. maxframe/tensor/statistics/ptp.py +89 -0
  425. maxframe/tensor/utils.py +3 -3
  426. maxframe/tests/test_udf.py +61 -0
  427. maxframe/tests/test_utils.py +51 -6
  428. maxframe/tests/utils.py +0 -2
  429. maxframe/typing_.py +2 -0
  430. maxframe/udf.py +130 -9
  431. maxframe/utils.py +254 -27
  432. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/METADATA +3 -3
  433. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/RECORD +442 -264
  434. maxframe_client/fetcher.py +35 -4
  435. maxframe_client/session/odps.py +7 -2
  436. maxframe_client/session/task.py +8 -1
  437. maxframe_client/tests/test_fetcher.py +76 -3
  438. maxframe_client/tests/test_session.py +28 -1
  439. maxframe/dataframe/arrays.py +0 -864
  440. /maxframe/dataframe/{misc → reshape}/melt.py +0 -0
  441. /maxframe/dataframe/{misc → reshape}/stack.py +0 -0
  442. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/WHEEL +0 -0
  443. {maxframe-2.0.0b2.dist-info → maxframe-2.3.0rc1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,189 @@
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 ..arithmetic.utils import arithmetic_operator
16
+ from ..utils import implement_scipy, infer_scipy_dtype
17
+ from .core import TensorSpecialBinOp, TensorSpecialUnaryOp, _register_special_op
18
+
19
+
20
+ @_register_special_op
21
+ @arithmetic_operator(sparse_mode="unary")
22
+ class TensorEntr(TensorSpecialUnaryOp):
23
+ _func_name = "entr"
24
+
25
+
26
+ @implement_scipy("scipy.special.entr")
27
+ @infer_scipy_dtype("scipy.special.entr")
28
+ def entr(x, out=None, where=None, **kwargs):
29
+ r"""
30
+ Elementwise function for computing entropy.
31
+
32
+ .. math:: \text{entr}(x) = \begin{cases} - x \log(x) & x > 0 \\ 0 & x = 0 \\ -\infty & \text{otherwise} \end{cases}
33
+
34
+ Parameters
35
+ ----------
36
+ x : Tensor
37
+ Input tensor.
38
+
39
+ Returns
40
+ -------
41
+ res : Tensor
42
+ The value of the elementwise entropy function at the given points `x`.
43
+
44
+ See Also
45
+ --------
46
+ kl_div, rel_entr
47
+
48
+ Notes
49
+ -----
50
+ This function is concave.
51
+ """
52
+ op = TensorEntr(**kwargs)
53
+ return op(x, out=out, where=where)
54
+
55
+
56
+ @_register_special_op
57
+ class TensorRelEntr(TensorSpecialBinOp):
58
+ _func_name = "rel_entr"
59
+
60
+ @classmethod
61
+ def _is_sparse(cls, x1, x2):
62
+ if hasattr(x1, "issparse") and x1.issparse():
63
+ return True
64
+ return False
65
+
66
+
67
+ @implement_scipy("scipy.special.rel_entr")
68
+ @infer_scipy_dtype("scipy.special.rel_entr")
69
+ def rel_entr(x, y, out=None, where=None, **kwargs):
70
+ r"""
71
+ Elementwise function for computing relative entropy.
72
+
73
+ .. math::
74
+
75
+ \mathrm{rel\_entr}(x, y) =
76
+ \begin{cases}
77
+ x \log(x / y) & x > 0, y > 0 \\
78
+ 0 & x = 0, y \ge 0 \\
79
+ \infty & \text{otherwise}
80
+ \end{cases}
81
+
82
+ Parameters
83
+ ----------
84
+ x, y : array_like
85
+ Input arrays
86
+ out : ndarray, optional
87
+ Optional output array for the function results
88
+
89
+ Returns
90
+ -------
91
+ scalar or ndarray
92
+ Relative entropy of the inputs
93
+
94
+ See Also
95
+ --------
96
+ entr, kl_div
97
+
98
+ Notes
99
+ -----
100
+ This function is jointly convex in x and y.
101
+
102
+ The origin of this function is in convex programming; see
103
+ [1]_. Given two discrete probability distributions :math:`p_1,
104
+ \ldots, p_n` and :math:`q_1, \ldots, q_n`, to get the relative
105
+ entropy of statistics compute the sum
106
+
107
+ .. math::
108
+
109
+ \sum_{i = 1}^n \mathrm{rel\_entr}(p_i, q_i).
110
+
111
+ See [2]_ for details.
112
+
113
+ References
114
+ ----------
115
+ .. [1] Grant, Boyd, and Ye, "CVX: Matlab Software for Disciplined Convex
116
+ Programming", http://cvxr.com/cvx/
117
+ .. [2] Kullback-Leibler divergence,
118
+ https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
119
+ """
120
+ op = TensorRelEntr(**kwargs)
121
+ return op(x, y, out=out, where=where)
122
+
123
+
124
+ @_register_special_op
125
+ class TensorKlDiv(TensorSpecialBinOp):
126
+ _func_name = "kl_div"
127
+
128
+ @classmethod
129
+ def _is_sparse(cls, x1, x2):
130
+ if hasattr(x1, "issparse") and x1.issparse():
131
+ return True
132
+ return False
133
+
134
+
135
+ @implement_scipy("scipy.special.kl_div")
136
+ @infer_scipy_dtype("scipy.special.kl_div")
137
+ def kl_div(x, y, out=None, where=None, **kwargs):
138
+ r"""
139
+ Elementwise function for computing relative entropy.
140
+
141
+ .. math::
142
+
143
+ \mathrm{rel\_entr}(x, y) =
144
+ \begin{cases}
145
+ x \log(x / y) & x > 0, y > 0 \\
146
+ 0 & x = 0, y \ge 0 \\
147
+ \infty & \text{otherwise}
148
+ \end{cases}
149
+
150
+ Parameters
151
+ ----------
152
+ x, y : array_like
153
+ Input arrays
154
+ out : ndarray, optional
155
+ Optional output array for the function results
156
+
157
+ Returns
158
+ -------
159
+ scalar or ndarray
160
+ Relative entropy of the inputs
161
+
162
+ See Also
163
+ --------
164
+ entr, kl_div
165
+
166
+ Notes
167
+ -----
168
+ This function is jointly convex in x and y.
169
+
170
+ The origin of this function is in convex programming; see
171
+ [1]_. Given two discrete probability distributions :math:`p_1,
172
+ \ldots, p_n` and :math:`q_1, \ldots, q_n`, to get the relative
173
+ entropy of statistics compute the sum
174
+
175
+ .. math::
176
+
177
+ \sum_{i = 1}^n \mathrm{rel\_entr}(p_i, q_i).
178
+
179
+ See [2]_ for details.
180
+
181
+ References
182
+ ----------
183
+ .. [1] Grant, Boyd, and Ye, "CVX: Matlab Software for Disciplined Convex
184
+ Programming", http://cvxr.com/cvx/
185
+ .. [2] Kullback-Leibler divergence,
186
+ https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
187
+ """
188
+ op = TensorKlDiv(**kwargs)
189
+ return op(x, y, out=out, where=where)
@@ -12,6 +12,27 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from ..utils import implement_scipy, infer_scipy_dtype
16
+ from .core import TensorSpecialBinOp, _register_special_op
17
+
18
+
19
+ @_register_special_op
20
+ class TensorXLogY(TensorSpecialBinOp):
21
+ _func_name = "xlogy"
22
+
23
+ @classmethod
24
+ def _is_sparse(cls, x1, x2):
25
+ if hasattr(x1, "issparse") and x1.issparse():
26
+ return True
27
+ return False
28
+
29
+
30
+ @implement_scipy("scipy.special.xlogy")
31
+ @infer_scipy_dtype("scipy.special.xlogy")
32
+ def xlogy(x1, x2, out=None, where=None, **kwargs):
33
+ op = TensorXLogY(**kwargs)
34
+ return op(x1, x2, out=out, where=where)
35
+
15
36
 
16
37
  def softmax(x, axis=None):
17
38
  r"""
@@ -14,5 +14,11 @@
14
14
 
15
15
  from .average import average
16
16
  from .bincount import bincount
17
+ from .corrcoef import corrcoef
18
+ from .cov import cov
19
+ from .digitize import digitize
20
+ from .histogram import histogram, histogram_bin_edges
21
+ from .median import median
17
22
  from .percentile import percentile
23
+ from .ptp import ptp
18
24
  from .quantile import quantile
@@ -0,0 +1,77 @@
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 .cov import cov
16
+
17
+
18
+ def corrcoef(x, y=None, rowvar=True):
19
+ r"""
20
+ Return Pearson product-moment correlation coefficients.
21
+
22
+ Please refer to the documentation for `cov` for more detail. The
23
+ relationship between the correlation coefficient matrix, `R`, and the
24
+ covariance matrix, `C`, is
25
+
26
+ .. math:: R_{ij} = \frac{ C_{ij} } { \sqrt{ C_{ii} * C_{jj} } }
27
+
28
+ The values of `R` are between -1 and 1, inclusive.
29
+
30
+ Parameters
31
+ ----------
32
+ x : array_like
33
+ A 1-D or 2-D array containing multiple variables and observations.
34
+ Each row of `x` represents a variable, and each column a single
35
+ observation of all those variables. Also see `rowvar` below.
36
+ y : array_like, optional
37
+ An additional set of variables and observations. `y` has the same
38
+ shape as `x`.
39
+ rowvar : bool, optional
40
+ If `rowvar` is True (default), then each row represents a
41
+ variable, with observations in the columns. Otherwise, the relationship
42
+ is transposed: each column represents a variable, while the rows
43
+ contain observations.
44
+
45
+ Returns
46
+ -------
47
+ R : Tensor
48
+ The correlation coefficient matrix of the variables.
49
+
50
+ See Also
51
+ --------
52
+ cov : Covariance matrix
53
+
54
+ Notes
55
+ -----
56
+ Due to floating point rounding the resulting tensor may not be Hermitian,
57
+ the diagonal elements may not be 1, and the elements may not satisfy the
58
+ inequality abs(a) <= 1. The real and imaginary parts are clipped to the
59
+ interval [-1, 1] in an attempt to improve on that situation but is not
60
+ much help in the complex case.
61
+
62
+ This function accepts but discards arguments `bias` and `ddof`. This is
63
+ for backwards compatibility with previous versions of this function. These
64
+ arguments had no effect on the return values of the function and can be
65
+ safely ignored in this and previous versions of numpy.
66
+
67
+ """
68
+ from ..arithmetic import sqrt
69
+ from ..datasource import diag
70
+
71
+ c = cov(x, y, rowvar)
72
+ if c.ndim == 0:
73
+ return c / c
74
+ d = diag(c)
75
+ d = d.reshape(d.shape[0], 1)
76
+ sqrt_d = sqrt(d)
77
+ return (c / sqrt_d) / sqrt_d.T
@@ -0,0 +1,222 @@
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
+ import warnings
16
+
17
+ import numpy as np
18
+
19
+ from ..core import Tensor
20
+ from ..datasource import array
21
+ from ..datasource import tensor as astensor
22
+ from ..misc.squeeze import squeeze
23
+ from ..misc.where import where
24
+ from .average import average
25
+
26
+
27
+ def cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None):
28
+ """
29
+ Estimate a covariance matrix, given data and weights.
30
+
31
+ Covariance indicates the level to which two variables vary together.
32
+ If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,
33
+ then the covariance matrix element :math:`C_{ij}` is the covariance of
34
+ :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance
35
+ of :math:`x_i`.
36
+
37
+ See the notes for an outline of the algorithm.
38
+
39
+ Parameters
40
+ ----------
41
+ m : array_like
42
+ A 1-D or 2-D array containing multiple variables and observations.
43
+ Each row of `m` represents a variable, and each column a single
44
+ observation of all those variables. Also see `rowvar` below.
45
+ y : array_like, optional
46
+ An additional set of variables and observations. `y` has the same form
47
+ as that of `m`.
48
+ rowvar : bool, optional
49
+ If `rowvar` is True (default), then each row represents a
50
+ variable, with observations in the columns. Otherwise, the relationship
51
+ is transposed: each column represents a variable, while the rows
52
+ contain observations.
53
+ bias : bool, optional
54
+ Default normalization (False) is by ``(N - 1)``, where ``N`` is the
55
+ number of observations given (unbiased estimate). If `bias` is True,
56
+ then normalization is by ``N``. These values can be overridden by using
57
+ the keyword ``ddof`` in numpy versions >= 1.5.
58
+ ddof : int, optional
59
+ If not ``None`` the default value implied by `bias` is overridden.
60
+ Note that ``ddof=1`` will return the unbiased estimate, even if both
61
+ `fweights` and `aweights` are specified, and ``ddof=0`` will return
62
+ the simple average. See the notes for the details. The default value
63
+ is ``None``.
64
+ fweights : array_like, int, optional
65
+ 1-D tensor of integer freguency weights; the number of times each
66
+ observation vector should be repeated.
67
+ aweights : array_like, optional
68
+ 1-D tensor of observation vector weights. These relative weights are
69
+ typically large for observations considered "important" and smaller for
70
+ observations considered less "important". If ``ddof=0`` the array of
71
+ weights can be used to assign probabilities to observation vectors.
72
+
73
+ Returns
74
+ -------
75
+ out : Tensor
76
+ The covariance matrix of the variables.
77
+
78
+ See Also
79
+ --------
80
+ corrcoef : Normalized covariance matrix
81
+
82
+ Notes
83
+ -----
84
+ Assume that the observations are in the columns of the observation
85
+ array `m` and let ``f = fweights`` and ``a = aweights`` for brevity. The
86
+ steps to compute the weighted covariance are as follows::
87
+
88
+ >>> w = f * a
89
+ >>> v1 = mt.sum(w)
90
+ >>> v2 = mt.sum(w * a)
91
+ >>> m -= mt.sum(m * w, axis=1, keepdims=True) / v1
92
+ >>> cov = mt.dot(m * w, m.T) * v1 / (v1**2 - ddof * v2)
93
+
94
+ Note that when ``a == 1``, the normalization factor
95
+ ``v1 / (v1**2 - ddof * v2)`` goes over to ``1 / (np.sum(f) - ddof)``
96
+ as it should.
97
+
98
+ Examples
99
+ --------
100
+ Consider two variables, :math:`x_0` and :math:`x_1`, which
101
+ correlate perfectly, but in opposite directions:
102
+
103
+ >>> import maxframe.tensor as mt
104
+
105
+ >>> x = mt.array([[0, 2], [1, 1], [2, 0]]).T
106
+ >>> x.execute()
107
+ array([[0, 1, 2],
108
+ [2, 1, 0]])
109
+
110
+ Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance
111
+ matrix shows this clearly:
112
+
113
+ >>> mt.cov(x).execute()
114
+ array([[ 1., -1.],
115
+ [-1., 1.]])
116
+
117
+ Note that element :math:`C_{0,1}`, which shows the correlation between
118
+ :math:`x_0` and :math:`x_1`, is negative.
119
+
120
+ Further, note how `x` and `y` are combined:
121
+
122
+ >>> x = [-2.1, -1, 4.3]
123
+ >>> y = [3, 1.1, 0.12]
124
+ >>> X = mt.stack((x, y), axis=0)
125
+ >>> print(mt.cov(X).execute())
126
+ [[ 11.71 -4.286 ]
127
+ [ -4.286 2.14413333]]
128
+ >>> print(mt.cov(x, y).execute())
129
+ [[ 11.71 -4.286 ]
130
+ [ -4.286 2.14413333]]
131
+ >>> print(mt.cov(x).execute())
132
+ 11.71
133
+
134
+ """
135
+ from ..linalg import dot
136
+ from ..merge import vstack
137
+
138
+ if ddof is not None and ddof != int(ddof):
139
+ raise ValueError("ddof must be integer")
140
+
141
+ m = astensor(m)
142
+ if m.ndim > 2:
143
+ raise ValueError("m has more than 2 dimensions")
144
+
145
+ if y is None:
146
+ dtype = np.result_type(m.dtype, np.float64)
147
+ else:
148
+ y = astensor(y)
149
+ if y.ndim > 2:
150
+ raise ValueError("y has more than 2 dimensions")
151
+ dtype = np.result_type(m.dtype, y.dtype, np.float64)
152
+
153
+ X = array(m, ndmin=2, dtype=dtype)
154
+ if not rowvar and X.shape[0] != 1:
155
+ X = X.T
156
+ if y is not None:
157
+ y = array(y, copy=False, ndmin=2, dtype=dtype)
158
+ if not rowvar and y.shape[0] != 1:
159
+ y = y.T
160
+ X = vstack((X, y))
161
+
162
+ if ddof is None:
163
+ if bias == 0:
164
+ ddof = 1
165
+ else:
166
+ ddof = 0
167
+
168
+ # Get the product of frequencies and weights
169
+ w = None
170
+ if fweights is not None:
171
+ fweights = astensor(fweights, dtype=float)
172
+ if fweights.ndim > 1:
173
+ raise RuntimeError("cannot handle multidimensional fweights")
174
+ if fweights.shape[0] != X.shape[1]:
175
+ raise RuntimeError("incompatible numbers of samples and fweights")
176
+ if any(fweights < 0):
177
+ raise ValueError("fweights cannot be negative")
178
+ w = fweights
179
+ if aweights is not None:
180
+ aweights = astensor(aweights, dtype=float)
181
+ if aweights.ndim > 1:
182
+ raise RuntimeError("cannot handle multidimensional aweights")
183
+ if aweights.shape[0] != X.shape[1]:
184
+ raise RuntimeError("incompatible numbers of samples and aweights")
185
+ if any(aweights < 0):
186
+ raise ValueError("aweights cannot be negative")
187
+ if w is None:
188
+ w = aweights
189
+ else:
190
+ w *= aweights
191
+
192
+ avg, w_sum = average(X, axis=1, weights=w, returned=True)
193
+ w_sum = w_sum[0]
194
+
195
+ # Determine the normalization
196
+ if w is None:
197
+ fact = X.shape[1] - ddof
198
+ elif ddof == 0:
199
+ fact = w_sum
200
+ elif aweights is None:
201
+ fact = w_sum - ddof
202
+ else:
203
+ fact = w_sum - ddof * sum(w * aweights) / w_sum
204
+
205
+ X -= avg[:, None]
206
+ if w is None:
207
+ X_T = X.T
208
+ else:
209
+ X_T = (X * w).T
210
+ c = dot(X, X_T.conj())
211
+ if isinstance(fact, Tensor):
212
+ fact = where(fact <= 0, 0.0, fact)
213
+ fact = fact.astype(float)
214
+ else:
215
+ if fact <= 0:
216
+ warnings.warn(
217
+ "Degrees of freedom <= 0 for slice", RuntimeWarning, stacklevel=2
218
+ )
219
+ fact = 0.0
220
+ fact = np.float64(fact)
221
+ c = c * (1.0 / fact)
222
+ return squeeze(c)
@@ -0,0 +1,126 @@
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
+
19
+ from ... import opcodes
20
+ from ...lib.sparse.core import get_array_module
21
+ from ...serialization.serializables import AnyField, BoolField, KeyField
22
+ from ...typing_ import EntityType
23
+ from ..core import Tensor, TensorOrder
24
+ from ..datasource import tensor as astensor
25
+ from ..operators import TensorHasInput, TensorOperatorMixin
26
+
27
+
28
+ class TensorDigitize(TensorHasInput, TensorOperatorMixin):
29
+ _op_type_ = opcodes.DIGITIZE
30
+
31
+ input = KeyField("input")
32
+ bins = AnyField("bins")
33
+ right = BoolField("right")
34
+
35
+ @classmethod
36
+ def _set_inputs(cls, op: "TensorDigitize", inputs: List[EntityType]):
37
+ super()._set_inputs(op, inputs)
38
+ if len(inputs) > 1:
39
+ op.bins = op._inputs[1]
40
+
41
+ def __call__(self, x, bins):
42
+ x = astensor(x)
43
+ inputs = [x]
44
+ if not isinstance(bins, Tensor):
45
+ bins = get_array_module(bins).asarray(bins)
46
+ self.bins = bins
47
+ else:
48
+ inputs.append(bins)
49
+ self.dtype = np.digitize(
50
+ [0], np.empty(1, dtype=bins.dtype), right=self.right
51
+ ).dtype
52
+
53
+ return self.new_tensor(inputs, x.shape, order=TensorOrder.C_ORDER)
54
+
55
+
56
+ def digitize(x, bins, right=False):
57
+ """
58
+ Return the indices of the bins to which each value in input tensor belongs.
59
+
60
+ Each index ``i`` returned is such that ``bins[i-1] <= x < bins[i]`` if
61
+ `bins` is monotonically increasing, or ``bins[i-1] > x >= bins[i]`` if
62
+ `bins` is monotonically decreasing. If values in `x` are beyond the
63
+ bounds of `bins`, 0 or ``len(bins)`` is returned as appropriate. If right
64
+ is True, then the right bin is closed so that the index ``i`` is such
65
+ that ``bins[i-1] < x <= bins[i]`` or ``bins[i-1] >= x > bins[i]`` if `bins`
66
+ is monotonically increasing or decreasing, respectively.
67
+
68
+ Parameters
69
+ ----------
70
+ x : array_like
71
+ Input tensor to be binned.
72
+ bins : array_like
73
+ Array of bins. It has to be 1-dimensional and monotonic.
74
+ right : bool, optional
75
+ Indicating whether the intervals include the right or the left bin
76
+ edge. Default behavior is (right==False) indicating that the interval
77
+ does not include the right edge. The left bin end is open in this
78
+ case, i.e., bins[i-1] <= x < bins[i] is the default behavior for
79
+ monotonically increasing bins.
80
+
81
+ Returns
82
+ -------
83
+ out : Tensor of ints
84
+ Output tensor of indices, of same shape as `x`.
85
+
86
+ Raises
87
+ ------
88
+ ValueError
89
+ If `bins` is not monotonic.
90
+ TypeError
91
+ If the type of the input is complex.
92
+
93
+ See Also
94
+ --------
95
+ bincount, histogram, unique, searchsorted
96
+
97
+ Notes
98
+ -----
99
+ If values in `x` are such that they fall outside the bin range,
100
+ attempting to index `bins` with the indices that `digitize` returns
101
+ will result in an IndexError.
102
+
103
+ `mt.digitize` is implemented in terms of `mt.searchsorted`. This means
104
+ that a binary search is used to bin the values, which scales much better
105
+ for larger number of bins than the previous linear search. It also removes
106
+ the requirement for the input array to be 1-dimensional.
107
+
108
+ Examples
109
+ --------
110
+ >>> import maxframe.tensor as mt
111
+
112
+ >>> x = mt.array([0.2, 6.4, 3.0, 1.6])
113
+ >>> bins = mt.array([0.0, 1.0, 2.5, 4.0, 10.0])
114
+ >>> inds = mt.digitize(x, bins)
115
+ >>> inds.execute()
116
+ array([1, 4, 3, 2])
117
+
118
+ >>> x = mt.array([1.2, 10.0, 12.4, 15.5, 20.])
119
+ >>> bins = mt.array([0, 5, 10, 15, 20])
120
+ >>> mt.digitize(x,bins,right=True).execute()
121
+ array([1, 2, 3, 4, 4])
122
+ >>> mt.digitize(x,bins,right=False).execute()
123
+ array([1, 3, 3, 4, 5])
124
+ """
125
+ op = TensorDigitize(right=right)
126
+ return op(x, bins)