hwt/hdl/switchContainer.py
def _try_reduce(self) -> Tuple[List["HdlStatement"], bool]:
        """
        Doc on parent class :meth:`HdlStatement._try_reduce`
        """
        io_change = False

        new_cases = []
        for val, statements in self.cases:
            _statements, rank_decrease, _io_change = self._try_reduce_list(
                statements)
            io_change |= _io_change
            self.rank -= rank_decrease
            new_cases.append((val, _statements))
        self.cases = new_cases

        if self.default is not None:
            self.default, rank_decrease, _io_change = self._try_reduce_list(
                self.default)
            self.rank -= rank_decrease
            io_change |= _io_change

        reduce_self = not self._condHasEffect()
        if reduce_self:
            if self.cases:
                res = self.cases[0][1]
            elif self.default is not None:
                res = self.default
            else:
                res = []
        else:
            res = [self, ]

        self._on_reduce(reduce_self, io_change, res)

        if not self.default:
            t = self.switchOn._dtype
            if isinstance(t, HEnum):
                dom_size = t.domain_size()
                val_cnt = len(t._allValues)
                if len(self.cases) == val_cnt and val_cnt < dom_size:
                    # bit representation is not fully matching enum description
                    # need to set last case as default to prevent latches
                    _, stms = self.cases.pop()
                    self.default = stms

        return res, io_change
def _try_reduce(self) -> Tuple[List["HdlStatement"], bool]:
        """
        Doc on parent class :meth:`HdlStatement._try_reduce`
        """
        io_change = False

        new_cases = []
        for val, statements in self.cases:
            _statements, rank_decrease, _io_change = self._try_reduce_list(
                statements)
            io_change |= _io_change
            self.rank -= rank_decrease
            new_cases.append((val, _statements))
        self.cases = new_cases

        if self.default is not None:
            self.default, rank_decrease, _io_change = self._try_reduce_list(
                self.default)
            self.rank -= rank_decrease
            io_change |= _io_change

        reduce_self = not self._condHasEffect()
        if reduce_self:
            if self.cases:
                res = self.cases[0][1]
            elif self.default is not None:
                res = self.default
            else:
                res = []
        else:
            res = [self, ]

        self._on_reduce(reduce_self, io_change, res)

        if not self.default:
            t = self.switchOn._dtype
            if isinstance(t, HEnum):
                dom_size = t.domain_size()
                val_cnt = len(t._allValues)
                if len(self.cases) == val_cnt and val_cnt < dom_size:
                    # bit representation is not fully matching enum description
                    # need to set last case as default to prevent latches
                    _, stms = self.cases.pop()
                    self.default = stms

        return res, io_change
def _try_reduce ( self ) -> Tuple [ List [ "HdlStatement" ] , bool ] : io_change = False new_cases = [ ] for val , statements in self . cases : _statements , rank_decrease , _io_change = self . _try_reduce_list ( statements ) io_change |= _io_change self . rank -= rank_decrease new_cases . append ( ( val , _statements ) ) self . cases = new_cases if self . default is not None : self . default , rank_decrease , _io_change = self . _try_reduce_list ( self . default ) self . rank -= rank_decrease io_change |= _io_change reduce_self = not self . _condHasEffect ( ) if reduce_self : if self . cases : res = self . cases [ 0 ] [ 1 ] elif self . default is not None : res = self . default else : res = [ ] else : res = [ self , ] self . _on_reduce ( reduce_self , io_change , res ) if not self . default : t = self . switchOn . _dtype if isinstance ( t , HEnum ) : dom_size = t . domain_size ( ) val_cnt = len ( t . _allValues ) if len ( self . cases ) == val_cnt and val_cnt < dom_size : # bit representation is not fully matching enum description # need to set last case as default to prevent latches _ , stms = self . cases . pop ( ) self . default = stms return res , io_change
Doc on parent class :meth:`HdlStatement._try_reduce`
Doc on parent class : meth : HdlStatement . _try_reduce