prophet-rb 0.2.5 → 0.3.2

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.
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
+ */