4747 from collections .abc import Sequence
4848
4949 from sumpy .assignment_collection import SymbolicAssignmentCollection
50+ from sumpy .expansion .diff_op import MultiIndex
5051 from sumpy .expansion .m2l import M2LTranslationBase
5152 from sumpy .expansion .multipole import (
5253 MultipoleExpansionBase ,
@@ -117,12 +118,14 @@ def m2l_translation(self):
117118 # FIXME: Um...
118119 raise NotImplementedError ()
119120
120- def get_storage_index (self , k ):
121- return k
122-
121+ @override
122+ def get_storage_index (self , mi : MultiIndex ):
123+ ind , = mi
124+ return ind
123125
126+ @override
124127 def get_coefficient_identifiers (self ):
125- return list ( range (self .order + 1 ))
128+ return [( i ,) for i in range (self .order + 1 )]
126129
127130 @override
128131 def coefficients_from_source (self ,
@@ -172,7 +175,7 @@ def evaluate(self, tgt_kernel, coeffs, bvec, rscale, sac=None):
172175 # NOTE: We can't meaningfully apply target derivatives here.
173176 # Instead, this is handled in LayerPotentialBase._evaluate.
174177 return sym .Add (* (
175- coeffs [self .get_storage_index (i )] / math .factorial (i )
178+ coeffs [self .get_storage_index (i )] / math .factorial (i [ 0 ] )
176179 for i in self .get_coefficient_identifiers ()))
177180
178181 @override
@@ -551,11 +554,14 @@ def m2l_translation(self) -> M2LTranslationBase:
551554 def get_bessel_arg_scaling (self ):
552555 pass
553556
554- def get_storage_index (self , k ):
555- return self .order + k
557+ @override
558+ def get_storage_index (self , mi : MultiIndex ):
559+ ind , = mi
560+ return self .order + ind
556561
562+ @override
557563 def get_coefficient_identifiers (self ):
558- return list ( range (- self .order , self .order + 1 ))
564+ return [( i ,) for i in range (- self .order , self .order + 1 )]
559565
560566 @override
561567 def coefficients_from_source (self ,
@@ -579,7 +585,7 @@ def coefficients_from_source(self,
579585 Hankel1 (c , arg_scale * avec_len , 0 )
580586 * rscale ** abs (c )
581587 * sym .exp (sym .I * c * source_angle_rel_center ), avec )
582- for c in self .get_coefficient_identifiers ()]
588+ for c , in self .get_coefficient_identifiers ()]
583589
584590 @override
585591 def evaluate (self ,
@@ -598,12 +604,12 @@ def evaluate(self,
598604
599605 arg_scale = self .get_bessel_arg_scaling ()
600606
601- return sym .sympify (sum (coeffs [self .get_storage_index (c )]
607+ return sym .sympify (sum (coeffs [self .get_storage_index (( c ,) )]
602608 * kernel .postprocess_at_target (
603609 BesselJ (c , arg_scale * bvec_len , 0 )
604610 / rscale ** abs (c )
605611 * sym .exp (sym .I * c * - target_angle_rel_center ), bvec )
606- for c in self .get_coefficient_identifiers ()))
612+ for c , in self .get_coefficient_identifiers ()))
607613
608614 @override
609615 def translate_from (self ,
@@ -628,14 +634,14 @@ def translate_from(self,
628634 new_center_angle_rel_old_center = sym .atan2 (dvec [1 ], dvec [0 ])
629635 translated_coeffs = []
630636
631- for j in self .get_coefficient_identifiers ():
637+ for j , in self .get_coefficient_identifiers ():
632638 translated_coeffs .append (
633- sum (src_coeff_exprs [src_expansion .get_storage_index (m )]
639+ sum (src_coeff_exprs [src_expansion .get_storage_index (( m ,) )]
634640 * BesselJ (m - j , arg_scale * dvec_len , 0 )
635641 / src_rscale ** abs (m )
636642 * tgt_rscale ** abs (j )
637643 * sym .exp (sym .I * (m - j ) * - new_center_angle_rel_old_center )
638- for m in src_expansion .get_coefficient_identifiers ()))
644+ for m , in src_expansion .get_coefficient_identifiers ()))
639645 return translated_coeffs
640646
641647 if isinstance (src_expansion , self .mpole_expn_class ):
0 commit comments