def _inject_setup_module_fixture(self):
setup_module = _get_non_fixture_func(self.obj, "<STR_LIT>")<EOL>if setup_module is None:<EOL><INDENT>setup_module = _get_non_fixture_func(self.obj, "<STR_LIT>")<EOL><DEDENT>teardown_module = _get_non_fixture_func(self.obj, "<STR_LIT>")<EOL>if teardown_module is None:<EOL><INDENT>teardown_module = _get_non_fixture_func(self.obj, "<STR_LIT>")<EOL><DEDENT>if setup_module is None and teardown_module is None:<EOL><INDENT>return<EOL><DEDENT>@fixtures.fixture(autouse=True, scope="<STR_LIT>")<EOL>def xunit_setup_module_fixture(request):<EOL><INDENT>if setup_module is not None:<EOL><INDENT>_call_with_optional_argument(setup_module, request.module)<EOL><DEDENT>yield<EOL>if teardown_module is not None:<EOL><INDENT>_call_with_optional_argument(teardown_module, request.module)<EOL><DEDENT><DEDENT>self.obj.__pytest_setup_module = xunit_setup_module_fixture<EOL>
Injects a hidden autouse, module scoped fixture into the collected module object
        that invokes setUpModule/tearDownModule if either or both are available.

        Using a fixture to invoke this methods ensures we play nicely and unsurprisingly with
        other fixtures (#517).