1 #ifndef GNUMERIC_ANALYSIS_TOOLS_H
2 #define GNUMERIC_ANALYSIS_TOOLS_H
3 
4 #include <gnumeric.h>
5 #include <numbers.h>
6 #include <tools/dao.h>
7 #include <tools/tools.h>
8 #include <regression.h>
9 #include <func.h>
10 
11 
12 /*******************************************************************/
13 /* Section 1: Undoable tools and their data structures             */
14 
15 typedef enum {
16 	analysis_tools_noerr = 0,
17 	analysis_tools_reported_err,
18 	analysis_tools_reported_err_input,
19 	analysis_tools_missing_data,
20 	analysis_tools_too_few_cols,
21 	analysis_tools_too_few_rows,
22 	analysis_tools_replication_invalid,
23 	analysis_tools_no_records_found,
24 	analysis_tools_invalid_field
25 } analysis_tools_error_code_t;
26 
27 
28 /********************************************************************/
29 /* Section 2: Undoable Tools using the first  common generic data struct */
30 
31 typedef struct {
32 	analysis_tools_error_code_t err;
33 	WorkbookControl *wbc;
34 	GSList     *input;
35 	group_by_t group_by;
36 	gboolean   labels;
37 } analysis_tools_data_generic_t;
38 
39 /**************** Correlation Tool ***************/
40 
41 gboolean analysis_tool_correlation_engine (GOCmdContext *gcc,
42 					   data_analysis_output_t *dao,
43 					   gpointer specs,
44 					   analysis_tool_engine_t selector,
45 					   gpointer result);
46 
47 
48 /**************** Covariance Tool  ***************/
49 
50 gboolean analysis_tool_covariance_engine (GOCmdContext *gcc,
51 					  data_analysis_output_t *dao,
52 					  gpointer specs,
53 					  analysis_tool_engine_t selector,
54 					  gpointer result);
55 
56 
57 /********************************************************************/
58 /* Section 3: Undoable Tools using the first  common generic    */
59 /*                data struct augmented with some simple fields     */
60 
61 /************** Single Factor ANOVA  *************/
62 
63 typedef struct {
64 	analysis_tools_data_generic_t base;
65 	gnm_float alpha;
66 } analysis_tools_data_anova_single_t;
67 
68 gboolean analysis_tool_anova_single_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
69 					   analysis_tool_engine_t selector, gpointer result);
70 
71 /********** Descriptive Statistics Tool **********/
72 
73 typedef struct {
74 	analysis_tools_data_generic_t base;
75         gboolean summary_statistics;
76         gboolean confidence_level;
77         gboolean kth_largest;
78         gboolean kth_smallest;
79         gboolean use_ssmedian;
80         int      k_smallest;
81 	int      k_largest;
82         gnm_float  c_level;
83 } analysis_tools_data_descriptive_t;
84 
85 gboolean analysis_tool_descriptive_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
86 					   analysis_tool_engine_t selector, gpointer result);
87 
88 
89 /************** Moving Averages **** *************/
90 
91 typedef enum {
92 	moving_average_type_sma = 0,
93 	moving_average_type_cma,
94 	moving_average_type_wma,
95 	moving_average_type_spencer_ma,
96 	moving_average_type_central_sma
97 } moving_average_type_t;
98 
99 typedef struct {
100 	analysis_tools_data_generic_t base;
101 	int interval;
102 	int std_error_flag;
103 	int df;
104 	int offset;
105 	gboolean show_graph;
106 	moving_average_type_t ma_type;
107 } analysis_tools_data_moving_average_t;
108 
109 gboolean analysis_tool_moving_average_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
110 					      analysis_tool_engine_t selector, gpointer result);
111 
112 
113 /************** Fourier Analysis **** *************/
114 
115 typedef struct {
116 	analysis_tools_data_generic_t base;
117 	gboolean inverse;
118 } analysis_tools_data_fourier_t;
119 
120 gboolean analysis_tool_fourier_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
121 				       analysis_tool_engine_t selector, gpointer result);
122 
123 
124 /************** Sampling Tool **********************/
125 
126 typedef struct {
127 	analysis_tools_data_generic_t base;
128 	gboolean periodic;
129 	gboolean row_major;
130 	guint offset;
131 	guint size;
132 	guint period;
133 	guint number;
134 } analysis_tools_data_sampling_t;
135 
136 gboolean analysis_tool_sampling_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
137 				       analysis_tool_engine_t selector, gpointer result);
138 
139 
140 /************** Ranking Tool *************************/
141 
142 typedef struct {
143 	analysis_tools_data_generic_t base;
144 	gboolean av_ties;
145 } analysis_tools_data_ranking_t;
146 
147 gboolean analysis_tool_ranking_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
148 				       analysis_tool_engine_t selector, gpointer result);
149 
150 
151 
152 
153 /********************************************************************/
154 /* Section 4: Undoable Tools using the second common generic    */
155 /*                data struct augmented with some simple fields     */
156 
157 /*********************** FTest ************************/
158 
159 typedef struct {
160 	analysis_tools_error_code_t err;
161 	WorkbookControl *wbc;
162 	GnmValue *range_1;
163 	GnmValue *range_2;
164 	gboolean   labels;
165 	gnm_float alpha;
166 } analysis_tools_data_generic_b_t;
167 
168 gboolean analysis_tool_ftest_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
169 				     analysis_tool_engine_t selector, gpointer result);
170 
171 /****************  Regression  ********************/
172 
173 typedef struct {
174 	analysis_tools_data_generic_b_t base;
175 	group_by_t group_by;
176 	gboolean   intercept;
177 	gboolean   multiple_regression;
178         gboolean   multiple_y;
179         gboolean   residual;
180 	GSList    *indep_vars;
181 } analysis_tools_data_regression_t;
182 
183 gboolean analysis_tool_regression_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
184 					   analysis_tool_engine_t selector, gpointer result);
185 /*********************** TTest paired *****************/
186 
187 typedef struct {
188 	analysis_tools_data_generic_b_t base;
189 	gnm_float mean_diff;
190 	gnm_float var1;
191 	gnm_float var2;
192 } analysis_tools_data_ttests_t;
193 
194 gboolean analysis_tool_ttest_paired_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
195 				     analysis_tool_engine_t selector, gpointer result);
196 
197 
198 /*********************** TTest equal variances *********/
199 
200 gboolean analysis_tool_ttest_eqvar_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
201 				     analysis_tool_engine_t selector, gpointer result);
202 
203 
204 /*********************** TTest unequal variances *******/
205 
206 gboolean analysis_tool_ttest_neqvar_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
207 					    analysis_tool_engine_t selector, gpointer result);
208 
209 
210 /*********************** ZTest ************************/
211 
212 gboolean analysis_tool_ztest_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
213 				     analysis_tool_engine_t selector, gpointer result);
214 
215 /****************  Advanced Filter  ********************/
216 
217 typedef struct {
218 	analysis_tools_data_generic_b_t base;
219 	gboolean   unique_only_flag;
220 } analysis_tools_data_advanced_filter_t;
221 
222 gboolean analysis_tool_advanced_filter_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs,
223 					   analysis_tool_engine_t selector, gpointer result);
224 
225 
226 
227 
228 /********************************************************************/
229 /* Section 5     Functions also needed elsewhere.                  */
230 
231 gboolean analysis_tool_generic_clean (gpointer specs);
232 gboolean analysis_tool_generic_b_clean (gpointer specs);
233 
234 int analysis_tool_calc_length (analysis_tools_data_generic_t *info);
235 
236 void analysis_tools_write_label       (GnmValue *val, /* depreceated */
237 				       data_analysis_output_t *dao,
238 				       analysis_tools_data_generic_t *info,
239 				       int x, int y, int i);
240 void analysis_tools_write_label_ftest (GnmValue *val, /* depreceated */
241 				       data_analysis_output_t *dao,
242 				       int x, int y,
243 				       gboolean labels, int i);
244 
245 gboolean analysis_tool_table (data_analysis_output_t *dao,
246 			      analysis_tools_data_generic_t *info,
247 			      gchar const *title, gchar const *functionname,
248 			      gboolean full_table);
249 
250 void prepare_input_range (GSList **input_range, group_by_t group_by);
251 
252 const GnmExpr *make_cellref (int dx, int dy);
253 const GnmExpr *make_rangeref (int dx0, int dy0, int dx1, int dy1);
254 
255 void set_cell_text_row (data_analysis_output_t *dao,
256 			int col, int row, const char *text);
257 void set_cell_text_col (data_analysis_output_t *dao,
258 			int col, int row, const char *text);
259 
260 GnmFunc *analysis_tool_get_function (char const *name,
261 				     data_analysis_output_t *dao);
262 
263 #endif
264