Exemplo n.º 1
0
    def x_data_view(self, x_window=None, flatten_y=False):
        """Helper method for getting a view of the data.

        Parameters
        ----------

        x_window : optional
            The window of x variable (omega/omega_n/t/tau) for which data is requested.
        flatten_y: bool, optional
            If the Greens function is of size (1, 1) flatten the array as a 1d array.

        Returns
        -------

        (X, data) : tuple
            X is a 1d numpy array of the x variable inside the window requested.
            data is a 3d numpy array of dim (:,:, len(X)), the corresponding slice of data.
            If flatten_y is True and dim is (1, 1, *) it returns a 1d numpy array.
        """

        X = [x.imag for x in self.mesh] if isinstance(self.mesh, meshes.MeshImFreq) \
            else [x for x in self.mesh]

        X, data = np.array(X), self.data
        if x_window:
            # the slice due to clip option x_window
            sl = clip_array(X, *x_window) if x_window else slice(len(X))
            X, data = X[sl], data[sl, :, :]
        if flatten_y and data.shape[1:3] == (1, 1):
            data = data[:, 0, 0]
        return X, data
Exemplo n.º 2
0
def x_data_view(self, x_window = None, flatten_y = False):
    """
    :param x_window: the window of x variable (omega/omega_n/t/tau) for which data is requested
                      if None, take the full window
    :param flatten_y: If the Green function is of size (1, 1) flatten the array as a 1d array
    :rtype: a tuple (X, data) where
             * X is a 1d numpy of the x variable inside the window requested
             * data is a 3d numpy array of dim (:,:, len(X)), the corresponding slice of data
               If flatten_y is True and dim is (1, 1, *), returns a 1d numpy
    """
    X = [x.imag for x in self.mesh] if type(self.mesh) == MeshImFreq else [x for x in self.mesh]
    X, data = numpy.array(X), self.data
    if x_window:
      sl = clip_array (X, *x_window) if x_window else slice(len(X)) # the slice due to clip option x_window
      X, data = X[sl],  data[sl,:,:]
    if flatten_y and data.shape[1:3]==(1, 1): data = data[:,0,0]
    return X, data
Exemplo n.º 3
0
def plot_base(self, opt_dict, xlabel, ylabel, use_ris, X):
    """ Plot protocol. opt_dict can contain:
         *:param RIS: 'R', 'I', 'S', 'RI' [ default]
         *:param x_window: (xmin,xmax) or None [default]
         *:param Name: a string [default = '']. If not '', it remplaces the name of the function just for this plot.
    """
    Name = opt_dict.pop('name', '')  # consume it
    NamePrefix = opt_dict.pop('NamePrefix', '')  # consume it
    if Name and NamePrefix:
        raise ValueError, 'Name and NamePrefix cannot be used at the same time'
    if NamePrefix: name_save, self.name = self.name, Name or NamePrefix

    rx = opt_dict.pop('x_window', None)  # consume it
    X = numpy.array(X).real
    sl = clip_array(X, *rx) if rx else slice(
        len(X))  # the slice due to clip option x_window

    def mdic(prefix, f):
        return [{
            'type': "XY",
            'xlabel': xlabel,
            'ylabel': ylabel(self.name),
            'xdata': X[sl],
            'label': Name if Name else prefix + "%s_%s" % (i, j),
            'ydata': f(self.data[sl, i, j])
        } for i in range(self.target_shape[0])
                for j in range(self.target_shape[1])]

    if use_ris:
        ris = opt_dict.pop('RI', 'RI')
        if ris == "R":
            res = mdic('Re ', lambda x: x.real)
        elif ris == "I":
            res = mdic('Im ', lambda x: x.imag)
        elif ris == "S":
            res = mdic('', lambda x: -1 / numpy.pi * x.imag)
        elif ris == 'RI':
            res = mdic('Re ', lambda x: x.real) + mdic('Im ', lambda x: x.imag)
        else:
            raise ValueError, "RIS flags meaningless %s" % ris
    else:
        res = mdic('', lambda x: x)

    if NamePrefix: self.name = name_save

    return res
