diff options
author | mguetlein <martin.guetlein@gmail.com> | 2011-04-08 15:39:55 +0200 |
---|---|---|
committer | mguetlein <martin.guetlein@gmail.com> | 2011-05-03 11:46:30 +0200 |
commit | 78751b778a5dabfac142a017fc1e0d8d1c045acd (patch) | |
tree | 6257c90d38d1082637a65e3846944bd313464edd /validation | |
parent | d5fe870fa184ef44390a0311664b7813360a44f5 (diff) |
switch from datamapper/mysql to redis (sqlite for qmrf)
Diffstat (limited to 'validation')
-rwxr-xr-x | validation/validation_application.rb | 63 | ||||
-rwxr-xr-x | validation/validation_format.rb | 21 | ||||
-rwxr-xr-x | validation/validation_service.rb | 53 | ||||
-rwxr-xr-x | validation/validation_test.rb | 20 |
4 files changed, 84 insertions, 73 deletions
diff --git a/validation/validation_application.rb b/validation/validation_application.rb index e07acf0..4ef05a9 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -10,7 +10,8 @@ require 'validation/validation_service.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" #uri_list = Validation::Crossvalidation.all.collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" - uri_list = Lib::DataMapperUtil.all(Validation::Crossvalidation,params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" + #uri_list = Lib::DataMapperUtil.all(Validation::Crossvalidation,params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" + uri_list = Validation::Crossvalidation.all.collect{|cv| cv.crossvalidation_uri}.join("\n") + "\n" #uri_list = Validation::Crossvalidation.find_like(params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ @@ -41,7 +42,7 @@ post '/crossvalidation/?' do cv_params = { :dataset_uri => params[:dataset_uri], :algorithm_uri => params[:algorithm_uri] } [ :num_folds, :random_seed, :stratified ].each{ |sym| cv_params[sym] = params[sym] if params[sym] } - cv = Validation::Crossvalidation.new cv_params + cv = Validation::Crossvalidation.create cv_params cv.subjectid = @subjectid cv.perform_cv( params[:prediction_feature], params[:algorithm_params], task ) cv.crossvalidation_uri @@ -62,7 +63,7 @@ post '/crossvalidation/cleanup/?' do deleted << cv.crossvalidation_uri #Validation::Crossvalidation.delete(cv.id) cv.subjectid = @subjectid - cv.delete + cv.delete_crossvalidation #end end LOGGER.info "crossvalidation cleanup, deleted "+deleted.size.to_s+" cvs" @@ -124,13 +125,19 @@ get '/crossvalidation/:id/statistics' do raise OpenTox::BadRequestError.new "Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished Lib::MergeObjects.register_merge_attributes( Validation::Validation, - Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:date,:validation_uri,:crossvalidation_uri]) unless + Validation::VAL_MERGE_AVG,Validation::VAL_MERGE_SUM,Validation::VAL_MERGE_GENERAL-[:date,:validation_uri,:crossvalidation_uri]) unless Lib::MergeObjects.merge_attributes_registered?(Validation::Validation) #v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) - v = Lib::MergeObjects.merge_array_objects( Validation::Validation.all( :crossvalidation_id => params[:id] ) ) + # convert ohm:set into array, as ohm:set[0]=nil(!) + vals = Validation::Validation.find( :crossvalidation_id => params[:id] ).collect{|x| x} +# LOGGER.debug vals.collect{|v| v.validation_uri}.join("\n") +# LOGGER.debug vals.size +# LOGGER.debug vals.class + + v = Lib::MergeObjects.merge_array_objects( vals ) v.created_at = nil - v.id = nil + #v.id = nil case request.env['HTTP_ACCEPT'].to_s when /text\/html/ @@ -159,7 +166,7 @@ delete '/crossvalidation/:id/?' do cv = Validation::Crossvalidation.get(params[:id]) cv.subjectid = @subjectid raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." unless cv - cv.delete + cv.delete_crossvalidation end #get '/crossvalidation/:id/validations' do @@ -208,8 +215,8 @@ get '/?' do LOGGER.info "list all validations, params: "+params.inspect #uri_list = Validation::Validation.find_like(params).collect{ |v| v.validation_uri }.join("\n")+"\n" #uri_list = Validation::Validation.all(params).collect{ |v| v.validation_uri }.join("\n")+"\n" - uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" - + #uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.all.collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -241,7 +248,7 @@ post '/test_set_validation' do LOGGER.info "creating test-set-validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] task = OpenTox::Task.create( "Perform test-set-validation", url_for("/", :full) ) do |task| #, params - v = Validation::Validation.new :validation_type => "test_set_validation", + v = Validation::Validation.create :validation_type => "test_set_validation", :model_uri => params[:model_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:test_target_dataset_uri], @@ -262,8 +269,9 @@ get '/test_set_validation' do #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "test_set_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" #uri_list = Validation::Validation.all( :validation_type => "test_set_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" - params[:validation_type] = "test_set_validation" - uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + #params[:validation_type] = "test_set_validation" + #uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.find(:validation_type => "test_set_validation").collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -285,7 +293,7 @@ post '/training_test_validation/?' do LOGGER.info "creating training-test-validation "+params.inspect if params[:algorithm_uri] and params[:training_dataset_uri] and params[:test_dataset_uri] and params[:prediction_feature] and !params[:model_uri] task = OpenTox::Task.create( "Perform training-test-validation", url_for("/", :full) ) do |task| #, params - v = Validation::Validation.new :validation_type => "training_test_validation", + v = Validation::Validation.create :validation_type => "training_test_validation", :algorithm_uri => params[:algorithm_uri], :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], @@ -306,8 +314,9 @@ get '/training_test_validation' do LOGGER.info "list all training-test-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" #uri_list = Validation::Validation.all( :validation_type => "training_test_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" - params[:validation_type] = "training_test_validation" - uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + #params[:validation_type] = "training_test_validation" + #uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.find(:validation_type => "training_test_validation").collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -340,7 +349,7 @@ post '/bootstrapping' do params.merge!( Validation::Util.bootstrapping( params[:dataset_uri], params[:prediction_feature], @subjectid, params[:random_seed], OpenTox::SubTask.create(task,0,33)) ) - v = Validation::Validation.new :validation_type => "bootstrapping", + v = Validation::Validation.create :validation_type => "bootstrapping", :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] @@ -355,8 +364,9 @@ get '/bootstrapping' do LOGGER.info "list all bootstrapping-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "bootstrapping" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" #uri_list = Validation::Validation.all( :validation_type => "bootstrapping" ).collect{ |v| v.validation_uri }.join("\n")+"\n" - params[:validation_type] = "bootstrapping" - uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + #params[:validation_type] = "bootstrapping" + #uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.find(:validation_type => "bootstrapping").collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -388,7 +398,7 @@ post '/training_test_split' do params.merge!( Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], @subjectid, params[:split_ratio], params[:random_seed], OpenTox::SubTask.create(task,0,33))) - v = Validation::Validation.new :validation_type => "training_test_split", + v = Validation::Validation.create :validation_type => "training_test_split", :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], @@ -406,8 +416,9 @@ get '/training_test_split' do LOGGER.info "list all training-test-split-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_split" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" #uri_list = Validation::Validation.all( :validation_type => "training_test_split" ).collect{ |v| v.validation_uri }.join("\n")+"\n" - params[:validation_type] = "training_test_split" - uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + #params[:validation_type] = "training_test_split" + #uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.find(:validation_type => "training_test_split").collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -440,7 +451,7 @@ post '/cleanup/?' do deleted << val.validation_uri #Validation::Validation.delete(val.id) val.subjectid = @subjectid - val.delete + val.delete_validation end LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" deleted.join("\n")+"\n" @@ -463,7 +474,7 @@ post '/validate_datasets' do params[:validation_type] = "validate_datasets" if params[:model_uri] - v = Validation::Validation.new params + v = Validation::Validation.create params v.subjectid = @subjectid v.compute_validation_stats_with_model(nil,false,task) else @@ -475,7 +486,7 @@ post '/validate_datasets' do predicted_feature = params.delete("predicted_feature") feature_type = "classification" if params.delete("classification")!=nil feature_type = "regression" if params.delete("regression")!=nil - v = Validation::Validation.new params + v = Validation::Validation.create params v.subjectid = @subjectid v.compute_validation_stats(feature_type,predicted_feature,nil,nil,false,task) end @@ -532,7 +543,7 @@ get '/:id' do # rescue ActiveRecord::RecordNotFound => ex # raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." # end - validation = Validation::Validation.get(params[:id]) + validation = Validation::Validation[params[:id]] raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." unless validation case request.env['HTTP_ACCEPT'].to_s @@ -566,5 +577,5 @@ delete '/:id' do validation.subjectid = @subjectid raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." unless validation content_type "text/plain" - validation.delete + validation.delete_validation end
\ No newline at end of file diff --git a/validation/validation_format.rb b/validation/validation_format.rb index f69ceac..6fdea61 100755 --- a/validation/validation_format.rb +++ b/validation/validation_format.rb @@ -4,15 +4,15 @@ require "lib/format_util.rb" module Validation # adding to_yaml and to_rdf functionality to validation - class Validation < Lib::Validation + class Validation # builds hash for valiation, as the internal presentation differs from the owl-object # the hash is directly printed in to_yaml, or added to the owl-structure def get_content_as_hash() h = {} - (Lib::VAL_PROPS - [:validation_uri]).each do |p| - h[p] = self.send(p) + (VAL_PROPS - [:validation_uri]).each do |p| + h[p] = self.send(p.to_s) end if crossvalidation_id!=nil cv = {:type => OT.CrossvalidationInfo} @@ -22,13 +22,14 @@ module Validation h[:crossvalidation_info] = cv end if classification_statistics - raise "classification_statistics is no has: "+classification_statistics.class.to_s unless classification_statistics.is_a?(Hash) + raise "classification_statistics is no hash: "+classification_statistics.class.to_s+" -> '"+ + classification_statistics.to_s+"'" unless classification_statistics.is_a?(Hash) clazz = { :type => OT.ClassificationStatistics } - Lib::VAL_CLASS_PROPS_SINGLE.each{ |p| clazz[p] = classification_statistics[p] } + VAL_CLASS_PROPS_SINGLE.each{ |p| clazz[p] = classification_statistics[p] } # transpose results per class class_values = {} - Lib::VAL_CLASS_PROPS_PER_CLASS.each do |p| + VAL_CLASS_PROPS_PER_CLASS.each do |p| raise "missing classification statitstics: "+p.to_s+" "+classification_statistics.inspect if classification_statistics[p]==nil classification_statistics[p].each do |class_value, property_value| class_values[class_value] = {:class_value => class_value, :type => OT.ClassValueStatistics} unless class_values.has_key?(class_value) @@ -54,7 +55,7 @@ module Validation h[:classification_statistics] = clazz elsif regression_statistics regr = {:type => OT.RegressionStatistics } - Lib::VAL_REGR_PROPS.each{ |p| regr[p] = regression_statistics[p]} + VAL_REGR_PROPS.each{ |p| regr[p] = regression_statistics[p]} h[:regression_statistics] = regr end return h @@ -72,17 +73,17 @@ module Validation end - class Crossvalidation < Lib::Crossvalidation + class Crossvalidation def get_content_as_hash h = {} - (Lib::CROSS_VAL_PROPS_REDUNDANT - [:crossvalidation_uri]).each do |p| + (CROSS_VAL_PROPS_REDUNDANT - [:crossvalidation_uri]).each do |p| h[p] = self.send(p) end v = [] #Validation.find( :all, :conditions => { :crossvalidation_id => self.id } ).each do |val| - Validation.all( :crossvalidation_id => self.id ).each do |val| + Validation.find( :crossvalidation_id => self.id ).each do |val| v.push( val.validation_uri.to_s ) end h[:validation_uris] = v diff --git a/validation/validation_service.rb b/validation/validation_service.rb index a1efba5..93c167f 100755 --- a/validation/validation_service.rb +++ b/validation/validation_service.rb @@ -30,7 +30,7 @@ end module Validation - class Validation < Lib::Validation + class Validation # constructs a validation object, Rsets id und uri #def initialize( params={} ) @@ -43,7 +43,7 @@ module Validation # deletes a validation # PENDING: model and referenced datasets are deleted as well, keep it that way? - def delete( delete_all=true ) + def delete_validation( delete_all=true ) if (delete_all) to_delete = [:model_uri, :training_dataset_uri, :test_dataset_uri, :test_target_dataset_uri, :prediction_dataset_uri ] case self.validation_type @@ -72,7 +72,7 @@ module Validation end end end - self.destroy + self.delete if (subjectid) begin res = OpenTox::Authorization.delete_policies_from_uri(validation_uri, subjectid) @@ -222,17 +222,13 @@ module Validation # :percent_unpredicted => prediction.percent_unpredicted, # :finished => true} # self.save! - self.attributes= {:num_instances => prediction.num_instances, + self.update :num_instances => prediction.num_instances, :num_without_class => prediction.num_without_class, :percent_without_class => prediction.percent_without_class, :num_unpredicted => prediction.num_unpredicted, :percent_unpredicted => prediction.percent_unpredicted, - :finished => true} - begin - self.save - rescue DataMapper::SaveFailureError => e - raise "could not save validation: "+e.resource.errors.inspect - end + :finished => true + raise unless self.valid? end task.progress(100) if task @@ -240,7 +236,7 @@ module Validation end end - class Crossvalidation < Lib::Crossvalidation + class Crossvalidation # constructs a crossvalidation, id and uri are set #def initialize( params={} ) @@ -262,12 +258,12 @@ module Validation end # deletes a crossvalidation, all validations are deleted as well - def delete - Validation.all(:crossvalidation_id => self.id).each do |v| + def delete_crossvalidation + Validation.find(:crossvalidation_id => self.id).each do |v| v.subjectid = self.subjectid - v.delete + v.delete_validation end - self.destroy + self.delete if (subjectid) begin res = OpenTox::Authorization.delete_policies_from_uri(crossvalidation_uri, subjectid) @@ -281,6 +277,9 @@ module Validation # creates the cv folds def create_cv_datasets( prediction_feature, task=nil ) + self.random_seed = 1 unless self.random_seed + self.num_folds = 10 unless self.num_folds + self.stratified = false unless self.stratified if copy_cv_datasets( prediction_feature ) # dataset folds of a previous crossvalidaiton could be used task.progress(100) if task @@ -296,7 +295,7 @@ module Validation i = 0 task_step = 100 / self.num_folds.to_f; @tmp_validations.each do | val | - validation = Validation.new val + validation = Validation.create val validation.subjectid = self.subjectid validation.validate_algorithm( algorithm_params, OpenTox::SubTask.create(task, i * task_step, ( i + 1 ) * task_step) ) @@ -316,8 +315,7 @@ module Validation # copies datasets from an older crossvalidation on the same dataset and the same folds # returns true if successfull, false otherwise def copy_cv_datasets( prediction_feature ) - - cvs = Crossvalidation.all( { + cvs = Crossvalidation.find( { :dataset_uri => self.dataset_uri, :num_folds => self.num_folds, :stratified => self.stratified, @@ -332,7 +330,7 @@ module Validation 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? + #self.save if self.new? tmp_val << { :validation_type => "crossvalidation", :training_dataset_uri => v.training_dataset_uri, :test_dataset_uri => v.test_dataset_uri, @@ -354,16 +352,14 @@ module Validation # creates cv folds (training and testdatasets) # stores uris in validation objects def create_new_cv_datasets( prediction_feature, task = nil ) - - raise "random seed not set "+self.inspect unless self.random_seed LOGGER.debug "creating datasets for crossvalidation" orig_dataset = OpenTox::Dataset.find(self.dataset_uri,self.subjectid) raise OpenTox::NotFoundError.new "Dataset not found: "+self.dataset_uri.to_s unless orig_dataset shuffled_compounds = orig_dataset.compounds.shuffle( self.random_seed ) - unless self.stratified - split_compounds = shuffled_compounds.chunk( self.num_folds ) + unless self.stratified + split_compounds = shuffled_compounds.chunk( self.num_folds.to_i ) else class_compounds = {} # "inactive" => compounds[], "active" => compounds[] .. shuffled_compounds.each do |c| @@ -406,7 +402,7 @@ module Validation @tmp_validations = [] - (1..self.num_folds).each do |n| + (1..self.num_folds.to_i).each do |n| datasetname = 'cv'+self.id.to_s + #'_d'+orig_dataset.name.to_s + @@ -418,7 +414,7 @@ module Validation test_compounds = [] train_compounds = [] - (1..self.num_folds).each do |nn| + (1..self.num_folds.to_i).each do |nn| compounds = split_compounds.at(nn-1) if n == nn @@ -428,7 +424,7 @@ module Validation end end - raise "internal error, num test compounds not correct" unless (shuffled_compounds.size/self.num_folds - test_compounds.size).abs <= 1 + raise "internal error, num test compounds not correct" unless (shuffled_compounds.size/self.num_folds.to_i - test_compounds.size).abs <= 1 raise "internal error, num train compounds not correct" unless shuffled_compounds.size - test_compounds.size == train_compounds.size LOGGER.debug "training set: "+datasetname+"_train, compounds: "+train_compounds.size.to_s @@ -442,7 +438,7 @@ module Validation { DC.title => datasetname + '_test', DC.creator => source }, self.subjectid ).uri #make sure self.id is set - self.save if self.new? + #self.save if self.new? tmp_validation = { :validation_type => "crossvalidation", :training_dataset_uri => train_dataset_uri, :test_dataset_uri => test_dataset_uri, @@ -551,9 +547,10 @@ module Validation # splits a dataset into test and training dataset # returns map with training_dataset_uri and test_dataset_uri def self.train_test_dataset_split( orig_dataset_uri, prediction_feature, subjectid, split_ratio=nil, random_seed=nil, task=nil ) - split_ratio=0.67 unless split_ratio + split_ratio = split_ratio.to_f random_seed=1 unless random_seed + random_seed = random_seed.to_i orig_dataset = OpenTox::Dataset.find orig_dataset_uri, subjectid orig_dataset.load_all subjectid diff --git a/validation/validation_test.rb b/validation/validation_test.rb index ffb25c4..efa8ad5 100755 --- a/validation/validation_test.rb +++ b/validation/validation_test.rb @@ -184,13 +184,13 @@ class ValidationTest < Test::Unit::TestCase #ambit_service = "https://ambit.uni-plovdiv.bg:8443/ambit2" #https%3A%2F%2Fambit.uni-plovdiv.bg%3A8443%2Fambit2 - + # post "/validate_datasets",{ -# :test_dataset_uri=>ambit_service+"/dataset/R401577?max=50", -# :prediction_dataset_uri=>ambit_service+"/dataset/R401577?max=50&feature_uris[]="+CGI.escape(ambit_service)+"%2Fmodel%2F35194%2Fpredicted", -# #:test_target_dataset_uri=>ambit_service+"/dataset/R401560", -# :prediction_feature=>ambit_service+"/feature/26221", -# :predicted_feature=>ambit_service+"/feature/218699", +# :test_dataset_uri=>"http://local-ot/dataset/94", +# :prediction_dataset_uri=>'http://local-ot/dataset/96', +# :test_target_dataset_uri=>'http://local-ot/dataset/92', +# :prediction_feature=>'http://local-ot/dataset/92/feature/Hamster%20Carcinogenicity', +# :predicted_feature=>"", # :classification=>"true", # :subjectid=>SUBJECTID} # #:model_uri=>"http://local-ot/model/31"} @@ -199,8 +199,8 @@ class ValidationTest < Test::Unit::TestCase # uri = last_response.body # val = wait_for_task(uri) # puts val -# #get "/"+val.split("/")[-1] - +# get "/"+val.split("/")[-1] +# puts last_response.body # d = OpenTox::Dataset.find("https://ambit.uni-plovdiv.bg:8443/ambit2/dataset/R545",SUBJECTID) # puts d.compounds.inspect @@ -257,7 +257,9 @@ class ValidationTest < Test::Unit::TestCase #delete "/1",:subjectid=>SUBJECTID - run_test("19i") + prepare_examples() + + #run_test("1a") #,{:validation_uri => "http://local-ot/validation/crossvalidation/1"}) #run_test("3a","http://local-ot/validation/crossvalidation/4") #run_test("3b","http://local-ot/validation/crossvalidation/3") |