1 /**
2  * @file    local.cpp
3  * @brief   Python-specific SWIG support code for wrapping libSBML API
4  * @author  Ben Bornstein
5  * @author  Ben Kovitz
6  *
7  * <!--------------------------------------------------------------------------
8  * This file is part of libSBML.  Please visit http://sbml.org for more
9  * information about SBML, and the latest version of libSBML.
10  *
11  * Copyright (C) 2020 jointly by the following organizations:
12  *     1. California Institute of Technology, Pasadena, CA, USA
13  *     2. University of Heidelberg, Heidelberg, Germany
14  *     3. University College London, London, UK
15  *
16  * Copyright (C) 2019 jointly by the following organizations:
17  *     1. California Institute of Technology, Pasadena, CA, USA
18  *     2. University of Heidelberg, Heidelberg, Germany
19  *
20  * Copyright (C) 2013-2018 jointly by the following organizations:
21  *     1. California Institute of Technology, Pasadena, CA, USA
22  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
23  *     3. University of Heidelberg, Heidelberg, Germany
24  *
25  * Copyright (C) 2009-2013 jointly by the following organizations:
26  *     1. California Institute of Technology, Pasadena, CA, USA
27  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
28  *
29  * Copyright (C) 2006-2008 by the California Institute of Technology,
30  *     Pasadena, CA, USA
31  *
32  * Copyright (C) 2002-2005 jointly by the following organizations:
33  *     1. California Institute of Technology, Pasadena, CA, USA
34  *     2. Japan Science and Technology Agency, Japan
35  *
36  * This library is free software; you can redistribute it and/or modify it
37  * under the terms of the GNU Lesser General Public License as published by
38  * the Free Software Foundation.  A copy of the license agreement is provided
39  * in the file named "LICENSE.txt" included with this software distribution
40  * and also available online as http://sbml.org/software/libsbml/license.html
41  * ---------------------------------------------------------------------- -->*/
42 
43 #include <cstddef>
44 #include "sbml/SBase.h"
45 
46 /**
47  * @return the most specific Swig type for the given SBMLExtension object.
48  */
49 struct swig_type_info*
GetDowncastSwigType(SBMLExtension * se)50 GetDowncastSwigType (SBMLExtension* se)
51 {
52 	if (se == 0) return SWIGTYPE_p_SBMLExtension;
53 
54 	const std::string pkgName = se->getName();
55 
56 #include "local-downcast-extension.cpp"
57 
58 	return SWIGTYPE_p_SBMLExtension;
59 }
60 
61 /**
62  * @return the most specific Swig type for the given SBMLConverter object.
63  */
64 struct swig_type_info*
GetDowncastSwigType(SBMLConverter * con)65 GetDowncastSwigType (SBMLConverter* con)
66 {
67 	if (con == 0) return SWIGTYPE_p_SBMLConverter;
68 
69 	const std::string& conName = con->getName();
70 
71      if (conName == "SBML Units Converter")
72        return SWIGTYPE_p_SBMLUnitsConverter;
73      else if (conName == "SBML Strip Package Converter")
74        return SWIGTYPE_p_SBMLStripPackageConverter;
75      else if (conName == "SBML Rule Converter")
76        return SWIGTYPE_p_SBMLRuleConverter;
77      else if (conName == "SBML Reaction Converter")
78        return SWIGTYPE_p_SBMLReactionConverter;
79      else if (conName == "SBML Local Parameter Converter")
80        return SWIGTYPE_p_SBMLLocalParameterConverter;
81      else if (conName == "SBML Level Version Converter")
82        return SWIGTYPE_p_SBMLLevelVersionConverter;
83      else if (conName == "SBML Initial Assignment Converter")
84        return SWIGTYPE_p_SBMLInitialAssignmentConverter;
85      else if (conName == "SBML Infer Units Converter")
86        return SWIGTYPE_p_SBMLInferUnitsConverter;
87      else if (conName == "SBML Id Converter")
88        return SWIGTYPE_p_SBMLIdConverter;
89      else if (conName == "SBML Function Definition Converter")
90        return SWIGTYPE_p_SBMLFunctionDefinitionConverter;
91 
92 #include "local-downcast-converters.cpp"
93 
94 	return SWIGTYPE_p_SBMLConverter;
95 }
96 
97 /**
98  * @return the most specific Swig type for the given SBMLNamespaces object.
99  */
100 struct swig_type_info*
GetDowncastSwigType(SBMLNamespaces * se)101 GetDowncastSwigType (SBMLNamespaces* se)
102 {
103 	if (se == 0) return SWIGTYPE_p_SBMLNamespaces;
104 
105 	const std::string pkgName = se->getPackageName();
106 
107 #include "local-downcast-namespaces.cpp"
108 
109 	return SWIGTYPE_p_SBMLNamespaces;
110 }
111 
112 /**
113  * @return the most specific Swig type for the given SBasePlugin object.
114  */
115 struct swig_type_info*
GetDowncastSwigType(SBasePlugin * sbp)116 GetDowncastSwigType (SBasePlugin* sbp)
117 {
118   if (sbp == 0) return SWIGTYPE_p_SBasePlugin;
119 
120   const std::string pkgName = sbp->getPackageName();
121   SBase* sb = sbp->getParentSBMLObject();
122   if (!sb) return SWIGTYPE_p_SBasePlugin;
123 
124 #include "local-downcast-plugins.cpp"
125 
126   if (sb->getTypeCode() == SBML_DOCUMENT)
127     return SWIGTYPE_p_SBMLDocumentPlugin;
128 
129   return SWIGTYPE_p_SBasePlugin;
130 }
131 
132 
133 struct swig_type_info*
134 GetDowncastSwigTypeForPackage (SBase* sb, const std::string &pkgName);
135 
136 /**
137  * @return the most specific Swig type for the given SBase object.
138  */
139 struct swig_type_info*
GetDowncastSwigType(SBase * sb)140 GetDowncastSwigType (SBase* sb)
141 {
142   if (sb == 0) return SWIGTYPE_p_SBase;
143   const std::string pkgName = sb->getPackageName();
144   return GetDowncastSwigTypeForPackage(sb, pkgName);
145 }
146 /**
147  * @return the most specific Swig type for the given SBase object.
148  */
149 struct swig_type_info*
GetDowncastSwigTypeForPackage(SBase * sb,const std::string & pkgName)150 GetDowncastSwigTypeForPackage (SBase* sb, const std::string &pkgName)
151 {
152   if (sb == 0) return SWIGTYPE_p_SBase;
153 
154   std::string name;
155 
156   if (pkgName == "core")
157   {
158     switch (sb->getTypeCode())
159     {
160       case SBML_COMPARTMENT:
161         return SWIGTYPE_p_Compartment;
162 
163       case SBML_COMPARTMENT_TYPE:
164         return SWIGTYPE_p_CompartmentType;
165 
166       case SBML_CONSTRAINT:
167         return SWIGTYPE_p_Constraint;
168 
169       case SBML_DOCUMENT:
170         return SWIGTYPE_p_SBMLDocument;
171 
172       case SBML_EVENT:
173         return SWIGTYPE_p_Event;
174 
175       case SBML_EVENT_ASSIGNMENT:
176         return SWIGTYPE_p_EventAssignment;
177 
178       case SBML_FUNCTION_DEFINITION:
179         return SWIGTYPE_p_FunctionDefinition;
180 
181       case SBML_INITIAL_ASSIGNMENT:
182         return SWIGTYPE_p_InitialAssignment;
183 
184       case SBML_KINETIC_LAW:
185         return SWIGTYPE_p_KineticLaw;
186 
187       case SBML_LIST_OF:
188         name = sb->getElementName();
189         if(name == "listOf"){
190           return SWIGTYPE_p_ListOf;
191         }
192         else if(name == "listOfCompartments"){
193           return SWIGTYPE_p_ListOfCompartments;
194         }
195         else if(name == "listOfCompartmentTypes"){
196           return SWIGTYPE_p_ListOfCompartmentTypes;
197         }
198         else if(name == "listOfConstraints"){
199           return SWIGTYPE_p_ListOfConstraints;
200         }
201         else if(name == "listOfEvents"){
202           return SWIGTYPE_p_ListOfEvents;
203         }
204         else if(name == "listOfEventAssignments"){
205           return SWIGTYPE_p_ListOfEventAssignments;
206         }
207         else if(name == "listOfFunctionDefinitions"){
208           return SWIGTYPE_p_ListOfFunctionDefinitions;
209         }
210         else if(name == "listOfInitialAssignments"){
211           return SWIGTYPE_p_ListOfInitialAssignments;
212         }
213         else if(name == "listOfParameters"){
214           return SWIGTYPE_p_ListOfParameters;
215         }
216         else if(name == "listOfLocalParameters"){
217           return SWIGTYPE_p_ListOfLocalParameters;
218         }
219         else if(name == "listOfReactions"){
220           return SWIGTYPE_p_ListOfReactions;
221         }
222         else if(name == "listOfRules"){
223           return SWIGTYPE_p_ListOfRules;
224         }
225         else if(name == "listOfSpecies"){
226           return SWIGTYPE_p_ListOfSpecies;
227         }
228         else if(name == "listOfUnknowns"){
229           return SWIGTYPE_p_ListOfSpeciesReferences;
230         }
231         else if(name == "listOfReactants"){
232           return SWIGTYPE_p_ListOfSpeciesReferences;
233         }
234         else if(name == "listOfProducts"){
235           return SWIGTYPE_p_ListOfSpeciesReferences;
236         }
237         else if(name == "listOfModifiers"){
238           return SWIGTYPE_p_ListOfSpeciesReferences;
239         }
240         else if(name == "listOfSpeciesTypes"){
241           return SWIGTYPE_p_ListOfSpeciesTypes;
242         }
243         else if(name == "listOfUnits"){
244           return SWIGTYPE_p_ListOfUnits;
245         }
246         else if(name == "listOfUnitDefinitions"){
247           return SWIGTYPE_p_ListOfUnitDefinitions;
248         }
249       return SWIGTYPE_p_ListOf;
250 
251       case SBML_MODEL:
252         return SWIGTYPE_p_Model;
253 
254       case SBML_PARAMETER:
255         return SWIGTYPE_p_Parameter;
256 
257       case SBML_LOCAL_PARAMETER:
258         return SWIGTYPE_p_LocalParameter;
259 
260       case SBML_REACTION:
261         return SWIGTYPE_p_Reaction;
262 
263       case SBML_SPECIES:
264         return SWIGTYPE_p_Species;
265 
266       case SBML_SPECIES_REFERENCE:
267         return SWIGTYPE_p_SpeciesReference;
268 
269       case SBML_MODIFIER_SPECIES_REFERENCE:
270         return SWIGTYPE_p_ModifierSpeciesReference;
271 
272       case SBML_SPECIES_TYPE:
273         return SWIGTYPE_p_SpeciesType;
274 
275       case SBML_UNIT_DEFINITION:
276         return SWIGTYPE_p_UnitDefinition;
277 
278       case SBML_UNIT:
279         return SWIGTYPE_p_Unit;
280 
281       case SBML_ALGEBRAIC_RULE:
282         return SWIGTYPE_p_AlgebraicRule;
283 
284       case SBML_ASSIGNMENT_RULE:
285         return SWIGTYPE_p_AssignmentRule;
286 
287       case SBML_RATE_RULE:
288         return SWIGTYPE_p_RateRule;
289 
290       case SBML_DELAY:
291         return SWIGTYPE_p_Delay;
292 
293       case SBML_TRIGGER:
294         return SWIGTYPE_p_Trigger;
295 
296       case SBML_STOICHIOMETRY_MATH:
297        return SWIGTYPE_p_StoichiometryMath;
298 
299     case SBML_PRIORITY:
300       return SWIGTYPE_p_Priority;
301 
302       default:
303         return SWIGTYPE_p_SBase;
304     }
305   }
306 
307 #include "local-downcast.cpp"
308 
309   return SWIGTYPE_p_SBase;
310 }
311 
312 
313 /**
314  * @return the most specific Swig type for the given ASTBasePlugin object.
315  */
316 struct swig_type_info*
GetDowncastSwigType(ASTBasePlugin * sbp)317 GetDowncastSwigType (ASTBasePlugin* sbp)
318 {
319   if (sbp == 0) return SWIGTYPE_p_ASTBasePlugin;
320 
321   const std::string pkgName = sbp->getPackageName();
322 
323 #include "local-downcast-astplugins.cpp"
324 
325   return SWIGTYPE_p_ASTBasePlugin;
326 }
327 
328 
329 
330 /* Compatibility bug fix for swig 2.0.7 and Python 3.
331  * See http://patch-tracker.debian.org/patch/series/view/swig2.0/2.0.7-3/pyint_fromsize_t.diff
332  */
333 #if (PY_MAJOR_VERSION >= 3)
334 #define PyInt_FromSize_t(x) PyLong_FromSize_t(x)
335 #endif
336