Exemplo n.º 4
0
 def x_data_view(self, x_window = None, flatten_y = False):
     """
     :param x_window: the window of x variable (omega/omega_n/t/tau) for which data is requested
                       if None, take the full window
     :param flatten_y: If the Green function is of size (1, 1) flatten the array as a 1d array
     :rtype: a tuple (X, data) where
              * X is a 1d numpy of the x variable inside the window requested
              * data is a 3d numpy array of dim (:,:, len(X)), the corresponding slice of data
                If flatten_y is True and dim is (1, 1, *), returns a 1d numpy
     """
     X = [x.imag for x in self.mesh] if type(self.mesh) == MeshImFreq else [x for x in self.mesh]
     X, data = numpy.array(X), self.data
     if x_window:
       sl = clip_array (X, *x_window) if x_window else slice(len(X)) # the slice due to clip option x_window
       X, data = X[sl],  data[sl,:,:]
     if flatten_y and data.shape[1:3]==(1, 1): data = data[:,0,0]
     return X, data
Exemplo n.º 5
0
def plot_base (self, opt_dict, xlabel, ylabel, use_ris, X):
    """ Plot protocol. opt_dict can contain:
         *:param RIS: 'R', 'I', 'S', 'RI' [ default]
         *:param x_window: (xmin,xmax) or None [default]
         *:param Name: a string [default = '']. If not '', it remplaces the name of the function just for this plot.
    """
    Name = opt_dict.pop('name', '' )  # consume it
    NamePrefix = opt_dict.pop('NamePrefix', '' )  # consume it
    if Name and NamePrefix: raise ValueError, 'Name and NamePrefix cannot be used at the same time'
    if NamePrefix: name_save, self.name = self.name, Name or NamePrefix

    rx = opt_dict.pop('x_window',None ) # consume it
    X =  numpy.array(X).real
    sl = clip_array (X, *rx) if rx else slice(len(X)) # the slice due to clip option x_window

    def mdic( prefix, f):
       return [{'type': "XY",
                'xlabel': xlabel,
                'ylabel': ylabel (self.name),
                'xdata': X[sl],
                'label': Name if Name else prefix + "%s_%s"%(i,j), 
                'ydata': f( self.data[sl,i,j] ) } for i in range(self.target_shape[0]) for j in range(self.target_shape[1])]

    if use_ris:
        ris = opt_dict.pop('RI','RI')
        if   ris == "R":
            res = mdic( 'Re ', lambda x : x.real)
        elif ris == "I":
            res = mdic( 'Im ', lambda x : x.imag)
        elif ris == "S":
            res = mdic( '', lambda x : -1/numpy.pi *x.imag)
        elif ris == 'RI':
             res = mdic( 'Re ', lambda x : x.real) + mdic( 'Im ', lambda x : x.imag)
        else:
             raise ValueError, "RIS flags meaningless %s"%ris
    else:
        res = mdic( '', lambda x : x)

    if NamePrefix: self.name = name_save

    return res
