'Summarize forward info instead of printing all.'

def __repr__(self):

    entr = '<Forward'
    nchan = len(pick_types(self['info'], meg=True, eeg=False, exclude=[]))
    entr += ('    |    ' + ('MEG    channels:    %d' % nchan))
    nchan = len(pick_types(self['info'], meg=False, eeg=True, exclude=[]))
    entr += ('    |    ' + ('EEG    channels:    %d' % nchan))
    src_types = np.array([src['type'] for src in self['src']])
    if (src_types == 'surf').all():
        entr += ('    |    Source    space:    Surface    with    %d    vertices' % self['nsource'])
    elif (src_types == 'vol').all():
        entr += ('    |    Source    space:    Volume    with    %d    grid    points' % self['nsource'])
    elif (src_types == 'discrete').all():
        entr += ('    |    Source    space:    Discrete    with    %d    dipoles' % self['nsource'])
    else:
        count_string = ''
        if (src_types == 'surf').any():
            count_string += ('%d    surface,    ' % (src_types == 'surf').sum())
        if (src_types == 'vol').any():
            count_string += ('%d    volume,    ' % (src_types == 'vol').sum())
        if (src_types == 'discrete').any():
            count_string += ('%d    discrete,    ' % (src_types == 'discrete').sum())
        count_string = count_string.rstrip(',    ')
        entr += ('    |    Source    space:    Mixed    (%s)    with    %d    vertices' % (count_string, self['nsource']))
    if (self['source_ori'] == FIFF.FIFFV_MNE_UNKNOWN_ORI):
        entr += '    |    Source    orientation:    Unknown'
    elif (self['source_ori'] == FIFF.FIFFV_MNE_FIXED_ORI):
        entr += '    |    Source    orientation:    Fixed'
    elif (self['source_ori'] == FIFF.FIFFV_MNE_FREE_ORI):
        entr += '    |    Source    orientation:    Free'
    entr += '>'
    return entr
