summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormguetlein <martin.guetlein@gmail.com>2011-02-07 10:09:29 +0100
committermguetlein <martin.guetlein@gmail.com>2011-02-07 10:09:29 +0100
commit6e73d2f1c60382ed9f9a54b4fe6677cf767dc8db (patch)
treee21782699607172005cf1e5857487e65f5f715cc
parent9407e4f481bc2a7c5d1daa3c42a0123c5fb5fbbf (diff)
activate copy of old cv dataset folds
-rwxr-xr-xreport/validation_access.rb4
-rwxr-xr-xtest/test_examples.rb8
-rw-r--r--test/unit_test.rb5
-rwxr-xr-xvalidation/validation_service.rb59
4 files changed, 47 insertions, 29 deletions
diff --git a/report/validation_access.rb b/report/validation_access.rb
index 03ec0e5..83ca144 100755
--- a/report/validation_access.rb
+++ b/report/validation_access.rb
@@ -61,7 +61,7 @@ class Reports::ValidationDB < Reports::ValidationAccess
cv = nil
raise OpenTox::NotAuthorizedError.new "Not authorized: GET "+u.to_s if
- subjectid and !OpenTox::Authorization.authorized?(u,"GET",subjectid)
+ AA_SERVER and !OpenTox::Authorization.authorized?(u,"GET",subjectid)
# begin
# #cv = Lib::Crossvalidation.find( cv_id )
# rescue => ex
@@ -87,7 +87,7 @@ class Reports::ValidationDB < Reports::ValidationAccess
(validation_id.to_i > 0 || validation_id.to_s=="0" )
v = nil
raise OpenTox::NotAuthorizedError.new "Not authorized: GET "+uri.to_s if
- subjectid and !OpenTox::Authorization.authorized?(uri,"GET",subjectid)
+ AA_SERVER and !OpenTox::Authorization.authorized?(uri,"GET",subjectid)
v = Lib::Validation.get(validation_id)
raise OpenTox::NotFoundError.new "validation with id "+validation_id.to_s+" not found" unless v
raise OpenTox::BadRequestError.new "validation with id "+validation_id.to_s+" is not finished yet" unless v.finished
diff --git a/test/test_examples.rb b/test/test_examples.rb
index 29fe8cd..e7a07ca 100755
--- a/test/test_examples.rb
+++ b/test/test_examples.rb
@@ -310,9 +310,13 @@ module ValidationExamples
class LR_AmbitCacoModel < ModelValidation
def initialize
- @model_uri = "http://apps.ideaconsult.net:8080/ambit2/model/33"
- @test_dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/R545"
+# @model_uri = "http://apps.ideaconsult.net:8080/ambit2/model/33"
+# @test_dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/R545"
#@prediction_feature=http://apps.ideaconsult.net:8080/ambit2/feature/22200
+
+ @model_uri = "https://ambit.uni-plovdiv.bg:8443/ambit2/model/33"
+ @test_dataset_uri = "https://ambit.uni-plovdiv.bg:8443/ambit2/dataset/R545"
+
end
end
diff --git a/test/unit_test.rb b/test/unit_test.rb
index d76e156..8474dd2 100644
--- a/test/unit_test.rb
+++ b/test/unit_test.rb
@@ -112,11 +112,14 @@ class ValidationTest < Test::Unit::TestCase
assert_equal report.uri,report3.uri
@report = report
end
+
+ ################### utils and overrides ##########################
def app
Sinatra::Application
end
+ # checks RestCallError type
def assert_rest_call_error( ex )
if ex==OpenTox::NotAuthorizedError and @@subjectid==nil
puts "AA disabled: skipping test for not authorized"
@@ -133,12 +136,12 @@ class ValidationTest < Test::Unit::TestCase
end
end
+ # hack to have a global_setup and global_teardown
def teardown
if((@@expected_test_count-=1) == 0)
global_teardown
end
end
-
def setup
unless defined?@@expected_test_count
@@expected_test_count = (self.class.instance_methods.reject{|method| method[0..3] != 'test'}).length
diff --git a/validation/validation_service.rb b/validation/validation_service.rb
index 417c72a..0ef01ae 100755
--- a/validation/validation_service.rb
+++ b/validation/validation_service.rb
@@ -273,10 +273,13 @@ module Validation
end
# creates the cv folds
- # PENDING copying datasets of an equal (same dataset, same params) crossvalidation is disabled for now
def create_cv_datasets( prediction_feature, task=nil )
-
- create_new_cv_datasets( prediction_feature, task ) #unless copy_cv_datasets( prediction_feature )
+ if copy_cv_datasets( prediction_feature )
+ # dataset folds of a previous crossvalidaiton could be used
+ task.progress(100) if task
+ else
+ create_new_cv_datasets( prediction_feature, task )
+ end
end
# executes the cross-validation (build models and validates them)
@@ -307,30 +310,38 @@ module Validation
# returns true if successfull, false otherwise
def copy_cv_datasets( prediction_feature )
- equal_cvs = Crossvalidation.all( { :dataset_uri => self.dataset_uri, :num_folds => self.num_folds,
- :stratified => self.stratified, :random_seed => self.random_seed } ).reject{ |cv| cv.id == self.id }
- return false if equal_cvs.size == 0
- cv = equal_cvs[0]
- Validation.all( :crossvalidation_id => cv.id ).each do |v|
-
- if self.stratified and v.prediction_feature != prediction_feature
- return false;
+ cvs = Crossvalidation.all( {
+ :dataset_uri => self.dataset_uri,
+ :num_folds => self.num_folds,
+ :stratified => self.stratified,
+ :random_seed => self.random_seed,
+ :finished => true} ).reject{ |cv| cv.id == self.id }
+ cvs.each do |cv|
+ next if AA_SERVER and !OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"GET",self.subjectid)
+ tmp_val = []
+ Validation.all( :crossvalidation_id => cv.id ).each do |v|
+ break unless
+ v.prediction_feature == prediction_feature and
+ OpenTox::Dataset.exist?(v.training_dataset_uri,self.subjectid) and
+ OpenTox::Dataset.exist?(v.test_dataset_uri,self.subjectid)
+ #make sure self.id is set
+ self.save if self.new?
+ tmp_val << { :validation_type => "crossvalidation",
+ :training_dataset_uri => v.training_dataset_uri,
+ :test_dataset_uri => v.test_dataset_uri,
+ :test_target_dataset_uri => self.dataset_uri,
+ :crossvalidation_id => self.id,
+ :crossvalidation_fold => v.crossvalidation_fold,
+ :prediction_feature => prediction_feature,
+ :algorithm_uri => self.algorithm_uri }
end
- unless (OpenTox::Dataset.find(v.training_dataset_uri) and
- OpenTox::Dataset.find(v.test_dataset_uri))
- LOGGER.debug "dataset uris obsolete, aborting copy of datasets"
- Validation.all( :crossvalidation_id => self.id ).each{ |v| v.delete }
- return false
+ if tmp_val.size == self.num_folds
+ @tmp_validations = tmp_val
+ LOGGER.debug "copied dataset uris from cv "+cv.crossvalidation_uri.to_s #+":\n"+tmp_val.inspect
+ return true
end
- validation = Validation.new :validation_type => "crossvalidation",
- :crossvalidation_id => self.id,
- :crossvalidation_fold => v.crossvalidation_fold,
- :training_dataset_uri => v.training_dataset_uri,
- :test_dataset_uri => v.test_dataset_uri,
- :algorithm_uri => self.algorithm_uri
end
- LOGGER.debug "copied dataset uris from cv "+cv.crossvalidation_uri.to_s
- return true
+ false
end
# creates cv folds (training and testdatasets)