classMypy:"""Convert settings to 'pyproject.toml' equivalent"""LIST_VALUES=("files","always_false","disable_error_code","plugins",)DONT_TOUCH=("python_version",)defprocess_values(self,doc:M)->M:forparentin(doc,doc.get("tool",{})):forkeyinlist(parent.keys()):# need to be eager: we will delete elementskey_=key[-1]ifisinstance(key,tuple)elsekeyifnotisinstance(key_,str):continuename=key_.strip('"'+string.whitespace)ifname.startswith("mypy-"):overrides=self.get_or_create_overrides(parent)self.process_overrides(parent.pop(key),overrides,name)elifname=="mypy":self.process_options(parent[key])returndocdefprocess_overrides(self,section:R,overrides:MutableSequence,name:str)->R:section=self.process_options(section)modules=[n.replace("mypy-","")forninname.split(",")]self.add_overrided_modules(section,name,modules)overrides.append(section)returnsectiondefprocess_options(self,section:M)->M:forfieldinsection:iffieldinself.DONT_TOUCH:continuefn:T=split_listiffieldinself.LIST_VALUESelsecoerce_scalarsection[field]=fn(section[field])returnsectiondefget_or_create_overrides(self,parent:MutableMapping)->MutableSequence:mypy=parent.setdefault("mypy",IntermediateRepr())returncast(MutableSequence,mypy.setdefault("overrides",[]))defadd_overrided_modules(self,section:R,name:str,modules:List[str]):ifnotisinstance(section,IntermediateRepr):raiseValueError(f"Expecting section {name} to be an IntermediateRepr")if"module"notinsection:section.insert(0,"module",modules)