def plot_base(self, opt_dict, xlabel, ylabel, X, allow_spectral_mode=False):
    r"""
    Plot protocol for Green's function objects.

    Parameters
    ----------
    opt_dict: dictionary
              Can contain:
              - mode: string, default None
                      Mode to plot the Green's function in:
                      -- 'R': real part only
                      -- 'I': imaginary part only
                      -- 'S': spectral function
              - x_window: tuple, default None
                          (xmin,xmax)
              - name: string, default = ''
                      If not '', it remplaces the name of the function just for this plot.
    xlabel: string
            Label to apply to the x axis.
    ylabel: string
            Label to apply to the y axis.
    X: list
       The x values the object can take, i.e. the mesh.
    allow_spectral_mode: boolean, default False
                         Can the spectral function be measured for this type of Green's function?

    Returns
    -------
    plot_data: list of dict
               Object passed to oplot to plot.
    """
    name = opt_dict.pop('name', self.name)  # consume it
    name_prefix = opt_dict.pop('name_prefix', '')  # consume it
    if name and name_prefix:
        raise ValueError, 'name and name_prefix cannot be used at the same time'
    if name_prefix:
        name_save, self.name = self.name, name or name_prefix

    rx = opt_dict.pop('x_window', None)  # consume it
    X = numpy.array(X).real
    sl = clip_array(X, *rx) if rx else slice(
        len(X))  # the slice due to clip option x_window

    def mdic(prefix, f):
        from itertools import product
        ind_range = product(*map(range, reversed(self.target_shape)))
        make_label = lambda ind: "%s%s %s" % (prefix, name, "_".join(
            map(str, reversed(ind))))
        make_data_sl = lambda ind: (sl, ) + tuple(reversed(ind))
        return [{
            'xlabel': xlabel,
            'ylabel': ylabel(self.name or name),
            'xdata': X[sl],
            'label': make_label(ind),
            'ydata': f(self.data[make_data_sl(ind)])
        } for ind in ind_range]

    # backward compat.
    if 'RI' in opt_dict:
        assert 'mode' not in opt_dict, "Can not have both flags RI and mode."
        import warnings
        warnings.warn("oplot: 'RI' flag is deprecated, use 'mode' instead")
        opt_dict['mode'] = opt_dict.pop('RI', '')

    mode = opt_dict.pop('mode', '')
    if mode == '':
        res = mdic('Re ', lambda x: x.real) + mdic('Im ', lambda x: x.imag)
    elif mode == 'R':
        res = mdic('Re ', lambda x: x.real)
    elif mode == 'I':
        res = mdic('Im ', lambda x: x.imag)
    elif mode == 'S':
        if allow_spectral_mode:
            res = mdic('', lambda x: -1 / numpy.pi * x.imag)
        else:
            raise ValueError, "Cannot measure the spectral function for this type of Green's function."
    else:
        raise ValueError, "The 'mode' flag is meaningless. Expected 'R', 'I', or 'S' and I got %s." % mode

    res[0].update(opt_dict)  # Add all other unused parameters to the dict
    if name_prefix:
        self.name = name_save
    return res
