# Path: src/openbandparams/iii_v_alloy.py
# class IIIVAlloy(Alloy):
#     '''
#     The base class for all III-V alloys.
#     '''
#     
#     @method_parameter(dependencies=['CBO'], units='eV')
#     def electron_affinity(self, **kwargs):
#         return 4.66-self.CBO(**kwargs)
# 
# Path: src/openbandparams/parameter.py
# def method_parameter(dependencies, units,
#                      aliases=[], references=[]):
#     def decorator(method):
#         '''
#         Instead of returning a function like most decorators, this returns
#         a MethodParameter, which AlloyType moves to the `class_parameters`
#         dictionary. At instantiation, the `class_parameters` are added
#         to the `parameters` dictionary, unless a `Parameter` with the same
#         name has already been added.
#         '''
#         name = method.func_name
#         return MethodParameter(name, method, dependencies, units,
#                                aliases, references)
#     return decorator


from .iii_v_alloy import IIIVAlloy
from .parameter import method_parameter
from .references import arent_1989, vurgaftman_2001
    
    @method_parameter(dependencies=['CBO', 'CBO_strain_shift'],
                      units='eV')
    def CBO(self, **kwargs):
        '''
        Returns the strain-shifted conduction band offset (CBO), assuming
        the strain affects all conduction band valleys equally.
        '''
        return self.unstrained.CBO(**kwargs) + self.CBO_strain_shift(**kwargs)
    
    @method_parameter(dependencies=['CBO_Gamma', 'CBO_strain_shift'],
                      units='eV')
    def CBO_Gamma(self, **kwargs):
        '''
        Returns the strain-shifted Gamma-valley conduction band offset (CBO),
        assuming the strain affects all conduction band valleys equally.
        '''
        return (self.unstrained.CBO_Gamma(**kwargs) +
                self.CBO_strain_shift(**kwargs))
    
    @method_parameter(dependencies=['CBO_L', 'CBO_strain_shift'],
                      units='eV')
    def CBO_L(self, **kwargs):
        '''
        Returns the strain-shifted L-valley conduction band offset (CBO),
        assuming the strain affects all conduction band valleys equally.
        '''
        return (self.unstrained.CBO_L(**kwargs) +
                self.CBO_strain_shift(**kwargs))
    

# Path: src/openbandparams/iii_v_alloy.py
# class IIIVAlloy(Alloy):
#     '''
#     The base class for all III-V alloys.
#     '''
#     
#     @method_parameter(dependencies=['CBO'], units='eV')
#     def electron_affinity(self, **kwargs):
#         return 4.66-self.CBO(**kwargs)
# 
# Path: src/openbandparams/parameter.py
# def method_parameter(dependencies, units,
#                      aliases=[], references=[]):
#     def decorator(method):
#         '''
#         Instead of returning a function like most decorators, this returns
#         a MethodParameter, which AlloyType moves to the `class_parameters`
#         dictionary. At instantiation, the `class_parameters` are added
#         to the `parameters` dictionary, unless a `Parameter` with the same
#         name has already been added.
#         '''
#         name = method.func_name
#         return MethodParameter(name, method, dependencies, units,
#                                aliases, references)
#     return decorator


# Path: src/openbandparams/iii_v_zinc_blende_strained.py
from .iii_v_alloy import IIIVAlloy
from .parameter import method_parameter
from .references import arent_1989, vurgaftman_2001

    
    @method_parameter(dependencies=['CBO', 'CBO_strain_shift'],
                      units='eV')
    def CBO(self, **kwargs):
        '''
        Returns the strain-shifted conduction band offset (CBO), assuming
        the strain affects all conduction band valleys equally.
        '''
        return self.unstrained.CBO(**kwargs) + self.CBO_strain_shift(**kwargs)
    
    @method_parameter(dependencies=['CBO_Gamma', 'CBO_strain_shift'],
                      units='eV')
    def CBO_Gamma(self, **kwargs):
        '''
        Returns the strain-shifted Gamma-valley conduction band offset (CBO),
        assuming the strain affects all conduction band valleys equally.
        '''
        return (self.unstrained.CBO_Gamma(**kwargs) +
                self.CBO_strain_shift(**kwargs))
    
    @method_parameter(dependencies=['CBO_L', 'CBO_strain_shift'],
                      units='eV')
    def CBO_L(self, **kwargs):
        '''
        Returns the strain-shifted L-valley conduction band offset (CBO),
        assuming the strain affects all conduction band valleys equally.
        '''
        return (self.unstrained.CBO_L(**kwargs) +
                self.CBO_strain_shift(**kwargs))
    

    @method_parameter(dependencies=['CBO_X', 'CBO_strain_shift'],