Esempio n. 1
0
 def test_adjusted_gt_minprob(self):
     """correctly adjust a prob vector so all values > minval"""
     vector = [0.8, 0.2, 0.0, 0.0]
     minprob = 1e-3
     got = adjusted_gt_minprob(vector, minprob=minprob)
     self.assertTrue(got.min() > minprob)
     minprob = 1e-6
     got = adjusted_gt_minprob(vector, minprob=minprob)
     self.assertTrue(got.min() > minprob)
     minprob = 0
     got = adjusted_gt_minprob(vector, minprob=minprob)
     self.assertTrue(got.min() > minprob)
Esempio n. 2
0
    def set_motif_probs(
        self,
        motif_probs,
        locus=None,
        bin=None,
        is_constant=None,
        is_independent=None,
        auto=False,
        **kwargs,
    ):

        motif_probs = self.model.adapt_motif_probs(motif_probs, auto=auto)
        motif_probs = adjusted_gt_minprob(motif_probs, minprob=1e-6)
        if is_constant is None:
            is_constant = not self.optimise_motif_probs
        self.model.set_param_controller_motif_probs(
            self,
            motif_probs,
            is_constant=is_constant,
            bin=bin,
            locus=locus,
            is_independent=is_independent,
            **kwargs,
        )
        if not auto:
            self.mprobs_from_alignment = False  # should be done per-locus
Esempio n. 3
0
 def test_adjusted_probs_2D(self):
     """correctly adjust a 2D array"""
     data = [
         [1.0000, 0.0000, 0.0000, 0.0000],
         [0.0000, 1.0000, 0.0000, 0.0000],
         [0.1250, 0.1250, 0.6250, 0.1250],
         [0.1250, 0.1250, 0.1250, 0.6250],
     ]
     got = adjusted_gt_minprob(data)
     assert_allclose(got, data, atol=1e-5)
Esempio n. 4
0
    def get_param_rule_dict(self, names=None, is_probs=False):
        """returns component for a param rule dict"""
        value = self.value
        if names is not None:
            assert len(self.value) == len(names)
            if is_probs:
                value = adjusted_gt_minprob(
                    adjusted_gt_minprob(self.value, minprob=1e-6))
            if value.ndim == 1:
                value = {n: v for n, v in zip(names, value)}
            else:
                result = {}
                for i, n1 in enumerate(names):
                    result[n1] = {}
                    for j, n2 in enumerate(names):
                        result[n1][n2] = value[i, j]
                value = result

        if self.is_constant:
            result = dict(value=value, is_constant=True)
        else:
            result = dict(init=value, lower=self.lower, upper=self.upper)
        return result
Esempio n. 5
0
    def get_motif_probs(self, edge=None, bin=None, locus=None, position=None):
        """
        Parameters
        ----------
        edge : str
            name of edge
        bin : int or str
            name of bin
        locus : str
            name of locus
        position : int or str
            name of position

        Returns
        -------
        If 1D, returns DictArray, else a dict of DictArray
        """
        param_names = self.get_param_names()
        mprob_name = [n for n in param_names if "mprob" in n][0]
        dims = tuple(self.get_used_dimensions(mprob_name))
        mprobs = self.get_param_value_dict(dimensions=dims,
                                           params=[mprob_name])
        if len(dims) == 2:
            var = [c for c in dims if c != mprob_name][0]
            key = locals().get(var, None)
            mprobs = mprobs[mprob_name]
            if key is not None:
                mprobs = mprobs.get(str(key), mprobs.get(key))
                mprobs = {mprob_name: mprobs}

        # these can fall below the minimum allowed value due to
        # rounding errors, so I adjust these
        for k, value in mprobs.items():
            value.array = adjusted_gt_minprob(value.array, minprob=1e-6)

        if len(mprobs) == 1:
            mprobs = mprobs[mprob_name]

        return mprobs