prophet-rb 0.2.5 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +31 -9
  4. data/lib/prophet/forecaster.rb +11 -1
  5. data/lib/prophet/holidays.rb +6 -10
  6. data/lib/prophet/stan_backend.rb +20 -1
  7. data/lib/prophet/version.rb +1 -1
  8. data/lib/prophet.rb +18 -7
  9. data/vendor/aarch64-linux/bin/prophet +0 -0
  10. data/vendor/aarch64-linux/lib/libtbb.so +1 -0
  11. data/vendor/aarch64-linux/lib/libtbb.so.2 +0 -0
  12. data/vendor/aarch64-linux/lib/libtbbmalloc.so +1 -0
  13. data/vendor/aarch64-linux/lib/libtbbmalloc.so.2 +0 -0
  14. data/vendor/aarch64-linux/lib/libtbbmalloc_proxy.so +1 -0
  15. data/vendor/aarch64-linux/lib/libtbbmalloc_proxy.so.2 +0 -0
  16. data/vendor/aarch64-linux/licenses/boost-license.txt +23 -0
  17. data/vendor/aarch64-linux/licenses/cli11-license.txt +25 -0
  18. data/vendor/aarch64-linux/licenses/cmdstan-license.txt +27 -0
  19. data/vendor/aarch64-linux/licenses/eigen-bsd-license.txt +26 -0
  20. data/vendor/aarch64-linux/licenses/eigen-mpl2-license.txt +373 -0
  21. data/vendor/aarch64-linux/licenses/prophet-license.txt +21 -0
  22. data/vendor/aarch64-linux/licenses/rapidjson-license.txt +57 -0
  23. data/vendor/aarch64-linux/licenses/stan-license.txt +14 -0
  24. data/vendor/aarch64-linux/licenses/stan-math-license.txt +14 -0
  25. data/vendor/aarch64-linux/licenses/sundials-license.txt +67 -0
  26. data/vendor/aarch64-linux/licenses/tbb-license.txt +201 -0
  27. data/vendor/aarch64-linux/licenses/tbb-third-party-programs.txt +230 -0
  28. data/vendor/arm64-darwin/bin/prophet +0 -0
  29. data/vendor/arm64-darwin/lib/libtbb.dylib +0 -0
  30. data/vendor/arm64-darwin/lib/libtbbmalloc.dylib +0 -0
  31. data/vendor/arm64-darwin/lib/libtbbmalloc_proxy.dylib +0 -0
  32. data/vendor/arm64-darwin/licenses/boost-license.txt +23 -0
  33. data/vendor/arm64-darwin/licenses/cli11-license.txt +25 -0
  34. data/vendor/arm64-darwin/licenses/cmdstan-license.txt +27 -0
  35. data/vendor/arm64-darwin/licenses/eigen-bsd-license.txt +26 -0
  36. data/vendor/arm64-darwin/licenses/eigen-mpl2-license.txt +373 -0
  37. data/vendor/arm64-darwin/licenses/prophet-license.txt +21 -0
  38. data/vendor/arm64-darwin/licenses/rapidjson-license.txt +57 -0
  39. data/vendor/arm64-darwin/licenses/stan-license.txt +14 -0
  40. data/vendor/arm64-darwin/licenses/stan-math-license.txt +14 -0
  41. data/vendor/arm64-darwin/licenses/sundials-license.txt +67 -0
  42. data/vendor/arm64-darwin/licenses/tbb-license.txt +201 -0
  43. data/vendor/arm64-darwin/licenses/tbb-third-party-programs.txt +230 -0
  44. data/vendor/x86_64-darwin/bin/prophet +0 -0
  45. data/vendor/x86_64-darwin/lib/libtbb.dylib +0 -0
  46. data/vendor/x86_64-darwin/lib/libtbbmalloc.dylib +0 -0
  47. data/vendor/x86_64-darwin/lib/libtbbmalloc_proxy.dylib +0 -0
  48. data/vendor/x86_64-darwin/licenses/boost-license.txt +23 -0
  49. data/vendor/x86_64-darwin/licenses/cli11-license.txt +25 -0
  50. data/vendor/x86_64-darwin/licenses/cmdstan-license.txt +27 -0
  51. data/vendor/x86_64-darwin/licenses/eigen-bsd-license.txt +26 -0
  52. data/vendor/x86_64-darwin/licenses/eigen-mpl2-license.txt +373 -0
  53. data/vendor/x86_64-darwin/licenses/prophet-license.txt +21 -0
  54. data/vendor/x86_64-darwin/licenses/rapidjson-license.txt +57 -0
  55. data/vendor/x86_64-darwin/licenses/stan-license.txt +14 -0
  56. data/vendor/x86_64-darwin/licenses/stan-math-license.txt +14 -0
  57. data/vendor/x86_64-darwin/licenses/sundials-license.txt +67 -0
  58. data/vendor/x86_64-darwin/licenses/tbb-license.txt +201 -0
  59. data/vendor/x86_64-darwin/licenses/tbb-third-party-programs.txt +230 -0
  60. data/vendor/x86_64-linux/bin/prophet +0 -0
  61. data/vendor/x86_64-linux/lib/libtbb.so +1 -0
  62. data/vendor/x86_64-linux/lib/libtbb.so.2 +0 -0
  63. data/vendor/x86_64-linux/lib/libtbbmalloc.so +1 -0
  64. data/vendor/x86_64-linux/lib/libtbbmalloc.so.2 +0 -0
  65. data/vendor/x86_64-linux/lib/libtbbmalloc_proxy.so +1 -0
  66. data/vendor/x86_64-linux/lib/libtbbmalloc_proxy.so.2 +0 -0
  67. data/vendor/x86_64-linux/licenses/boost-license.txt +23 -0
  68. data/vendor/x86_64-linux/licenses/cli11-license.txt +25 -0
  69. data/vendor/x86_64-linux/licenses/cmdstan-license.txt +27 -0
  70. data/vendor/x86_64-linux/licenses/eigen-bsd-license.txt +26 -0
  71. data/vendor/x86_64-linux/licenses/eigen-mpl2-license.txt +373 -0
  72. data/vendor/x86_64-linux/licenses/prophet-license.txt +21 -0
  73. data/vendor/x86_64-linux/licenses/rapidjson-license.txt +57 -0
  74. data/vendor/x86_64-linux/licenses/stan-license.txt +14 -0
  75. data/vendor/x86_64-linux/licenses/stan-math-license.txt +14 -0
  76. data/vendor/x86_64-linux/licenses/sundials-license.txt +67 -0
  77. data/vendor/x86_64-linux/licenses/tbb-license.txt +201 -0
  78. data/vendor/x86_64-linux/licenses/tbb-third-party-programs.txt +230 -0
  79. metadata +78 -11
  80. data/ext/prophet/Makefile +0 -5
  81. data/ext/prophet/extconf.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec194b65cb4bfd061bac7868cad435fea98df148fc7e129d8562c55ed3c91fcc
