4848 from collections .abc import Sequence
4949
5050 from sumpy .assignment_collection import SymbolicAssignmentCollection
51+ from sumpy .expansion .diff_op import MultiIndex
5152 from sumpy .expansion .m2l import M2LTranslationBase
5253 from sumpy .expansion .multipole import (
5354 HankelBased2DMultipoleExpansion ,
@@ -118,12 +119,14 @@ def m2l_translation(self):
118119 # FIXME: Um...
119120 raise NotImplementedError ()
120121
121- def get_storage_index (self , k ):
122- return k
123-
122+ @override
123+ def get_storage_index (self , mi : MultiIndex ):
124+ ind , = mi
125+ return ind
124126
127+ @override
125128 def get_coefficient_identifiers (self ):
126- return list ( range (self .order + 1 ))
129+ return [( i ,) for i in range (self .order + 1 )]
127130
128131 @override
129132 def coefficients_from_source (self ,
@@ -165,15 +168,15 @@ def coefficients_from_source(self,
165168 return [kernel .postprocess_at_source (
166169 line_kernel .diff (tau , i ), avec )
167170 .subs (tau , 0 )
168- for i in self .get_coefficient_identifiers ()]
171+ for i , in self .get_coefficient_identifiers ()]
169172
170173 def evaluate (self , tgt_kernel , coeffs , bvec , rscale , sac = None ):
171174 # no point in heeding rscale here--just ignore it
172175
173176 # NOTE: We can't meaningfully apply target derivatives here.
174177 # Instead, this is handled in LayerPotentialBase._evaluate.
175178 return sym .Add (* (
176- coeffs [self .get_storage_index (i )] / math .factorial (i )
179+ coeffs [self .get_storage_index (i )] / math .factorial (i [ 0 ] )
177180 for i in self .get_coefficient_identifiers ()))
178181
179182 @override
@@ -557,11 +560,14 @@ def m2l_translation(self) -> M2LTranslationBase:
557560 def get_bessel_arg_scaling (self ):
558561 pass
559562
560- def get_storage_index (self , k ):
561- return self .order + k
563+ @override
564+ def get_storage_index (self , mi : MultiIndex ):
565+ ind , = mi
566+ return self .order + ind
562567
568+ @override
563569 def get_coefficient_identifiers (self ):
564- return list ( range (- self .order , self .order + 1 ))
570+ return [( i ,) for i in range (- self .order , self .order + 1 )]
565571
566572 @override
567573 def coefficients_from_source (self ,
@@ -585,7 +591,7 @@ def coefficients_from_source(self,
585591 Hankel1 (c , arg_scale * avec_len , 0 )
586592 * rscale ** abs (c )
587593 * sym .exp (sym .I * c * source_angle_rel_center ), avec )
588- for c in self .get_coefficient_identifiers ()]
594+ for c , in self .get_coefficient_identifiers ()]
589595
590596 @override
591597 def evaluate (self ,
@@ -604,12 +610,12 @@ def evaluate(self,
604610
605611 arg_scale = self .get_bessel_arg_scaling ()
606612
607- return sym .sympify (sum (coeffs [self .get_storage_index (c )]
613+ return sym .sympify (sum (coeffs [self .get_storage_index (( c ,) )]
608614 * kernel .postprocess_at_target (
609615 BesselJ (c , arg_scale * bvec_len , 0 )
610616 / rscale ** abs (c )
611617 * sym .exp (sym .I * c * - target_angle_rel_center ), bvec )
612- for c in self .get_coefficient_identifiers ()))
618+ for c , in self .get_coefficient_identifiers ()))
613619
614620 @override
615621 def translate_from (self ,
@@ -634,14 +640,14 @@ def translate_from(self,
634640 new_center_angle_rel_old_center = sym .atan2 (dvec [1 ], dvec [0 ])
635641 translated_coeffs = []
636642
637- for j in self .get_coefficient_identifiers ():
643+ for j , in self .get_coefficient_identifiers ():
638644 translated_coeffs .append (
639- sum (src_coeff_exprs [src_expansion .get_storage_index (m )]
645+ sum (src_coeff_exprs [src_expansion .get_storage_index (( m ,) )]
640646 * BesselJ (m - j , arg_scale * dvec_len , 0 )
641647 / src_rscale ** abs (m )
642648 * tgt_rscale ** abs (j )
643649 * sym .exp (sym .I * (m - j ) * - new_center_angle_rel_old_center )
644- for m in src_expansion .get_coefficient_identifiers ()))
650+ for m , in src_expansion .get_coefficient_identifiers ()))
645651 return translated_coeffs
646652
647653 if isinstance (src_expansion , self .mpole_expn_class ):
0 commit comments