Added in-place mut_range() and range().

[?]
CrEcTsRjb1hHQjHuumqRfqdbVV4X58iLEubi4noaDPFa
Jul 23, 2021, 5:16 AM
NLFSLCBOGCQYI2DQXLO5AWBBRABDS26NIX6HGUGO2KQG2OHQGWOQC

Dependencies

  • [2] VGDNIY33 Added error source locations.
  • [3] IYW574EK Created RegularTimeSeriesIter.
  • [4] TD7KX2PI Added year-on-year transform.
  • [5] XIWTRGR6 Prepare to make external iterator for TimeSeries.
  • [6] QYLGEDIV First record.
  • [7] YMV7RPQ5 Improved csv reading and cleanup up serialization.
  • [8] XCCNAGMZ Created with_range() fn on RegularTimeSeries.

Change contents

  • replacement in src/lib.rs at line 24
    [3.64][3.64:146]()
    /// A duration between two `MonthlyDates`. The value can be positive or negative.
    [3.64]
    [3.146]
    /// A duration between two `MonthlyDates`.
    ///
    /// The value can be positive or negative.
  • replacement in src/lib.rs at line 53
    [3.359][3.247:364]()
    /// A date with granularity of one month or larger. Dates can also act as durations and be added
    /// and subtracted.
    [3.359]
    [3.364]
    /// A date with monthly granularity or larger.
  • replacement in src/lib.rs at line 55
    [3.368][3.368:500]()
    /// To avoid pulling in redundant dependences, the responsibility for parsing a date in string form
    /// is left to the client code.
    [3.368]
    [3.500]
    /// Client code is responsible for parsing strings into `MonthlyDate`s.
  • replacement in src/lib.rs at line 133
    [3.2288][3.2288:2363]()
    /// A date of monthly granularity associated with a numeric array of data.
    [3.2288]
    [3.2363]
    /// A `MonthlyDate` associated with some data.
  • replacement in src/lib.rs at line 157
    [3.3084][3.3084:3171]()
    /// `TimeSeries` is a collection of `DatePoints`. There are no guarantees of ordering.
    [3.3084]
    [3.3171]
    /// A time-series with no guarantees of ordering.
  • replacement in src/lib.rs at line 177
    [2.176][2.176:249]()
    .map_err(|_| failed_to_read_file(file!(), line!(), &path))?;
    [2.176]
    [3.557]
    .map_err(|_| read_file_error(file!(), line!(), &path))?;
  • replacement in src/lib.rs at line 185
    [3.764][2.250:307]()
    return Err(failed_to_parse_csv_date(
    [3.764]
    [2.307]
    return Err(parse_csv_date_failed(
  • replacement in src/lib.rs at line 198
    [3.982][2.487:544]()
    return Err(failed_to_parse_csv_date(
    [3.982]
    [2.544]
    return Err(parse_csv_date_failed(
  • replacement in src/lib.rs at line 211
    [3.1215][2.724:782]()
    return Err(failed_to_parse_csv_value(
    [3.1215]
    [2.782]
    return Err(parse_csv_value_failed(
  • replacement in src/lib.rs at line 344
    [3.4995][3.2476:2735]()
    /// A `RegularTimeSeries` has an additional requirements over `TimeSeries` in the time interval
    /// between successive `DatePoints` has the same `Duration`. This also ensures ordering. A
    /// `RegularTimeSeries` is guaranteed to have two or more data points.
    [3.4995]
    [3.1672]
    /// A time-series with regular, contiguous data.
    ///
    /// A `RegularTimeSeries` is guaranteed to have two or more data points.
  • edit in src/lib.rs at line 394
    [3.1]
    [3.1957]
    // Constrain a `RegularTimeSeries` in-place with a new date range.
  • replacement in src/lib.rs at line 398
    [3.63][3.63:122]()
    pub fn with_range(&mut self, date_range: &DateRange) {
    [3.63]
    [3.122]
    pub fn mut_range(&mut self, date_range: &DateRange) {
  • edit in src/lib.rs at line 408
    [3.499]
    [3.499]
    }
    }
    // Return a new `RegularTimeSeries` with a new date range.
    impl<const N: usize> RegularTimeSeries<N> {
    /// Remove `DatePoints` outside `date_range` from `Self`.
    pub fn range(&self, date_range: &DateRange) -> RegularTimeSeries<N> {
    let start_date = match date_range.start_date {
    None => self.ts.0.first().unwrap().date(),
    Some(start) => start,
    };
    let end_date = match date_range.end_date {
    None => self.ts.0.last().unwrap().date(),
    Some(end) => end,
    };
    let mut ts = TimeSeries::new(Vec::new());
    for dp in self.ts.0.iter() {
    if dp.date() >= start_date && dp.date() <= end_date {
    ts.0.push(*dp)
    };
    }
    ts.try_into().unwrap()
  • replacement in src/lib.rs at line 620
    [3.7603][3.1687:1949](),[3.1949][3.6033:6063]()
    /// A `DateRange` is used to constrain a `TimeSeries` iterator over a range of dates. If
    /// `start_date` or `end_date` are `None` then the iterator will start at the first value in the
    /// `TimeSeries` or end at the last value in the `TimeSeries` respectively.
    #[derive(Clone, Copy, Debug)]
    [3.7603]
    [3.7673]
    /// Specifies the time-span of the data.
    #[derive(Clone, Copy, Debug, Serialize)]
  • replacement in src/error.rs at line 38
    [3.6790][2.2161:2241]()
    "[time_series:01:{}:{}] Expected positive duration between {} and {}.",
    [3.6790]
    [2.2241]
    "[time_series:02:{}:{}] Expected positive duration between {} and {}.",
  • replacement in src/error.rs at line 49
    [3.2788][3.2788:2845]()
    "[time_series:01] Expected regular time-series."
    [3.2788]
    [3.2845]
    "[time_series:03] Expected regular time-series."
  • replacement in src/error.rs at line 54
    [3.2859][2.2280:2313]()
    pub fn failed_to_parse_csv_date(
    [3.2859]
    [2.2313]
    pub fn parse_csv_date_failed(
  • replacement in src/error.rs at line 62
    [3.2962][2.2419:2509]()
    "[time_series:02:{}:{}] Line: {} file: {}, . Failed to parse date on line [{}].",
    [3.2962]
    [2.2509]
    "[time_series:04:{}:{}] Line {} file {}. Failed to parse date on line [{}].",
  • replacement in src/error.rs at line 72
    [3.3106][2.2548:2582]()
    pub fn failed_to_parse_csv_value(
    [3.3106]
    [2.2582]
    pub fn parse_csv_value_failed(
  • replacement in src/error.rs at line 80
    [3.3210][2.2689:2778]()
    "[time_series:03:{}:{}] Line: {} file: {}. Failed to parse value on line [{}].",
    [3.3210]
    [2.2778]
    "[time_series:05:{}:{}] Line {} file {}. Failed to parse value on line [{}].",
  • replacement in src/error.rs at line 89
    [3.3349][2.2817:2845]()
    pub fn failed_to_read_file(
    [3.3349]
    [2.2845]
    pub fn read_file_error(
  • replacement in src/error.rs at line 95
    [2.2936][2.2936:2996]()
    "[time_series:05:{}:{}] Failed to read file [{}].",
    [2.2936]
    [2.2996]
    "[time_series:06:{}:{}] Failed to read file [{}].",
  • edit in src/error.rs at line 101
    [2.3062]
    [2.3062]
  • replacement in src/error.rs at line 108
    [3.3419][2.3155:3221]()
    "[time_series:04:{}:{}] Time-series has only one point.",
    [3.3419]
    [2.3221]
    "[time_series:07:{}:{}] Time-series has only one point.",
  • replacement in src/error.rs at line 120
    [3.3549][2.3342:3398]()
    "[time_series:05:{}:{}] Time-series is empty.",
    [3.3549]
    [2.3398]
    "[time_series:08:{}:{}] Time-series is empty.",