code: def iterstats(self, j, t, isx, isd, evl):
          
  
          vlst = []
          # Iterate over the fields of the IterationStats namedtuple
          # to be populated with values. If a field name occurs as a
          # key in the isxmap dictionary, use the corresponding key
          # value as a field name in the isx namedtuple for the X
          # step object and append the value of that field as the
          # next value in the IterationStats namedtuple under
          # construction. The isdmap dictionary is handled
          # correspondingly with respect to the isd namedtuple for
          # the D step object. There are also two reserved field
          # names, 'Iter' and 'Time', referring respectively to the
          # iteration number and run time of the dictionary learning
          # algorithm.
          for fnm in self.IterationStats._fields:
              if fnm in self.isxmap:
                  vlst.append(getattr(isx, self.isxmap[fnm]))
              elif fnm in self.isdmap:
                  vlst.append(getattr(isd, self.isdmap[fnm]))
              elif fnm in self.evlmap:
                  vlst.append(evl[fnm])
              elif fnm == 'Iter':
                  vlst.append(j)
              elif fnm == 'Time':
                  vlst.append(t)
              else:
                  vlst.append(None)
  
          return self.IterationStats._make(vlst)
docs: Construct IterationStats namedtuple from X step and D step
          IterationStats namedtuples.
  
          Parameters
          ----------
          j : int
            Iteration number
          t : float
            Iteration time
          isx : namedtuple
            IterationStats namedtuple from X step object
          isd : namedtuple
            IterationStats namedtuple from D step object
          evl : dict
            Dict associating result labels with values computed by
            :meth:`DictLearn.evaluate`