Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def split(self, splitter, overwrite=False, **kwargs):
"""
Run this task parametrically over lists of splitted inputs.
Parameters
----------
splitter :
TODO
overwrite : :obj:`bool`
TODO
"""
splitter = hlpst.add_name_splitter(splitter, self.name)
# if user want to update the splitter, overwrite has to be True
if self.state and not overwrite and self.state.splitter != splitter:
raise Exception(
"splitter has been already set, "
"if you want to overwrite it - use overwrite=True"
)
if kwargs:
self.inputs = attr.evolve(self.inputs, **kwargs)
self.state_inputs = kwargs
if not self.state or splitter != self.state.splitter:
self.set_state(splitter)
return self
def combine(self, combiner, overwrite=False):
"""
Combine inputs parameterized by one or more previous tasks.
Parameters
----------
combiner :
TODO
overwrite : :obj:`bool`
TODO
"""
if not isinstance(combiner, (str, list)):
raise Exception("combiner has to be a string or a list")
combiner = hlpst.add_name_combiner(ensure_list(combiner), self.name)
if (
self.state
and self.state.combiner
and combiner != self.state.combiner
and not overwrite
):
raise Exception(
"combiner has been already set, "
"if you want to overwrite it - use overwrite=True"
)
if not self.state:
self.split(splitter=None)
# a task can have a combiner without a splitter
# if is connected to one with a splitter;
# self.fut_combiner will be used later as a combiner
self.fut_combiner = combiner
def split(self, splitter, overwrite=False, **kwargs):
"""
Run this task parametrically over lists of splitted inputs.
Parameters
----------
splitter :
TODO
overwrite : :obj:`bool`
TODO
"""
splitter = hlpst.add_name_splitter(splitter, self.name)
# if user want to update the splitter, overwrite has to be True
if self.state and not overwrite and self.state.splitter != splitter:
raise Exception(
"splitter has been already set, "
"if you want to overwrite it - use overwrite=True"
)
if kwargs:
self.inputs = attr.evolve(self.inputs, **kwargs)
self.state_inputs = kwargs
if not self.state or splitter != self.state.splitter:
self.set_state(splitter)
return self
self.inputs,
inner_inputs=self.inner_inputs,
cont_dim=self.cont_dim,
)
values = list(val_r)
else:
values = []
key_r = []
keys_out = key_r
if values:
self.ind_l_final = values
self.keys_final = keys_out
# groups after combiner
ind_map = {
tuple(hlpst.flatten(tup, max_depth=10)): ind
for ind, tup in enumerate(self.ind_l_final)
}
self.final_combined_ind_mapping = {
i: [] for i in range(len(self.ind_l_final))
}
for ii, st in enumerate(self.states_ind):
ind_f = tuple([st[k] for k in self.keys_final])
self.final_combined_ind_mapping[ind_map[ind_f]].append(ii)
else:
self.ind_l_final = values
self.keys_final = keys_out
# should be 0 or None?
self.final_combined_ind_mapping = {0: list(range(len(self.states_ind)))}
self.states_ind_final = list(
hlpst.iter_splits(self.ind_l_final, self.keys_final)
)
st = self.other_states[left_nm[1:]][0]
# checking if left combiner contains any element from the st splitter
st_combiner = [
comb for comb in self.left_combiner_all if comb in st.splitter_rpn_final
]
if not hasattr(st, "keys_final"):
st.set_input_groups()
if st_combiner:
# keys and groups from previous states
# after taking into account combiner from current state
(
keys_f_st,
group_for_inputs_f_st,
groups_stack_f_st,
combiner_all_st,
) = hlpst.splits_groups(
st.splitter_rpn_final,
combiner=st_combiner,
inner_inputs=st.inner_inputs,
)
self.keys_final += keys_f_st # st.keys_final
if not hasattr(st, "group_for_inputs_final"):
raise hlpst.PydraStateError("previous state has to run first")
group_for_inputs = group_for_inputs_f_st
groups_stack = groups_stack_f_st
self.left_combiner_all += combiner_all_st
else:
# if no element from st.splitter is in the current combiner,
# using st attributes without changes
if st.keys_final:
self.keys_final += st.keys_final
group_for_inputs = st.group_for_inputs_final
def splitter(self, splitter):
if splitter and not isinstance(splitter, (str, tuple, list)):
raise hlpst.PydraStateError(
"splitter has to be a string, a tuple or a list"
)
if splitter:
self._splitter = hlpst.add_name_splitter(splitter, self.name)
else:
self._splitter = None
def prepare_states_combined_ind(self, elements_to_remove_comb):
"""Prepare the final list of dictionaries with indices after combiner."""
partial_rpn_compact = hlpst.remove_inp_from_splitter_rpn(
deepcopy(self.splitter_rpn_compact), elements_to_remove_comb
)
# combiner can have parts from the left splitter, so have to have rpn with states
partial_rpn = hlpst.splitter2rpn(
hlpst.rpn2splitter(partial_rpn_compact), other_states=self.other_states
)
combined_rpn = hlpst.remove_inp_from_splitter_rpn(
deepcopy(partial_rpn), self.right_combiner_all + self.left_combiner_all
)
if combined_rpn:
val_r, key_r = hlpst.splits(
combined_rpn,
self.inputs,
inner_inputs=self.inner_inputs,
cont_dim=self.cont_dim,
)
values = list(val_r)
else:
values = []
key_r = []