@@ -54,124 +54,16 @@ def __init__(
5454 self .__proportional = proportional
5555 self .__mini_meta = mini_meta
5656
57- # Check if it is a valid mini_meta case
58- if self .__mini_meta :
59- # Only mini_meta calculation but not proportional and delta-delta function
60- if self .__proportional :
61- err0 = "`proportional` and `mini_meta` cannot be True at the same time."
62- raise ValueError (err0 )
63- if self .__delta2 :
64- err0 = "`delta2` and `mini_meta` cannot be True at the same time."
65- raise ValueError (err0 )
66-
67- # Check if the columns stated are valid
68- # TODO instead of traversing twice idx you can traverse only once
69- # and break the loop if the condition is not satisfied?
70- # TODO What if the type is not str and not tuple,list? missing raise Error
71- if all ([isinstance (i , str ) for i in idx ]):
72- if len (pd .unique ([t for t in idx ]).tolist ()) != 2 :
73- err0 = "`mini_meta` is True, but `idx` ({})" .format (idx )
74- err1 = "does not contain exactly 2 columns."
75- raise ValueError (err0 + err1 )
76-
77- if all ([isinstance (i , (tuple , list )) for i in idx ]):
78- all_idx_lengths = [len (t ) for t in idx ]
79- if (array (all_idx_lengths ) != 2 ).any ():
80- err1 = "`mini_meta` is True, but some idx "
81- err2 = "in {} does not consist only of two groups." .format (idx )
82- raise ValueError (err1 + err2 )
83-
84- # TODO can you have True mini_meta and delta2 at the same time?
85- # Check if this is a 2x2 ANOVA case and x & y are valid columns
86- # Create experiment_label and x1_level
87- if self .__delta2 :
88- # TODO Wrap the errors in a separate function called check_errors()
89- if x is None :
90- error_msg = "If `delta2` is True. `x` parameter cannot be None. String or list expected"
91- raise ValueError (error_msg )
92-
93- if self .__proportional :
94- err0 = "`proportional` and `delta2` cannot be True at the same time."
95- raise ValueError (err0 )
96-
97- # idx should not be specified
98- if idx :
99- err0 = "`idx` should not be specified when `delta2` is True." .format (
100- len (x )
101- )
102- raise ValueError (err0 )
103-
104- # Check if x is valid
105- # TODO if x is None is fine??
106- if len (x ) != 2 :
107- err0 = "`delta2` is True but the number of variables indicated by `x` is {}." .format (
108- len (x )
109- )
110- raise ValueError (err0 )
111-
112- for i in x :
113- if i not in self .__output_data .columns :
114- err = "{0} is not a column in `data`. Please check." .format (i )
115- raise IndexError (err )
116-
117- # Check if y is valid
118- if not y :
119- err0 = "`delta2` is True but `y` is not indicated."
120- raise ValueError (err0 )
121-
122- if y not in self .__output_data .columns :
123- err = "{0} is not a column in `data`. Please check." .format (y )
124- raise IndexError (err )
125-
126- # Check if experiment is valid
127- if experiment not in self .__output_data .columns :
128- err = "{0} is not a column in `data`. Please check." .format (experiment )
129- raise IndexError (err )
130-
131- # Check if experiment_label is valid and create experiment when needed
132- if experiment_label :
133- if len (experiment_label ) != 2 :
134- err0 = "`experiment_label` does not have a length of 2."
135- raise ValueError (err0 )
136-
137- for i in experiment_label :
138- if i not in self .__output_data [experiment ].unique ():
139- err = "{0} is not an element in the column `{1}` of `data`. Please check." .format (
140- i , experiment
141- )
142- raise IndexError (err )
143- else :
144- experiment_label = self .__output_data [experiment ].unique ()
145-
146- # Check if x1_level is valid
147- if x1_level :
148- if len (x1_level ) != 2 :
149- err0 = "`x1_level` does not have a length of 2."
150- raise ValueError (err0 )
151-
152- for i in x1_level :
153- if i not in self .__output_data [x [0 ]].unique ():
154- err = "{0} is not an element in the column `{1}` of `data`. Please check." .format (
155- i , experiment
156- )
157- raise IndexError (err )
158-
159- else :
160- x1_level = self .__output_data [x [0 ]].unique ()
161-
162- # TODO what if experiment is None?
163- elif experiment :
164- experiment_label = self .__output_data [experiment ].unique ()
165- x1_level = self .__output_data [x [0 ]].unique ()
166- self .__experiment_label = experiment_label
167- self .__x1_level = x1_level
57+ # after this call the attributes self.__experiment_label and self.__x1_level are updated
58+ self ._check_errors (x , y , idx , experiment , experiment_label , x1_level )
59+
16860
16961 # create new x & idx and record the second variable if this is a valid 2x2 ANOVA case
17062 if idx is None and x is not None and y is not None :
17163 # Add a length check for unique values in the first element in list x,
17264 # if the length is greater than 2, force delta2 to be False
17365 # Should be removed if delta2 for situations other than 2x2 is supported
174- if len (self .__output_data [x [0 ]].unique ()) > 2 and x1_level is None :
66+ if len (self .__output_data [x [0 ]].unique ()) > 2 and self . __x1_level is None :
17567 self .__delta2 = False
17668 # stop the loop if delta2 is False
17769
@@ -188,9 +80,9 @@ def __init__(
18880
18981 # create idx and record the first and second x variable
19082 idx = []
191- for i in list (map (lambda x : str (x ), experiment_label )):
83+ for i in list (map (lambda x : str (x ), self . __experiment_label )):
19284 temp = []
193- for j in list (map (lambda x : str (x ), x1_level )):
85+ for j in list (map (lambda x : str (x ), self . __x1_level )):
19486 temp .append (j + " " + i )
19587 idx .append (temp )
19688
@@ -533,6 +425,122 @@ def _all_plot_groups(self):
533425 """
534426 return self .__all_plot_groups
535427
428+ def _check_errors (self , x , y , idx , experiment , experiment_label , x1_level ):
429+ '''
430+ Function to check some input parameters and combinations between them.
431+ At the end of this function these two class attributes are updated
432+ self.__experiment_label and self.__x1_level
433+ '''
434+ # Check if it is a valid mini_meta case
435+ if self .__mini_meta :
436+ # Only mini_meta calculation but not proportional and delta-delta function
437+ if self .__proportional :
438+ err0 = "`proportional` and `mini_meta` cannot be True at the same time."
439+ raise ValueError (err0 )
440+ if self .__delta2 :
441+ err0 = "`delta2` and `mini_meta` cannot be True at the same time."
442+ raise ValueError (err0 )
443+
444+ # Check if the columns stated are valid
445+ # TODO instead of traversing twice idx you can traverse only once
446+ # and break the loop if the condition is not satisfied?
447+ # TODO What if the type is not str and not tuple,list? missing raise Error
448+ if all ([isinstance (i , str ) for i in idx ]):
449+ if len (pd .unique ([t for t in idx ]).tolist ()) != 2 :
450+ err0 = "`mini_meta` is True, but `idx` ({})" .format (idx )
451+ err1 = "does not contain exactly 2 columns."
452+ raise ValueError (err0 + err1 )
453+
454+ if all ([isinstance (i , (tuple , list )) for i in idx ]):
455+ all_idx_lengths = [len (t ) for t in idx ]
456+ if (array (all_idx_lengths ) != 2 ).any ():
457+ err1 = "`mini_meta` is True, but some idx "
458+ err2 = "in {} does not consist only of two groups." .format (idx )
459+ raise ValueError (err1 + err2 )
460+
461+ # TODO can you have True mini_meta and delta2 at the same time?
462+ # Check if this is a 2x2 ANOVA case and x & y are valid columns
463+ # Create experiment_label and x1_level
464+ if self .__delta2 :
465+ if x is None :
466+ error_msg = "If `delta2` is True. `x` parameter cannot be None. String or list expected"
467+ raise ValueError (error_msg )
468+
469+ if self .__proportional :
470+ err0 = "`proportional` and `delta2` cannot be True at the same time."
471+ raise ValueError (err0 )
472+
473+ # idx should not be specified
474+ if idx :
475+ err0 = "`idx` should not be specified when `delta2` is True." .format (
476+ len (x )
477+ )
478+ raise ValueError (err0 )
479+
480+ # Check if x is valid
481+ if len (x ) != 2 :
482+ err0 = "`delta2` is True but the number of variables indicated by `x` is {}." .format (
483+ len (x )
484+ )
485+ raise ValueError (err0 )
486+
487+ for i in x :
488+ if i not in self .__output_data .columns :
489+ err = "{0} is not a column in `data`. Please check." .format (i )
490+ raise IndexError (err )
491+
492+ # Check if y is valid
493+ if not y :
494+ err0 = "`delta2` is True but `y` is not indicated."
495+ raise ValueError (err0 )
496+
497+ if y not in self .__output_data .columns :
498+ err = "{0} is not a column in `data`. Please check." .format (y )
499+ raise IndexError (err )
500+
501+ # Check if experiment is valid
502+ if experiment not in self .__output_data .columns :
503+ err = "{0} is not a column in `data`. Please check." .format (experiment )
504+ raise IndexError (err )
505+
506+ # Check if experiment_label is valid and create experiment when needed
507+ if experiment_label :
508+ if len (experiment_label ) != 2 :
509+ err0 = "`experiment_label` does not have a length of 2."
510+ raise ValueError (err0 )
511+
512+ for i in experiment_label :
513+ if i not in self .__output_data [experiment ].unique ():
514+ err = "{0} is not an element in the column `{1}` of `data`. Please check." .format (
515+ i , experiment
516+ )
517+ raise IndexError (err )
518+ else :
519+ experiment_label = self .__output_data [experiment ].unique ()
520+
521+ # Check if x1_level is valid
522+ if x1_level :
523+ if len (x1_level ) != 2 :
524+ err0 = "`x1_level` does not have a length of 2."
525+ raise ValueError (err0 )
526+
527+ for i in x1_level :
528+ if i not in self .__output_data [x [0 ]].unique ():
529+ err = "{0} is not an element in the column `{1}` of `data`. Please check." .format (
530+ i , experiment
531+ )
532+ raise IndexError (err )
533+
534+ else :
535+ x1_level = self .__output_data [x [0 ]].unique ()
536+
537+ # TODO what if experiment is None?
538+ elif experiment :
539+ experiment_label = self .__output_data [experiment ].unique ()
540+ x1_level = self .__output_data [x [0 ]].unique ()
541+ self .__experiment_label = experiment_label
542+ self .__x1_level = x1_level
543+
536544 def _get_plot_data (self , x , y , all_plot_groups ):
537545 """
538546 Function to prepare some attributes for plotting
0 commit comments