prophet-rb 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +14 -8
  4. data/lib/prophet/forecaster.rb +27 -7
  5. data/lib/prophet/stan_backend.rb +20 -1
  6. data/lib/prophet/version.rb +1 -1
  7. data/lib/prophet.rb +10 -0
  8. data/stan/unix/prophet.stan +27 -16
  9. data/stan/win/prophet.stan +15 -2
  10. data/vendor/prophet-linux/bin/prophet +0 -0
  11. data/vendor/prophet-linux/lib/libtbb.so +1 -0
  12. data/vendor/prophet-linux/lib/libtbb.so.2 +0 -0
  13. data/vendor/prophet-linux/lib/libtbbmalloc.so +1 -0
  14. data/vendor/prophet-linux/lib/libtbbmalloc.so.2 +0 -0
  15. data/vendor/prophet-linux/lib/libtbbmalloc_proxy.so +1 -0
  16. data/vendor/prophet-linux/lib/libtbbmalloc_proxy.so.2 +0 -0
  17. data/vendor/prophet-linux/licenses/boost-license.txt +23 -0
  18. data/vendor/prophet-linux/licenses/cli11-license.txt +25 -0
  19. data/vendor/prophet-linux/licenses/cmdstan-license.txt +27 -0
  20. data/vendor/prophet-linux/licenses/eigen-bsd-license.txt +26 -0
  21. data/vendor/prophet-linux/licenses/eigen-mpl2-license.txt +373 -0
  22. data/vendor/prophet-linux/licenses/prophet-license.txt +21 -0
  23. data/vendor/prophet-linux/licenses/rapidjson-license.txt +57 -0
  24. data/vendor/prophet-linux/licenses/stan-license.txt +14 -0
  25. data/vendor/prophet-linux/licenses/stan-math-license.txt +14 -0
  26. data/vendor/prophet-linux/licenses/sundials-license.txt +67 -0
  27. data/vendor/prophet-linux/licenses/tbb-license.txt +201 -0
  28. data/vendor/prophet-linux/licenses/tbb-third-party-programs.txt +230 -0
  29. data/vendor/prophet-linux-arm/bin/prophet +0 -0
  30. data/vendor/prophet-linux-arm/lib/libtbb.so +1 -0
  31. data/vendor/prophet-linux-arm/lib/libtbb.so.2 +0 -0
  32. data/vendor/prophet-linux-arm/lib/libtbbmalloc.so +1 -0
  33. data/vendor/prophet-linux-arm/lib/libtbbmalloc.so.2 +0 -0
  34. data/vendor/prophet-linux-arm/lib/libtbbmalloc_proxy.so +1 -0
  35. data/vendor/prophet-linux-arm/lib/libtbbmalloc_proxy.so.2 +0 -0
  36. data/vendor/prophet-linux-arm/licenses/boost-license.txt +23 -0
  37. data/vendor/prophet-linux-arm/licenses/cli11-license.txt +25 -0
  38. data/vendor/prophet-linux-arm/licenses/cmdstan-license.txt +27 -0
  39. data/vendor/prophet-linux-arm/licenses/eigen-bsd-license.txt +26 -0
  40. data/vendor/prophet-linux-arm/licenses/eigen-mpl2-license.txt +373 -0
  41. data/vendor/prophet-linux-arm/licenses/prophet-license.txt +21 -0
  42. data/vendor/prophet-linux-arm/licenses/rapidjson-license.txt +57 -0
  43. data/vendor/prophet-linux-arm/licenses/stan-license.txt +14 -0
  44. data/vendor/prophet-linux-arm/licenses/stan-math-license.txt +14 -0
  45. data/vendor/prophet-linux-arm/licenses/sundials-license.txt +67 -0
  46. data/vendor/prophet-linux-arm/licenses/tbb-license.txt +201 -0
  47. data/vendor/prophet-linux-arm/licenses/tbb-third-party-programs.txt +230 -0
  48. data/vendor/prophet-mac/bin/prophet +0 -0
  49. data/vendor/prophet-mac/lib/libtbb.dylib +0 -0
  50. data/vendor/prophet-mac/lib/libtbbmalloc.dylib +0 -0
  51. data/vendor/prophet-mac/lib/libtbbmalloc_proxy.dylib +0 -0
  52. data/vendor/prophet-mac/licenses/boost-license.txt +23 -0
  53. data/vendor/prophet-mac/licenses/cli11-license.txt +25 -0
  54. data/vendor/prophet-mac/licenses/cmdstan-license.txt +27 -0
  55. data/vendor/prophet-mac/licenses/eigen-bsd-license.txt +26 -0
  56. data/vendor/prophet-mac/licenses/eigen-mpl2-license.txt +373 -0
  57. data/vendor/prophet-mac/licenses/prophet-license.txt +21 -0
  58. data/vendor/prophet-mac/licenses/rapidjson-license.txt +57 -0
  59. data/vendor/prophet-mac/licenses/stan-license.txt +14 -0
  60. data/vendor/prophet-mac/licenses/stan-math-license.txt +14 -0
  61. data/vendor/prophet-mac/licenses/sundials-license.txt +67 -0
  62. data/vendor/prophet-mac/licenses/tbb-license.txt +201 -0
  63. data/vendor/prophet-mac/licenses/tbb-third-party-programs.txt +230 -0
  64. data/vendor/prophet-mac-arm/bin/prophet +0 -0
  65. data/vendor/prophet-mac-arm/lib/libtbb.dylib +0 -0
  66. data/vendor/prophet-mac-arm/lib/libtbbmalloc.dylib +0 -0
  67. data/vendor/prophet-mac-arm/lib/libtbbmalloc_proxy.dylib +0 -0
  68. data/vendor/prophet-mac-arm/licenses/boost-license.txt +23 -0
  69. data/vendor/prophet-mac-arm/licenses/cli11-license.txt +25 -0
  70. data/vendor/prophet-mac-arm/licenses/cmdstan-license.txt +27 -0
  71. data/vendor/prophet-mac-arm/licenses/eigen-bsd-license.txt +26 -0
  72. data/vendor/prophet-mac-arm/licenses/eigen-mpl2-license.txt +373 -0
  73. data/vendor/prophet-mac-arm/licenses/prophet-license.txt +21 -0
  74. data/vendor/prophet-mac-arm/licenses/rapidjson-license.txt +57 -0
  75. data/vendor/prophet-mac-arm/licenses/stan-license.txt +14 -0
  76. data/vendor/prophet-mac-arm/licenses/stan-math-license.txt +14 -0
  77. data/vendor/prophet-mac-arm/licenses/sundials-license.txt +67 -0
  78. data/vendor/prophet-mac-arm/licenses/tbb-license.txt +201 -0
  79. data/vendor/prophet-mac-arm/licenses/tbb-third-party-programs.txt +230 -0
  80. metadata +83 -114
  81. data/ext/prophet/Makefile +0 -5
  82. data/ext/prophet/extconf.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 756e42a4e2c39e114610d2f41e2403d9b160e77da02c0483e43b4bf460dd828b