4
- data.tar.gz: 45b9357d04a6c01a8d4ad6ce7888065b946e39cbfa743b650a41d5b12cf9989e
3
+ metadata.gz: 3e24dad0631694318db703e420f657e964911071b73e03cd73a6fc4c2d6e16fc
4
+ data.tar.gz: bcf2a53b3bcacf5461cd0b881bba0d026c7adee88200646f915074c9946711d3
5
5
  SHA512:
6
- metadata.gz: cd67e017dac94994c960a42b59fb55f2c33560d9233bb2764581cef3154bc03bd75ba29283f8e51788fcde356f682e9fe487a5506ccb82ed10ab373b11774989
7
- data.tar.gz: a07444bc2d9d6a29b6b09303b5d4cef60709a4a4be0a31d2a4526f79366696875b72a36923747b673f05b686c857a78be803f2475fbbc89ffb3dac4a1c856c07
6
+ metadata.gz: bdad3069aeaadaa9ac8d339fb6e877942470fd5c8e11652bce50029b0a6de13d0fe383f6a97a343e29138396dec4b1c159e5ee87d229073d2f3eb5c084aa5af2
7
+ data.tar.gz: 1d54e502621ed4d34c818fe2e0e064578eae948957305300222892f4ee4750418e2471261596568d05795aea31bb4fe4639925da20a1f5db5bd20a0f0b35a66f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## 0.3.2 (2022-05-15)
2
+
3
+ - Added advanced API options to `forecast` and `anomalies` methods
4
+
5
+ ## 0.3.1 (2022-04-28)
6
+
7
+ - Improved error message for missing columns
8
+
9
+ ## 0.3.0 (2022-04-24)
10
+
11
+ - Switched to precompiled models
12
+ - Dropped support for Ruby < 2.7
13
+
1
14
  ## 0.2.5 (2021-07-28)
