Code Duplication    Length = 35-35 lines in 2 locations

src/ocrd_models/ocrd_page_generateds.py 1 location

@@ 3921-3955 (lines=35) @@
3918
                ret += lines if lo in ['top-to-bottom', 'left-to-right'] else list(reversed(lines))
3919
        return ret
3920
    
3921
    def get_ReadingOrderGroups(self) -> dict:
3922
        """
3923
        Aggregate recursive ReadingOrder into a dictionary, mapping each regionRef
3924
        (i.e. segment `@id`) to its referring group object (i.e one of
3925
    
3926
        \b
3927
        - :py:class:`.RegionRefType`
3928
        - :py:class:`.RegionRefIndexedType`
3929
        - :py:class:`.OrderedGroupType`
3930
        - :py:class:`.OrderedGroupIndexedType`
3931
        - :py:class:`.UnoderedGroupType`
3932
        - :py:class:`.UnoderedGroupIndexedType`
3933
        """
3934
        from collections import OrderedDict as odict
3935
        def get_groupdict(group):
3936
            regionrefs = list()
3937
            if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)):
3938
                regionrefs = (group.get_RegionRefIndexed() +
3939
                              group.get_OrderedGroupIndexed() +
3940
                              group.get_UnorderedGroupIndexed())
3941
                regionrefs = sorted(regionrefs, key=lambda x: x.index)
3942
            if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)):
3943
                regionrefs = (group.get_RegionRef() +
3944
                              group.get_OrderedGroup() +
3945
                              group.get_UnorderedGroup())
3946
            refdict = odict()
3947
            for elem in regionrefs:
3948
                refdict[elem.get_regionRef()] = elem
3949
                if not isinstance(elem, (RegionRefType, RegionRefIndexedType)):
3950
                    refdict = odict(**refdict, **get_groupdict(elem))
3951
            return refdict
3952
        ro = self.get_ReadingOrder()
3953
        if ro is None:
3954
            return {}
3955
        return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup())
3956
    def set_orientation(self, orientation):
3957
        """
3958
        Set deskewing angle to given `orientation` number.

src/ocrd_page_user_methods/get_ReadingOrderGroups.py 1 location

@@ 1-35 (lines=35) @@
1
def get_ReadingOrderGroups(self) -> dict:
2
    """
3
    Aggregate recursive ReadingOrder into a dictionary, mapping each regionRef
4
    (i.e. segment `@id`) to its referring group object (i.e one of
5
6
    \b
7
    - :py:class:`.RegionRefType`
8
    - :py:class:`.RegionRefIndexedType`
9
    - :py:class:`.OrderedGroupType`
10
    - :py:class:`.OrderedGroupIndexedType`
11
    - :py:class:`.UnoderedGroupType`
12
    - :py:class:`.UnoderedGroupIndexedType`
13
    """
14
    from collections import OrderedDict as odict
15
    def get_groupdict(group):
16
        regionrefs = list()
17
        if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)):
18
            regionrefs = (group.get_RegionRefIndexed() +
19
                          group.get_OrderedGroupIndexed() +
20
                          group.get_UnorderedGroupIndexed())
21
            regionrefs = sorted(regionrefs, key=lambda x: x.index)
22
        if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)):
23
            regionrefs = (group.get_RegionRef() +
24
                          group.get_OrderedGroup() +
25
                          group.get_UnorderedGroup())
26
        refdict = odict()
27
        for elem in regionrefs:
28
            refdict[elem.get_regionRef()] = elem
29
            if not isinstance(elem, (RegionRefType, RegionRefIndexedType)):
30
                refdict = odict(**refdict, **get_groupdict(elem))
31
        return refdict
32
    ro = self.get_ReadingOrder()
33
    if ro is None:
34
        return {}
35
    return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup())
36