davidrichards-just_enumerable_stats 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +70 -16
- data/VERSION.yml +1 -1
- data/lib/just_enumerable_stats.rb +63 -0
- data/spec/just_enumerable_stats_spec.rb +54 -186
- data/spec/spec_helper.rb +7 -1
- data/spec/unobtrusive_just_enumerable_stats_spec.rb +229 -0
- metadata +3 -2
data/README.rdoc
CHANGED
@@ -23,55 +23,62 @@ Looking at the library through jes, you can see that we have all the usual goodi
|
|
23
23
|
The list of methods are:
|
24
24
|
|
25
25
|
* average
|
26
|
-
* avg
|
26
|
+
* avg
|
27
27
|
* cartesian_product
|
28
|
+
* categories
|
29
|
+
* category_values
|
28
30
|
* compliment
|
29
|
-
* cor
|
31
|
+
* cor
|
30
32
|
* correlation
|
31
|
-
*
|
32
|
-
*
|
33
|
-
*
|
34
|
-
*
|
35
|
-
*
|
33
|
+
* count_if
|
34
|
+
* covariance
|
35
|
+
* cum_max
|
36
|
+
* cum_min
|
37
|
+
* cum_prod
|
38
|
+
* cum_sum
|
36
39
|
* cumulative_max
|
37
40
|
* cumulative_min
|
38
41
|
* cumulative_product
|
39
42
|
* cumulative_sum
|
40
43
|
* default_block
|
41
44
|
* default_block=
|
45
|
+
* dichotomize
|
42
46
|
* euclidian_distance
|
43
47
|
* exclusive_not
|
44
48
|
* intersect
|
49
|
+
* is_numeric?
|
45
50
|
* max
|
46
51
|
* max_index
|
47
52
|
* max_of_lists
|
48
|
-
* mean
|
53
|
+
* mean
|
49
54
|
* median
|
50
55
|
* min
|
51
56
|
* min_index
|
52
57
|
* min_of_lists
|
53
58
|
* new_sort
|
54
59
|
* order
|
55
|
-
*
|
56
|
-
*
|
57
|
-
* permutations (cartesian_product)
|
60
|
+
* pearson_correlation
|
61
|
+
* permutations
|
58
62
|
* product
|
59
63
|
* quantile
|
60
64
|
* rand_in_range
|
61
65
|
* range
|
62
66
|
* range_as_range
|
63
67
|
* range_class
|
64
|
-
*
|
68
|
+
* range_instance
|
65
69
|
* rank
|
70
|
+
* set_range
|
71
|
+
* set_range_class
|
66
72
|
* sigma_pairs
|
67
73
|
* standard_deviation
|
68
|
-
* std
|
74
|
+
* std
|
69
75
|
* sum
|
70
|
-
* tanimoto_correlation
|
76
|
+
* tanimoto_correlation
|
71
77
|
* tanimoto_pairs
|
78
|
+
* to_f!
|
72
79
|
* to_pairs
|
73
80
|
* union
|
74
|
-
* var
|
81
|
+
* var
|
75
82
|
* variance
|
76
83
|
* yield_transpose
|
77
84
|
|
@@ -97,7 +104,54 @@ Another interesting feature is the default block getter and setter. Sometimes I
|
|
97
104
|
# => [2,4,6]
|
98
105
|
a.std
|
99
106
|
# => 2.0 instead of 1.0
|
100
|
-
|
107
|
+
|
108
|
+
== Scaling
|
109
|
+
|
110
|
+
There are a few new features for scaling data:
|
111
|
+
|
112
|
+
>> a = [1,2,3]
|
113
|
+
=> [1, 2, 3]
|
114
|
+
>> a.scale(2)
|
115
|
+
=> [2, 4, 6]
|
116
|
+
>> a
|
117
|
+
=> [1, 2, 3]
|
118
|
+
>> a.scale!(2)
|
119
|
+
=> [2, 4, 6]
|
120
|
+
>> a
|
121
|
+
=> [2, 4, 6]
|
122
|
+
>> a.scale {|e| e - 1}
|
123
|
+
=> [1, 3, 5]
|
124
|
+
>> a
|
125
|
+
=> [2, 4, 6]
|
126
|
+
>> a.scale! {|e| e - 1}
|
127
|
+
=> [1, 3, 5]
|
128
|
+
>> a
|
129
|
+
=> [1, 3, 5]
|
130
|
+
>> a.scale_between(3,4)
|
131
|
+
=> [3.0, 3.5, 4.0]
|
132
|
+
>> a
|
133
|
+
=> [1, 3, 5]
|
134
|
+
>> a.scale_between!(3,4)
|
135
|
+
=> [3.0, 3.5, 4.0]
|
136
|
+
>> a
|
137
|
+
=> [3.0, 3.5, 4.0]
|
138
|
+
>> a = [1,2,3]
|
139
|
+
=> [1, 2, 3]
|
140
|
+
>> a.normalize
|
141
|
+
=> [0.166666666666667, 0.333333333333333, 0.5]
|
142
|
+
>> a
|
143
|
+
=> [1, 2, 3]
|
144
|
+
>> a.normalize!
|
145
|
+
=> [0.166666666666667, 0.333333333333333, 0.5]
|
146
|
+
>> a
|
147
|
+
=> [0.166666666666667, 0.333333333333333, 0.5]
|
148
|
+
|
149
|
+
Basically:
|
150
|
+
|
151
|
+
* scale can scale by a number or with a block. The block is a transformation for a single element.
|
152
|
+
* scale_between sets the minimum and maximum values, and keeps each value proportionate to each other.
|
153
|
+
* normalize calculates the percentage of an element to the whole.
|
154
|
+
|
101
155
|
== Categories
|
102
156
|
|
103
157
|
Once I started using this gem with my distribution table classes, I needed to have flexible categories on an enumerable. What that looks like is:
|
data/VERSION.yml
CHANGED
@@ -400,6 +400,8 @@ module Enumerable
|
|
400
400
|
|
401
401
|
end
|
402
402
|
safe_alias :_jes_rank
|
403
|
+
safe_alias :_jes_ordinalize, :_jes_rank
|
404
|
+
safe_alias :ordinalize, :_jes_rank
|
403
405
|
|
404
406
|
# Given values like [10,5,5,1]
|
405
407
|
# Rank should produce something like [4,2,2,1]
|
@@ -696,8 +698,69 @@ module Enumerable
|
|
696
698
|
return true if @_jes_to_f
|
697
699
|
@_jes_to_f = self.map! {|e| e.to_f}
|
698
700
|
end
|
701
|
+
|
702
|
+
# Scale a list by a number. The implementation of this can be self-referential.
|
703
|
+
# Example: a.scale!(a.standard_deviation)
|
699
704
|
safe_alias :_jes_to_f!
|
705
|
+
|
706
|
+
def _jes_scale(val=nil, &block)
|
707
|
+
if block
|
708
|
+
self.map{|e| block.call(e)}
|
709
|
+
else
|
710
|
+
self.map{|e| e * val}
|
711
|
+
end
|
712
|
+
end
|
713
|
+
safe_alias :_jes_scale
|
714
|
+
|
715
|
+
def _jes_scale!(val=nil, &block)
|
716
|
+
if block
|
717
|
+
self.map!{|e| block.call(e)}
|
718
|
+
else
|
719
|
+
self.map!{|e| e * val}
|
720
|
+
end
|
721
|
+
end
|
722
|
+
safe_alias :_jes_scale!
|
700
723
|
|
724
|
+
def _jes_scale_to_sigmoid!
|
725
|
+
self._jes_scale! { |e| 1 / (1 + Math.exp( -1 * (e))) }
|
726
|
+
end
|
727
|
+
safe_alias :_jes_scale_to_sigmoid!
|
728
|
+
|
729
|
+
def _jes_normalize
|
730
|
+
self.map {|e| e.to_f / self._jes_sum }
|
731
|
+
end
|
732
|
+
safe_alias :_jes_normalize
|
733
|
+
|
734
|
+
def _jes_normalize!
|
735
|
+
sum = self._jes_sum
|
736
|
+
self.map! {|e| e.to_f / sum }
|
737
|
+
end
|
738
|
+
safe_alias :_jes_normalize!
|
739
|
+
|
740
|
+
def _jes_scale_between(*values)
|
741
|
+
raise ArgumentError, "Must provide two values" unless values.size == 2
|
742
|
+
values.sort!
|
743
|
+
min = values[0]
|
744
|
+
max = values[1]
|
745
|
+
orig_min = self._jes_min
|
746
|
+
scalar = (max - min) / (self._jes_max - orig_min).to_f
|
747
|
+
shift = min - (orig_min * scalar)
|
748
|
+
self._jes_scale{|e| (e * scalar) + shift}
|
749
|
+
end
|
750
|
+
safe_alias :_jes_scale_between
|
751
|
+
|
752
|
+
def _jes_scale_between!(*values)
|
753
|
+
raise ArgumentError, "Must provide two values" unless values.size == 2
|
754
|
+
values.sort!
|
755
|
+
min = values[0]
|
756
|
+
max = values[1]
|
757
|
+
orig_min = self._jes_min
|
758
|
+
scalar = (max - min) / (self._jes_max - orig_min).to_f
|
759
|
+
shift = min - (orig_min * scalar)
|
760
|
+
self._jes_scale!{|e| (e * scalar) + shift}
|
761
|
+
end
|
762
|
+
safe_alias :_jes_scale_between!
|
763
|
+
|
701
764
|
end
|
702
765
|
|
703
766
|
@a = [1,2,3]
|
@@ -527,200 +527,68 @@ describe "JustEnumerableStats" do
|
|
527
527
|
[1,2,3].to_f!.should eql([1.0, 2.0, 3.0])
|
528
528
|
end
|
529
529
|
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
it "should not use the native average" do
|
565
|
-
lambda{@a._jes_average}.should_not raise_error
|
566
|
-
end
|
567
|
-
|
568
|
-
it "should not use the native variance" do
|
569
|
-
lambda{@a._jes_variance}.should_not raise_error
|
570
|
-
end
|
571
|
-
|
572
|
-
it "should not use the native standard_deviation" do
|
573
|
-
lambda{@a._jes_standard_deviation}.should_not raise_error
|
574
|
-
end
|
575
|
-
|
576
|
-
it "should not use the native median" do
|
577
|
-
lambda{@a._jes_median}.should_not raise_error
|
578
|
-
end
|
579
|
-
|
580
|
-
it "should not use the native categories" do
|
581
|
-
lambda{@a._jes_categories}.should_not raise_error
|
582
|
-
end
|
583
|
-
|
584
|
-
it "should not use the native is_numeric?" do
|
585
|
-
lambda{@a._jes_is_numeric?}.should_not raise_error
|
586
|
-
end
|
587
|
-
|
588
|
-
it "should not use the native range" do
|
589
|
-
lambda{@a._jes_range}.should_not raise_error
|
590
|
-
end
|
591
|
-
|
592
|
-
it "should not use the native set_range_class" do
|
593
|
-
lambda{@a._jes_set_range_class(FixedRange)}.should_not raise_error
|
594
|
-
end
|
530
|
+
it "should have the ability to scale the list by a number" do
|
531
|
+
a = [1,2,3,4]
|
532
|
+
a.scale!(0.5)
|
533
|
+
a.should eql([0.5, 1.0, 1.5, 2.0])
|
534
|
+
end
|
535
|
+
|
536
|
+
it "should be able to scale a list by a calculation on the list" do
|
537
|
+
a = (1..10).inject([]) {|list, i| list << rand}
|
538
|
+
std = a.std
|
539
|
+
b = a.map {|e| e * std}
|
540
|
+
a.should_receive(:std).once.and_return(std)
|
541
|
+
a.scale!(a.std)
|
542
|
+
a.should eql(b)
|
543
|
+
end
|
544
|
+
|
545
|
+
it "should be able to scale by a function" do
|
546
|
+
a = [-4, -2, 0, 2, 4]
|
547
|
+
a.scale! { |e| 1 / (1 + Math.exp( -1 * (e))) }
|
548
|
+
a[0].should be_close(0.01798, 1.0e-5)
|
549
|
+
a[1].should be_close(0.11920, 1.0e-5)
|
550
|
+
a[2].should eql(0.5)
|
551
|
+
a[3].should be_close(0.88079, 1.0e-5)
|
552
|
+
a[4].should be_close(0.98201, 1.0e-5)
|
553
|
+
end
|
554
|
+
|
555
|
+
it "should be able to scale to a signoid" do
|
556
|
+
a = [-4, -2, 0, 2, 4]
|
557
|
+
a.scale_to_sigmoid!
|
558
|
+
a[0].should be_close(0.01798, 1.0e-5)
|
559
|
+
a[1].should be_close(0.11920, 1.0e-5)
|
560
|
+
a[2].should eql(0.5)
|
561
|
+
a[3].should be_close(0.88079, 1.0e-5)
|
562
|
+
a[4].should be_close(0.98201, 1.0e-5)
|
563
|
+
end
|
595
564
|
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
end
|
565
|
+
it "should be able to normalize a list" do
|
566
|
+
b = @a.normalize
|
567
|
+
b.should eql([1/6.0, 2/6.0, 3/6.0])
|
568
|
+
@a.normalize!
|
569
|
+
@a.should eql(b)
|
570
|
+
end
|
603
571
|
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
it "should not use the native category_values" do
|
609
|
-
lambda{@a._jes_category_values}.should_not raise_error
|
610
|
-
end
|
611
|
-
|
612
|
-
it "should not use the native range_class" do
|
613
|
-
lambda{@a._jes_range_class}.should_not raise_error
|
614
|
-
end
|
615
|
-
|
616
|
-
it "should not use the native range_as_range" do
|
617
|
-
lambda{@a._jes_range_as_range}.should_not raise_error
|
618
|
-
end
|
619
|
-
|
620
|
-
it "should not use the native new_sort" do
|
621
|
-
lambda{@a._jes_new_sort}.should_not raise_error
|
622
|
-
end
|
623
|
-
|
624
|
-
it "should not use the native rank" do
|
625
|
-
lambda{@a._jes_rank}.should_not raise_error
|
626
|
-
end
|
627
|
-
|
628
|
-
it "should not use the native order" do
|
629
|
-
lambda{@a._jes_order}.should_not raise_error
|
630
|
-
end
|
631
|
-
|
632
|
-
it "should not use the native quantile" do
|
633
|
-
lambda{@a._jes_quantile}.should_not raise_error
|
634
|
-
end
|
635
|
-
|
636
|
-
it "should not use the native cum_sum" do
|
637
|
-
lambda{@a._jes_cum_sum}.should_not raise_error
|
638
|
-
end
|
639
|
-
|
640
|
-
it "should not use the native cum_prod" do
|
641
|
-
lambda{@a._jes_cum_prod}.should_not raise_error
|
642
|
-
end
|
643
|
-
|
644
|
-
it "should not use the native cum_max" do
|
645
|
-
lambda{@a._jes_cum_max}.should_not raise_error
|
646
|
-
end
|
647
|
-
|
648
|
-
it "should not use the native cum_min" do
|
649
|
-
lambda{@a._jes_cum_min}.should_not raise_error
|
650
|
-
end
|
651
|
-
|
652
|
-
it "should not use the native product" do
|
653
|
-
lambda{@a._jes_product}.should_not raise_error
|
654
|
-
end
|
655
|
-
|
656
|
-
it "should not use the native to_pairs" do
|
657
|
-
lambda{@a._jes_to_pairs(@b) {|a, b| a}}.should_not raise_error
|
658
|
-
end
|
659
|
-
|
660
|
-
it "should not use the native tanimoto_pairs" do
|
661
|
-
lambda{@a._jes_tanimoto_pairs(@b)}.should_not raise_error
|
662
|
-
end
|
663
|
-
|
664
|
-
it "should not use the native union" do
|
665
|
-
lambda{@a._jes_union(@b)}.should_not raise_error
|
666
|
-
end
|
667
|
-
|
668
|
-
it "should not use the native intersect" do
|
669
|
-
lambda{@a._jes_intersect(@b)}.should_not raise_error
|
670
|
-
end
|
671
|
-
|
672
|
-
it "should not use the native compliment" do
|
673
|
-
lambda{@a._jes_compliment(@b)}.should_not raise_error
|
674
|
-
end
|
675
|
-
|
676
|
-
it "should not use the native exclusive_not" do
|
677
|
-
lambda{@a._jes_exclusive_not(@b)}.should_not raise_error
|
678
|
-
end
|
679
|
-
|
680
|
-
it "should not use the native cartesian_product" do
|
681
|
-
lambda{@a._jes_cartesian_product(@b)}.should_not raise_error
|
682
|
-
end
|
683
|
-
|
684
|
-
it "should not use the native sigma_pairs" do
|
685
|
-
lambda{@a._jes_sigma_pairs(@b) {|a, b| a}}.should_not raise_error
|
686
|
-
end
|
687
|
-
|
688
|
-
it "should not use the native euclidian_distance" do
|
689
|
-
lambda{@a._jes_euclidian_distance(@b)}.should_not raise_error
|
690
|
-
end
|
691
|
-
|
692
|
-
it "should not use the native rand_in_range" do
|
693
|
-
lambda{@a._jes_rand_in_range(1, 2)}.should_not raise_error
|
694
|
-
end
|
695
|
-
|
696
|
-
it "should not use the native correlation" do
|
697
|
-
lambda{@a._jes_correlation(@b)}.should_not raise_error
|
698
|
-
end
|
699
|
-
|
700
|
-
it "should not use the native yield_transpose" do
|
701
|
-
lambda{@a._jes_yield_transpose(@b)}.should_not raise_error
|
702
|
-
end
|
703
|
-
|
704
|
-
it "should not use the native max_of_lists" do
|
705
|
-
lambda{@a._jes_max_of_lists(@b)}.should_not raise_error
|
706
|
-
end
|
707
|
-
|
708
|
-
it "should not use the native min_of_lists" do
|
709
|
-
lambda{@a._jes_min_of_lists(@b)}.should_not raise_error
|
572
|
+
context "scale_between" do
|
573
|
+
before do
|
574
|
+
@a = [-4, -2, 0, 2, 4]
|
710
575
|
end
|
711
576
|
|
712
|
-
it "should
|
713
|
-
lambda{@a.
|
577
|
+
it "should require two parameters" do
|
578
|
+
lambda{@a.scale_between(1)}.should raise_error(ArgumentError, 'Must provide two values')
|
579
|
+
lambda{@a.scale_between(1,2)}.should_not raise_error
|
580
|
+
lambda{@a.scale_between(1,2,3)}.should raise_error(ArgumentError, 'Must provide two values')
|
714
581
|
end
|
715
582
|
|
716
|
-
it "should
|
717
|
-
|
583
|
+
it "should return a new array between the scaled values" do
|
584
|
+
b = @a.scale_between(1,2)
|
585
|
+
b.should eql([1.0, 1.25, 1.5, 1.75, 2.0])
|
718
586
|
end
|
719
587
|
|
720
|
-
it "should
|
721
|
-
|
588
|
+
it "should be able to transform into a scaled set" do
|
589
|
+
b = @a.scale_between(1,2)
|
590
|
+
@a.scale_between!(1,2)
|
591
|
+
@a.should eql(b)
|
722
592
|
end
|
723
|
-
|
724
593
|
end
|
725
|
-
|
726
594
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -40,6 +40,7 @@ class BusyClass
|
|
40
40
|
def range_as_range(&block); raise ArgumentError, "Should not be called"; end
|
41
41
|
def new_sort(&block); raise ArgumentError, "Should not be called"; end
|
42
42
|
def rank(&block); raise ArgumentError, "Should not be called"; end
|
43
|
+
def ordinalize(&block); raise ArgumentError, "Should not be called"; end
|
43
44
|
def order(&block); raise ArgumentError, "Should not be called"; end
|
44
45
|
def quantile(&block); raise ArgumentError, "Should not be called"; end
|
45
46
|
def cum_sum(sorted=false, &block); raise ArgumentError, "Should not be called"; end
|
@@ -64,7 +65,12 @@ class BusyClass
|
|
64
65
|
def covariance(other); raise ArgumentError, "Should not be called"; end
|
65
66
|
def pearson_correlation(other); raise ArgumentError, "Should not be called"; end
|
66
67
|
def to_f!; raise ArgumentError, "Should not be called"; end
|
67
|
-
|
68
|
+
def scale!; raise ArgumentError, "Should not be called"; end
|
69
|
+
def scale_to_sigmoid!; raise ArgumentError, "Should not be called"; end
|
70
|
+
def normalize; raise ArgumentError, "Should not be called"; end
|
71
|
+
def normalize!; raise ArgumentError, "Should not be called"; end
|
72
|
+
def scale_between; raise ArgumentError, "Should not be called"; end
|
73
|
+
def scale_between!; raise ArgumentError, "Should not be called"; end
|
68
74
|
end
|
69
75
|
|
70
76
|
|
@@ -0,0 +1,229 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "JustEnumerableStats" do
|
4
|
+
|
5
|
+
context "unobstrusive" do
|
6
|
+
before do
|
7
|
+
@a = BusyClass.new(1,2,3)
|
8
|
+
@b = [2,3,1]
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should not use the native max" do
|
12
|
+
lambda{@a._jes_max}.should_not raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should not use the native max_index" do
|
16
|
+
lambda{@a._jes_max_index}.should_not raise_error
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should not use the native min" do
|
20
|
+
lambda{@a._jes_min}.should_not raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should not use the native min_index" do
|
24
|
+
lambda{@a._jes_min_index}.should_not raise_error
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should not use the native default_block" do
|
28
|
+
lambda{@a._jes_default_block}.should_not raise_error
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not use the native default_block=" do
|
32
|
+
lambda{@a._jes_default_block= lambda{|e| 1} }.should_not raise_error
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not use the native sum" do
|
36
|
+
lambda{@a._jes_sum}.should_not raise_error
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should not use the native average" do
|
40
|
+
lambda{@a._jes_average}.should_not raise_error
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should not use the native variance" do
|
44
|
+
lambda{@a._jes_variance}.should_not raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not use the native standard_deviation" do
|
48
|
+
lambda{@a._jes_standard_deviation}.should_not raise_error
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should not use the native median" do
|
52
|
+
lambda{@a._jes_median}.should_not raise_error
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should not use the native categories" do
|
56
|
+
lambda{@a._jes_categories}.should_not raise_error
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not use the native is_numeric?" do
|
60
|
+
lambda{@a._jes_is_numeric?}.should_not raise_error
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should not use the native range" do
|
64
|
+
lambda{@a._jes_range}.should_not raise_error
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should not use the native set_range_class" do
|
68
|
+
lambda{@a._jes_set_range_class(FixedRange)}.should_not raise_error
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should not use the native set_range" do
|
72
|
+
lambda{@a._jes_set_range({:a => 1})}.should_not raise_error
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should not use the native dichotomize" do
|
76
|
+
lambda{@a._jes_dichotomize(2, :small, :big)}.should_not raise_error
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should not use the native count_if" do
|
80
|
+
lambda{@a._jes_count_if {|e| e == 2}}.should_not raise_error
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should not use the native category_values" do
|
84
|
+
lambda{@a._jes_category_values}.should_not raise_error
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should not use the native range_class" do
|
88
|
+
lambda{@a._jes_range_class}.should_not raise_error
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should not use the native range_as_range" do
|
92
|
+
lambda{@a._jes_range_as_range}.should_not raise_error
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should not use the native new_sort" do
|
96
|
+
lambda{@a._jes_new_sort}.should_not raise_error
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should not use the native rank" do
|
100
|
+
lambda{@a._jes_rank}.should_not raise_error
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should not use the native ordinalize" do
|
104
|
+
lambda{@a._jes_ordinalize}.should_not raise_error
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should not use the native order" do
|
108
|
+
lambda{@a._jes_order}.should_not raise_error
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should not use the native quantile" do
|
112
|
+
lambda{@a._jes_quantile}.should_not raise_error
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should not use the native cum_sum" do
|
116
|
+
lambda{@a._jes_cum_sum}.should_not raise_error
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should not use the native cum_prod" do
|
120
|
+
lambda{@a._jes_cum_prod}.should_not raise_error
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should not use the native cum_max" do
|
124
|
+
lambda{@a._jes_cum_max}.should_not raise_error
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should not use the native cum_min" do
|
128
|
+
lambda{@a._jes_cum_min}.should_not raise_error
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should not use the native product" do
|
132
|
+
lambda{@a._jes_product}.should_not raise_error
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should not use the native to_pairs" do
|
136
|
+
lambda{@a._jes_to_pairs(@b) {|a, b| a}}.should_not raise_error
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should not use the native tanimoto_pairs" do
|
140
|
+
lambda{@a._jes_tanimoto_pairs(@b)}.should_not raise_error
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should not use the native union" do
|
144
|
+
lambda{@a._jes_union(@b)}.should_not raise_error
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should not use the native intersect" do
|
148
|
+
lambda{@a._jes_intersect(@b)}.should_not raise_error
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should not use the native compliment" do
|
152
|
+
lambda{@a._jes_compliment(@b)}.should_not raise_error
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should not use the native exclusive_not" do
|
156
|
+
lambda{@a._jes_exclusive_not(@b)}.should_not raise_error
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should not use the native cartesian_product" do
|
160
|
+
lambda{@a._jes_cartesian_product(@b)}.should_not raise_error
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should not use the native sigma_pairs" do
|
164
|
+
lambda{@a._jes_sigma_pairs(@b) {|a, b| a}}.should_not raise_error
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should not use the native euclidian_distance" do
|
168
|
+
lambda{@a._jes_euclidian_distance(@b)}.should_not raise_error
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should not use the native rand_in_range" do
|
172
|
+
lambda{@a._jes_rand_in_range(1, 2)}.should_not raise_error
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should not use the native correlation" do
|
176
|
+
lambda{@a._jes_correlation(@b)}.should_not raise_error
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should not use the native yield_transpose" do
|
180
|
+
lambda{@a._jes_yield_transpose(@b)}.should_not raise_error
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should not use the native max_of_lists" do
|
184
|
+
lambda{@a._jes_max_of_lists(@b)}.should_not raise_error
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should not use the native min_of_lists" do
|
188
|
+
lambda{@a._jes_min_of_lists(@b)}.should_not raise_error
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should not use the native covariance" do
|
192
|
+
lambda{@a._jes_covariance(@b)}.should_not raise_error
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should not use the native pearson_correlation" do
|
196
|
+
lambda{@a._jes_pearson_correlation(@b)}.should_not raise_error
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should not use the native to_f!" do
|
200
|
+
lambda{@a._jes_to_f!}.should_not raise_error
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should not use the native scale!" do
|
204
|
+
lambda{@a._jes_scale!(1)}.should_not raise_error
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should not use the native scale_to_sigmoid!" do
|
208
|
+
lambda{@a._jes_scale_to_sigmoid!}.should_not raise_error
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should not use the native normalize" do
|
212
|
+
lambda{@a._jes_normalize}.should_not raise_error
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should not use the native normalize!" do
|
216
|
+
lambda{@a._jes_normalize!}.should_not raise_error
|
217
|
+
end
|
218
|
+
|
219
|
+
it "should not use the native scale_between" do
|
220
|
+
lambda{@a._jes_scale_between(6,8)}.should_not raise_error
|
221
|
+
end
|
222
|
+
|
223
|
+
it "should not use the native scale_between!" do
|
224
|
+
lambda{@a._jes_scale_between!(6,8)}.should_not raise_error
|
225
|
+
end
|
226
|
+
|
227
|
+
end
|
228
|
+
|
229
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: davidrichards-just_enumerable_stats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Richards
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-17 00:00:00 -07:00
|
13
13
|
default_executable: jes
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -30,6 +30,7 @@ files:
|
|
30
30
|
- spec/fixed_range_spec.rb
|
31
31
|
- spec/just_enumerable_stats_spec.rb
|
32
32
|
- spec/spec_helper.rb
|
33
|
+
- spec/unobtrusive_just_enumerable_stats_spec.rb
|
33
34
|
has_rdoc: true
|
34
35
|
homepage: http://github.com/davidrichards/just_enumerable_stats
|
35
36
|
licenses:
|