Exemple #1
0
    def _write_descriptors(self, typlist=None, varlist=None, srtlist=None,
                           fmtlist=None, lbllist=None):
        nvar = self.nvar
        # typlist, length nvar, format byte array
        for typ in self.typlist:
            self._write(typ)

        # varlist, length 33*nvar, char array, null terminated
        for name in self.varlist:
            name = self._null_terminate(name, self._encoding)
            name = _pad_bytes(asstr(name[:32]), 33)
            self._write(name)

        # srtlist, 2*(nvar+1), int array, encoded by byteorder
        srtlist = _pad_bytes("", (2*(nvar+1)))
        self._write(srtlist)

        # fmtlist, 49*nvar, char array
        for fmt in self.fmtlist:
            self._write(_pad_bytes(fmt, 49))

        # lbllist, 33*nvar, char array
        #NOTE: this is where you could get fancy with pandas categorical type
        for i in range(nvar):
            self._write(_pad_bytes("", 33))
Exemple #2
0
    def _write_descriptors(self,
                           typlist=None,
                           varlist=None,
                           srtlist=None,
                           fmtlist=None,
                           lbllist=None):
        nvar = self.nvar
        # typlist, length nvar, format byte array
        for typ in self.typlist:
            self._write(typ)

        # varlist, length 33*nvar, char array, null terminated
        for name in self.varlist:
            name = self._null_terminate(name, self._encoding)
            name = _pad_bytes(asstr(name[:32]), 33)
            self._write(name)

        # srtlist, 2*(nvar+1), int array, encoded by byteorder
        srtlist = _pad_bytes("", (2 * (nvar + 1)))
        self._write(srtlist)

        # fmtlist, 49*nvar, char array
        for fmt in self.fmtlist:
            self._write(_pad_bytes(fmt, 49))

        # lbllist, 33*nvar, char array
        #NOTE: this is where you could get fancy with pandas categorical type
        for i in range(nvar):
            self._write(_pad_bytes("", 33))
Exemple #3
0
def date_range_str(start, end=None, length=None):
    """
    Returns a list of abbreviated date strings.

    Parameters
    ----------
    start : str
        The first abbreviated date, for instance, '1965q1' or '1965m1'
    end : str, optional
        The last abbreviated date if length is None.
    length : int, optional
        The length of the returned array of end is None.

    Returns
    -------
    date_range : list
        List of strings
    """
    flags = re.IGNORECASE | re.VERBOSE
    #_check_range_inputs(end, length, freq)
    start = start.lower()
    if re.search(_m_pattern, start, flags):
        annual_freq = 12
        split = 'm'
    elif re.search(_q_pattern, start, flags):
        annual_freq = 4
        split = 'q'
    elif re.search(_y_pattern, start, flags):
        annual_freq = 1
        start += 'a1'  # hack
        if end:
            end += 'a1'
        split = 'a'
    else:
        raise ValueError("Date %s not understood" % start)
    yr1, offset1 = map(int, start.replace(":", "").split(split))
    if end is not None:
        end = end.lower()
        yr2, offset2 = map(int, end.replace(":", "").split(split))
        length = (yr2 - yr1) * annual_freq + offset2
    elif length:
        yr2 = yr1 + length // annual_freq
        offset2 = length % annual_freq
    years = np.repeat(range(yr1 + 1, yr2), annual_freq).tolist()
    years = np.r_[[str(yr1)] * (annual_freq + 1 - offset1),
                  years]  # tack on first year
    years = np.r_[years, [str(yr2)] * offset2]  # tack on last year
    if split != 'a':
        offset = np.tile(np.arange(1, annual_freq + 1), yr2 - yr1 - 1)
        offset = np.r_[np.arange(offset1, annual_freq + 1).astype('a2'),
                       offset]
        offset = np.r_[offset, np.arange(1, offset2 + 1).astype('a2')]
        date_arr_range = [
            ''.join([i, split, asstr(j)]) for i, j in zip(years, offset)
        ]
    else:
        date_arr_range = years.tolist()
    return date_arr_range
Exemple #4
0
def date_range_str(start, end=None, length=None):
    """
    Returns a list of abbreviated date strings.

    Parameters
    ----------
    start : str
        The first abbreviated date, for instance, '1965q1' or '1965m1'
    end : str, optional
        The last abbreviated date if length is None.
    length : int, optional
        The length of the returned array of end is None.

    Returns
    -------
    date_range : list
        List of strings
    """
    flags = re.IGNORECASE | re.VERBOSE
    #_check_range_inputs(end, length, freq)
    start = start.lower()
    if re.search(_m_pattern, start, flags):
        annual_freq = 12
        split = 'm'
    elif re.search(_q_pattern, start, flags):
        annual_freq = 4
        split = 'q'
    elif re.search(_y_pattern, start, flags):
        annual_freq = 1
        start += 'a1' # hack
        if end:
            end += 'a1'
        split = 'a'
    else:
        raise ValueError("Date %s not understood" % start)
    yr1, offset1 = map(int, start.replace(":","").split(split))
    if end is not None:
        end = end.lower()
        yr2, offset2 = map(int, end.replace(":","").split(split))
        length = (yr2 - yr1) * annual_freq + offset2
    elif length:
        yr2 = yr1 + length // annual_freq
        offset2 = length % annual_freq + (offset1 - 1)
    years = np.repeat(range(yr1+1, yr2), annual_freq).tolist()
    years = np.r_[[str(yr1)]*(annual_freq+1-offset1), years] # tack on first year
    years = np.r_[years, [str(yr2)]*offset2] # tack on last year
    if split != 'a':
        offset = np.tile(np.arange(1, annual_freq+1), yr2-yr1-1)
        offset = np.r_[np.arange(offset1, annual_freq+1).astype('a2'), offset]
        offset = np.r_[offset, np.arange(1,offset2+1).astype('a2')]
        date_arr_range = [''.join([i, split, asstr(j)]) for i,j in
                                                        zip(years, offset)]
    else:
        date_arr_range = years.tolist()
    return date_arr_range
Exemple #5
0
 def _write_data_nodates(self):
     data = self.datarows
     byteorder = self._byteorder
     TYPE_MAP = self.TYPE_MAP
     typlist = self.typlist
     for row in data:
         #row = row.squeeze().tolist() # needed for structured arrays
         for i,var in enumerate(row):
             typ = ord(typlist[i])
             if typ <= 244: # we've got a string
                 if len(var) < typ:
                     var = _pad_bytes(asstr(var), len(var) + 1)
                 self._write(var)
             else:
                 try:
                     self._write(pack(byteorder+TYPE_MAP[typ], var))
                 except struct_error:
                     # have to be strict about type pack won't do any
                     # kind of casting
                     self._write(pack(byteorder+TYPE_MAP[typ],
                                 _type_converters[typ](var)))
Exemple #6
0
 def _write_data_nodates(self):
     data = self.datarows
     byteorder = self._byteorder
     TYPE_MAP = self.TYPE_MAP
     typlist = self.typlist
     for row in data:
         #row = row.squeeze().tolist() # needed for structured arrays
         for i,var in enumerate(row):
             typ = ord(typlist[i])
             if typ <= 244: # we've got a string
                 if len(var) < typ:
                     var = _pad_bytes(asstr(var), len(var) + 1)
                 self._write(var)
             else:
                 try:
                     self._write(pack(byteorder+TYPE_MAP[typ], var))
                 except struct_error:
                     # have to be strict about type pack won't do any
                     # kind of casting
                     self._write(pack(byteorder+TYPE_MAP[typ],
                                 _type_converters[typ](var)))