docs: def build_fault_model(self, collapse=False, rendered_msr=WC1994(),
                            mfd_config=None):
          '''
          Constructs a full fault model with epistemic uncertainty by
          enumerating all the possible recurrence models of each fault as
          separate faults, with the recurrence rates multiplied by the
          corresponding weights.
  
          :param bool collapse:
              Determines whether or not to collapse the branches
          :param rendered_msr:
              If the option is taken to collapse the branches then a recurrence
              model for rendering must be defined
          :param list/dict mfd_config:
              Universal list or dictionay of configuration parameters for the
              magnitude frequency distribution - will overwrite whatever is
              previously defined for the fault!
          '''
          self.source_model = mtkSourceModel(self.id, self.name)
          for fault in self.faults:
              fault.generate_recurrence_models(collapse,
                                               config=mfd_config,
                                               rendered_msr=rendered_msr)
              src_model, src_weight = fault.generate_fault_source_model()
              for iloc, model in enumerate(src_model):
  
                  new_model = deepcopy(model)
                  new_model.id = str(model.id) + '_%g' % (iloc + 1)
                  new_model.mfd.occurrence_rates = \
                      (np.array(new_model.mfd.occurrence_rates) *
                       src_weight[iloc]).tolist()
                  self.source_model.sources.append(new_model)