erv 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0116fa6cb4d3e6b11d3602ed2608b6b60a90f717
4
+ data.tar.gz: aac7790d8d9f9ab82e5ed0c70157cc7e95ef3398
5
+ SHA512:
6
+ metadata.gz: 94cc7f3280ae54020481e86d0e1caa181b539b0d8d6ca31e436e0eb4ed6ff0c12d000b9fc8443e32cb137aec706ef3b2831b1676d1751959c1c333cf72035ab4
7
+ data.tar.gz: 5fb06905713c33f6fd563849c7c44ceae643a272cc52250a4a41cdaa6c01a9a79e334abe1d679a13ce833820e4b58b045f68d3b619d8fd123e6fbbd806a01904
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in erv.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Mauro Tortonesi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,95 @@
1
+ # ruby-erv
2
+
3
+ Easy/elegant random variable library
4
+
5
+
6
+ ## Description
7
+
8
+ ruby-erv is a library that enables to create objects representing random
9
+ variables with a given probability distribution (gaussian, uniform, etc.) and
10
+ to sample from them. ruby-erv was built from code that I extracted out of
11
+ several scientific software I wrote for my research projects.
12
+
13
+ ruby-erv is designed to work on both YARV/MRI and JRuby. I have not tested it
14
+ on Rubinius yet.
15
+
16
+
17
+ ## Installation
18
+
19
+ I have not released ruby-erv on RubyGems, yet. For the moment, if you want to
20
+ try it just place this line:
21
+
22
+ ```ruby
23
+ gem 'erv', git: 'https://github.com/mtortonesi/ruby-erv.git'
24
+ ```
25
+
26
+ in your Gemfile and run:
27
+
28
+ bundle install
29
+
30
+ If using JRuby, you'll also need to run:
31
+
32
+ rake get_latest_commons_math_snapshot
33
+
34
+ to fetch the latest version of Apache Commons Math 3.3-SNAPSHOT. See the
35
+ [implementation notes below](#implementation-notes) for more information. (Note
36
+ that the rake-based installation of Apache Commons Math 3.3-SNAPSHOT requires
37
+ [nokogiri](http://nokogiri.org/).)
38
+
39
+
40
+ ## Examples
41
+
42
+ Here is a rather self-explanatory example demonstrating how to create random
43
+ variables using ruby-erv, and how to sample from them:
44
+
45
+ ```ruby
46
+ require 'erv'
47
+
48
+ gaussian_rv = ERV::RandomVariable.new(distribution: :gaussian,
49
+ mean: 10, sd: 2)
50
+ s1 = gaussian_rv.sample
51
+ ```
52
+
53
+
54
+ ## Implementation notes
55
+
56
+ In YARV/MRI, ruby-erv leverages the GNU Scientific Library (GSL) for random
57
+ number generation according to the desired probability distribution.
58
+ Unfortunately, ruby-gsl is unmaintained and broken. (See [the
59
+ patch](http://rubyforge.org/tracker/?func=detail&atid=1169&aid=29353&group_id=285)
60
+ that I sent them ages ago and that was never merged.) So, ruby-erv uses the
61
+ [gsl-nmatrix](https://github.com/SciRuby/rb-gsl) fork of ruby-gsl.
62
+
63
+ In JRuby, ruby-erv leverages the [Apache Commons
64
+ Math](http://commons.apache.org/proper/commons-math/) library to access the
65
+ same random number generation functions. Unfortunately, at the time of this
66
+ writing the Apache Commons Math maintainers have not shipped the 3.3 release
67
+ yet. Commons Math 3.3 should include support for geometric distribution (that I
68
+ need for several of my projects), thanks to [a
69
+ patch](https://issues.apache.org/jira/browse/MATH-973) that I submitted and
70
+ that was merged some time ago. So, for the moment ruby-env builds on top of the
71
+ 3.3-SNAPSHOT version of Apache Commons Math.
72
+
73
+ To facilitate the installation of ruby-env under JRuby, I have decided to
74
+ bundle the jar archive of Apache Commons Math 3.3-SNAPSHOT in (the jars
75
+ directory of) the ruby-env gem package. This is a rather dirty but not uncommon
76
+ approach, as many other gems (including the awesome
77
+ [Nokogiri](https://github.com/sparklemotion/nokogiri/tree/master/lib)) bundle
78
+ external jar dependencies in their JRuby version. However, in future I might
79
+ decide to switch to a more powerful, Maven-based automated installation of
80
+ Apache Commons Math 3.3-SNAPSHOT. For instance, based on Christian Meier's
81
+ [jar-dependencies](https://github.com/mkristian/jar-dependencies).
82
+
83
+
84
+ ## Acknowledgment
85
+
86
+ I would like to thank [Christian Meier](https://github.com/mkristian) for his
87
+ very valuable suggestions on how to package this gem for JRuby. If you're
88
+ interested in building serious applications for JRuby, I strongly recommend you
89
+ to check out Christian's [jbundler](https://github.com/mkristian/jbundler) and
90
+ [jar-dependencies](https://github.com/mkristian/jar-dependencies).
91
+
92
+
93
+ ## License
94
+
95
+ MIT
@@ -0,0 +1,55 @@
1
+ if RUBY_PLATFORM =~ /java/
2
+
3
+ require 'lib/erv/version'
4
+ require 'bundler/gem_helper'
5
+
6
+ require 'nokogiri'
7
+ require 'open-uri'
8
+
9
+ # setup absolute path for jars directory
10
+ JAR_DIR = File.expand_path(File.join(File.dirname(__FILE__), 'jars'))
11
+
12
+ directory JAR_DIR
13
+
14
+ desc 'Get latest snapshot of Apache Commons Math 3.3'
15
+ task :get_latest_commons_math_snapshot => [ JAR_DIR ] do
16
+ # base URL of the apache commons math 3 snapshot repository
17
+ BASE_URL = 'http://repository.apache.org/content/groups/snapshots/org/apache/commons/commons-math3/3.3-SNAPSHOT/'
18
+
19
+ # retrieve timestamp and build number of latest snapshot
20
+ puts 'Retrieving metadata information on latest Apache Commons Math 3.3 snapshot.'
21
+ doc = Nokogiri::HTML(open(BASE_URL + 'maven-metadata.xml'))
22
+ timestamp = doc.xpath('//timestamp/text()')
23
+ buildnumber = doc.xpath('//buildnumber/text()')
24
+
25
+ # get archive name of latest snapshot
26
+ filename = "commons-math3-3.3-#{timestamp}-#{buildnumber}.jar"
27
+
28
+ # get destination file name
29
+ jar_path = File.join(JAR_DIR, filename)
30
+
31
+ # don't download if file already exists
32
+ if File.exists?(jar_path)
33
+ puts 'Archive already present in jars directory.'
34
+ else
35
+ puts 'Retrieving latest Apache Commons Math 3.3 snapshot.'
36
+ file_url = BASE_URL + filename
37
+ File.write(jar_path, open(file_url).read)
38
+ end
39
+
40
+ # clean JAR_DIR of every file except filename
41
+ puts 'Removing obsolete archives from jars directory.'
42
+ FileUtils.rm(Dir.glob("#{JAR_DIR}/*").reject!{|file| file == jar_path })
43
+ end
44
+
45
+ desc "Build erv-#{ERV::VERSION}-java.gem into the pkg directory."
46
+ task :build => [ :get_latest_commons_math_snapshot ] do
47
+ Bundler::GemHelper.instance = Bundler::GemHelper.new
48
+ Bundler::GemHelper.instance.build_gem
49
+ end
50
+
51
+ else # RUBY_PLATFORM !~ /java/
52
+
53
+ require 'bundler/gem_tasks'
54
+
55
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'erv/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'erv'
8
+ spec.version = ERV::VERSION
9
+ spec.authors = ['Mauro Tortonesi']
10
+ spec.email = ['mauro.tortonesi@unife.it']
11
+ spec.description = "erv-#{ERV::VERSION}"
12
+ spec.summary = %q{Easy/elegant Ruby library providing support for random variable generation}
13
+ spec.homepage = 'https://github.com/mtortonesi/ruby-erv'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/).reject{|x| x == '.gitignore' }
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'rspec'
24
+
25
+ if RUBY_PLATFORM =~ /java/
26
+ # we need to release a JRuby-specific gem
27
+ spec.platform = 'java'
28
+ # include Apache Commons Math 3.3 jar archive
29
+ spec.files.concat(Dir['jars/*.jar'])
30
+ else
31
+ spec.add_dependency 'gsl-nmatrix'
32
+ end
33
+ end
@@ -0,0 +1,10 @@
1
+ # Load Apache Commons Math 3.3 jar if we're using JRuby
2
+ if RUBY_PLATFORM =~ /java/
3
+ JARS_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..', 'jars'))
4
+ Dir["#{JARS_DIR}/*.jar"].each do |jar|
5
+ $CLASSPATH << jar unless $CLASSPATH.include?(jar)
6
+ end
7
+ end
8
+
9
+ require 'erv/version'
10
+ require 'erv/random_variable'
@@ -0,0 +1,15 @@
1
+ require 'erv/distribution'
2
+
3
+ module ERV
4
+
5
+ class ConstantDistribution < Distribution
6
+ def initialize(opts)
7
+ super(opts)
8
+
9
+ raise ArgumentError unless opts[:value]
10
+ val = opts[:value].to_f
11
+ @func = Proc.new { val }
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,32 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ java_import org.apache.commons.math3.distribution.UniformIntegerDistribution
4
+ end
5
+
6
+ require 'erv/distribution'
7
+ require 'erv/support/try'
8
+
9
+
10
+ module ERV
11
+
12
+ class DiscreteUniformDistribution < Distribution
13
+ def initialize(opts)
14
+ super(opts)
15
+
16
+ raise ArgumentError unless opts[:max_value]
17
+ max = opts[:max_value].to_i
18
+ min = opts[:min_value].try(:to_i) || 0
19
+
20
+ if RUBY_PLATFORM == 'java'
21
+ # create distribution
22
+ d = UniformIntegerDistribution.new(@rng, min, max)
23
+ # setup sampling function
24
+ @func = Proc.new { d.sample }
25
+ else
26
+ # setup sampling function
27
+ @func = Proc.new { min + @rng.uniform_int(max-min) }
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,16 @@
1
+ require 'erv/rng'
2
+
3
+ module ERV
4
+
5
+ class Distribution
6
+ def initialize(opts)
7
+ # create RNG object
8
+ @rng = RNG.make_rng(opts[:seed])
9
+ end
10
+
11
+ def sample
12
+ @func.call
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,31 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ JExponentialDistribution = org.apache.commons.math3.distribution.ExponentialDistribution
4
+ end
5
+
6
+ require 'erv/distribution'
7
+
8
+
9
+ module ERV
10
+
11
+ class ExponentialDistribution < Distribution
12
+ def initialize(opts)
13
+ super(opts)
14
+
15
+ raise ArgumentError unless opts[:mean]
16
+ mean = opts[:mean].to_f
17
+
18
+ if RUBY_PLATFORM == 'java'
19
+ # create distribution
20
+ d = JExponentialDistribution.new(@rng, mean,
21
+ JExponentialDistribution::DEFAULT_INVERSE_ABSOLUTE_ACCURACY)
22
+ # setup sampling function
23
+ @func = Proc.new { d.sample }
24
+ else
25
+ # setup sampling function
26
+ @func = Proc.new { @rng.exponential(mean) }
27
+ end
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,32 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ JGammaDistribution = org.apache.commons.math3.distribution.GammaDistribution
4
+ end
5
+
6
+ require 'erv/distribution'
7
+
8
+
9
+ module ERV
10
+
11
+ class GammaDistribution < Distribution
12
+ def initialize(opts)
13
+ super(opts)
14
+
15
+ raise ArgumentError unless opts[:rate] and opts[:shape]
16
+ scale = 1 / opts[:rate].to_f
17
+ shape = opts[:shape].to_f
18
+
19
+ if RUBY_PLATFORM == 'java'
20
+ # create distribution
21
+ d = JGammaDistribution.new(@rng, shape, scale,
22
+ JGammaDistribution::DEFAULT_INVERSE_ABSOLUTE_ACCURACY)
23
+ # setup sampling function
24
+ @func = Proc.new { d.sample }
25
+ else
26
+ # setup sampling function
27
+ @func = Proc.new { @rng.gamma(shape, scale) }
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,32 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ java_import org.apache.commons.math3.distribution.NormalDistribution
4
+ end
5
+
6
+ require 'erv/distribution'
7
+
8
+
9
+ module ERV
10
+
11
+ class GaussianDistribution < Distribution
12
+ def initialize(opts)
13
+ super(opts)
14
+
15
+ raise ArgumentError unless opts[:mean] and opts[:sd]
16
+ mean = opts[:mean].to_f
17
+ sd = opts[:sd].to_f
18
+
19
+ if RUBY_PLATFORM == 'java'
20
+ # create distribution
21
+ d = NormalDistribution.new(@rng, mean, sd,
22
+ NormalDistribution::DEFAULT_INVERSE_ABSOLUTE_ACCURACY)
23
+ # setup sampling function
24
+ @func = Proc.new { d.sample }
25
+ else
26
+ # setup sampling function
27
+ @func = Proc.new { mean + @rng.ran_gaussian(sd) }
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,42 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ java_import org.apache.commons.math3.distribution.UniformRealDistribution
4
+ end
5
+
6
+ require 'erv/distribution'
7
+ require 'erv/support/try'
8
+
9
+
10
+ module ERV
11
+
12
+ class GpdDistribution < Distribution
13
+ def initialize(opts)
14
+ super(opts)
15
+
16
+ raise ArgumentError unless opts[:scale] and opts[:shape]
17
+ scale = opts[:scale].to_f
18
+ shape = opts[:shape].to_f
19
+ location = opts[:location].try(:to_f) || 0.0
20
+
21
+ if RUBY_PLATFORM == 'java'
22
+ # create uniform distribution
23
+ d = UniformRealDistribution.new(@rng, 0.0, 1.0,
24
+ UniformRealDistribution::DEFAULT_INVERSE_ABSOLUTE_ACCURACY)
25
+ # setup sampling function
26
+ @func = Proc.new {
27
+ # this algorithm was taken from wikipedia
28
+ u = 1.0 - d.sample
29
+ location + (scale * ((u ** (-shape)) - 1.0) / shape)
30
+ }
31
+ else
32
+ # setup sampling function
33
+ @func = Proc.new {
34
+ # this algorithm was taken from wikipedia
35
+ u = 1.0 - @rng.uniform
36
+ location + (scale * ((u ** (-shape)) - 1.0) / shape)
37
+ }
38
+ end
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,32 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ JGeometricDistribution = org.apache.commons.math3.distribution.GeometricDistribution
4
+ end
5
+
6
+
7
+ module ERV
8
+
9
+ class GeometricDistribution < Distribution
10
+ def initialize(opts)
11
+ super(opts)
12
+
13
+ raise ArgumentError unless opts[:probability_of_success]
14
+ p = opts[:probability_of_success].to_f
15
+
16
+ if RUBY_PLATFORM == 'java'
17
+ # create distribution
18
+ d = JGeometricDistribution.new(@rng, p)
19
+ # setup sampling function
20
+ @func = Proc.new { d.sample }
21
+ else
22
+ # setup sampling function
23
+ #
24
+ # WARNING: I HAVEN'T TRIED THIS CODE!!!
25
+ # Note that GSL implements the shifted version of the geometric
26
+ # distribution, so we might need to change the result (removing 1?)
27
+ @func = Proc.new { @rng.geometric(p) }
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,43 @@
1
+ require 'erv/constant_distribution'
2
+ require 'erv/discrete_uniform_distribution'
3
+ require 'erv/exponential_distribution'
4
+ require 'erv/gamma_distribution'
5
+ require 'erv/gaussian_distribution'
6
+ require 'erv/general_pareto_distribution'
7
+ require 'erv/geometric_distribution'
8
+ require 'erv/uniform_distribution'
9
+ require 'erv/support/try'
10
+
11
+
12
+ module ERV
13
+
14
+ class RandomVariable
15
+ def initialize(opts)
16
+ # get distribution name
17
+ dist_name = opts[:distribution].try(:to_s)
18
+
19
+ # get class name that corresponds to the requested distribution
20
+ klass_name = dist_name.split('_').push('distribution').map(&:capitalize).join
21
+ # create distribution object
22
+ @dist = ERV.const_get(klass_name).new(opts)
23
+ end
24
+
25
+ def next
26
+ @dist.sample
27
+ end
28
+ end
29
+
30
+
31
+ class SequentialRandomVariable
32
+ def initialize(args)
33
+ @first = args.delete(:first_value)
34
+ @most_recent = @first || 0.0
35
+ @var = RandomVariable.new(args)
36
+ end
37
+
38
+ def next
39
+ @most_recent += @var.next
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,29 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ java_import org.apache.commons.math3.random.MersenneTwister
4
+ else
5
+ require 'gsl'
6
+ end
7
+
8
+
9
+ module ERV
10
+
11
+ class RNG
12
+ def self.make_rng(seed = nil)
13
+ # if not explicitly provided, seed is taken from the (lower quality)
14
+ # pseudo-random Kernel::rand generator
15
+ if RUBY_PLATFORM == 'java'
16
+ # this is a somewhat ugly workaround in order to avoid ambibuities in
17
+ # the constructor method that will be called (we basically explicit the
18
+ # signature of the constructor that we want to use)
19
+ constructor = org.apache.commons.math3.random.MersenneTwister.java_class.constructor(Java::long)
20
+ rng = constructor.new_instance(seed || Kernel::rand(2**31 - 1))
21
+ else
22
+ rng = seed ?
23
+ GSL::Rng.alloc(GSL::Rng::MT19937, seed) :
24
+ GSL::Rng.alloc(GSL::Rng::MT19937, Kernel::rand(2**31 - 1))
25
+ end
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,15 @@
1
+ ##
2
+ # Object#try extension
3
+ #
4
+ # From rails:
5
+ # * https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/try.rb
6
+
7
+ class Object
8
+ alias_method :try, :__send__
9
+ end
10
+
11
+ class NilClass
12
+ def try(*args)
13
+ nil
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ if RUBY_PLATFORM == 'java'
2
+ require 'java'
3
+ java_import org.apache.commons.math3.distribution.UniformRealDistribution
4
+ end
5
+
6
+ require 'erv/distribution'
7
+ require 'erv/support/try'
8
+
9
+
10
+ module ERV
11
+
12
+ class UniformDistribution < Distribution
13
+ def initialize(opts)
14
+ super(opts)
15
+
16
+ raise ArgumentError unless opts[:max_value]
17
+ max = opts[:max_value].to_f
18
+ min = opts[:min_value].try(:to_f) || 0.0
19
+
20
+ if RUBY_PLATFORM == 'java'
21
+ # create distribution
22
+ d = UniformRealDistribution.new(@rng, min, max,
23
+ UniformRealDistribution::DEFAULT_INVERSE_ABSOLUTE_ACCURACY)
24
+ # setup sampling function
25
+ @func = Proc.new { d.sample }
26
+ else
27
+ # setup sampling function
28
+ @func = Proc.new { @rng.flat(min, max) }
29
+ end
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,3 @@
1
+ module ERV
2
+ VERSION = '0.0.2'
3
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ require 'erv/constant_distribution'
4
+
5
+ describe ERV::ConstantDistribution do
6
+
7
+ it 'should require a reference value' do
8
+ lambda do
9
+ ERV::ConstantDistribution.new
10
+ end.should raise_error
11
+ end
12
+
13
+ context 'reference value' do
14
+
15
+ it 'should be accepted at initialization time' do
16
+ lambda do
17
+ ERV::ConstantDistribution.new(value: 10)
18
+ end.should_not raise_error
19
+ end
20
+
21
+ it 'should match the value returned by sampling' do
22
+ val = rand(100)
23
+ crv = ERV::ConstantDistribution.new(value: val)
24
+ crv.sample.should == val
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,20 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+
6
+ # Required to setup classpath for Apache Commons Math 3.3-SNAPSHOT in JRuby
7
+ require 'erv'
8
+
9
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
10
+ RSpec.configure do |config|
11
+ config.treat_symbols_as_metadata_keys_with_true_values = true
12
+ config.run_all_when_everything_filtered = true
13
+ config.filter_run :focus
14
+
15
+ # Run specs in random order to surface order dependencies. If you find an
16
+ # order dependency and want to debug it, you can fix the order by providing
17
+ # the seed, which is printed after each run.
18
+ # --seed 1234
19
+ config.order = 'random'
20
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: erv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Mauro Tortonesi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-04 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.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: gsl-nmatrix
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: erv-0.0.2
70
+ email:
71
+ - mauro.tortonesi@unife.it
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - Gemfile
77
+ - LICENSE
78
+ - README.md
79
+ - Rakefile
80
+ - erv.gemspec
81
+ - lib/erv.rb
82
+ - lib/erv/constant_distribution.rb
83
+ - lib/erv/discrete_uniform_distribution.rb
84
+ - lib/erv/distribution.rb
85
+ - lib/erv/exponential_distribution.rb
86
+ - lib/erv/gamma_distribution.rb
87
+ - lib/erv/gaussian_distribution.rb
88
+ - lib/erv/general_pareto_distribution.rb
89
+ - lib/erv/geometric_distribution.rb
90
+ - lib/erv/random_variable.rb
91
+ - lib/erv/rng.rb
92
+ - lib/erv/support/try.rb
93
+ - lib/erv/uniform_distribution.rb
94
+ - lib/erv/version.rb
95
+ - spec/erv/constant_distribution_spec.rb
96
+ - spec/spec_helper.rb
97
+ homepage: https://github.com/mtortonesi/ruby-erv
98
+ licenses:
99
+ - MIT
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.1.11
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: Easy/elegant Ruby library providing support for random variable generation
121
+ test_files:
122
+ - spec/erv/constant_distribution_spec.rb
123
+ - spec/spec_helper.rb