def _instantiate_feature(self, feature, manifest, kind):
        if feature == "config":
            return None
        feature_config = manifest.get_feature_config(feature)
        if feature_config.has('formula'):
            key = (feature, feature_config.get('formula'))
            if self not in key:
                try:
                    formula_class = self._get_formula_class(feature_config.get('formula'))
                    self[key] = formula_class(self._environment, feature, **{kind: feature_config})
                    if self[key].should_run():
                        return key
                    else:
                        del(self[key])
                except SprinterException:
                    logger.debug("Exception details", exc_info=sys.exc_info())
                    raise FormulaException(
                        "ERROR: Invalid formula {0} for {1} feature {2}!".format(
                            feature_config.get('formula'), kind, feature))
            else:
                setattr(self[key], kind, feature_config)
        else:
            raise FormulaException(
                """
-----------------------------------------------------------------------
feature "{0}" has no formula! Each feature requires an option
"formula" in it's configuration to dictate how to install this feature:

[myfeature]
formula = sprinter.formula.env
-----------------------------------------------------------------------
                """.format(feature)
            )
        return None
dataset/ETHPy150Open toumorokoshi/sprinter/sprinter/core/featuredict.py/FeatureDict._instantiate_feature/swapped operands of `not in`