File tree Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Original file line number Diff line number Diff line change 5
5
Pint interoperability with array API standard arrays.
6
6
"""
7
7
8
+ import collections
8
9
import importlib
9
10
import sys
10
11
import textwrap
@@ -555,6 +556,34 @@ def matrix_transpose(x):
555
556
556
557
mod .matrix_transpose = matrix_transpose
557
558
559
+ ## Set Functions ##
560
+ def get_set_fun (func_str ):
561
+ def set_fun (x , / ):
562
+ x = asarray (x )
563
+ units = x .units
564
+ magnitude = xp .asarray (x .magnitude , copy = True )
565
+
566
+ xp_func = getattr (xp , func_str )
567
+ res = xp_func (magnitude )
568
+ if func_str == "unique_values" :
569
+ return ArrayUnitQuantity (res , units )
570
+
571
+ fields = res ._fields
572
+ name_tuple = res .__class__ .__name__
573
+ result_class = collections .namedtuple (name_tuple , fields )
574
+
575
+ result_list = []
576
+ for res_i , field_i in zip (res , fields , strict = False ):
577
+ units_i = units if field_i == "values" else None
578
+ result_list .append (ArrayUnitQuantity (res_i , units_i ))
579
+ return result_class (* result_list )
580
+
581
+ return set_fun
582
+
583
+ unique_names = ["unique_values" , "unique_counts" , "unique_inverse" , "unique_all" ]
584
+ for name in unique_names :
585
+ setattr (mod , name , get_set_fun (name ))
586
+
558
587
# Handle functions with output unit defined by operation
559
588
560
589
# output_unit="sum":
You can’t perform that action at this time.
0 commit comments