docs: def _create_waveforms(self):
          """Create frequency domain waveforms.
  
          Method to create waveforms for PhenomDWaveforms class.
          It adds waveform information in the form of attributes.
  
          """
  
          c_obj = ctypes.CDLL(self.exec_call)
  
          # prepare ctypes arrays
          freq_amp_cast = ctypes.c_double*self.num_points*self.length
          freqs = freq_amp_cast()
          hc = freq_amp_cast()
  
          fmrg_fpeak_cast = ctypes.c_double*self.length
          fmrg = fmrg_fpeak_cast()
          fpeak = fmrg_fpeak_cast()
  
          # Find hc
          c_obj.Amplitude(ctypes.byref(freqs), ctypes.byref(hc), ctypes.byref(fmrg),
                          ctypes.byref(fpeak),
                          self.m1.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.m2.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.chi_1.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.chi_2.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.dist.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.z.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.st.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          self.et.ctypes.data_as(ctypes.POINTER(ctypes.c_double)),
                          ctypes.c_int(self.length), ctypes.c_int(self.num_points))
  
          # turn output into numpy arrays
          self.freqs, self.hc = np.ctypeslib.as_array(freqs), np.ctypeslib.as_array(hc)
          self.fmrg, self.fpeak = np.ctypeslib.as_array(fmrg), np.ctypeslib.as_array(fpeak)
  
          # remove an axis if inputs were scalar.
          if self.remove_axis:
              self.freqs, self.hc, = np.squeeze(self.freqs), np.squeeze(self.hc)
              self.fmrg, self.fpeak = self.fmrg[0], self.fpeak[0]
  
          return