blob: d183a1b4925fc5a127626b82f6c2b197e08dbd0a [file] [log] [blame]
import openhtf as htf
from openhtf.util.validators import *
import numpy as np
class RelativeVariation(object):
"""Validator to verify a relative variation within a list is below a certain value"""
def __init__(self, allowed_variation=None):
if allowed_variation is None:
raise ValueError('Must specify allowed_variation')
self._allowed_variation = allowed_variation
def __call__(self, values):
# loop through each dimension
for value_ix in values:
# only look at the data, not the dimension indexes
value_i = value_ix[-1]
# check each value to ensure it doesn't exceed the mean value
mean = np.mean(value_i)
for value in value_i:
if abs(value - mean)/mean > self._allowed_variation:
print('Relative Variation Fail - %f' % (abs(value - mean)/mean))
print(value_ix[:-1])
return False
# no violation has been found - test passes
return True
relative_variation = RelativeVariation # pylint: disable=invalid-name
register(relative_variation, name='relative_variation')
class AbsoluteVariation(object):
"""Validator to verify a relative variation within a list is below a certain value"""
def __init__(self, expected_value=None, allowed_variation=None):
if expected_value is None or allowed_variation is None:
raise ValueError('Must specify expected value and allowed_variation')
self._expected_value = expected_value
self._allowed_variation = allowed_variation
def __call__(self, values):
# loop through each dimension
for value_ix in values:
# only look at the data, not the dimension indexes
value_i = value_ix[-1]
# check each value to ensure it doesn't exceed the mean value
for value in value_i:
if abs(value - self._expected_value)/self._expected_value > self._allowed_variation:
print('Absolute Variation Fail - %f' % ((value - self._expected_value)/self._expected_value))
print(value_ix[:-1])
return False
# no violation has been found - test passes
return True
absolute_variation = AbsoluteVariation # pylint: disable=invalid-name
register(absolute_variation, name='absolute_variation')
def get_criteria(criterion):
criteria_dict = {
"dc_gain" : htf.Measurement('dc_gain').in_range(minimum=50),
"phase_margin" : htf.Measurement('phase_margin').in_range(minimum=50),
"gain_margin" : htf.Measurement('gain_margin').in_range(minimum=20),
# "current_regulation_temp" : htf.Measurement('current_regulation_temp').with_validator(validator_relative_variation),
# "current_regulation_process" : htf.Measurement('current_regulation_process').with_validator(validator_absolute_variation)
"current_regulation_temp" : htf.Measurement('current_regulation_temp').relative_variation(allowed_variation=0.01),
"current_regulation_process" : htf.Measurement('current_regulation_process').absolute_variation(expected_value=5e-6, allowed_variation=0.22)
}
return criteria_dict[criterion]