2424 from typing_extensions import TypeAlias
2525
2626from fileformats .core .typing import Self
27+ from fileformats .core .converter_helpers import SubtypeVar
2728from fileformats .core .utils import _excluded_subpackages
2829
2930from .classifier import Classifier
@@ -670,8 +671,6 @@ def convertible_from(
670671
671672 Parameters
672673 ----------
673- include_generic: bool
674- If True, only consider parent classes in the same namespace for conversion.
675674 union_sort_key : callable[[DataType], Any], optional
676675 A function used to sort the union of types. Defaults to sorting by the type name.
677676
@@ -683,9 +682,13 @@ def convertible_from(
683682
684683 datatypes : ty .List [ty .Type [DataType ]] = [cls ]
685684 cls ._import_extras_module ()
686- exclude_subpackages = copy (_excluded_subpackages )
687- exclude_subpackages .discard (cls .namespace )
688- for subcls in FileSet .subclasses (exclude = exclude_subpackages ):
685+ if cls .namespace == "generic" :
686+ subclasses = [cls ]
687+ else :
688+ exclude_subpackages = copy (_excluded_subpackages )
689+ exclude_subpackages .discard (cls .namespace )
690+ subclasses = list (FileSet .subclasses (exclude = exclude_subpackages ))
691+ for subcls in subclasses :
689692 if issubclass (subcls , cls ):
690693 subcls ._import_extras_module ()
691694 datatypes .extend (subcls .get_converters_dict ().keys ())
@@ -698,6 +701,8 @@ def add_concrete(datatype: ty.Type[DataType]) -> None:
698701 if inspect .isabstract (datatype ):
699702 for subclass in datatype .subclasses ():
700703 add_concrete (subclass )
704+ elif issubclass (datatype , SubtypeVar ):
705+ concrete_datatypes .add (datatype .bound )
701706 else :
702707 concrete_datatypes .add (datatype )
703708
0 commit comments