2
15
 
3
16
  - Added `anomalies` method
data/README.md CHANGED
@@ -10,18 +10,20 @@ Supports:
10
10
 
11
11
  And gracefully handles missing data
12
12
 
13
- [![Build Status](https://github.com/ankane/prophet/workflows/build/badge.svg?branch=master)](https://github.com/ankane/prophet/actions)
13
+ [![Build Status](https://github.com/ankane/prophet-ruby/workflows/build/badge.svg?branch=master)](https://github.com/ankane/prophet-ruby/actions)
14
14
 
15
15
  ## Installation
16
16
 
17
17
  Add this line to your application’s Gemfile:
18
18
 
19
19
  ```ruby
20
- gem 'prophet-rb'
20
+ gem "prophet-rb"
21
21
  ```
22
22
 
23
23
  ## Simple API
24
24
 
25
+ ### Forecasting
26
+
25
27
  Get future predictions for a time series
26
28
 
27
29
  ```ruby
@@ -48,12 +50,32 @@ series = User.group_by_day(:created_at).count
48
50
  Prophet.forecast(series)
49
51
  ```
50
52
 
53
+ And supports [advanced API](#advanced-api) options
54
+
55
+ ```ruby
56
+ Prophet.forecast(series, growth: "logistic", weekly_seasonality: false)
57
+ ```
58
+
59
+ ### Anomaly Detection
60
+
51
61
  Detect anomalies in a time series
52
62
 
53
63
  ```ruby
54
64
  Prophet.anomalies(series)
55
65
  ```
56
66
 
67
+ Specify the width of uncertainty intervals (decrease for more anomalies)
68
+
69
+ ```ruby
70
+ Prophet.anomalies(series, interval_width: 0.99)
71
+ ```
72
+
73
+ Also supports [advanced API](#advanced-api) options
74
+
75
+ ```ruby
76
+ Prophet.anomalies(series, growth: "logistic", weekly_seasonality: false)
77
+ ```
78
+
57
79
  ## Advanced API
58
80
 
59
81
  Check out the [Prophet documentation](https://facebook.github.io/prophet/docs/quick_start.html) for a great explanation of all of the features. The advanced API follows the Python API and supports the same features. It uses [Rover](https://github.com/ankane/rover) for data frames.
@@ -206,7 +228,7 @@ Add country-specific holidays
206
228
 
207
229
  ```ruby
208
230
  m = Prophet.new
209
- m.add_country_holidays(country_name: "US")
231
+ m.add_country_holidays("US")
210
232
  m.fit(df)
211
233
  ```
212
234
 
@@ -295,23 +317,23 @@ This library was ported from the [Prophet Python library](https://github.com/fac
295
317
 
296
318
  ## History
297
319
 
298
- View the [changelog](https://github.com/ankane/prophet/blob/master/CHANGELOG.md)
320
+ View the [changelog](https://github.com/ankane/prophet-ruby/blob/master/CHANGELOG.md)
299
321
 
300
322
  ## Contributing
301
323
 
302
324
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
303
325
 
304
- - [Report bugs](https://github.com/ankane/prophet/issues)
305
- - Fix bugs and [submit pull requests](https://github.com/ankane/prophet/pulls)
326
+ - [Report bugs](https://github.com/ankane/prophet-ruby/issues)
327
+ - Fix bugs and [submit pull requests](https://github.com/ankane/prophet-ruby/pulls)
306
328
  - Write, clarify, or fix documentation
307
329
  - Suggest or add new features
308
330
 
309
331
  To get started with development:
310
332
 
311
333
  ```sh
312
- git clone https://github.com/ankane/prophet.git
313
- cd prophet
334
+ git clone https://github.com/ankane/prophet-ruby.git
335
+ cd prophet-ruby
314
336
  bundle install
315
- bundle exec ruby ext/prophet/extconf.rb
337
+ bundle exec rake vendor:all
316
338
  bundle exec rake test
317
339
  ```
@@ -143,7 +143,7 @@ module Prophet
143
143
  def setup_dataframe(df, initialize_scales: false)
144
144
  if df.include?("y")
145
145
  df["y"] = df["y"].map(&:to_f)
146
- raise ArgumentError "Found infinity in column y." unless df["y"].all?(&:finite?)
146
+ raise ArgumentError, "Found infinity in column y." unless df["y"].all?(&:finite?)
147
147
  end
148
148
  # TODO support integers
149
149
 
@@ -386,6 +386,12 @@ module Prophet
386
386
 
387
387
  def add_country_holidays(country_name)
388
388
  raise Error, "Country holidays must be added prior to model fitting." if @history
389
+
390
+ # Fix for previously documented keyword argument
391
+ if country_name.is_a?(Hash) && country_name[:country_name]
392
+ country_name = country_name[:country_name]
393
+ end
394
+
389
395
  # Validate names.
390
396
  get_holiday_names(country_name).each do |name|
391
397
  # Allow merging with existing holidays
@@ -616,6 +622,10 @@ module Prophet
616
622
  end
617
623
  raise ArgumentError, "Must be a data frame" unless df.is_a?(Rover::DataFrame)
618
624
 
625
+ unless df.include?("ds") && df.include?("y")
626
+ raise ArgumentError, "Data frame must have ds and y columns"
627
+ end
628
+
619
629
  history = df[!df["y"].missing]
620
630
  raise Error, "Data has less than 2 non-nil rows" if history.size < 2
621
631
 
@@ -2,25 +2,21 @@ module Prophet
2
2
  module Holidays
3
3
  def get_holiday_names(country)
4
4
  years = (1995..2045).to_a
5
- make_holidays_df(years, country)["holiday"].uniq
5
+ holiday_names = make_holidays_df(years, country)["holiday"].uniq
6
+ # TODO raise error in 0.4.0
7
+ logger.warn "Holidays in #{country} are not currently supported"
8
+ holiday_names
6
9
  end
7
10
 
8
11
  def make_holidays_df(year_list, country)
9
12
  holidays_df[(holidays_df["country"] == country) & (holidays_df["year"].in?(year_list))][["ds", "holiday"]]
10
13
  end
11
14
 
12
- # TODO marshal on installation
15
+ # TODO improve performance
13
16
  def holidays_df
14
17
  @holidays_df ||= begin
15
- holidays = {"ds" => [], "holiday" => [], "country" => [], "year" => []}
16
18
  holidays_file = File.expand_path("../../data-raw/generated_holidays.csv", __dir__)
17
- CSV.foreach(holidays_file, headers: true, converters: [:date, :numeric]) do |row|
18
- holidays["ds"] << row["ds"]
19
- holidays["holiday"] << row["holiday"]
20
- holidays["country"] << row["country"]
21
- holidays["year"] << row["year"]
22
- end
23
- Rover::DataFrame.new(holidays)
19
+ Rover.read_csv(holidays_file, converters: [:date, :numeric])
24
20
  end
25
21
  end
26
22
  end
@@ -6,7 +6,8 @@ module Prophet
6
6
  end
7
7
 
8
8
  def load_model
9
- model_file = File.expand_path("../../stan_model/prophet_model.bin", __dir__)
9
+ model_file = File.expand_path("../../vendor/#{platform}/bin/prophet", __dir__)
10
+ raise Error, "Platform not supported yet" unless File.exist?(model_file)
10
11
  CmdStan::Model.new(exe_file: model_file)
11
12
  end
12
13
 
@@ -132,5 +133,23 @@ module Prophet
132
133
  stan_init["beta"] = stan_init["beta"].to_a
133
134
  [stan_init, stan_data]
134
135
  end
136
+
137
+ def platform
138
+ if Gem.win_platform?
139
+ "windows"
140
+ elsif RbConfig::CONFIG["host_os"] =~ /darwin/i
141
+ if RbConfig::CONFIG["host_cpu"] =~ /arm|aarch64/i
142
+ "arm64-darwin"
143
+ else
144
+ "x86_64-darwin"
145
+ end
146
+ else
147
+ if RbConfig::CONFIG["host_cpu"] =~ /arm|aarch64/i
148
+ "aarch64-linux"
149
+ else
150
+ "x86_64-linux"
151
+ end
152
+ end
153
+ end
135
154
  end
136
155
  end
@@ -1,3 +1,3 @@
1
1
  module Prophet
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.2"
3
3
  end
data/lib/prophet.rb CHANGED
@@ -21,9 +21,12 @@ module Prophet
21
21
  Forecaster.new(**kwargs)
22
22
  end
23
23
 
24
- def self.forecast(series, count: 10)
24
+ def self.forecast(series, count: 10, country_holidays: nil, cap: nil, verbose: false, **options)
25
25
  raise ArgumentError, "Series must have at least 10 data points" if series.size < 10
26
26
 
27
+ # error early on unknown keywords
28
+ m = Prophet.new(**options)
29
+
27
30
  # check type to determine output format
28
31
  # check for before converting to time
29
32
  keys = series.keys
@@ -62,12 +65,14 @@ module Prophet
62
65
 
63
66
  # use series, not times, so dates are handled correctly
64
67
  df = Rover::DataFrame.new({"ds" => series.keys, "y" => series.values})
68
+ df["cap"] = cap if cap
65
69
 
66
- m = Prophet.new
67
- m.logger.level = ::Logger::FATAL # no logging
70
+ m.logger.level = ::Logger::FATAL unless verbose
71
+ m.add_country_holidays(country_holidays) if country_holidays
68
72
  m.fit(df)
69
73
 
70
74
  future = m.make_future_dataframe(periods: count, include_history: false, freq: freq)
75
+ future["cap"] = cap if cap
71
76
  forecast = m.predict(future)
72
77
  result = forecast[["ds", "yhat"]].to_a
73
78
 
@@ -84,11 +89,17 @@ module Prophet
84
89
  result.map { |v| [v["ds"], v["yhat"]] }.to_h
85
90
  end
86
91
 
87
- def self.anomalies(series)
88
- df = Rover::DataFrame.new(series.map { |k, v| {"ds" => k, "y" => v} })
89
- m = Prophet.new(interval_width: 0.99)
90
- m.logger.level = ::Logger::FATAL # no logging
92
+ # TODO better name for interval_width
93
+ # TODO DRY with forecast method
94
+ def self.anomalies(series, interval_width: 0.99, country_holidays: nil, cap: nil, verbose: false, **options)
95
+ df = Rover::DataFrame.new({"ds" => series.keys, "y" => series.values})
96
+ df["cap"] = cap if cap
97
+
98
+ m = Prophet.new(interval_width: interval_width, **options)
99
+ m.logger.level = ::Logger::FATAL unless verbose
100
+ m.add_country_holidays(country_holidays) if country_holidays
91
101
  m.fit(df)
102
+
92
103
  forecast = m.predict(df)
93
104
  # filter df["ds"] to ensure dates/times in same format as input
94
105
  df["ds"][(df["y"] < forecast["yhat_lower"]) | (df["y"] > forecast["yhat_upper"])].to_a
Binary file
@@ -0,0 +1 @@
1
+ INPUT (libtbb.so.2)
@@ -0,0 +1 @@
1
+ INPUT (libtbbmalloc.so.2)
@@ -0,0 +1 @@
1
+ INPUT (libtbbmalloc_proxy.so.2)
@@ -0,0 +1,23 @@
1
+ Boost Software License - Version 1.0 - August 17th, 2003
2
+
3
+ Permission is hereby granted, free of charge, to any person or organization
4
+ obtaining a copy of the software and accompanying documentation covered by
5
+ this license (the "Software") to use, reproduce, display, distribute,
6
+ execute, and transmit the Software, and to prepare derivative works of the
7
+ Software, and to permit third-parties to whom the Software is furnished to
8
+ do so, all subject to the following:
9
+
10
+ The copyright notices in the Software and this entire statement, including
11
+ the above license grant, this restriction and the following disclaimer,
12
+ must be included in all copies of the Software, in whole or in part, and
13
+ all derivative works of the Software, unless such copies or derivative
14
+ works are solely in the form of machine-executable object code generated by
15
+ a source language processor.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
20
+ SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
21
+ FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
22
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,25 @@
1
+ CLI11 1.8 Copyright (c) 2017-2019 University of Cincinnati, developed by Henry
2
+ Schreiner under NSF AWARD 1414736. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms of CLI11, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ 3. Neither the name of the copyright holder nor the names of its contributors
13
+ may be used to endorse or promote products derived from this software without
14
+ specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
20
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,27 @@
1
+ Copyright (c) 2014, Stan
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice, this
11
+ list of conditions and the following disclaimer in the documentation and/or
12
+ other materials provided with the distribution.
13
+
14
+ * Neither the name of the {organization} nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,26 @@
1
+ /*
2
+ Copyright (c) 2011, Intel Corporation. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name of Intel Corporation nor the names of its contributors may
13
+ be used to endorse or promote products derived from this software without
14
+ specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+ */