pub trait Gain: Debug {
type G: GainContextGenerator;
// Required method
fn init_with_filter(
self,
geometry: &Geometry,
filter: Option<HashMap<usize, BitVec<u32>>>,
) -> Result<Self::G, AUTDInternalError>;
// Provided method
fn init(self, geometry: &Geometry) -> Result<Self::G, AUTDInternalError>
where Self: Sized { ... }
}