1    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2    	/*                                                                           */
3    	/*                  This file is part of the program and library             */
4    	/*         SCIP --- Solving Constraint Integer Programs                      */
5    	/*                                                                           */
6    	/*  Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB)                      */
7    	/*                                                                           */
8    	/*  Licensed under the Apache License, Version 2.0 (the "License");          */
9    	/*  you may not use this file except in compliance with the License.         */
10   	/*  You may obtain a copy of the License at                                  */
11   	/*                                                                           */
12   	/*      http://www.apache.org/licenses/LICENSE-2.0                           */
13   	/*                                                                           */
14   	/*  Unless required by applicable law or agreed to in writing, software      */
15   	/*  distributed under the License is distributed on an "AS IS" BASIS,        */
16   	/*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17   	/*  See the License for the specific language governing permissions and      */
18   	/*  limitations under the License.                                           */
19   	/*                                                                           */
20   	/*  You should have received a copy of the Apache-2.0 license                */
21   	/*  along with SCIP; see the file LICENSE. If not visit scipopt.org.         */
22   	/*                                                                           */
23   	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24   	
25   	/**@file   struct_nlhdlr.h
26   	 * @ingroup INTERNALAPI
27   	 * @brief  structure definitions related to nonlinear handlers of nonlinear constraints
28   	 * @author Ksenia Bestuzheva
29   	 * @author Benjamin Mueller
30   	 * @author Felipe Serrano
31   	 * @author Stefan Vigerske
32   	 */
33   	
34   	#ifndef SCIP_STRUCT_NLHLDR_H_
35   	#define SCIP_STRUCT_NLHLDR_H_
36   	
37   	#include "scip/def.h"
38   	#include "scip/type_scip.h"
39   	#include "scip/type_nlhdlr.h"
40   	#include "scip/type_clock.h"
41   	
42   	/** generic data and callback methods of a nonlinear handler */
43   	struct SCIP_Nlhdlr
44   	{
45   	   char*                 name;               /**< nonlinear handler name */
46   	   char*                 desc;               /**< nonlinear handler description (can be NULL) */
47   	   SCIP_NLHDLRDATA*      data;               /**< data of handler */
48   	
49   	   int                   detectpriority;     /**< detection priority of nonlinear handler */
50   	   int                   enfopriority;       /**< enforcement priority of nonlinear handler */
51   	   SCIP_Bool             enabled;            /**< whether the nonlinear handler should be used */
52   	
53   	   /* callbacks */
54   	   SCIP_DECL_NLHDLRFREEHDLRDATA((*freehdlrdata));  /**< callback to free data of handler (can be NULL) */
55   	   SCIP_DECL_NLHDLRFREEEXPRDATA((*freeexprdata));  /**< callback to free expression specific data (can be NULL) */
56   	   SCIP_DECL_NLHDLRCOPYHDLR((*copyhdlr));          /**< callback to copy nonlinear handler (can be NULL) */
57   	   SCIP_DECL_NLHDLRINIT((*init));                  /**< initialization callback (can be NULL) */
58   	   SCIP_DECL_NLHDLREXIT((*exit));                  /**< deinitialization callback (can be NULL) */
59   	   SCIP_DECL_NLHDLRDETECT((*detect));              /**< structure detection callback */
60   	   SCIP_DECL_NLHDLREVALAUX((*evalaux));            /**< auxiliary evaluation callback */
61   	   SCIP_DECL_NLHDLRINITSEPA((*initsepa));          /**< separation initialization callback (can be NULL) */
62   	   SCIP_DECL_NLHDLRENFO((*enfo));                  /**< enforcement callback (can be NULL) */
63   	   SCIP_DECL_NLHDLRESTIMATE((*estimate));          /**< estimator callback (can be NULL) */
64   	   SCIP_DECL_NLHDLREXITSEPA((*exitsepa));          /**< separation deinitialization callback (can be NULL) */
65   	   SCIP_DECL_NLHDLRINTEVAL((*inteval));            /**< interval evaluation callback (can be NULL) */
66   	   SCIP_DECL_NLHDLRREVERSEPROP((*reverseprop));    /**< reverse propagation callback (can be NULL) */
67   	   SCIP_DECL_NLHDLRSOLLINEARIZE((*sollinearize));  /**< solution linearization callback (can be NULL) */
68   	
69   	   /* statistics */
70   	   SCIP_Longint          nenfocalls;         /**< number of times, the enforcement or estimation callback was called */
71   	   SCIP_Longint          nintevalcalls;      /**< number of times, the interval evaluation callback was called */
72   	   SCIP_Longint          npropcalls;         /**< number of times, the propagation callback was called */
73   	   SCIP_Longint          nseparated;         /**< number of times, the nonlinear handler enforced by separation */
74   	   SCIP_Longint          ncutoffs;           /**< number of cutoffs found so far by this nonlinear handler */
75   	   SCIP_Longint          ndomreds;           /**< number of domain reductions found so far by this nonlinear handler */
76   	   SCIP_Longint          ndetections;        /**< number of detect calls in which structure was detected (success returned by detect call) (over all runs) */
77   	   SCIP_Longint          ndetectionslast;    /**< number of detect calls in which structure was detected (success returned by detect call) (in last round) */
78   	   SCIP_Longint          nbranchscores;      /**< number of times, branching scores were added by this nonlinear handler */
79   	
80   	   SCIP_CLOCK*           detecttime;         /**< time used for detection */
81   	   SCIP_CLOCK*           enfotime;           /**< time used for enforcement or estimation */
82   	   SCIP_CLOCK*           proptime;           /**< time used for reverse propagation */
83   	   SCIP_CLOCK*           intevaltime;        /**< time used for interval evaluation */
84   	};
85   	
86   	#endif /* SCIP_STRUCT_NLHLDR_H_ */
87