<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create_subvariant (self, root_targets, all_targets, build_request, sources, rproperties, usage_requirements):
 """Creates a new subvariant-dg instances for 'targets' - 'root-targets' the virtual targets will be returned to dependents - 'all-targets' all virtual targets created while building this main target - 'build-request' is property-set instance with requested build properties"""

        assert is_iterable_typed(root_targets, virtual_target.VirtualTarget)
        assert is_iterable_typed(all_targets, virtual_target.VirtualTarget)
        assert isinstance(build_request, property_set.PropertySet)
        assert is_iterable_typed(sources, virtual_target.VirtualTarget)
        assert isinstance(rproperties, property_set.PropertySet)
        assert isinstance(usage_requirements, property_set.PropertySet)

        for e in root_targets:
            e.root (True)

        s = Subvariant (self, build_request, sources,
                        rproperties, usage_requirements, all_targets)

        for v in all_targets:
            if not v.creating_subvariant():
                v.creating_subvariant(s)

        return s