Exemplo n.º 7
0
def plot_base(self, opt_dict, xlabel, ylabel, X, allow_spectral_mode=False):
    r"""
    Plot protocol for Green's function objects.

    Parameters
    ----------
    opt_dict: dictionary
              MUST contain:
              - name: str
                      Name for the plotting label
              
              Can contain:
              - mode: string, default None
                      Mode to plot the Green's function in:
                      -- 'R': real part only
                      -- 'I': imaginary part only
                      -- 'S': spectral function
              - x_window: tuple, default None
                          (xmin,xmax)
    xlabel: str
            Label to apply to the x axis.
    ylabel: lambda : str -> str
            Label to apply to the y axis.
    X: list
       The x values the object can take, i.e. the mesh.
    allow_spectral_mode: boolean, default False
                         Can the spectral function be measured for this type of Green's function?

    Returns
    -------
    plot_data: list of dict
               Object passed to oplot to plot.
    """

    assert 'name_prefix' not in opt_dict, "name_prefix is deprecated"
    #if 'name' not in opt_dict:
    #    warnings.warn("oplot REQUIRES a name = for making the legend and labels. Using self.name, but it is deprecated and WILL BE REMOVED")
    name = opt_dict.pop('name', self.name)  # consume it
    if not name:
        warn("oplot of gf : no name provided !")
    rx = opt_dict.pop('x_window', None)  # consume it
    X = numpy.array(X).real
    sl = clip_array(X, *rx) if rx else slice(
        len(X))  # the slice due to clip option x_window

    def mdic(prefix, f):
        from itertools import product
        ind_range = product(*map(range, reversed(self.target_shape)))
        make_label = lambda ind: "%s%s %s" % (prefix, name, "_".join(
            map(str, reversed(ind))))
        make_data_sl = lambda ind: (sl, ) + tuple(reversed(ind))
        return [{
            'xlabel': xlabel,
            'ylabel': ylabel(name),
            'xdata': X[sl],
            'label': make_label(ind),
            'ydata': f(self.data[make_data_sl(ind)])
        } for ind in ind_range]

    # backward compat.
    if 'RI' in opt_dict:
        assert 'mode' not in opt_dict, "Can not have both flags RI and mode."
        import warnings
        warnings.warn("oplot: 'RI' flag is deprecated, use 'mode' instead")
        opt_dict['mode'] = opt_dict.pop('RI', '')

    # if data is real, overrule
    mode = opt_dict.pop('mode', '')
    if self.data.dtype == numpy.float64:
        res = mdic('', lambda x: x)
    elif mode == '':
        res = mdic('Re ', lambda x: x.real) + mdic('Im ', lambda x: x.imag)
    elif mode == 'R':
        res = mdic('Re ', lambda x: x.real)
    elif mode == 'I':
        res = mdic('Im ', lambda x: x.imag)
    elif mode == 'S':
        if allow_spectral_mode:
            res = mdic('', lambda x: -1 / numpy.pi * x.imag)
        else:
            raise ValueError, "Cannot measure the spectral function for this type of Green's function."
    else:
        raise ValueError, "The 'mode' flag is meaningless. Expected 'R', 'I', or 'S' and I got %s." % mode

    res[0].update(opt_dict)  # Add all other unused parameters to the dict
    return res
Exemplo n.º 8
0
def plot_base(self, opt_dict, xlabel, ylabel, X, allow_spectral_mode=False):
    r"""
    Plot protocol for Green's function objects.

    Parameters
    ----------
    opt_dict: dictionary
              Can contain:
              - mode: string, default None
                      Mode to plot the Green's function in:
                      -- 'R': real part only
                      -- 'I': imaginary part only
                      -- 'S': spectral function
              - x_window: tuple, default None 
                          (xmin,xmax)
              - name: string, default = ''
                      If not '', it remplaces the name of the function just for this plot.
    xlabel: string
            Label to apply to the x axis.
    ylabel: string
            Label to apply to the y axis.
    X: list
       The x values the object can take, i.e. the mesh. 
    allow_spectral_mode: boolean, default False
                         Can the spectral function be measured for this type of Green's function?

    Returns
    -------
    plot_data: list of dict
               Object passed to oplot to plot.
    """
    name = opt_dict.pop('name', self.name)  # consume it
    name_prefix = opt_dict.pop('name_prefix', '')  # consume it
    if name and name_prefix:
        raise ValueError, 'name and name_prefix cannot be used at the same time'
    if name_prefix:
        name_save, self.name = self.name, name or name_prefix

    rx = opt_dict.pop('x_window', None)  # consume it
    X = numpy.array(X).real
    sl = clip_array(X, *rx) if rx else slice(len(X)) # the slice due to clip option x_window

    def mdic(prefix, f):
        return [{'xlabel': xlabel,
                 'ylabel': ylabel(self.name or name),
                 'xdata': X[sl],
                 'label': prefix + "%s %s_%s" % (name, i, j),
                 'ydata': f(self.data[sl, i, j])} for i in range(self.target_shape[0]) for j in range(self.target_shape[1])]

    # backward compat.
    if 'RI' in opt_dict:
        assert 'mode' not in opt_dict, "Can not have both flags RI and mode."
        import warnings
        warnings.warn("oplot: 'RI' flag is deprecated, use 'mode' instead")
        opt_dict['mode'] = opt_dict.pop('RI', '')

    mode = opt_dict.pop('mode', '')
    if mode == '':
        res = mdic('Re ', lambda x: x.real) + mdic('Im ', lambda x: x.imag)
    elif mode == 'R':
        res = mdic('Re ', lambda x: x.real)
    elif mode == 'I':
        res = mdic('Im ', lambda x: x.imag)
    elif mode == 'S':
        if allow_spectral_mode:
            res = mdic('', lambda x: -1 / numpy.pi * x.imag)
        else:
            raise ValueError, "Cannot measure the spectral function for this type of Green's function."
    else:
        raise ValueError, "The 'mode' flag is meaningless. Expected 'R', 'I', or 'S' and I got %s." % mode

    res[0].update(opt_dict) # Add all other unused parameters to the dict
    if name_prefix:
        self.name = name_save
    return res
