'maps the genotypic input argument into the phenotypic space,
boundaries are only applied if argument ``bounds is not None``, see
help for class `GenoPheno`'

def pheno(self, x, bounds=None, copy=True, copy_always=False):

    if (copy_always and (not copy)):
        raise ValueError((((('arguments    copy_always=' + str(copy_always)) + '    and    copy=') + str(copy)) + '    have    inconsistent    values'))
    if (self.isidentity and (bounds in (None, [None, None], (None, None)))):
        return (x if (not copy_always) else array(x, copy=copy_always))
    if (self.fixed_values is None):
        y = array(x, copy=copy)
    else:
        y = list(x)
        for i in sorted(self.fixed_values.keys()):
            y.insert(i, self.fixed_values[i])
        y = array(y, copy=False)
    if (self.scales is not 1):
        y *= self.scales
    if (self.typical_x is not 0):
        y += self.typical_x
    if (self.tf_pheno is not None):
        y = array(self.tf_pheno(y), copy=False)
    if (bounds is not None):
        y = self.into_bounds(y, bounds)
    if (self.fixed_values is not None):
        for (i, k) in list(self.fixed_values.items()):
            y[i] = k
    return y
