code: def generate(self, num_points: int) -> Iterator[SampleDatapoint]:
      for _ in range(num_points):
          # Avoid bias so that there is no obvious class imbalance.
          input_features = np.random.randn(self.__num_features) * 5
          yield SampleDatapoint(
              input_features=list(input_features),
              target_class=sum(input_features * self.__weights) >= 0,
          )
  
imports: import numpy
  from typing import Iterator, List, NamedTuple
label_desc: Use image node_id 2 for calling the SyntheticData obj's underlying member method code with example usage: obj.generate(num_points) without return types