Exemplo n.º 9
0
def plot_base(self, opt_dict, xlabel, ylabel, X, allow_spectral_mode=False):
    r"""
    Plot protocol for Green's function objects.

    Parameters
    ----------
    opt_dict: dictionary
              MUST contain:
              - name: str
                      Name for the plotting label
              
              Can contain:
              - mode: string, default None
                      Mode to plot the Green's function in:
                      -- 'R': real part only
                      -- 'I': imaginary part only
                      -- 'S': spectral function
              - x_window: tuple, default None
                          (xmin,xmax)
    xlabel: str
            Label to apply to the x axis.
    ylabel: lambda : str -> str
            Label to apply to the y axis.
    X: list
       The x values the object can take, i.e. the mesh.
    allow_spectral_mode: boolean, default False
                         Can the spectral function be measured for this type of Green's function?

    Returns
    -------
    plot_data: list of dict
               Object passed to oplot to plot.
    """

    assert 'name_prefix' not in opt_dict, "name_prefix is deprecated"
    #if 'name' not in opt_dict: 
    #    warnings.warn("oplot REQUIRES a name = for making the legend and labels. Using self.name, but it is deprecated and WILL BE REMOVED")
    name = opt_dict.pop('name', self.name)         # consume it
    if not name:
        warn("oplot of gf : no name provided !")
    rx = opt_dict.pop('x_window', None)  # consume it
    X = numpy.array(X).real
    sl = clip_array(X, *rx) if rx else slice(len(X)) # the slice due to clip option x_window

    def mdic(prefix, f):
        from itertools import product
        ind_range = product(*map(range,reversed(self.target_shape)))
        make_label = lambda ind: "%s%s %s" % (prefix,name,"_".join(map(str, reversed(ind))))
        make_data_sl = lambda ind: (sl,) + tuple(reversed(ind))
        return [{'xlabel': xlabel,
                 'ylabel': ylabel(name),
                 'xdata': X[sl],
                 'label': make_label(ind),
                 'ydata': f(self.data[make_data_sl(ind)])} for ind in ind_range]

    # backward compat.
    if 'RI' in opt_dict:
        assert 'mode' not in opt_dict, "Can not have both flags RI and mode."
        import warnings
        warnings.warn("oplot: 'RI' flag is deprecated, use 'mode' instead")
        opt_dict['mode'] = opt_dict.pop('RI', '')

    # if data is real, overrule
    mode = opt_dict.pop('mode', '')
    if self.data.dtype == numpy.float64 : 
        res = mdic('', lambda x: x)    
    elif mode == '':
        res = mdic('Re ', lambda x: x.real) + mdic('Im ', lambda x: x.imag)
    elif mode == 'R':
        res = mdic('Re ', lambda x: x.real)
    elif mode == 'I':
        res = mdic('Im ', lambda x: x.imag)
    elif mode == 'S':
        if allow_spectral_mode:
            res = mdic('', lambda x: -1 / numpy.pi * x.imag)
        else:
            raise ValueError, "Cannot measure the spectral function for this type of Green's function."
    else:
        raise ValueError, "The 'mode' flag is meaningless. Expected 'R', 'I', or 'S' and I got %s." % mode

    res[0].update(opt_dict) # Add all other unused parameters to the dict
    return res