Changeset 36948c92 in sasview for sansmodels/src/sans/models/test


Ignore:
Timestamp:
Apr 15, 2008 6:08:40 AM (17 years ago)
Author:
Mathieu Doucet <doucetm@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
3de85b8
Parents:
5aa3bbd
Message:

Modified to testing and modified according to testing results

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sansmodels/src/sans/models/test/testcase_generator.py

    rae3ce4e r36948c92  
    344344         
    345345        if not self.passed: 
     346            print "\nFailure:" 
    346347            print report.trace 
    347348        return self.passed 
     
    353354        @return: True if passed, False otherwise 
    354355    """ 
    355     minval = 0 
    356     maxval = 20 
     356    minval = 0.001 
     357    maxval = 1.0 
    357358    # Call run with random input 
    358359    import random, math 
     
    368369            output = model.run([input_value, 2*math.pi*random.random()])             
    369370    except ZeroDivisionError: 
    370         output = -1 
     371        print "Error evaluating model %s: %g" % (model.name, input_value) 
     372        output = None 
    371373         
    372374    #print "Eval: %g" % output 
     
    374376    # Oracle bit - just check that we have a number... 
    375377    passed = False 
    376     if math.fabs(output) >= 0:  
    377         passed = True 
     378    try: 
     379        if output != None and math.fabs(output) >= 0:  
     380            passed = True 
     381    except: 
     382        print "---> Could not compute abs val", output, model.name 
     383         
    378384     
    379385    report = ReportCard() 
     
    382388        report.n_eval_pass = 1 
    383389    else: 
    384         report.log = "Eval: bad output value %g\n" % output 
    385          
    386     report.trace = "Eval(%g) = %g %i\n" % (input_value, output, passed)     
     390        report.log = "Eval: bad output value %s\n" % str(output) 
     391         
     392    report.trace = "Eval(%g) = %s %i\n" % (input_value, str(output), passed)     
    387393    return model, report 
    388394 
     
    395401    import random, math 
    396402    minval = 1 
    397     maxval = 50 
     403    maxval = 5 
    398404     
    399405    # Choose a parameter to change 
     
    407413    p_name  = keys[i_param] 
    408414     
    409     # Chose a value 
     415    # Choose a value 
     416    # Check for min/max 
     417    if hasattr(model, "details"): 
     418        if model.details.has_key(p_name): 
     419            if model.details[p_name][1] != None: 
     420                minval = model.details[p_name][1] 
     421            if model.details[p_name][2] != None: 
     422                maxval = model.details[p_name][2] 
     423        elif model.other.details.has_key(p_name): 
     424            if model.other.details[p_name][1] != None: 
     425                minval = model.other.details[p_name][1] 
     426            if model.other.details[p_name][2] != None: 
     427                maxval = model.other.details[p_name][2] 
     428        elif model.operateOn.details.has_key(p_name): 
     429            if model.operateOn.details[p_name][1] != None: 
     430                minval = model.operateOn.details[p_name][1] 
     431            if model.operateOn.details[p_name][2] != None: 
     432                maxval = model.operateOn.details[p_name][2] 
     433             
    410434    input_val = random.random()*(maxval-minval)+minval 
    411435    model.setParam(p_name, input_val) 
     
    613637     
    614638    try: 
    615         value2 = tmp.run(1) 
     639        value2 = tmp.run(1.1 * (1.0 + random())) 
    616640        value2 = float(value2) 
    617641    except: 
     642        value2 = None 
    618643        passed = False 
    619644     
     
    628653        report.log = "Sub: bad output from composite model\n" 
    629654 
    630     report.trace = "Sub %s (%g - %g = %g) %i\n" % \ 
     655    report.trace = "Sub %s (%g - %g = %s) %i\n" % \ 
    631656        (model.name, model.run(1), \ 
    632          sub_model.run(1), value2, passed)                 
     657         sub_model.run(1), str(value2), passed)                 
    633658    return tmp, report 
    634659 
     
    647672    # Oracle bit 
    648673    passed = False 
    649  
     674     
     675    from random import random 
     676    input_val = 1.1 * (1.0 + random()) 
     677    v1 = None 
     678    v2 = None 
    650679    try: 
    651         value2 = tmp.run(1) 
     680        v1 = mul_model.run(input_val) 
     681        v2 = model.run(input_val) 
     682        value2 = tmp.run(input_val) 
    652683        value2 = float(value2) 
    653     except: 
    654         passed = False 
     684    except ZeroDivisionError: 
     685        value2 = None 
    655686     
    656687    # If we made it this far, we have a float 
     
    664695        report.log = "Mul: bad output from composite model\n" 
    665696         
    666     report.trace = "Mul %s (%g * %g = %g) %i\n" % \ 
    667       (model.name, model.run(1), \ 
    668        mul_model.run(1), value2, passed)                 
     697    report.trace = "Mul %s (%s * %s = %s) %i\n" % \ 
     698      (model.name, str(v1), str(v2), str(value2), passed)                 
    669699    return tmp, report 
    670700 
     
    678708    #div_model = factory.getModel("SphereModel") 
    679709    #div_model = factory.getModel(randomModel()) 
    680     div_model = getRandomModelObject() 
    681      
     710 
     711    from random import random 
     712    input_val = 1.5 * random() 
     713     
     714    # Find a model that will not evaluate to zero 
     715    # at the input value 
     716    try_again = True 
     717    while try_again: 
     718        div_model = getRandomModelObject() 
     719        try: 
     720            v2 = div_model.run(input_val) 
     721            try_again = False 
     722        except: 
     723            pass 
     724         
    682725    tmp = model / div_model 
    683726     
     
    685728    passed = False 
    686729     
     730    v1 = None 
     731    v2 = None 
    687732    try: 
    688         from random import random 
    689         input_val = 1.5 * random() 
    690         if div_model.run(input_val)==0: 
    691             print "Skipped (DIV) because denominator evaluated to zero" 
    692         else: 
     733         
     734        # Check individual models against bad combinations, 
     735        # which happen from time to time given that all  
     736        # parameters are random 
     737        try: 
     738            v2 = div_model.run(input_val) 
     739            v1 = model.run(input_val) 
    693740            value2 = tmp.run(input_val) 
    694741            value2 = float(value2) 
     742        except ZeroDivisionError: 
     743            value2 = None 
    695744    except: 
    696745        passed = False 
     
    706755        report.log = "Div: bad output from composite model\n" 
    707756         
    708     report.trace = "Div %s (%g / %g = %g) %i\n" % \ 
    709         (model.name, model.run(1), \ 
    710          div_model.run(1), value2, passed)                 
     757    report.trace = "Div %s/%s (%g) = %s / %s = %s %i\n" % \ 
     758      (model.name, div_model.name, input_val, str(v1), str(v2), str(value2), passed)                 
    711759    return tmp, report 
    712760 
     
    715763    #print randomModel() 
    716764    g = TestCaseGenerator() 
    717     g.generateAndRun(2000) 
     765    g.generateAndRun(20000) 
    718766     
    719767    #t = TestCase(filename = "error_1.17721e+009.xml") 
Note: See TracChangeset for help on using the changeset viewer.