4
- data.tar.gz: e7bce55f47410227131afcba9d2f90c9812dab093efd1c17465383b3a5e6dc73
3
+ metadata.gz: cf304cc6aa3af6ec1165de157a38b92ca32f1423c0ac9807d69407c566ccb72b
4
+ data.tar.gz: 8e86c3b881113af71d5636e221b1bc3d5692fda0245946be19b6bd32151a9205
5
5
  SHA512:
6
- metadata.gz: ec014f32ff39abd49195d7e9a7f38b3b297bc7f6fc28da3d1be6fb19b6edbe816a681c4fbb35d5ea79fc2ced0aa948b0468cff9f6d9d8293590761711944b71b
7
- data.tar.gz: 87ecc8706c73e7f1063c8d75cc5c687ebc3fddb92d89e60bb115d21c90a60fbb6172648a0d414baeb11f04572b37e06777d4100acb07b8559dea8e8a711741fb
6
+ metadata.gz: 123be484141a21957e8e137eeba5c316e773f7e0e8049ad2db719ddafb97d0455d5c8d414452ff46a97f910c0f082a3b38a613e0635061c073a1b81270cf38b5
7
+ data.tar.gz: 958f8774ef5fce334645ff8fa42124e7535d7d69d344b929a53462a0e9296ec68e82465980bdb8b9f08bc62ddb7e6e3876d9371f85ff0cbbca8c36238375759d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## 0.3.0 (2021-04-24)
2
+
3
+ - Switched to precompiled models
4
+ - Dropped support for Ruby < 2.7
5
+
6
+ ## 0.2.5 (2021-07-28)
7
+
8
+ - Added `anomalies` method
9
+
10
+ ## 0.2.4 (2021-04-02)
11
+
12
+ - Added support for flat growth
13
+
1
14
  ## 0.2.3 (2020-10-14)
