Ejemplo n.º 1
0
    def wrapped_func(inputs, out_paths, cnt_out_literals):
        if inputs is None:
            inputs = []
        if out_paths is None:
            out_paths = []
        out_values = foo(*inputs, *out_paths)

        if ((util.isIterable(out_values) and cnt_out_literals == 1) or
            (not util.isIterable(out_values) and out_values is not None)):
            out_values = [
                out_values,
            ]
        elif out_values is None:
            out_values = []

        return out_values
Ejemplo n.º 2
0
    def __forEach__(self):
        """
        Makes self.v iterable, for multi-trial experiments
        :return:
        """
        if not util.isIterable(self.v):
            raise TypeError("Cannot iterate over literal {}".format(self.v))
        self.__oneByOne__ = True

        # Check if they did not set their own default.
        if self.default is None:
            self.default = self.v[0]
        self.n = len(self.v)
        return self
Ejemplo n.º 3
0
    def action(self, func, in_artifacts=None):
        if in_artifacts:
            temp_artifacts = []
            for in_art in in_artifacts:
                if not util.isFlorClass(in_art):
                    if util.isIterable(in_art):
                        in_art = self.literal(in_art)
                        in_art.forEach()
                    else:
                        in_art = self.literal(in_art)
                temp_artifacts.append(in_art)
            in_artifacts = temp_artifacts
        act = Action(func, in_artifacts, self.xp_state)
        self.xp_state.eg.node(act)
        if in_artifacts:
            for in_art in in_artifacts:
                self.xp_state.eg.edge(in_art, act)

        return act
Ejemplo n.º 4
0
        def callable_function(*pos, **kws):

            # INPUTS

            pos_var_names = [
                i for i in f.__code__.co_varnames if i != 'kwargs'
            ]
            for kee in kws:
                assert kee in f.__code__.co_varnames
            d = {}
            d.update(kws)
            for i, positional_arg in enumerate(pos):
                kee = pos_var_names[i]
                assert kee not in d
                d[kee] = positional_arg

            # OUTPUTS
            _fun = ast.parse(inspect.getsource(f)).body[0]
            _kees = [
                i.s for i in [i for i in _fun.body
                              if type(i) == ast.Return][0].value.keys
            ]
            assert len(_kees) > 0

            with Experiment(xp_name) as ex:
                input_lits = []
                output_lits = []
                for kee in d:
                    if util.isIterable(d[kee]):
                        input_lits.append(ex.literalForEach(d[kee], kee))
                    else:
                        input_lits.append(ex.literal(d[kee], kee))
                do_action = ex.action(tru_f, input_lits)
                for kee in _kees:
                    output_lits.append(ex.literal(name=kee, parent=do_action))

            pullable_lit = output_lits[0]
            plot = pullable_lit.plot()
            pullable_lit.pull()
            return plot
Ejemplo n.º 5
0
    def action(self, func, in_artifacts=None):
        """
        # TODO: What's the equivalent of re-using code from a previous experiment version?

        :param func:
        :param in_artifacts:
        :return:
        """
        filenameWithFunc, funcName, _ = func

        if filenameWithFunc in self.xp_state.eg.loc_map:
            code_artifact = self.xp_state.eg.loc_map[filenameWithFunc]
        else:
            code_artifact = self.artifact(
                filenameWithFunc, '.'.join(filenameWithFunc.split('.')[0:-1]))

        if in_artifacts:
            temp_artifacts = []
            for in_art in in_artifacts:
                if not util.isFlorClass(in_art):
                    if util.isIterable(in_art):
                        in_art = self.literal(in_art)
                        in_art.__forEach__()
                    else:
                        in_art = self.literal(in_art)
                temp_artifacts.append(in_art)
            in_artifacts = temp_artifacts

        in_artifacts = in_artifacts or []

        act = Action(func, [
            code_artifact,
        ] + in_artifacts, self.xp_state)
        self.xp_state.eg.node(act)
        self.xp_state.eg.edge(code_artifact, act)
        if in_artifacts:
            for in_art in in_artifacts:
                self.xp_state.eg.edge(in_art, act)

        return act
Ejemplo n.º 6
0
    def action(self, func, in_artifacts=None):
        """

        :param func:
        :param in_artifacts:
        :return:
        """
        filenameWithFunc, _, _ = func

        if filenameWithFunc in self.xp_state.eg.loc_map:
            code_artifact = self.xp_state.eg.loc_map[filenameWithFunc]
        else:
            code_artifact = self.artifact(filenameWithFunc,
                                          filenameWithFunc.split('.')[0])

        if in_artifacts:
            temp_artifacts = []
            for in_art in in_artifacts:
                if not util.isFlorClass(in_art):
                    if util.isIterable(in_art):
                        in_art = self.literal(in_art)
                        in_art.__forEach__()
                    else:
                        in_art = self.literal(in_art)
                temp_artifacts.append(in_art)
            in_artifacts = temp_artifacts
        act = Action(func, [
            code_artifact,
        ] + in_artifacts, self.xp_state)
        self.xp_state.eg.node(act)
        self.xp_state.eg.edge(code_artifact, act)
        if in_artifacts:
            for in_art in in_artifacts:
                self.xp_state.eg.edge(in_art, act)

        return act
Ejemplo n.º 7
0
 def wrapped_func(in_artifacts, out_artifacts):
     if in_artifacts:
         in_args = []
         for in_art in [
                 in_art.loc if util.isFlorClass(in_art) else in_art
                 for in_art in in_artifacts
         ]:
             if util.isPickle(in_art):
                 try:
                     x = util.unpickle(in_art)
                 except:
                     x = joblib.load(in_art)
             elif util.isCsv(in_art):
                 x = in_art
             elif util.isLoc(in_art):
                 with open(in_art, 'r') as f:
                     x = [i.strip() for i in f.readlines() if i.strip()]
                 if len(x) == 1:
                     x = x[0]
             else:
                 x = in_art
             in_args.append(x)
         outs = lambdah(*in_args)
     else:
         outs = lambdah()
     if util.isIterable(outs):
         try:
             assert len(outs) == len(out_artifacts)
             for out, out_loc in zip(
                     outs, [out_art.loc for out_art in out_artifacts]):
                 if util.isPickle(out_loc):
                     try:
                         util.pickleTo(out, out_loc)
                     except:
                         joblib.dump(out, out_loc)
                 else:
                     with open(out_loc, 'w') as f:
                         if util.isIterable(out):
                             for o in out:
                                 f.write(str(o) + '\n')
                         else:
                             f.write(str(out) + '\n')
         except:
             assert len(out_artifacts) == 1
             outs = [
                 outs,
             ]
             for out, out_loc in zip(
                     outs, [out_art.loc for out_art in out_artifacts]):
                 if util.isPickle(out_loc):
                     util.pickleTo(out, out_loc)
                 else:
                     with open(out_loc, 'w') as f:
                         if util.isIterable(out):
                             for o in out:
                                 f.write(str(o) + '\n')
                         else:
                             f.write(str(out) + '\n')
     elif out_artifacts and outs is not None:
         out_loc = out_artifacts[0].loc
         if util.isPickle(out_loc):
             util.pickleTo(outs, out_loc)
         else:
             with open(out_loc, 'w') as f:
                 if util.isIterable(outs):
                     for o in outs:
                         f.write(str(o) + '\n')
                 else:
                     f.write(str(outs) + '\n')
     else:
         raise AssertionError(
             "Missing location to write or Missing return value.")
     return lambdah.__name__