code: def from_scf_input(cls, scf_input, qpoints, is_ngqpt=False, tolerance=None,
                         with_becs=False, ddk_tolerance=None, manager=None):
          
          if is_ngqpt:
              qpoints = scf_input.abiget_ibz(ngkpt=qpoints, shiftk=[0, 0, 0], kptopt=1).points
  
          qpoints = np.reshape(qpoints, (-1, 3))
  
          new = cls(manager=manager)
          # Create ScfTask
          scf_task = new.register_scf_task(scf_input)
  
          if with_becs:
              new.add_becs_from_scf_task(scf_task, ddk_tolerance, ph_tolerance=tolerance)
  
          for qpt in qpoints:
              if with_becs and np.sum(qpt ** 2) < 1e-12: continue
              multi = scf_task.input.make_ph_inputs_qpoint(qpt, tolerance=tolerance)
              for ph_inp in multi:
                  new.register_phonon_task(ph_inp, deps={scf_task: "WFK"})
  
          return new
docs: Similar to `from_scf_task`, the difference is that this method requires
          an input for SCF calculation. A new ScfTask is created and added to the Work.
          This API should be used if the DDB of the GS task should be merged.