2
15
 
3
16
  - Added support for times to `forecast` method
data/README.md CHANGED
@@ -10,14 +10,14 @@ Supports:
10
10
 
11
11
  And gracefully handles missing data
12
12
 
13
- [![Build Status](https://travis-ci.org/ankane/prophet.svg?branch=master)](https://travis-ci.org/ankane/prophet) [![Build status](https://ci.appveyor.com/api/projects/status/8ahmsvvhum4ivnmv/branch/master?svg=true)](https://ci.appveyor.com/project/ankane/prophet/branch/master)
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
@@ -48,6 +48,12 @@ series = User.group_by_day(:created_at).count
48
48
  Prophet.forecast(series)
49
49
  ```
50
50
 
51
+ Detect anomalies in a time series
52
+
53
+ ```ruby
54
+ Prophet.anomalies(series)
55
+ ```
56
+
51
57
  ## Advanced API
52
58
 
53
59
  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.
@@ -289,23 +295,23 @@ This library was ported from the [Prophet Python library](https://github.com/fac
289
295
 
290
296
  ## History
291
297
 
292
- View the [changelog](https://github.com/ankane/prophet/blob/master/CHANGELOG.md)
298
+ View the [changelog](https://github.com/ankane/prophet-ruby/blob/master/CHANGELOG.md)
293
299
 
294
300
  ## Contributing
295
301
 
296
302
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
297
303
 
298
- - [Report bugs](https://github.com/ankane/prophet/issues)
299
- - Fix bugs and [submit pull requests](https://github.com/ankane/prophet/pulls)
304
+ - [Report bugs](https://github.com/ankane/prophet-ruby/issues)
305
+ - Fix bugs and [submit pull requests](https://github.com/ankane/prophet-ruby/pulls)
300
306
  - Write, clarify, or fix documentation
301
307
  - Suggest or add new features
302
308
 
303
309
  To get started with development:
304
310
 
305
311
  ```sh
306
- git clone https://github.com/ankane/prophet.git
307
- cd prophet
312
+ git clone https://github.com/ankane/prophet-ruby.git
313
+ cd prophet-ruby
308
314
  bundle install
309
- bundle exec ruby ext/prophet/extconf.rb
315
+ bundle exec rake vendor:all
310
316
  bundle exec rake test
311
317
  ```
@@ -75,8 +75,8 @@ module Prophet
75
75
  end
76
76
 
77
77
  def validate_inputs
78
- if !["linear", "logistic"].include?(@growth)
79
- raise ArgumentError, "Parameter \"growth\" should be \"linear\" or \"logistic\"."
78
+ if !["linear", "logistic", "flat"].include?(@growth)
79
+ raise ArgumentError, "Parameter \"growth\" should be \"linear\", \"logistic\", or \"flat\"."
80
80
  end
81
81
  if @changepoint_range < 0 || @changepoint_range > 1
82
82
  raise ArgumentError, "Parameter \"changepoint_range\" must be in [0, 1]"
@@ -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
 
@@ -602,6 +602,12 @@ module Prophet
602
602
  [k, m]
603
603
  end
604
604
 
605
+ def flat_growth_init(df)
606
+ k = 0
607
+ m = df["y_scaled"].mean
608
+ [k, m]
609
+ end
610
+
605
611
  def fit(df, **kwargs)
606
612
  raise Error, "Prophet object can only be fit once" if @history
607
613
 
@@ -624,6 +630,8 @@ module Prophet
624
630
 
625
631
  set_changepoints
626
632
 
633
+ trend_indicator = {"linear" => 0, "logistic" => 1, "flat" => 2}
634
+
627
635
  dat = {
628
636
  "T" => history.shape[0],
629
637
  "K" => seasonal_features.shape[1],
@@ -634,7 +642,7 @@ module Prophet
634
642
  "X" => seasonal_features,
635
643
  "sigmas" => prior_scales,
636
644
  "tau" => @changepoint_prior_scale,
637
- "trend_indicator" => @growth == "logistic" ? 1 : 0,
645
+ "trend_indicator" => trend_indicator[@growth],
638
646
  "s_a" => component_cols["additive_terms"],
639
647
  "s_m" => component_cols["multiplicative_terms"]
640
648
  }
@@ -642,6 +650,9 @@ module Prophet
642
650
  if @growth == "linear"
643
651
  dat["cap"] = Numo::DFloat.zeros(@history.shape[0])
644
652
  kinit = linear_growth_init(history)
653
+ elsif @growth == "flat"
654
+ dat["cap"] = Numo::DFloat.zeros(@history.shape[0])
655
+ kinit = flat_growth_init(history)
645
656
  else
646
657
  dat["cap"] = history["cap_scaled"]
647
658
  kinit = logistic_growth_init(history)
@@ -655,7 +666,7 @@ module Prophet
655
666
  "sigma_obs" => 1
656
667
  }
657
668
 
658
- if history["y"].min == history["y"].max && @growth == "linear"
669
+ if history["y"].min == history["y"].max && (@growth == "linear" || @growth == "flat")
659
670
  # Nothing to fit.
660
671
  @params = stan_init
661
672
  @params["sigma_obs"] = 1e-9
@@ -741,6 +752,11 @@ module Prophet
741
752
  cap.to_numo / (1 + Numo::NMath.exp(-k_t * (t - m_t)))
742
753
  end
743
754
 
755
+ def flat_trend(t, m)
756
+ m_t = m * t.new_ones
757
+ m_t
758
+ end
759
+
744
760
  def predict_trend(df)
745
761
  k = @params["k"].mean(nan: true)
746
762
  m = @params["m"].mean(nan: true)
@@ -749,9 +765,11 @@ module Prophet
749
765
  t = Numo::NArray.asarray(df["t"].to_a)
750
766
  if @growth == "linear"
751
767
  trend = piecewise_linear(t, deltas, k, m, @changepoints_t)
752
- else
768
+ elsif @growth == "logistic"
753
769
  cap = df["cap_scaled"]
754
770
  trend = piecewise_logistic(t, cap, deltas, k, m, @changepoints_t)
771
+ elsif @growth == "flat"
772
+ trend = flat_trend(t, m)
755
773
  end
756
774
 
757
775
  trend * @y_scale + Numo::NArray.asarray(df["floor"].to_a)
@@ -887,9 +905,11 @@ module Prophet
887
905
 
888
906
  if @growth == "linear"
889
907
  trend = piecewise_linear(t, deltas, k, m, changepoint_ts)
890
- else
908
+ elsif @growth == "logistic"
891
909
  cap = df["cap_scaled"]
892
910
  trend = piecewise_logistic(t, cap, deltas, k, m, changepoint_ts)
911
+ elsif @growth == "flat"
912
+ trend = flat_trend(t, m)
893
913
  end
894
914
 
895
915
  trend * @y_scale + Numo::NArray.asarray(df["floor"].to_a)
@@ -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/prophet-#{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
+ "mac-arm"
143
+ else
144
+ "mac"
145
+ end
146
+ else
147
+ if RbConfig::CONFIG["host_cpu"] =~ /arm|aarch64/i
148
+ "linux-arm"
149
+ else
150
+ "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.3"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/prophet.rb CHANGED
@@ -83,4 +83,14 @@ module Prophet
83
83
  end
84
84
  result.map { |v| [v["ds"], v["yhat"]] }.to_h
85
85
  end
86
+
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
91
+ m.fit(df)
92
+ forecast = m.predict(df)
93
+ # filter df["ds"] to ensure dates/times in same format as input
94
+ df["ds"][(df["y"] < forecast["yhat_lower"]) | (df["y"] > forecast["yhat_upper"])].to_a
95
+ end
86
96
  end
@@ -73,6 +73,15 @@ functions {
73
73
  ) {
74
74
  return (k + A * delta) .* t + (m + A * (-t_change .* delta));
75
75
  }
76
+
77
+ // Flat trend function
78
+
79
+ vector flat_trend(
80
+ real m,
81
+ int T
82
+ ) {
83
+ return rep_vector(m, T);
84
+ }
76
85
  }
77
86
 
78
87
  data {
@@ -86,7 +95,7 @@ data {
86
95
  matrix[T,K] X; // Regressors
87
96
  vector[K] sigmas; // Scale on seasonality prior
88
97
  real<lower=0> tau; // Scale on changepoints prior
89
- int trend_indicator; // 0 for linear, 1 for logistic
98
+ int trend_indicator; // 0 for linear, 1 for logistic, 2 for flat
90
99
  vector[K] s_a; // Indicator of additive features
91
100
  vector[K] s_m; // Indicator of multiplicative features
92
101
  }
@@ -104,6 +113,17 @@ parameters {
104
113
  vector[K] beta; // Regressor coefficients
105
114
  }
106
115
 
116
+ transformed parameters {
117
+ vector[T] trend;
118
+ if (trend_indicator == 0) {
119
+ trend = linear_trend(k, m, delta, t, A, t_change);
120
+ } else if (trend_indicator == 1) {
121
+ trend = logistic_trend(k, m, delta, t, cap, A, t_change, S);
122
+ } else if (trend_indicator == 2) {
123
+ trend = flat_trend(m, T);
124
+ }
125
+ }
126
+
107
127
  model {
108
128
  //priors
109
129
  k ~ normal(0, 5);
@@ -113,19 +133,10 @@ model {
113
133
  beta ~ normal(0, sigmas);
114
134
 
115
135
  // Likelihood
116
- if (trend_indicator == 0) {
117
- y ~ normal(
118
- linear_trend(k, m, delta, t, A, t_change)
119
- .* (1 + X * (beta .* s_m))
120
- + X * (beta .* s_a),
121
- sigma_obs
122
- );
123
- } else if (trend_indicator == 1) {
124
- y ~ normal(
125
- logistic_trend(k, m, delta, t, cap, A, t_change, S)
126
- .* (1 + X * (beta .* s_m))
127
- + X * (beta .* s_a),
128
- sigma_obs
129
- );
130
- }
136
+ y ~ normal(
137
+ trend
138
+ .* (1 + X * (beta .* s_m))
139
+ + X * (beta .* s_a),
140
+ sigma_obs
141
+ );
131
142
  }
@@ -47,7 +47,7 @@ functions {
47
47
  }
48
48
  return gamma;
49
49
  }
50
-
50
+
51
51
  real[] logistic_trend(
52
52
  real k,
53
53
  real m,
@@ -94,6 +94,17 @@ functions {
94
94
  }
95
95
  return Y;
96
96
  }
97
+
98
+ // Flat trend function
99
+
100
+ real[] flat_trend(
101
+ real m,
102
+ int T
103
+ ) {
104
+ return rep_array(m, T);
105
+ }
106
+
107
+
97
108
  }
98
109
 
99
110
  data {
@@ -107,7 +118,7 @@ data {
107
118
  real X[T,K]; // Regressors
108
119
  vector[K] sigmas; // Scale on seasonality prior
109
120
  real<lower=0> tau; // Scale on changepoints prior
110
- int trend_indicator; // 0 for linear, 1 for logistic
121
+ int trend_indicator; // 0 for linear, 1 for logistic, 2 for flat
111
122
  real s_a[K]; // Indicator of additive features
112
123
  real s_m[K]; // Indicator of multiplicative features
113
124
  }
@@ -135,6 +146,8 @@ transformed parameters {
135
146
  trend = linear_trend(k, m, delta, t, A, t_change, S, T);
136
147
  } else if (trend_indicator == 1) {
137
148
  trend = logistic_trend(k, m, delta, t, cap, A, t_change, S, T);
149
+ } else if (trend_indicator == 2){
150
+ trend = flat_trend(m, T);
138
151
  }
139
152
 
140
153
  for (i in 1:K) {
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
+ */