timeprice 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +99 -0
- data/README.md +73 -2
- data/data/cpi/au.json +419 -0
- data/data/cpi/br.json +529 -0
- data/data/cpi/ca.json +1501 -0
- data/data/cpi/ch.json +549 -0
- data/data/cpi/cn.json +487 -0
- data/data/cpi/cz.json +500 -0
- data/data/cpi/eu.json +1 -1
- data/data/cpi/hk.json +351 -0
- data/data/cpi/hu.json +537 -0
- data/data/cpi/id.json +550 -0
- data/data/cpi/il.json +549 -0
- data/data/cpi/in.json +549 -0
- data/data/cpi/jp.json +2 -2
- data/data/cpi/kr.json +550 -0
- data/data/cpi/mx.json +550 -0
- data/data/cpi/my.json +429 -0
- data/data/cpi/no.json +549 -0
- data/data/cpi/nz.json +94 -0
- data/data/cpi/ph.json +309 -0
- data/data/cpi/pl.json +539 -0
- data/data/cpi/ru.json +487 -0
- data/data/cpi/se.json +549 -0
- data/data/cpi/sg.json +369 -0
- data/data/cpi/th.json +309 -0
- data/data/cpi/tr.json +549 -0
- data/data/cpi/uk.json +1 -1
- data/data/cpi/us.json +1007 -5
- data/data/cpi/vn.json +32 -32
- data/data/cpi/za.json +549 -0
- data/data/fx/usd/1999.json +5982 -262
- data/data/fx/usd/2000.json +6999 -258
- data/data/fx/usd/2001.json +7142 -257
- data/data/fx/usd/2002.json +7170 -258
- data/data/fx/usd/2003.json +7170 -258
- data/data/fx/usd/2004.json +7282 -262
- data/data/fx/usd/2005.json +7226 -260
- data/data/fx/usd/2006.json +7170 -258
- data/data/fx/usd/2007.json +7169 -258
- data/data/fx/usd/2008.json +7184 -259
- data/data/fx/usd/2009.json +6941 -259
- data/data/fx/usd/2010.json +6995 -261
- data/data/fx/usd/2011.json +6968 -260
- data/data/fx/usd/2012.json +6941 -259
- data/data/fx/usd/2013.json +6914 -258
- data/data/fx/usd/2014.json +6914 -258
- data/data/fx/usd/2015.json +6941 -259
- data/data/fx/usd/2016.json +6968 -260
- data/data/fx/usd/2017.json +6914 -258
- data/data/fx/usd/2018.json +7148 -258
- data/data/fx/usd/2019.json +7170 -258
- data/data/fx/usd/2020.json +7226 -260
- data/data/fx/usd/2021.json +7254 -261
- data/data/fx/usd/2022.json +7226 -260
- data/data/fx/usd/2023.json +7170 -258
- data/data/fx/usd/2024.json +7198 -259
- data/data/fx/usd/2025.json +7170 -258
- data/data/fx/usd/2026.json +2561 -92
- data/data/fx/usd/_annual.json +46 -1
- data/data/manifest.json +565 -2
- data/lib/timeprice/cli/presenters/compare.rb +44 -8
- data/lib/timeprice/cli.rb +24 -7
- data/lib/timeprice/compare/series.rb +120 -0
- data/lib/timeprice/compare.rb +108 -15
- data/lib/timeprice/cpi_lookup.rb +14 -8
- data/lib/timeprice/data_loader.rb +8 -17
- data/lib/timeprice/date.rb +62 -0
- data/lib/timeprice/exchange.rb +49 -23
- data/lib/timeprice/forecast/cagr.rb +96 -0
- data/lib/timeprice/forecast/cpi_forecaster.rb +90 -0
- data/lib/timeprice/forecast/fx_forecaster.rb +173 -0
- data/lib/timeprice/forecast.rb +21 -0
- data/lib/timeprice/inflation.rb +12 -4
- data/lib/timeprice/metadata.rb +121 -0
- data/lib/timeprice/metadata_snapshot.rb +23 -0
- data/lib/timeprice/point.rb +11 -3
- data/lib/timeprice/schema.rb +78 -0
- data/lib/timeprice/sources.rb +1 -1
- data/lib/timeprice/supported.rb +16 -0
- data/lib/timeprice/version.rb +1 -1
- data/lib/timeprice.rb +48 -3
- metadata +49 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7bfb62351a8c29d487a50658a34b03b7c0e9843df0aaca6aa8ad677507379334
|
|
4
|
+
data.tar.gz: 70d41f26d096c44f5b72ff64327f80a58be49dab0705a4204e134e5b19c2eec0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d59d8b5bb6f74cb0b3dafca722df096647b149720a0bbde8c31679511f6e8ec0cd62940627f1c8b87ebca147f5a453610e75092b7ec9182dee43364f91f442bf
|
|
7
|
+
data.tar.gz: 1d8b22a4e8b31e5ac92c0c476cc53ac20f696cb446c2ae4a93e4ae3c6a0e152a24d645be831940c0b2bdf30581d0f025124ff9d0eebb06d1cac8a1bcd427cf48
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,105 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.8.0] - 2026-05-17
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Offline forecasting past the bundled data.** New `Timeprice::Forecast`
|
|
12
|
+
module: `CpiForecaster.project` and `FxForecaster.project` use a
|
|
13
|
+
trailing-window CAGR for the point estimate and ±1σ of year-over-year
|
|
14
|
+
changes for the band. Pure-Ruby, deterministic, no network calls or
|
|
15
|
+
stats dependencies. Defaults: 10-year window for CPI, 5-year for FX;
|
|
16
|
+
horizon caps 5y CPI / 2y FX (caps raise `horizon_exceeds_cap`
|
|
17
|
+
warnings, they don't block). `Forecast::Result` is a frozen value
|
|
18
|
+
object with `value`, `low`, `high`, `projection_method`, `sigma_pct`,
|
|
19
|
+
`last_known_date`, `target_date`, `horizon_months`, `basis_kind`,
|
|
20
|
+
`warnings`. `Timeprice.forecast(...)` is the public dispatcher.
|
|
21
|
+
- `Timeprice.compare` accepts `forecast: true`; when the target date
|
|
22
|
+
is past the bundled CPI window the result carries a populated
|
|
23
|
+
`forecast: { basis_kind:, projection_method:, window_years:,
|
|
24
|
+
sigma_pct:, last_known_date:, horizon_months:, low:, high:,
|
|
25
|
+
warnings: }` block and `granularity: :forecast`.
|
|
26
|
+
- CLI: `timeprice compare --forecast` prints the range, basis, and
|
|
27
|
+
caveats; `--json` exposes the same fields machine-readably.
|
|
28
|
+
- `Timeprice::Compare.series_for(from:, to:, forecast:, amount:)` returns
|
|
29
|
+
annual sample points for the chart strip; forecast points carry
|
|
30
|
+
`:low` / `:high` for the ±1σ band.
|
|
31
|
+
- `rake forecast:backtest` reports per-country MAPE for the bundled
|
|
32
|
+
data with assertions, so accuracy regressions are caught in CI.
|
|
33
|
+
|
|
34
|
+
### Web calculator
|
|
35
|
+
- Inline **📈 Forecast this date** affordance replaces the old form-level
|
|
36
|
+
checkbox. It only appears when the entered target year is past the
|
|
37
|
+
destination country's bundled CPI window. Clicking toggles
|
|
38
|
+
`state.form.forecast` and re-computes; the toggle round-trips through
|
|
39
|
+
the existing `&forecast=1` URL param.
|
|
40
|
+
- New SVG strip beneath the result paints the measured polyline, the
|
|
41
|
+
dashed forecast line, a striped ±1σ fan, and tick labels — answers
|
|
42
|
+
"how did we get this number?" visually.
|
|
43
|
+
- Amount input now carries locale thousands separators with a
|
|
44
|
+
caret-preserving live formatter; `parseAmount` strips them before
|
|
45
|
+
parsing.
|
|
46
|
+
- From/To rows reflow to `label + currency (60%) + 'in' + date (40%)`
|
|
47
|
+
on a single line, all three form rows ending at the same right edge.
|
|
48
|
+
- Footer meta line ("refreshed …, gem v…") now hydrates from
|
|
49
|
+
`Timeprice.metadata` at boot; the HTML carries placeholders only, so
|
|
50
|
+
releases no longer hand-edit the index.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
- `thor` is now a development dependency, not a runtime dependency. The
|
|
54
|
+
CLI (`exe/timeprice`) still works exactly as before, but users who only
|
|
55
|
+
`require "timeprice"` as a library no longer pull in thor and its
|
|
56
|
+
transitive stdlib (`set`, `digest`, `erb`, etc.). The ruby.wasm site
|
|
57
|
+
bundle drops ~200 KB raw / ~55 KB gzipped. CLI users need to run
|
|
58
|
+
`gem install thor` once; `bin/timeprice` prints a clear hint if it's
|
|
59
|
+
missing.
|
|
60
|
+
|
|
61
|
+
### Breaking changes (planned for 1.0.0)
|
|
62
|
+
- Public API methods (`inflation`, `exchange`, `compare`) now accept
|
|
63
|
+
`Timeprice::Date` in addition to strings. The accepted string formats
|
|
64
|
+
(`YYYY`, `YYYY-MM`, `YYYY-Qn`, `YYYY-MM-DD`) are unchanged. Unparseable
|
|
65
|
+
input now raises `Timeprice::InvalidDate` instead of a generic
|
|
66
|
+
`ArgumentError` at the boundary.
|
|
67
|
+
- `Timeprice.metadata` returns a `MetadataSnapshot` value object. Hash
|
|
68
|
+
access (`meta[:countries]`), `to_h`, and `JSON.generate(meta)` keep
|
|
69
|
+
working — the wire shape is byte-identical. New code should treat the
|
|
70
|
+
result as a frozen `Data` instance.
|
|
71
|
+
- `Timeprice::Point` gains `Point.parse(currency, date)` as the
|
|
72
|
+
canonical constructor; it routes the date through `Timeprice::Date`.
|
|
73
|
+
- Implementation modules (`Timeprice::Inflation`, `::Exchange`,
|
|
74
|
+
`::Compare`, `::Metadata`) are marked `@api private`. They will be
|
|
75
|
+
relocated to `Timeprice::Internal::` in a future major release; depend
|
|
76
|
+
on the `Timeprice.<method>` facade.
|
|
77
|
+
|
|
78
|
+
## [0.7.0] - 2026-05-15
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
- `Exchange.resolve_rate` no longer raises `DataNotFound` when one
|
|
82
|
+
triangulation leg falls back to the annual rate and the other resolves
|
|
83
|
+
on a daily date. Annual rates are year-wide, so they now adopt the
|
|
84
|
+
daily leg's effective date. Daily-vs-daily mismatches still raise.
|
|
85
|
+
- `Compare.run` short-circuits CPI with `cpi_ratio: 1.0` when both
|
|
86
|
+
points share a date — there's no time-elapsed inflation to apply, and
|
|
87
|
+
the daily `YYYY-MM-DD` grain that this path produces would otherwise
|
|
88
|
+
blow up CPI's monthly-max lookup.
|
|
89
|
+
- Web UI: `humaniseError` now recognises `DataNotFound`, FX
|
|
90
|
+
triangulation, and "No FX rate" patterns so a Ruby backtrace can no
|
|
91
|
+
longer surface in the result block.
|
|
92
|
+
|
|
93
|
+
### Refactor (internal)
|
|
94
|
+
- `Timeprice::Schema` owns the on-disk format definition; both the
|
|
95
|
+
reader (DataLoader) and the writer (data pipeline) reference it.
|
|
96
|
+
- Data pipeline moved from `scripts/` to `tools/data_pipeline/`. Run via
|
|
97
|
+
`bundle exec rake data:refresh` and `bundle exec rake data:check_schema`.
|
|
98
|
+
- Provider self-registration replaces the hand-written orchestration
|
|
99
|
+
list. Seven World Bank CPI subclasses collapsed into a factory call.
|
|
100
|
+
- `Tools::DataPipeline::Series` value object replaces positional
|
|
101
|
+
`[monthly, annual]` / `[monthly, quarterly, annual]` returns.
|
|
102
|
+
- Typed `Tools::DataPipeline::Error` hierarchy (HttpError, ShapeError,
|
|
103
|
+
ValidationError, SchemaError) replaces bare string raises.
|
|
104
|
+
- Adopted the Weirich convention: `fail` for new exceptions, `raise` for
|
|
105
|
+
re-throws inside rescue blocks.
|
|
106
|
+
|
|
8
107
|
## [0.6.0] - 2026-05-12
|
|
9
108
|
|
|
10
109
|
### Added
|
data/README.md
CHANGED
|
@@ -6,6 +6,10 @@ Offline historical inflation & FX for Ruby — bundled data, no API keys, monthl
|
|
|
6
6
|
[](https://rubygems.org/gems/timeprice)
|
|
7
7
|
[](https://www.ruby-lang.org/)
|
|
8
8
|
|
|
9
|
+
**Try it without installing anything → [patrick204nqh.github.io/timeprice](https://patrick204nqh.github.io/timeprice/).** The page boots the gem in your browser via ruby.wasm — same code, same numbers, no backend.
|
|
10
|
+
|
|
11
|
+
[](https://patrick204nqh.github.io/timeprice/)
|
|
12
|
+
|
|
9
13
|
## Why this exists
|
|
10
14
|
|
|
11
15
|
Every other "historical inflation / FX" library wants you to wire up an API key, eat a rate
|
|
@@ -28,6 +32,14 @@ gem "timeprice", "~> 0.1"
|
|
|
28
32
|
|
|
29
33
|
Requires Ruby >= 3.2.
|
|
30
34
|
|
|
35
|
+
The CLI also needs the `thor` gem, kept out of timeprice's runtime
|
|
36
|
+
dependencies so library users (`require "timeprice"`) and the ruby.wasm
|
|
37
|
+
site bundle don't carry it:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
gem install thor
|
|
41
|
+
```
|
|
42
|
+
|
|
31
43
|
## CLI examples
|
|
32
44
|
|
|
33
45
|
```bash
|
|
@@ -48,6 +60,38 @@ $ timeprice compare 100 --from "2010 USD" --to "2024 VND"
|
|
|
48
60
|
-> inflate x1.8970 VN -> 3,530,921 VND (2024, annual)
|
|
49
61
|
```
|
|
50
62
|
|
|
63
|
+
### Forecasting (target dates past the bundled data)
|
|
64
|
+
|
|
65
|
+
`compare` accepts target dates beyond the last bundled CPI / FX point when
|
|
66
|
+
you pass `--forecast` (CLI) or `forecast: true` (Ruby). The forecast uses a
|
|
67
|
+
trailing-window CAGR with a ±1σ band derived from historical year-over-year
|
|
68
|
+
volatility — no network calls, no stats dependencies, fully deterministic.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
$ timeprice compare 100 --from "2010 USD" --to "2030 VND" --forecast
|
|
72
|
+
4,297,876 VND in 2030 (forecast)
|
|
73
|
+
100.00 USD (2010)
|
|
74
|
+
-> fx @ 18,612.92 -> 1,861,292 VND (2010)
|
|
75
|
+
-> inflate x2.3091 VN -> 4,297,876 VND (2030, forecast)
|
|
76
|
+
|
|
77
|
+
range 4,133,277 VND — 4,297,876 VND — 4,467,270 VND
|
|
78
|
+
(low -1σ) (most likely) (high +1σ)
|
|
79
|
+
|
|
80
|
+
basis trailing 10y CAGR · last data 2026-03
|
|
81
|
+
sigma ±1.0%/yr · horizon +46mo
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Defaults: 10-year window for CPI, 5-year for FX. Horizon caps (5y CPI, 2y
|
|
85
|
+
FX) don't block the forecast — they raise a `horizon_exceeds_cap` warning
|
|
86
|
+
in the result. Run `bundle exec rake forecast:backtest` to see per-country
|
|
87
|
+
MAPE for the bundled data.
|
|
88
|
+
|
|
89
|
+
On the web calculator the forecast is opt-in per query: when you enter a
|
|
90
|
+
target date past the bundled CPI window, an inline **📈 Forecast this
|
|
91
|
+
date** button appears under the result. A small SVG strip below the result
|
|
92
|
+
visualises the measured series and, when forecast is on, a striped fan band
|
|
93
|
+
for the projected tail.
|
|
94
|
+
|
|
51
95
|
The first line of each result is the answer — pipe through `head -1` if a
|
|
52
96
|
script only needs the headline figure.
|
|
53
97
|
|
|
@@ -88,6 +132,33 @@ r.cpi_ratio # => 1.897026680414...
|
|
|
88
132
|
All result objects are `Data.define` value objects — they support `.to_h`, `==`, and
|
|
89
133
|
pattern matching, so you can hand them to JSON, RSpec, or `case/in` without ceremony.
|
|
90
134
|
|
|
135
|
+
### Introspection: `Timeprice.metadata`
|
|
136
|
+
|
|
137
|
+
`Timeprice.metadata` returns a frozen, JSON-serialisable snapshot of the bundled
|
|
138
|
+
dataset — version, refresh date, country list with per-granularity CPI ranges, currency
|
|
139
|
+
list, and FX daily coverage. Use it to populate dropdowns or validate date inputs
|
|
140
|
+
without hardcoding what the gem already knows.
|
|
141
|
+
|
|
142
|
+
```ruby
|
|
143
|
+
Timeprice.metadata
|
|
144
|
+
# => {
|
|
145
|
+
# version: "0.8.0",
|
|
146
|
+
# generated_at: "2026-05-12",
|
|
147
|
+
# countries: [
|
|
148
|
+
# { code: "US", name: "United States", currency: "USD",
|
|
149
|
+
# granularities: ["monthly", "annual"],
|
|
150
|
+
# cpi: { monthly: { min: "1990-01", max: "2026-03" },
|
|
151
|
+
# annual: { min: "1990", max: "2024" } } },
|
|
152
|
+
# ...
|
|
153
|
+
# ],
|
|
154
|
+
# currencies: [{ code: "USD", name: "US dollar" }, ...],
|
|
155
|
+
# fx: { base: "USD", daily_min: "1999-01-04", daily_max: "2026-05-11" }
|
|
156
|
+
# }
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The browser calculator linked at the top of this README is the canonical consumer —
|
|
160
|
+
it reads metadata at boot so the UI never disagrees with the dataset.
|
|
161
|
+
|
|
91
162
|
## Supported countries, currencies, and data ranges
|
|
92
163
|
|
|
93
164
|
Coverage is derived from the bundled `data/` files. Re-check with `timeprice sources`.
|
|
@@ -102,7 +173,7 @@ Coverage is derived from the bundled `data/` files. Re-check with `timeprice sou
|
|
|
102
173
|
| Australia | AUD | ABS 6401.0 (quarterly) + World Bank `FP.CPI.TOTL` (annual baseline) | Quarterly + annual | 1948-Q3 → present |
|
|
103
174
|
| Canada | CAD | Statistics Canada WDS (table 18-10-0004-01, vector `v41690973`) + World Bank annual baseline | Monthly + annual | 1914-01 → present |
|
|
104
175
|
| Korea (Rep.) | KRW | IMF Data Portal CPI dataflow + World Bank annual baseline | Monthly + annual | 1990-01 → present |
|
|
105
|
-
| China | CNY | World Bank `FP.CPI.TOTL` (annual primary) + IMF Data Portal CPI dataflow (monthly layer) | Monthly + annual |
|
|
176
|
+
| China | CNY | World Bank `FP.CPI.TOTL` (annual primary) + IMF Data Portal CPI dataflow (monthly layer) | Monthly + annual | 1993-01 → present |
|
|
106
177
|
| Russia | RUB | World Bank `FP.CPI.TOTL` (annual primary) + IMF Data Portal CPI dataflow (monthly layer) | Monthly + annual | 1992-01 → present |
|
|
107
178
|
|
|
108
179
|
**FX (USD base):** ECB reference rates via Frankfurter for **EUR / GBP / JPY / AUD /
|
|
@@ -287,7 +358,7 @@ Bundled data lives under `data/` in schema v3 and is self-describing:
|
|
|
287
358
|
currencies sourced at annual resolution (today only VND). Used as the
|
|
288
359
|
fallback tier when no daily rate covers the requested date.
|
|
289
360
|
|
|
290
|
-
`
|
|
361
|
+
`tools/data_pipeline/schema_check.rb` enforces the shape in CI.
|
|
291
362
|
|
|
292
363
|
## Author
|
|
293
364
|
|
data/data/cpi/au.json
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
{
|
|
2
|
+
"country": "AU",
|
|
3
|
+
"index": {
|
|
4
|
+
"base_period": "2010",
|
|
5
|
+
"rebased_at": null
|
|
6
|
+
},
|
|
7
|
+
"provenance": [
|
|
8
|
+
{
|
|
9
|
+
"from": "1948-Q3",
|
|
10
|
+
"provider": "abs",
|
|
11
|
+
"series": "quarterly",
|
|
12
|
+
"to": "2026-Q1"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"from": "1960",
|
|
16
|
+
"provider": "world_bank",
|
|
17
|
+
"series": "annual",
|
|
18
|
+
"to": "2024"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"providers": [
|
|
22
|
+
{
|
|
23
|
+
"fetched_at": "2026-05-16",
|
|
24
|
+
"id": "world_bank",
|
|
25
|
+
"label": "World Bank FP.CPI.TOTL (annual, AU baseline)",
|
|
26
|
+
"status": "ok"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"fetched_at": "2026-05-16",
|
|
30
|
+
"id": "abs",
|
|
31
|
+
"label": "ABS 6401.0 Consumer Price Index (quarterly) + World Bank (annual baseline)",
|
|
32
|
+
"status": "ok"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"schema_version": 4,
|
|
36
|
+
"series": {
|
|
37
|
+
"annual": {
|
|
38
|
+
"1960": 7.96045859451027,
|
|
39
|
+
"1961": 8.14256048564101,
|
|
40
|
+
"1962": 8.11654592976519,
|
|
41
|
+
"1963": 8.16857504151683,
|
|
42
|
+
"1964": 8.40270492027182,
|
|
43
|
+
"1965": 8.68886615903322,
|
|
44
|
+
"1966": 8.97502627366723,
|
|
45
|
+
"1967": 9.28720094417707,
|
|
46
|
+
"1968": 9.52133194705944,
|
|
47
|
+
"1969": 9.83350661756927,
|
|
48
|
+
"1970": 10.1716958439549,
|
|
49
|
+
"1971": 10.7960455596837,
|
|
50
|
+
"1972": 11.4464105807065,
|
|
51
|
+
"1973": 12.4869928157393,
|
|
52
|
+
"1974": 14.4120721988047,
|
|
53
|
+
"1975": 16.5972911452823,
|
|
54
|
+
"1976": 18.8085321418182,
|
|
55
|
+
"1977": 21.1238298630209,
|
|
56
|
+
"1978": 22.8147722478579,
|
|
57
|
+
"1979": 24.8959404650147,
|
|
58
|
+
"1980": 27.4193553826422,
|
|
59
|
+
"1981": 30.0208109702242,
|
|
60
|
+
"1982": 33.4287230358843,
|
|
61
|
+
"1983": 36.7845992450285,
|
|
62
|
+
"1984": 38.2414196200022,
|
|
63
|
+
"1985": 40.8168591528718,
|
|
64
|
+
"1986": 44.5109290849112,
|
|
65
|
+
"1987": 48.3090482474348,
|
|
66
|
+
"1988": 51.7950084772319,
|
|
67
|
+
"1989": 55.6971918586048,
|
|
68
|
+
"1990": 59.7814801287815,
|
|
69
|
+
"1991": 61.6805397100433,
|
|
70
|
+
"1992": 62.3048875522264,
|
|
71
|
+
"1993": 63.3975018966839,
|
|
72
|
+
"1994": 64.6462013281415,
|
|
73
|
+
"1995": 67.6378752538607,
|
|
74
|
+
"1996": 69.4068620557434,
|
|
75
|
+
"1997": 69.5629546369261,
|
|
76
|
+
"1998": 70.1612864243969,
|
|
77
|
+
"1999": 71.2018761536123,
|
|
78
|
+
"2000": 74.3756549681352,
|
|
79
|
+
"2001": 77.6534867602337,
|
|
80
|
+
"2002": 79.9687807343452,
|
|
81
|
+
"2003": 82.1540056761687,
|
|
82
|
+
"2004": 84.0790850592342,
|
|
83
|
+
"2005": 86.3423506710122,
|
|
84
|
+
"2006": 89.4120690137771,
|
|
85
|
+
"2007": 91.493237230934,
|
|
86
|
+
"2008": 95.4734650293526,
|
|
87
|
+
"2009": 97.1644149083721,
|
|
88
|
+
"2010": 99.9999999999999,
|
|
89
|
+
"2011": 103.30384784681,
|
|
90
|
+
"2012": 105.124870505209,
|
|
91
|
+
"2013": 107.700306290987,
|
|
92
|
+
"2014": 110.379813789798,
|
|
93
|
+
"2015": 112.044747614105,
|
|
94
|
+
"2016": 113.475551934366,
|
|
95
|
+
"2017": 115.686785436719,
|
|
96
|
+
"2018": 117.898022686164,
|
|
97
|
+
"2019": 119.797089761608,
|
|
98
|
+
"2020": 120.811652194838,
|
|
99
|
+
"2021": 124.271592622831,
|
|
100
|
+
"2022": 132.466181470806,
|
|
101
|
+
"2023": 139.880337389597,
|
|
102
|
+
"2024": 144.309741509281
|
|
103
|
+
},
|
|
104
|
+
"monthly": {},
|
|
105
|
+
"quarterly": {
|
|
106
|
+
"1948-Q3": 2.59,
|
|
107
|
+
"1948-Q4": 2.63,
|
|
108
|
+
"1949-Q1": 2.71,
|
|
109
|
+
"1949-Q2": 2.74,
|
|
110
|
+
"1949-Q3": 2.82,
|
|
111
|
+
"1949-Q4": 2.86,
|
|
112
|
+
"1950-Q1": 2.9,
|
|
113
|
+
"1950-Q2": 3.02,
|
|
114
|
+
"1950-Q3": 3.05,
|
|
115
|
+
"1950-Q4": 3.17,
|
|
116
|
+
"1951-Q1": 3.32,
|
|
117
|
+
"1951-Q2": 3.52,
|
|
118
|
+
"1951-Q3": 3.71,
|
|
119
|
+
"1951-Q4": 3.98,
|
|
120
|
+
"1952-Q1": 4.1,
|
|
121
|
+
"1952-Q2": 4.25,
|
|
122
|
+
"1952-Q3": 4.33,
|
|
123
|
+
"1952-Q4": 4.37,
|
|
124
|
+
"1953-Q1": 4.41,
|
|
125
|
+
"1953-Q2": 4.45,
|
|
126
|
+
"1953-Q3": 4.48,
|
|
127
|
+
"1953-Q4": 4.45,
|
|
128
|
+
"1954-Q1": 4.48,
|
|
129
|
+
"1954-Q2": 4.48,
|
|
130
|
+
"1954-Q3": 4.48,
|
|
131
|
+
"1954-Q4": 4.48,
|
|
132
|
+
"1955-Q1": 4.52,
|
|
133
|
+
"1955-Q2": 4.56,
|
|
134
|
+
"1955-Q3": 4.6,
|
|
135
|
+
"1955-Q4": 4.64,
|
|
136
|
+
"1956-Q1": 4.68,
|
|
137
|
+
"1956-Q2": 4.83,
|
|
138
|
+
"1956-Q3": 4.95,
|
|
139
|
+
"1956-Q4": 4.95,
|
|
140
|
+
"1957-Q1": 4.95,
|
|
141
|
+
"1957-Q2": 4.99,
|
|
142
|
+
"1957-Q3": 4.99,
|
|
143
|
+
"1957-Q4": 4.99,
|
|
144
|
+
"1958-Q1": 5.03,
|
|
145
|
+
"1958-Q2": 5.03,
|
|
146
|
+
"1958-Q3": 5.03,
|
|
147
|
+
"1958-Q4": 5.06,
|
|
148
|
+
"1959-Q1": 5.1,
|
|
149
|
+
"1959-Q2": 5.1,
|
|
150
|
+
"1959-Q3": 5.14,
|
|
151
|
+
"1959-Q4": 5.18,
|
|
152
|
+
"1960-Q1": 5.22,
|
|
153
|
+
"1960-Q2": 5.3,
|
|
154
|
+
"1960-Q3": 5.37,
|
|
155
|
+
"1960-Q4": 5.41,
|
|
156
|
+
"1961-Q1": 5.45,
|
|
157
|
+
"1961-Q2": 5.49,
|
|
158
|
+
"1961-Q3": 5.45,
|
|
159
|
+
"1961-Q4": 5.45,
|
|
160
|
+
"1962-Q1": 5.45,
|
|
161
|
+
"1962-Q2": 5.45,
|
|
162
|
+
"1962-Q3": 5.45,
|
|
163
|
+
"1962-Q4": 5.45,
|
|
164
|
+
"1963-Q1": 5.45,
|
|
165
|
+
"1963-Q2": 5.45,
|
|
166
|
+
"1963-Q3": 5.49,
|
|
167
|
+
"1963-Q4": 5.49,
|
|
168
|
+
"1964-Q1": 5.53,
|
|
169
|
+
"1964-Q2": 5.57,
|
|
170
|
+
"1964-Q3": 5.64,
|
|
171
|
+
"1964-Q4": 5.68,
|
|
172
|
+
"1965-Q1": 5.72,
|
|
173
|
+
"1965-Q2": 5.8,
|
|
174
|
+
"1965-Q3": 5.84,
|
|
175
|
+
"1965-Q4": 5.91,
|
|
176
|
+
"1966-Q1": 5.95,
|
|
177
|
+
"1966-Q2": 5.99,
|
|
178
|
+
"1966-Q3": 5.99,
|
|
179
|
+
"1966-Q4": 6.07,
|
|
180
|
+
"1967-Q1": 6.11,
|
|
181
|
+
"1967-Q2": 6.15,
|
|
182
|
+
"1967-Q3": 6.26,
|
|
183
|
+
"1967-Q4": 6.26,
|
|
184
|
+
"1968-Q1": 6.3,
|
|
185
|
+
"1968-Q2": 6.34,
|
|
186
|
+
"1968-Q3": 6.38,
|
|
187
|
+
"1968-Q4": 6.42,
|
|
188
|
+
"1969-Q1": 6.49,
|
|
189
|
+
"1969-Q2": 6.53,
|
|
190
|
+
"1969-Q3": 6.57,
|
|
191
|
+
"1969-Q4": 6.61,
|
|
192
|
+
"1970-Q1": 6.69,
|
|
193
|
+
"1970-Q2": 6.77,
|
|
194
|
+
"1970-Q3": 6.8,
|
|
195
|
+
"1970-Q4": 6.92,
|
|
196
|
+
"1971-Q1": 7.0,
|
|
197
|
+
"1971-Q2": 7.11,
|
|
198
|
+
"1971-Q3": 7.27,
|
|
199
|
+
"1971-Q4": 7.42,
|
|
200
|
+
"1972-Q1": 7.5,
|
|
201
|
+
"1972-Q2": 7.58,
|
|
202
|
+
"1972-Q3": 7.69,
|
|
203
|
+
"1972-Q4": 7.77,
|
|
204
|
+
"1973-Q1": 7.93,
|
|
205
|
+
"1973-Q2": 8.2,
|
|
206
|
+
"1973-Q3": 8.47,
|
|
207
|
+
"1973-Q4": 8.78,
|
|
208
|
+
"1974-Q1": 9.01,
|
|
209
|
+
"1974-Q2": 9.39,
|
|
210
|
+
"1974-Q3": 9.86,
|
|
211
|
+
"1974-Q4": 10.21,
|
|
212
|
+
"1975-Q1": 10.59,
|
|
213
|
+
"1975-Q2": 10.98,
|
|
214
|
+
"1975-Q3": 11.06,
|
|
215
|
+
"1975-Q4": 11.68,
|
|
216
|
+
"1976-Q1": 11.98,
|
|
217
|
+
"1976-Q2": 12.29,
|
|
218
|
+
"1976-Q3": 12.6,
|
|
219
|
+
"1976-Q4": 13.34,
|
|
220
|
+
"1977-Q1": 13.65,
|
|
221
|
+
"1977-Q2": 13.96,
|
|
222
|
+
"1977-Q3": 14.23,
|
|
223
|
+
"1977-Q4": 14.57,
|
|
224
|
+
"1978-Q1": 14.77,
|
|
225
|
+
"1978-Q2": 15.08,
|
|
226
|
+
"1978-Q3": 15.35,
|
|
227
|
+
"1978-Q4": 15.7,
|
|
228
|
+
"1979-Q1": 15.97,
|
|
229
|
+
"1979-Q2": 16.39,
|
|
230
|
+
"1979-Q3": 16.78,
|
|
231
|
+
"1979-Q4": 17.28,
|
|
232
|
+
"1980-Q1": 17.67,
|
|
233
|
+
"1980-Q2": 18.17,
|
|
234
|
+
"1980-Q3": 18.48,
|
|
235
|
+
"1980-Q4": 18.87,
|
|
236
|
+
"1981-Q1": 19.33,
|
|
237
|
+
"1981-Q2": 19.76,
|
|
238
|
+
"1981-Q3": 20.14,
|
|
239
|
+
"1981-Q4": 20.99,
|
|
240
|
+
"1982-Q1": 21.38,
|
|
241
|
+
"1982-Q2": 21.88,
|
|
242
|
+
"1982-Q3": 22.65,
|
|
243
|
+
"1982-Q4": 23.31,
|
|
244
|
+
"1983-Q1": 23.81,
|
|
245
|
+
"1983-Q2": 24.32,
|
|
246
|
+
"1983-Q3": 24.74,
|
|
247
|
+
"1983-Q4": 25.32,
|
|
248
|
+
"1984-Q1": 25.21,
|
|
249
|
+
"1984-Q2": 25.28,
|
|
250
|
+
"1984-Q3": 25.59,
|
|
251
|
+
"1984-Q4": 25.98,
|
|
252
|
+
"1985-Q1": 26.33,
|
|
253
|
+
"1985-Q2": 26.95,
|
|
254
|
+
"1985-Q3": 27.56,
|
|
255
|
+
"1985-Q4": 28.11,
|
|
256
|
+
"1986-Q1": 28.76,
|
|
257
|
+
"1986-Q2": 29.23,
|
|
258
|
+
"1986-Q3": 30.0,
|
|
259
|
+
"1986-Q4": 30.85,
|
|
260
|
+
"1987-Q1": 31.47,
|
|
261
|
+
"1987-Q2": 31.93,
|
|
262
|
+
"1987-Q3": 32.47,
|
|
263
|
+
"1987-Q4": 33.05,
|
|
264
|
+
"1988-Q1": 33.63,
|
|
265
|
+
"1988-Q2": 34.21,
|
|
266
|
+
"1988-Q3": 34.87,
|
|
267
|
+
"1988-Q4": 35.57,
|
|
268
|
+
"1989-Q1": 35.91,
|
|
269
|
+
"1989-Q2": 36.8,
|
|
270
|
+
"1989-Q3": 37.65,
|
|
271
|
+
"1989-Q4": 38.35,
|
|
272
|
+
"1990-Q1": 39.01,
|
|
273
|
+
"1990-Q2": 39.63,
|
|
274
|
+
"1990-Q3": 39.94,
|
|
275
|
+
"1990-Q4": 40.98,
|
|
276
|
+
"1991-Q1": 40.9,
|
|
277
|
+
"1991-Q2": 40.98,
|
|
278
|
+
"1991-Q3": 41.21,
|
|
279
|
+
"1991-Q4": 41.6,
|
|
280
|
+
"1992-Q1": 41.6,
|
|
281
|
+
"1992-Q2": 41.48,
|
|
282
|
+
"1992-Q3": 41.52,
|
|
283
|
+
"1992-Q4": 41.71,
|
|
284
|
+
"1993-Q1": 42.1,
|
|
285
|
+
"1993-Q2": 42.25,
|
|
286
|
+
"1993-Q3": 42.45,
|
|
287
|
+
"1993-Q4": 42.53,
|
|
288
|
+
"1994-Q1": 42.68,
|
|
289
|
+
"1994-Q2": 42.99,
|
|
290
|
+
"1994-Q3": 43.26,
|
|
291
|
+
"1994-Q4": 43.61,
|
|
292
|
+
"1995-Q1": 44.34,
|
|
293
|
+
"1995-Q2": 44.92,
|
|
294
|
+
"1995-Q3": 45.46,
|
|
295
|
+
"1995-Q4": 45.81,
|
|
296
|
+
"1996-Q1": 46.0,
|
|
297
|
+
"1996-Q2": 46.31,
|
|
298
|
+
"1996-Q3": 46.43,
|
|
299
|
+
"1996-Q4": 46.51,
|
|
300
|
+
"1997-Q1": 46.58,
|
|
301
|
+
"1997-Q2": 46.47,
|
|
302
|
+
"1997-Q3": 46.28,
|
|
303
|
+
"1997-Q4": 46.39,
|
|
304
|
+
"1998-Q1": 46.51,
|
|
305
|
+
"1998-Q2": 46.78,
|
|
306
|
+
"1998-Q3": 46.91,
|
|
307
|
+
"1998-Q4": 47.11,
|
|
308
|
+
"1999-Q1": 47.08,
|
|
309
|
+
"1999-Q2": 47.29,
|
|
310
|
+
"1999-Q3": 47.72,
|
|
311
|
+
"1999-Q4": 47.97,
|
|
312
|
+
"2000-Q1": 48.4,
|
|
313
|
+
"2000-Q2": 48.77,
|
|
314
|
+
"2000-Q3": 50.59,
|
|
315
|
+
"2000-Q4": 50.76,
|
|
316
|
+
"2001-Q1": 51.3,
|
|
317
|
+
"2001-Q2": 51.73,
|
|
318
|
+
"2001-Q3": 51.87,
|
|
319
|
+
"2001-Q4": 52.35,
|
|
320
|
+
"2002-Q1": 52.82,
|
|
321
|
+
"2002-Q2": 53.2,
|
|
322
|
+
"2002-Q3": 53.56,
|
|
323
|
+
"2002-Q4": 53.92,
|
|
324
|
+
"2003-Q1": 54.62,
|
|
325
|
+
"2003-Q2": 54.62,
|
|
326
|
+
"2003-Q3": 54.93,
|
|
327
|
+
"2003-Q4": 55.22,
|
|
328
|
+
"2004-Q1": 55.71,
|
|
329
|
+
"2004-Q2": 55.97,
|
|
330
|
+
"2004-Q3": 56.2,
|
|
331
|
+
"2004-Q4": 56.63,
|
|
332
|
+
"2005-Q1": 57.01,
|
|
333
|
+
"2005-Q2": 57.35,
|
|
334
|
+
"2005-Q3": 57.92,
|
|
335
|
+
"2005-Q4": 58.22,
|
|
336
|
+
"2006-Q1": 58.72,
|
|
337
|
+
"2006-Q2": 59.65,
|
|
338
|
+
"2006-Q3": 60.18,
|
|
339
|
+
"2006-Q4": 60.11,
|
|
340
|
+
"2007-Q1": 60.16,
|
|
341
|
+
"2007-Q2": 60.9,
|
|
342
|
+
"2007-Q3": 61.32,
|
|
343
|
+
"2007-Q4": 61.89,
|
|
344
|
+
"2008-Q1": 62.72,
|
|
345
|
+
"2008-Q2": 63.63,
|
|
346
|
+
"2008-Q3": 64.37,
|
|
347
|
+
"2008-Q4": 64.16,
|
|
348
|
+
"2009-Q1": 64.23,
|
|
349
|
+
"2009-Q2": 64.55,
|
|
350
|
+
"2009-Q3": 65.16,
|
|
351
|
+
"2009-Q4": 65.51,
|
|
352
|
+
"2010-Q1": 66.12,
|
|
353
|
+
"2010-Q2": 66.52,
|
|
354
|
+
"2010-Q3": 67.0,
|
|
355
|
+
"2010-Q4": 67.26,
|
|
356
|
+
"2011-Q1": 68.3,
|
|
357
|
+
"2011-Q2": 68.93,
|
|
358
|
+
"2011-Q3": 69.34,
|
|
359
|
+
"2011-Q4": 69.34,
|
|
360
|
+
"2012-Q1": 69.38,
|
|
361
|
+
"2012-Q2": 69.74,
|
|
362
|
+
"2012-Q3": 70.69,
|
|
363
|
+
"2012-Q4": 70.87,
|
|
364
|
+
"2013-Q1": 71.11,
|
|
365
|
+
"2013-Q2": 71.38,
|
|
366
|
+
"2013-Q3": 72.25,
|
|
367
|
+
"2013-Q4": 72.77,
|
|
368
|
+
"2014-Q1": 73.2,
|
|
369
|
+
"2014-Q2": 73.57,
|
|
370
|
+
"2014-Q3": 73.88,
|
|
371
|
+
"2014-Q4": 74.02,
|
|
372
|
+
"2015-Q1": 74.16,
|
|
373
|
+
"2015-Q2": 74.69,
|
|
374
|
+
"2015-Q3": 74.98,
|
|
375
|
+
"2015-Q4": 75.27,
|
|
376
|
+
"2016-Q1": 75.12,
|
|
377
|
+
"2016-Q2": 75.45,
|
|
378
|
+
"2016-Q3": 75.98,
|
|
379
|
+
"2016-Q4": 76.38,
|
|
380
|
+
"2017-Q1": 76.73,
|
|
381
|
+
"2017-Q2": 76.88,
|
|
382
|
+
"2017-Q3": 77.35,
|
|
383
|
+
"2017-Q4": 77.87,
|
|
384
|
+
"2018-Q1": 78.21,
|
|
385
|
+
"2018-Q2": 78.49,
|
|
386
|
+
"2018-Q3": 78.83,
|
|
387
|
+
"2018-Q4": 79.24,
|
|
388
|
+
"2019-Q1": 79.23,
|
|
389
|
+
"2019-Q2": 79.7,
|
|
390
|
+
"2019-Q3": 80.15,
|
|
391
|
+
"2019-Q4": 80.7,
|
|
392
|
+
"2020-Q1": 81.0,
|
|
393
|
+
"2020-Q2": 79.44,
|
|
394
|
+
"2020-Q3": 80.67,
|
|
395
|
+
"2020-Q4": 81.4,
|
|
396
|
+
"2021-Q1": 81.87,
|
|
397
|
+
"2021-Q2": 82.47,
|
|
398
|
+
"2021-Q3": 83.17,
|
|
399
|
+
"2021-Q4": 84.23,
|
|
400
|
+
"2022-Q1": 86.05,
|
|
401
|
+
"2022-Q2": 87.59,
|
|
402
|
+
"2022-Q3": 89.2,
|
|
403
|
+
"2022-Q4": 90.85,
|
|
404
|
+
"2023-Q1": 92.08,
|
|
405
|
+
"2023-Q2": 92.87,
|
|
406
|
+
"2023-Q3": 93.94,
|
|
407
|
+
"2023-Q4": 94.53,
|
|
408
|
+
"2024-Q1": 95.41,
|
|
409
|
+
"2024-Q2": 96.41,
|
|
410
|
+
"2024-Q3": 96.62,
|
|
411
|
+
"2024-Q4": 96.81,
|
|
412
|
+
"2025-Q1": 97.7,
|
|
413
|
+
"2025-Q2": 98.43,
|
|
414
|
+
"2025-Q3": 99.73,
|
|
415
|
+
"2025-Q4": 100.32,
|
|
416
|
+
"2026-Q1": 101.7
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|