tarf_monte_carlo 2.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c8ba833192173c38b6d335d681469b91ba509ed41d330db20f63354bd439492f
4
+ data.tar.gz: afc0ec5bcabd7caaa37e908ac438e7e22f224ea43aaac86c850b3cd01e980f20
5
+ SHA512:
6
+ metadata.gz: 8f7f2fd84332ee001f2ab4140cf93f1222f0052da5780547078d4f3719d34f54911003e9917c005787b7230244d345c6a154e041a895ec626ec6afaa3ebe90e6
7
+ data.tar.gz: 188688ac908a15933b3767e74a3d2ecef71db25c30a597800d173fa3435d74e5d888afbbc1641eca51e5d60b1ab3813bb1d81ae57f6bcf910793229e24944ca9
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.swp
13
+ *.o
14
+ *.a
15
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in tarf_monte_carlo.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # TARFMonteCarlo
2
+
3
+ TODO: ...
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'tarf_monte_carlo'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install tarf_monte_carlo
20
+
21
+ ## Usage
22
+
23
+ TODO: ...
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ TODO ...
34
+ # tarf_monte_carlo
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+ require "rspec/core/rake_task"
4
+ require 'yard'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => [:compile, :spec]
9
+ require "rake/extensiontask"
10
+
11
+ task :build => :compile
12
+ task :spec => :compile
13
+
14
+ desc 'Generate YARD document'
15
+ YARD::Rake::YardocTask.new(:doc) do |t|
16
+ t.files = ['ext/tarf_monte_carlo/tarf_monte_carlo.c']
17
+ t.options = []
18
+ t.options << '--debug' << '--verbose' if $trace
19
+ end
20
+
21
+ spec = eval File.read("tarf_monte_carlo.gemspec")
22
+ Rake::ExtensionTask.new("tarf_monte_carlo", spec) do |ext|
23
+ ext.ext_dir = 'ext/tarf_monte_carlo'
24
+ ext.cross_compile = true
25
+ ext.lib_dir = File.join(*['lib', 'tarf_monte_carlo', ENV['FAT_DIR']].compact)
26
+ # cross_platform names are of MRI's platform name
27
+ ext.cross_platform = ['x86-mingw32', 'x64-mingw32']
28
+ end
29
+
30
+ namespace :build do
31
+ desc 'Build gems for Windows per rake-compiler-dock'
32
+ task :windows do
33
+ require 'rake_compiler_dock'
34
+ RakeCompilerDock.sh 'bundle && rake cross native gem RUBY_CC_VERSION=2.0.0:2.1.6:2.2.2:2.3.0:2.4.0:2.5.0'
35
+ end
36
+ end
37
+
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "tarf_monte_carlo"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,2 @@
1
+ require "mkmf"
2
+ create_makefile("tarf_monte_carlo/tarf_monte_carlo")
@@ -0,0 +1,327 @@
1
+ // S - spot_rate
2
+ // X - strike price of forward
3
+ // b - difference of ccy2 and ccy1 risk free interest rates - cost of carry rate
4
+ // v - volatility
5
+ // T - time to expiration in number of years
6
+ // L - leverage ratio
7
+ // N - notional
8
+ // BS - direction of forward
9
+ // eps - epsilon
10
+ // NL - number of legs
11
+ // SCount - number of simulations
12
+ // MCType - Monte Carlo method type to run
13
+ // KType - Knockout Type
14
+ // DFs - discount factors for pv calculation
15
+
16
+ #include <ruby.h>
17
+ #include <stdio.h>
18
+ #include <stdlib.h>
19
+ #include <string.h>
20
+ #include <math.h>
21
+ #include <time.h>
22
+ #include <stdbool.h>
23
+ #define PI_VALUE 3.14159
24
+ #define BUY 1 // buy sell flag
25
+ #define SELL 2 // buy sell flag
26
+ #define CHAINED 1 // monte carlo method type to run
27
+ #define UNCHAINED 2 // monte carlo method type to run
28
+ #define ABSOLUTE 1 // knockout by absolute
29
+ #define POINTS 2 // knockout by points
30
+ #define LEGS 3 // knockout by legs
31
+
32
+ // Defining a space for information and references
33
+ // about the module to be stored internally
34
+ // Qnil - Ruby nil in C scope.
35
+ VALUE mTarfMonteCarlo = Qnil;
36
+ VALUE cTarfMonteCarlo = Qnil;
37
+
38
+ // Prototype for the initialization method - Ruby calls this, not you
39
+ void Init_tarf_monte_carlo();
40
+
41
+ // Prototype for our methods - methods are prefixed by 'method_' here
42
+ VALUE method_box_muller( VALUE );
43
+ VALUE method_run_monte_carlo( VALUE, VALUE );
44
+
45
+ // BoxMuller method for epsilon calculations
46
+ // eps = cos(2 * PI * z2) * sqrt( -2 * log( z1 ) )
47
+ VALUE method_box_muller( VALUE self ) {
48
+ double eps, z1, z2;
49
+ int i;
50
+
51
+ for (i = 0; i < 100; ++i) {
52
+ z1 = ( (double)rand() / (double)RAND_MAX );
53
+ }
54
+
55
+ for (i = 0; i < 100; ++i) {
56
+ z2 = ( (double)rand() / (double)RAND_MAX );
57
+ }
58
+
59
+ eps = cos( 2 * PI_VALUE * z2 ) * sqrt( -2 * log( z1 ) );
60
+
61
+ return DBL2NUM(eps);
62
+ }
63
+
64
+ // main method for running monte carlo simulation from sidekiq worker/outside method
65
+ VALUE method_run_monte_carlo( VALUE self, VALUE args ) {
66
+ VALUE MCInputs = rb_ary_shift(args);
67
+ rb_p(MCInputs);
68
+
69
+ // seed value for rand() function
70
+ srand( time(0) );
71
+
72
+ // initialize payoffs array
73
+ int leg, sim_count;
74
+ double pvs_pos_sum = 0.0, pvs_neg_sum = 0.0;
75
+
76
+ int SCount = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("scount")) ) * 2;
77
+ int MCType = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("mc_type")) );
78
+ int NL = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("legs_count")) );
79
+ int BS = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("buy_sell")) );
80
+ double K = NUM2DBL( rb_hash_aref(MCInputs, rb_str_new2("knockout")) );
81
+ int KType = NUM2INT( rb_hash_aref(MCInputs, rb_str_new2("knockout_type")) );
82
+ double S = NUM2DBL( rb_hash_aref(MCInputs, rb_str_new2("spot_rate")) );
83
+
84
+ // assign leg specific attributes
85
+ double *pvs_pos = ( double* ) malloc( SCount * sizeof(double) );
86
+ double *pvs_neg = ( double* ) malloc( SCount * sizeof(double) );
87
+ double *Ls_array = ( double* ) malloc( NL * sizeof(double) );
88
+ double *Ts_array = ( double* ) malloc( NL * sizeof(double) );
89
+ double *Ns_array = ( double* ) malloc( NL * sizeof(double) );
90
+ double *Xs_array = ( double* ) malloc( NL * sizeof(double) );
91
+ double *vs_array = ( double* ) malloc( NL * sizeof(double) );
92
+ double *bs_array = ( double* ) malloc( NL * sizeof(double) );
93
+ double *DFs_array = ( double* ) malloc( NL * sizeof(double) );
94
+
95
+ VALUE Ls = rb_hash_aref(MCInputs, rb_str_new2("leverage_ratios") );
96
+ VALUE Ts = rb_hash_aref(MCInputs, rb_str_new2("expiration_times") );
97
+ VALUE Ns = rb_hash_aref(MCInputs, rb_str_new2("notionals") );
98
+ VALUE Xs = rb_hash_aref(MCInputs, rb_str_new2("strikes") );
99
+ VALUE vs = rb_hash_aref(MCInputs, rb_str_new2("volatilities") );
100
+ VALUE bs = rb_hash_aref(MCInputs, rb_str_new2("carry_rates") );
101
+ VALUE DFs = rb_hash_aref(MCInputs, rb_str_new2("discount_factors") );
102
+
103
+ for (leg = 0; leg < NL; ++leg) {
104
+ Ls_array[leg] = NUM2DBL( rb_ary_entry(Ls, leg) );
105
+ Ts_array[leg] = NUM2DBL( rb_ary_entry(Ts, leg) );
106
+ Ns_array[leg] = NUM2DBL( rb_ary_entry(Ns, leg) );
107
+ Xs_array[leg] = NUM2DBL( rb_ary_entry(Xs, leg) );
108
+ vs_array[leg] = NUM2DBL( rb_ary_entry(vs, leg) );
109
+ bs_array[leg] = NUM2DBL( rb_ary_entry(bs, leg) );
110
+ DFs_array[leg] = NUM2DBL( rb_ary_entry(DFs, leg) );
111
+ }
112
+
113
+ // run simulations loop
114
+ for( sim_count = 0; sim_count < SCount; sim_count += 2 ) {
115
+ // initial spot rate for each iteration would be current spot rate
116
+ double Spot = S, Spot_dash = S;
117
+ double sim[NL], sim_pos[NL], sim_neg[NL], sim_dash[NL], sim_dash_pos[NL], sim_dash_neg[NL];
118
+
119
+ // reset all simulation leg specific results
120
+ for ( leg = 0; leg < NL; ++leg ) {
121
+ sim[leg] = 0.0;
122
+ sim_pos[leg] = 0.0;
123
+ sim_neg[leg] = 0.0;
124
+ sim_dash[leg] = 0.0;
125
+ sim_dash_pos[leg] = 0.0;
126
+ sim_dash_neg[leg] = 0.0;
127
+ }
128
+
129
+ // legs loop start
130
+ for( leg = 0; leg < NL; ++leg ) {
131
+ double eps, eps_dash, drift, vSqrdt, profit_loss, profit_loss_dash;
132
+
133
+ // get the random value for MC calculation
134
+ eps = NUM2DBL( method_box_muller( self ) );
135
+ eps_dash = eps * -1;
136
+
137
+ //NOTE: NEED NOT RUN THIS ON EVERY SIMULATION
138
+ // main formula of MC simulation
139
+ drift = ( ( *( bs_array + leg ) ) - 0.5 * pow( ( *( vs_array + leg ) ), 2 ) ) * ( *( Ts_array + leg ) );
140
+ vSqrdt = ( *( vs_array + leg ) ) * sqrt( *( Ts_array + leg ) );
141
+
142
+ // spot calculation with epsilon & epsilon reverse
143
+ Spot = Spot * exp( drift + vSqrdt * eps );
144
+ Spot_dash = Spot_dash * exp( drift + vSqrdt * eps_dash );
145
+
146
+ if ( BS == BUY ) {
147
+ // profit if spot is higher than market price
148
+ profit_loss = ( Spot - ( *( Xs_array + leg ) ) );
149
+ // profit if spot is higher than market price
150
+ profit_loss_dash = ( Spot_dash - ( *( Xs_array + leg ) ) );
151
+ } else if ( BS == SELL ) {
152
+ // profit if spot is lower than market price
153
+ profit_loss = ( ( *( Xs_array + leg ) ) - Spot );
154
+ // profit if spot is lower than market price
155
+ profit_loss_dash = ( ( *( Xs_array + leg ) ) - Spot_dash );
156
+ }
157
+
158
+ sim[leg] = profit_loss;
159
+ sim_dash[leg] = profit_loss_dash;
160
+
161
+ // if excuted UNCHAINED method
162
+ // always use the current spot rate
163
+ if ( MCType == UNCHAINED ) {
164
+ Spot = S;
165
+ Spot_dash = S;
166
+ // VALUE sk = DBL2NUM( Spot );
167
+ // rb_p(sk)
168
+ }
169
+ }
170
+ // legs loop end
171
+
172
+ // start from the Knock value
173
+ double ko_so_far = K, ko_so_far_dash = K;
174
+ if( KType == ABSOLUTE ) {
175
+ for( leg = 0; leg < NL; ++leg ) {
176
+ // simulation normal
177
+ if( ko_so_far > 0.0 ) {
178
+ if( sim[leg] >= 0.0 ) {
179
+ // knock out condition
180
+ double temp_payoff = sim[leg] * ( *( Ns_array + leg ) );
181
+
182
+ if( temp_payoff > ko_so_far ) {
183
+ sim_pos[leg] = ko_so_far;
184
+ ko_so_far = 0.0;
185
+ } else if( temp_payoff <= ko_so_far ) {
186
+ sim_pos[leg] = temp_payoff; // take the payoff in +ve's
187
+ ko_so_far -= temp_payoff; // update the knock out
188
+ }
189
+ } else {
190
+ sim_neg[leg] = sim[leg] * ( *( Ls_array + leg ) ) * ( *( Ns_array + leg ) );
191
+ }
192
+ }
193
+
194
+ // simulation reverse dash
195
+ if ( ko_so_far_dash > 0.0 ) {
196
+ if( sim_dash[leg] >= 0.0 ) {
197
+ // knock out condition
198
+ double temp_payoff_dash = sim_dash[leg] * ( *( Ns_array + leg ) );
199
+
200
+ if( temp_payoff_dash > ko_so_far_dash ) {
201
+ sim_dash_pos[leg] = ko_so_far_dash;
202
+ ko_so_far_dash = 0.0;
203
+ } else if( temp_payoff_dash <= ko_so_far_dash ) {
204
+ sim_dash_pos[leg] = temp_payoff_dash; // take the payoff in +ve's
205
+ ko_so_far_dash -= temp_payoff_dash; // update the knock out
206
+ }
207
+ } else {
208
+ sim_dash_neg[leg] = sim_dash[leg] * ( *( Ls_array + leg ) ) * ( *( Ns_array + leg ) );
209
+ }
210
+ }
211
+ }
212
+ } else if( KType == POINTS ) {
213
+ for( leg = 0; leg < NL; ++leg ) {
214
+ // simulation normal
215
+ if ( ko_so_far > 0.0 ) {
216
+ if( sim[leg] >= 0.0 ) {
217
+ // knock out condition
218
+ if( sim[leg] > ko_so_far ) {
219
+ sim_pos[leg] = ko_so_far * ( *( Ns_array + leg ) ); // discuss this
220
+ ko_so_far = 0.0;
221
+ } else if( sim[leg] <= ko_so_far ) {
222
+ sim_pos[leg] = sim[leg] * ( *( Ns_array + leg ) );
223
+ ko_so_far -= sim[leg];
224
+ }
225
+ } else {
226
+ sim_neg[leg] = sim[leg] * ( *( Ls_array + leg ) ) * ( *( Ns_array + leg ) );
227
+ }
228
+ }
229
+
230
+ // simulation reverse dash
231
+ if ( ko_so_far_dash > 0.0 ) {
232
+ if( sim_dash[leg] >= 0.0 ) {
233
+ // knock out condition
234
+ if( sim_dash[leg] > ko_so_far_dash ) {
235
+ sim_dash_pos[leg] = ko_so_far_dash * ( *( Ns_array + leg ) ); // discuss this
236
+ ko_so_far_dash = 0.0;
237
+ } else if( sim_dash[leg] <= ko_so_far_dash ) {
238
+ sim_dash_pos[leg] = sim_dash[leg] * ( *( Ns_array + leg ) );
239
+ ko_so_far_dash -= sim_dash[leg];
240
+ }
241
+ } else {
242
+ sim_dash_neg[leg] = sim_dash[leg] * ( *( Ls_array + leg ) ) * ( *( Ns_array + leg ) );
243
+ }
244
+ }
245
+ }
246
+ } else if( KType == LEGS ) {
247
+ for( leg = 0; leg < NL; ++leg ) {
248
+ // simulation normal
249
+ if ( ko_so_far > 0.0 ) {
250
+ if( sim[leg] >= 0.0 ) {
251
+ // knock out condition
252
+ sim_pos[leg] = sim[leg] * ( *( Ns_array + leg ) );
253
+ ko_so_far -= 1;
254
+ } else {
255
+ sim_neg[leg] = sim[leg] * ( *( Ls_array + leg ) ) * ( *( Ns_array + leg ) );
256
+ }
257
+ }
258
+
259
+ // simulation reverse dash
260
+ if ( ko_so_far_dash > 0.0 ) {
261
+ if( sim_dash[leg] >= 0.0 ) {
262
+ // knock out condition
263
+ sim_dash_pos[leg] = sim_dash[leg] * ( *( Ns_array + leg ) );
264
+ ko_so_far_dash -= 1;
265
+ } else {
266
+ sim_dash_neg[leg] = sim_dash[leg] * ( *( Ls_array + leg ) ) * ( *( Ns_array + leg ) );
267
+ }
268
+ }
269
+ }
270
+ }
271
+
272
+ // take sum of positive and negative payoffs and calculate pvs
273
+ double sim_pos_sum = 0.0, sim_neg_sum = 0.0, sim_dash_pos_sum = 0.0, sim_dash_neg_sum = 0.0;
274
+ for( leg = 0; leg < NL; ++leg ) {
275
+ sim_pos_sum += sim_pos[leg] * ( *( DFs_array + leg ) );
276
+ sim_neg_sum += sim_neg[leg] * ( *( DFs_array + leg ) );
277
+ sim_dash_pos_sum += sim_dash_pos[leg] * ( *( DFs_array + leg ) );
278
+ sim_dash_neg_sum += sim_dash_neg[leg] * ( *( DFs_array + leg ) );
279
+ }
280
+
281
+ // calculate +pv and -ve pv for individual leg
282
+ pvs_pos[sim_count] = sim_pos_sum;
283
+ pvs_pos[sim_count + 1] = sim_dash_pos_sum;
284
+ pvs_neg[sim_count] = sim_neg_sum;
285
+ pvs_neg[sim_count + 1] = sim_dash_neg_sum;
286
+ }
287
+
288
+ // sum all final +ve and -ve payoffs
289
+ for(sim_count = 0; sim_count < SCount; ++sim_count) {
290
+ pvs_pos_sum += *(pvs_pos + sim_count);
291
+ pvs_neg_sum += *(pvs_neg + sim_count);
292
+ }
293
+
294
+ // free dynamically alloted heap memory
295
+ free(pvs_pos);
296
+ free(pvs_neg);
297
+ free(Ls_array);
298
+ free(Ts_array);
299
+ free(Ns_array);
300
+ free(Xs_array);
301
+ free(vs_array);
302
+ free(bs_array);
303
+ free(DFs_array);
304
+
305
+ // return both payoffs
306
+ VALUE final_pvs = rb_hash_new();
307
+ rb_hash_aset(final_pvs, rb_str_new2("positive_pv"), DBL2NUM( pvs_pos_sum / SCount ));
308
+ rb_hash_aset(final_pvs, rb_str_new2("negative_pv"), DBL2NUM( pvs_neg_sum / SCount ));
309
+ rb_hash_aset(final_pvs, rb_str_new2("total_pv"), DBL2NUM( (pvs_neg_sum + pvs_pos_sum) / SCount ));
310
+ return final_pvs;
311
+ }
312
+
313
+ // The initialization method for this module
314
+ void Init_tarf_monte_carlo() {
315
+ // rb_define_module - defines a module
316
+ mTarfMonteCarlo = rb_define_module("TarfMonteCarlo");
317
+
318
+ // rb_define_class_under - defines a class under passed module
319
+ cTarfMonteCarlo = rb_define_class_under(mTarfMonteCarlo, "MC", rb_cObject);
320
+
321
+ // TarfMonteCarlo::MC
322
+
323
+ // void rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
324
+ rb_define_singleton_method(cTarfMonteCarlo, "box_muller", method_box_muller, 0);
325
+ rb_define_singleton_method(cTarfMonteCarlo, "run_monte_carlo", method_run_monte_carlo, -2);
326
+ }
327
+
@@ -0,0 +1,15 @@
1
+ require "tarf_monte_carlo/version"
2
+
3
+ # must reuired- for requiring tarf_monte_carlo.so file
4
+ # my_malloc/my_malloc will be the shared object built when the gem is
5
+ # installed then copied into lib/my_malloc/.
6
+
7
+ begin
8
+ require "tarf_monte_carlo/#{RUBY_VERSION[/\d+.\d+/]}/tarf_monte_carlo"
9
+ rescue LoadError
10
+ require "tarf_monte_carlo/tarf_monte_carlo"
11
+ end
12
+
13
+ module TarfMonteCarlo
14
+ # Your code goes here...
15
+ end
@@ -0,0 +1,7 @@
1
+ # gem build tarf_monte_carlo.gemspec
2
+ # gem push -v tarf_monte_carlo-2.1.gem
3
+ # gem yank tarf_monte_carlo -v 2.1
4
+
5
+ module TarfMonteCarlo
6
+ VERSION = "2.2"
7
+ end
@@ -0,0 +1,46 @@
1
+ # files = [
2
+ # "README.md",
3
+ # "Rakefile",
4
+ # "ext/tarf_monte_carlo/extconf.rb",
5
+ # "ext/tarf_monte_carlo/tarf_monte_carlo.c",
6
+ # "lib/tarf_monte_carlo.rb",
7
+ # "lib/tarf_monte_carlo/version.rb"
8
+ # ]
9
+
10
+ # coding: utf-8
11
+ lib = File.expand_path("../lib", __FILE__)
12
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
13
+ require "tarf_monte_carlo/version"
14
+
15
+ Gem::Specification.new do |spec|
16
+ spec.name = "tarf_monte_carlo"
17
+ spec.version = TarfMonteCarlo::VERSION
18
+ spec.authors = ["Vivek Routh"]
19
+ spec.email = ["vvkrth2@gmail.com"]
20
+
21
+ spec.summary = %q{Monte Carlo Simulation.}
22
+ spec.description = %q{Monte Carlo Simulation for TARF Contract.}
23
+ spec.homepage = %q{https://github.com/vivekapex/tarf_monte_carlo}
24
+ spec.license = "MIT"
25
+
26
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
27
+ # spec.files = `git ls-files -z`.split("\x0") + files
28
+
29
+ spec.bindir = "exe"
30
+
31
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+ # spec.executables = ["tarf_monte_carlo"]
33
+
34
+ spec.require_paths = ["lib"]
35
+ spec.extensions = ["ext/tarf_monte_carlo/extconf.rb"]
36
+ spec.required_ruby_version = "~> 2.0"
37
+
38
+ spec.add_development_dependency "bundler", "~> 1.0"
39
+ spec.add_development_dependency "rake", "~> 10.4"
40
+ spec.add_development_dependency "rake-compiler", "~> 1.0"
41
+ spec.add_development_dependency "rake-compiler-dock", "~> 0.6.0"
42
+ spec.add_development_dependency "rspec", "~> 3.0", ">= 3.0.0"
43
+ spec.add_development_dependency "yard", "~> 0.9.11"
44
+
45
+ # spec.add_development_dependency "mini_portile2", "~> 2.3.0"
46
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tarf_monte_carlo
3
+ version: !ruby/object:Gem::Version
4
+ version: '2.2'
5
+ platform: ruby
6
+ authors:
7
+ - Vivek Routh
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake-compiler-dock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.6.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '3.0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 3.0.0
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: yard
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 0.9.11
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.9.11
103
+ description: Monte Carlo Simulation for TARF Contract.
104
+ email:
105
+ - vvkrth2@gmail.com
106
+ executables: []
107
+ extensions:
108
+ - ext/tarf_monte_carlo/extconf.rb
109
+ extra_rdoc_files: []
110
+ files:
111
+ - ".gitignore"
112
+ - Gemfile
113
+ - README.md
114
+ - Rakefile
115
+ - bin/console
116
+ - bin/setup
117
+ - ext/tarf_monte_carlo/extconf.rb
118
+ - ext/tarf_monte_carlo/tarf_monte_carlo.c
119
+ - lib/tarf_monte_carlo.rb
120
+ - lib/tarf_monte_carlo/version.rb
121
+ - tarf_monte_carlo.gemspec
122
+ homepage: https://github.com/vivekapex/tarf_monte_carlo
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '2.0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.0.6
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Monte Carlo Simulation.
145
+ test_files: []