gamsapi 52.5.0__cp312-cp312-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gams/__init__.py +27 -0
- gams/_version.py +1 -0
- gams/connect/__init__.py +28 -0
- gams/connect/agents/__init__.py +24 -0
- gams/connect/agents/_excel/__init__.py +32 -0
- gams/connect/agents/_excel/excelagent.py +312 -0
- gams/connect/agents/_excel/workbook.py +155 -0
- gams/connect/agents/_sqlconnectors/__init__.py +42 -0
- gams/connect/agents/_sqlconnectors/_accesshandler.py +211 -0
- gams/connect/agents/_sqlconnectors/_databasehandler.py +250 -0
- gams/connect/agents/_sqlconnectors/_mysqlhandler.py +168 -0
- gams/connect/agents/_sqlconnectors/_postgreshandler.py +131 -0
- gams/connect/agents/_sqlconnectors/_pyodbchandler.py +112 -0
- gams/connect/agents/_sqlconnectors/_sqlalchemyhandler.py +74 -0
- gams/connect/agents/_sqlconnectors/_sqlitehandler.py +262 -0
- gams/connect/agents/_sqlconnectors/_sqlserverhandler.py +179 -0
- gams/connect/agents/concatenate.py +440 -0
- gams/connect/agents/connectagent.py +743 -0
- gams/connect/agents/csvreader.py +675 -0
- gams/connect/agents/csvwriter.py +151 -0
- gams/connect/agents/domainwriter.py +143 -0
- gams/connect/agents/excelreader.py +756 -0
- gams/connect/agents/excelwriter.py +467 -0
- gams/connect/agents/filter.py +223 -0
- gams/connect/agents/gamsreader.py +112 -0
- gams/connect/agents/gamswriter.py +239 -0
- gams/connect/agents/gdxreader.py +109 -0
- gams/connect/agents/gdxwriter.py +146 -0
- gams/connect/agents/labelmanipulator.py +303 -0
- gams/connect/agents/projection.py +539 -0
- gams/connect/agents/pythoncode.py +71 -0
- gams/connect/agents/rawcsvreader.py +248 -0
- gams/connect/agents/rawexcelreader.py +312 -0
- gams/connect/agents/schema/CSVReader.yaml +92 -0
- gams/connect/agents/schema/CSVWriter.yaml +44 -0
- gams/connect/agents/schema/Concatenate.yaml +52 -0
- gams/connect/agents/schema/DomainWriter.yaml +25 -0
- gams/connect/agents/schema/ExcelReader.yaml +121 -0
- gams/connect/agents/schema/ExcelWriter.yaml +78 -0
- gams/connect/agents/schema/Filter.yaml +74 -0
- gams/connect/agents/schema/GAMSReader.yaml +20 -0
- gams/connect/agents/schema/GAMSWriter.yaml +47 -0
- gams/connect/agents/schema/GDXReader.yaml +23 -0
- gams/connect/agents/schema/GDXWriter.yaml +32 -0
- gams/connect/agents/schema/LabelManipulator.yaml +99 -0
- gams/connect/agents/schema/Projection.yaml +24 -0
- gams/connect/agents/schema/PythonCode.yaml +6 -0
- gams/connect/agents/schema/RawCSVReader.yaml +34 -0
- gams/connect/agents/schema/RawExcelReader.yaml +42 -0
- gams/connect/agents/schema/SQLReader.yaml +75 -0
- gams/connect/agents/schema/SQLWriter.yaml +103 -0
- gams/connect/agents/sqlreader.py +301 -0
- gams/connect/agents/sqlwriter.py +276 -0
- gams/connect/connectdatabase.py +275 -0
- gams/connect/connectvalidator.py +93 -0
- gams/connect/errors.py +34 -0
- gams/control/__init__.py +136 -0
- gams/control/database.py +2231 -0
- gams/control/execution.py +1900 -0
- gams/control/options.py +2792 -0
- gams/control/workspace.py +1198 -0
- gams/core/__init__.py +24 -0
- gams/core/cfg/__init__.py +26 -0
- gams/core/cfg/_cfgmcc.cp312-win_amd64.pyd +0 -0
- gams/core/cfg/cfgmcc.py +519 -0
- gams/core/dct/__init__.py +26 -0
- gams/core/dct/_dctmcc.cp312-win_amd64.pyd +0 -0
- gams/core/dct/dctmcc.py +574 -0
- gams/core/embedded/__init__.py +26 -0
- gams/core/embedded/gamsemb.py +1024 -0
- gams/core/emp/__init__.py +24 -0
- gams/core/emp/emplexer.py +89 -0
- gams/core/emp/empyacc.py +281 -0
- gams/core/gdx/__init__.py +26 -0
- gams/core/gdx/_gdxcc.cp312-win_amd64.pyd +0 -0
- gams/core/gdx/gdxcc.py +866 -0
- gams/core/gev/__init__.py +26 -0
- gams/core/gev/_gevmcc.cp312-win_amd64.pyd +0 -0
- gams/core/gev/gevmcc.py +855 -0
- gams/core/gmd/__init__.py +26 -0
- gams/core/gmd/_gmdcc.cp312-win_amd64.pyd +0 -0
- gams/core/gmd/gmdcc.py +917 -0
- gams/core/gmo/__init__.py +26 -0
- gams/core/gmo/_gmomcc.cp312-win_amd64.pyd +0 -0
- gams/core/gmo/gmomcc.py +2046 -0
- gams/core/idx/__init__.py +26 -0
- gams/core/idx/_idxcc.cp312-win_amd64.pyd +0 -0
- gams/core/idx/idxcc.py +510 -0
- gams/core/numpy/__init__.py +29 -0
- gams/core/numpy/_gams2numpy.cp312-win_amd64.pyd +0 -0
- gams/core/numpy/gams2numpy.py +1048 -0
- gams/core/opt/__init__.py +26 -0
- gams/core/opt/_optcc.cp312-win_amd64.pyd +0 -0
- gams/core/opt/optcc.py +840 -0
- gams/engine/__init__.py +204 -0
- gams/engine/api/__init__.py +13 -0
- gams/engine/api/auth_api.py +7653 -0
- gams/engine/api/cleanup_api.py +751 -0
- gams/engine/api/default_api.py +887 -0
- gams/engine/api/hypercube_api.py +2629 -0
- gams/engine/api/jobs_api.py +5229 -0
- gams/engine/api/licenses_api.py +2220 -0
- gams/engine/api/namespaces_api.py +7783 -0
- gams/engine/api/usage_api.py +5627 -0
- gams/engine/api/users_api.py +5931 -0
- gams/engine/api_client.py +804 -0
- gams/engine/api_response.py +21 -0
- gams/engine/configuration.py +601 -0
- gams/engine/exceptions.py +216 -0
- gams/engine/models/__init__.py +86 -0
- gams/engine/models/bad_input.py +89 -0
- gams/engine/models/cleanable_job_result.py +104 -0
- gams/engine/models/cleanable_job_result_page.py +113 -0
- gams/engine/models/engine_license.py +107 -0
- gams/engine/models/files_not_found.py +93 -0
- gams/engine/models/forwarded_token_response.py +112 -0
- gams/engine/models/generic_key_value_pair.py +89 -0
- gams/engine/models/hypercube.py +160 -0
- gams/engine/models/hypercube_page.py +111 -0
- gams/engine/models/hypercube_summary.py +91 -0
- gams/engine/models/hypercube_token.py +97 -0
- gams/engine/models/identity_provider.py +107 -0
- gams/engine/models/identity_provider_ldap.py +121 -0
- gams/engine/models/identity_provider_oauth2.py +146 -0
- gams/engine/models/identity_provider_oauth2_scope.py +89 -0
- gams/engine/models/identity_provider_oauth2_with_secret.py +152 -0
- gams/engine/models/identity_provider_oidc.py +133 -0
- gams/engine/models/identity_provider_oidc_with_secret.py +143 -0
- gams/engine/models/inex.py +91 -0
- gams/engine/models/invitation.py +136 -0
- gams/engine/models/invitation_quota.py +106 -0
- gams/engine/models/invitation_token.py +87 -0
- gams/engine/models/job.py +165 -0
- gams/engine/models/job_no_text_entry.py +138 -0
- gams/engine/models/job_no_text_entry_page.py +111 -0
- gams/engine/models/license.py +91 -0
- gams/engine/models/log_piece.py +96 -0
- gams/engine/models/message.py +87 -0
- gams/engine/models/message_and_token.py +99 -0
- gams/engine/models/message_with_webhook_id.py +89 -0
- gams/engine/models/model_auth_token.py +87 -0
- gams/engine/models/model_configuration.py +125 -0
- gams/engine/models/model_default_instance.py +99 -0
- gams/engine/models/model_default_user_instance.py +98 -0
- gams/engine/models/model_hypercube_job.py +106 -0
- gams/engine/models/model_hypercube_usage.py +130 -0
- gams/engine/models/model_instance_info.py +116 -0
- gams/engine/models/model_instance_info_full.py +123 -0
- gams/engine/models/model_instance_pool_info.py +112 -0
- gams/engine/models/model_job_labels.py +179 -0
- gams/engine/models/model_job_usage.py +133 -0
- gams/engine/models/model_pool_usage.py +124 -0
- gams/engine/models/model_usage.py +115 -0
- gams/engine/models/model_user.py +96 -0
- gams/engine/models/model_userinstance_info.py +119 -0
- gams/engine/models/model_userinstancepool_info.py +95 -0
- gams/engine/models/model_version.py +91 -0
- gams/engine/models/models.py +120 -0
- gams/engine/models/namespace.py +104 -0
- gams/engine/models/namespace_quota.py +96 -0
- gams/engine/models/namespace_with_permission.py +96 -0
- gams/engine/models/not_found.py +91 -0
- gams/engine/models/password_policy.py +97 -0
- gams/engine/models/perm_and_username.py +89 -0
- gams/engine/models/quota.py +117 -0
- gams/engine/models/quota_exceeded.py +97 -0
- gams/engine/models/status_code_meaning.py +89 -0
- gams/engine/models/stream_entry.py +89 -0
- gams/engine/models/system_wide_license.py +92 -0
- gams/engine/models/text_entries.py +87 -0
- gams/engine/models/text_entry.py +101 -0
- gams/engine/models/time_span.py +95 -0
- gams/engine/models/time_span_pool_worker.py +99 -0
- gams/engine/models/token_forward_error.py +87 -0
- gams/engine/models/user.py +127 -0
- gams/engine/models/user_group_member.py +96 -0
- gams/engine/models/user_groups.py +108 -0
- gams/engine/models/vapid_info.py +87 -0
- gams/engine/models/webhook.py +138 -0
- gams/engine/models/webhook_parameterized_event.py +99 -0
- gams/engine/py.typed +0 -0
- gams/engine/rest.py +258 -0
- gams/magic/__init__.py +32 -0
- gams/magic/gams_magic.py +142 -0
- gams/magic/interactive.py +402 -0
- gams/tools/__init__.py +30 -0
- gams/tools/errors.py +34 -0
- gams/tools/toolcollection/__init__.py +24 -0
- gams/tools/toolcollection/alg/__init__.py +24 -0
- gams/tools/toolcollection/alg/rank.py +51 -0
- gams/tools/toolcollection/data/__init__.py +24 -0
- gams/tools/toolcollection/data/csvread.py +444 -0
- gams/tools/toolcollection/data/csvwrite.py +311 -0
- gams/tools/toolcollection/data/exceldump.py +47 -0
- gams/tools/toolcollection/data/sqlitewrite.py +276 -0
- gams/tools/toolcollection/gdxservice/__init__.py +24 -0
- gams/tools/toolcollection/gdxservice/gdxencoding.py +104 -0
- gams/tools/toolcollection/gdxservice/gdxrename.py +94 -0
- gams/tools/toolcollection/linalg/__init__.py +24 -0
- gams/tools/toolcollection/linalg/cholesky.py +57 -0
- gams/tools/toolcollection/linalg/eigenvalue.py +56 -0
- gams/tools/toolcollection/linalg/eigenvector.py +58 -0
- gams/tools/toolcollection/linalg/invert.py +55 -0
- gams/tools/toolcollection/linalg/ols.py +138 -0
- gams/tools/toolcollection/tooltemplate.py +321 -0
- gams/tools/toolcollection/win32/__init__.py +24 -0
- gams/tools/toolcollection/win32/excelmerge.py +93 -0
- gams/tools/toolcollection/win32/exceltalk.py +76 -0
- gams/tools/toolcollection/win32/msappavail.py +49 -0
- gams/tools/toolcollection/win32/shellexecute.py +54 -0
- gams/tools/tools.py +116 -0
- gams/transfer/__init__.py +35 -0
- gams/transfer/_abcs/__init__.py +37 -0
- gams/transfer/_abcs/container_abcs.py +433 -0
- gams/transfer/_internals/__init__.py +63 -0
- gams/transfer/_internals/algorithms.py +436 -0
- gams/transfer/_internals/casepreservingdict.py +124 -0
- gams/transfer/_internals/constants.py +270 -0
- gams/transfer/_internals/domainviolation.py +103 -0
- gams/transfer/_internals/specialvalues.py +172 -0
- gams/transfer/containers/__init__.py +26 -0
- gams/transfer/containers/_container.py +1794 -0
- gams/transfer/containers/_io/__init__.py +28 -0
- gams/transfer/containers/_io/containers.py +164 -0
- gams/transfer/containers/_io/gdx.py +1029 -0
- gams/transfer/containers/_io/gmd.py +872 -0
- gams/transfer/containers/_mixins/__init__.py +26 -0
- gams/transfer/containers/_mixins/ccc.py +1274 -0
- gams/transfer/syms/__init__.py +33 -0
- gams/transfer/syms/_methods/__init__.py +24 -0
- gams/transfer/syms/_methods/tables.py +120 -0
- gams/transfer/syms/_methods/toDict.py +115 -0
- gams/transfer/syms/_methods/toList.py +83 -0
- gams/transfer/syms/_methods/toValue.py +60 -0
- gams/transfer/syms/_mixins/__init__.py +32 -0
- gams/transfer/syms/_mixins/equals.py +626 -0
- gams/transfer/syms/_mixins/generateRecords.py +499 -0
- gams/transfer/syms/_mixins/pivot.py +313 -0
- gams/transfer/syms/_mixins/pve.py +627 -0
- gams/transfer/syms/_mixins/sa.py +27 -0
- gams/transfer/syms/_mixins/sapve.py +27 -0
- gams/transfer/syms/_mixins/saua.py +27 -0
- gams/transfer/syms/_mixins/sauapve.py +199 -0
- gams/transfer/syms/_mixins/spve.py +1528 -0
- gams/transfer/syms/_mixins/ve.py +936 -0
- gams/transfer/syms/container_syms/__init__.py +31 -0
- gams/transfer/syms/container_syms/_alias.py +984 -0
- gams/transfer/syms/container_syms/_equation.py +333 -0
- gams/transfer/syms/container_syms/_parameter.py +973 -0
- gams/transfer/syms/container_syms/_set.py +604 -0
- gams/transfer/syms/container_syms/_universe_alias.py +461 -0
- gams/transfer/syms/container_syms/_variable.py +321 -0
- gamsapi-52.5.0.dist-info/METADATA +150 -0
- gamsapi-52.5.0.dist-info/RECORD +257 -0
- gamsapi-52.5.0.dist-info/WHEEL +5 -0
- gamsapi-52.5.0.dist-info/licenses/LICENSE +22 -0
- gamsapi-52.5.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#
|
|
2
|
+
# GAMS - General Algebraic Modeling System Python API
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2017-2026 GAMS Development Corp. <support@gams.com>
|
|
5
|
+
# Copyright (c) 2017-2026 GAMS Software GmbH <support@gams.com>
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
# furnished to do so, subject to the following conditions:
|
|
13
|
+
#
|
|
14
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
# copies or substantial portions of the Software.
|
|
16
|
+
#
|
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
# SOFTWARE.
|
|
24
|
+
#
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#
|
|
2
|
+
# GAMS - General Algebraic Modeling System Python API
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2017-2026 GAMS Development Corp. <support@gams.com>
|
|
5
|
+
# Copyright (c) 2017-2026 GAMS Software GmbH <support@gams.com>
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
# furnished to do so, subject to the following conditions:
|
|
13
|
+
#
|
|
14
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
# copies or substantial portions of the Software.
|
|
16
|
+
#
|
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
# SOFTWARE.
|
|
24
|
+
#
|
|
25
|
+
|
|
26
|
+
# module: emplexer.py
|
|
27
|
+
#
|
|
28
|
+
# This module contains the lexing rules for the EMP.
|
|
29
|
+
#
|
|
30
|
+
# Contributor: Youngdae Kim (02.17.2019)
|
|
31
|
+
|
|
32
|
+
import ply.lex as lex
|
|
33
|
+
|
|
34
|
+
tokens = [
|
|
35
|
+
'COMMA',
|
|
36
|
+
'ID',
|
|
37
|
+
'NUMBER',
|
|
38
|
+
'LPAREN',
|
|
39
|
+
'RPAREN',
|
|
40
|
+
'SQUOTE',
|
|
41
|
+
'DQUOTE',
|
|
42
|
+
'DOLLAR',
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
reserved = {
|
|
46
|
+
'dualvar' : 'DUALVAR',
|
|
47
|
+
'equilibrium' : 'EQUILIBRIUM',
|
|
48
|
+
'implicit' : 'IMPLICIT',
|
|
49
|
+
'max' : 'MAX',
|
|
50
|
+
'min' : 'MIN',
|
|
51
|
+
'not' : 'NOT',
|
|
52
|
+
'qvi' : 'QVI',
|
|
53
|
+
's.t.' : 'ST',
|
|
54
|
+
'vi' : 'VI',
|
|
55
|
+
'visol' : 'VISOL'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
tokens += list(reserved.values())
|
|
59
|
+
|
|
60
|
+
t_COMMA = r'\,'
|
|
61
|
+
t_NUMBER = r'\d+'
|
|
62
|
+
t_LPAREN = r'\('
|
|
63
|
+
t_RPAREN = r'\)'
|
|
64
|
+
t_SQUOTE = r'\''
|
|
65
|
+
t_DQUOTE = r'\"'
|
|
66
|
+
t_DOLLAR = r'\$'
|
|
67
|
+
|
|
68
|
+
# s.t. should com first as the OR operator | matches from left to right.
|
|
69
|
+
def t_ID(t):
|
|
70
|
+
r's\.t\. | [a-zA-Z][a-zA-Z_0-9]*'
|
|
71
|
+
t.type = reserved.get(t.value.lower(),'ID') # Check for reserved words.
|
|
72
|
+
return t
|
|
73
|
+
|
|
74
|
+
def t_COMMENT(t):
|
|
75
|
+
r'\*.*'
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
def t_newline(t):
|
|
79
|
+
r'\n+'
|
|
80
|
+
t.lexer.lineno += len(t.value)
|
|
81
|
+
|
|
82
|
+
def t_error(t):
|
|
83
|
+
print("\n\n Illegal character '%s'" % t.value[0])
|
|
84
|
+
t.lexer.skip(1)
|
|
85
|
+
|
|
86
|
+
t_ignore = ' \t'
|
|
87
|
+
|
|
88
|
+
# Build the lexer.
|
|
89
|
+
lexer = lex.lex()
|
gams/core/emp/empyacc.py
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
#
|
|
2
|
+
# GAMS - General Algebraic Modeling System Python API
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2017-2026 GAMS Development Corp. <support@gams.com>
|
|
5
|
+
# Copyright (c) 2017-2026 GAMS Software GmbH <support@gams.com>
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
# furnished to do so, subject to the following conditions:
|
|
13
|
+
#
|
|
14
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
# copies or substantial portions of the Software.
|
|
16
|
+
#
|
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
# SOFTWARE.
|
|
24
|
+
#
|
|
25
|
+
|
|
26
|
+
# module: empyacc.py
|
|
27
|
+
#
|
|
28
|
+
# This module parses the EMP model specification and generates an EMPINFO file.
|
|
29
|
+
#
|
|
30
|
+
# Contributor: Youngdae Kim (02.17.2019)
|
|
31
|
+
#
|
|
32
|
+
# -------------------------------------------------------------------------
|
|
33
|
+
# Syntax
|
|
34
|
+
#
|
|
35
|
+
# empinfo := EQUILIBRIUM agentlist
|
|
36
|
+
# | agent
|
|
37
|
+
#
|
|
38
|
+
# agentlist := agentlist optagent
|
|
39
|
+
# | agentlist viagent
|
|
40
|
+
# | agentlist dualvar
|
|
41
|
+
# | agentlist implicit
|
|
42
|
+
# | agentlist visol
|
|
43
|
+
# | agent
|
|
44
|
+
#
|
|
45
|
+
# agent := optagent
|
|
46
|
+
# | viagent
|
|
47
|
+
# | qviagent
|
|
48
|
+
# | dualvar
|
|
49
|
+
# | implicit
|
|
50
|
+
# | visol
|
|
51
|
+
#
|
|
52
|
+
# optagent := MAX item ST itemlist
|
|
53
|
+
# | MIN item ST itemlist
|
|
54
|
+
#
|
|
55
|
+
# viagent := VI itemlist
|
|
56
|
+
# qviagent := QVI itemlist
|
|
57
|
+
# dualvar := DUALVAR itemlist
|
|
58
|
+
# implicit := IMPLICIT itemlist
|
|
59
|
+
# visol := VISOL itemlist
|
|
60
|
+
#
|
|
61
|
+
# itemlist := itemlist COMMA item
|
|
62
|
+
# | item
|
|
63
|
+
#
|
|
64
|
+
# item := ID
|
|
65
|
+
# | ID(tuple)
|
|
66
|
+
# | ID(tuple)$ID(dset)
|
|
67
|
+
# | ID(tuple)$(ID(dset))
|
|
68
|
+
# | ID(tuple)$(NOT ID(dset))
|
|
69
|
+
# | NUMBER (this should be zero, checked by empmodel)
|
|
70
|
+
#
|
|
71
|
+
# tuple := tuple COMMA setitem
|
|
72
|
+
# | setitem
|
|
73
|
+
#
|
|
74
|
+
# setitem := 'ID'
|
|
75
|
+
# | "ID"
|
|
76
|
+
# | 'NUMBER'
|
|
77
|
+
# | "NUMBER"
|
|
78
|
+
# | ID
|
|
79
|
+
#
|
|
80
|
+
# dset := dset COMMA ID
|
|
81
|
+
# | ID
|
|
82
|
+
# -------------------------------------------------------------------------
|
|
83
|
+
|
|
84
|
+
import ply.yacc as yacc
|
|
85
|
+
from gams.core.emp.emplexer import tokens
|
|
86
|
+
|
|
87
|
+
class Field: pass
|
|
88
|
+
|
|
89
|
+
class EMPInfo(Field):
|
|
90
|
+
def __init__(self,type,agentlist):
|
|
91
|
+
self.type = type
|
|
92
|
+
self.agentlist = agentlist
|
|
93
|
+
|
|
94
|
+
class Agent(Field):
|
|
95
|
+
def __init__(self,type,items,obj=None):
|
|
96
|
+
self.type = type
|
|
97
|
+
self.items = items
|
|
98
|
+
self.obj = obj
|
|
99
|
+
|
|
100
|
+
def __repr__(self):
|
|
101
|
+
if self.obj is not None:
|
|
102
|
+
return self.type + ' ' + self.obj.__repr__() + ' ' + self.items.__repr__()
|
|
103
|
+
else:
|
|
104
|
+
return self.type + ' ' + self.items.__repr__()
|
|
105
|
+
|
|
106
|
+
def __str__(self):
|
|
107
|
+
return self.__repr__()
|
|
108
|
+
|
|
109
|
+
class Item(Field):
|
|
110
|
+
def __init__(self,name,sets=None,such=None,notop=False):
|
|
111
|
+
self.name = name
|
|
112
|
+
self.sets = sets
|
|
113
|
+
self.such = such
|
|
114
|
+
self.notop = notop
|
|
115
|
+
|
|
116
|
+
def __repr__(self):
|
|
117
|
+
s = ""
|
|
118
|
+
|
|
119
|
+
if self.notop:
|
|
120
|
+
s += "(not "
|
|
121
|
+
|
|
122
|
+
if self.sets is not None:
|
|
123
|
+
s += self.name + '(' + ','.join(filter(None,[str(s) for s in self.sets])) + ')'
|
|
124
|
+
else:
|
|
125
|
+
s += self.name
|
|
126
|
+
|
|
127
|
+
if self.notop:
|
|
128
|
+
s += ')'
|
|
129
|
+
|
|
130
|
+
return s
|
|
131
|
+
|
|
132
|
+
def __str__(self):
|
|
133
|
+
return self.__repr__()
|
|
134
|
+
|
|
135
|
+
class Setitem(Field):
|
|
136
|
+
def __init__(self,name,inst=False):
|
|
137
|
+
self.name = name
|
|
138
|
+
self.inst = inst
|
|
139
|
+
self.masked = False
|
|
140
|
+
|
|
141
|
+
def __repr__(self):
|
|
142
|
+
if self.inst:
|
|
143
|
+
return '"' + self.name + '"'
|
|
144
|
+
else:
|
|
145
|
+
return self.name
|
|
146
|
+
|
|
147
|
+
def __str__(self):
|
|
148
|
+
return self.__repr__()
|
|
149
|
+
|
|
150
|
+
def maskedRepr(self):
|
|
151
|
+
if self.masked:
|
|
152
|
+
return ''
|
|
153
|
+
|
|
154
|
+
return self.__repr__()
|
|
155
|
+
|
|
156
|
+
def strippedRepr(self):
|
|
157
|
+
if self.inst:
|
|
158
|
+
return '"' + self.name + '"'
|
|
159
|
+
else:
|
|
160
|
+
return self.name
|
|
161
|
+
|
|
162
|
+
def p_empinfo(p):
|
|
163
|
+
'''empinfo : EQUILIBRIUM agentlist
|
|
164
|
+
| agent'''
|
|
165
|
+
if p[1] == 'equilibrium':
|
|
166
|
+
p[0] = EMPInfo('equilibrium',p[2])
|
|
167
|
+
else:
|
|
168
|
+
p[0] = EMPInfo('agent',p[1])
|
|
169
|
+
|
|
170
|
+
def p_agentlist(p):
|
|
171
|
+
'''agentlist : agentlist optagent
|
|
172
|
+
| agentlist viagent
|
|
173
|
+
| agentlist dualvar
|
|
174
|
+
| agentlist implicit
|
|
175
|
+
| agentlist visol'''
|
|
176
|
+
p[0] = p[1] + p[2]
|
|
177
|
+
|
|
178
|
+
def p_agentlist_term(p):
|
|
179
|
+
'''agentlist : agent'''
|
|
180
|
+
p[0] = p[1]
|
|
181
|
+
|
|
182
|
+
def p_agent(p):
|
|
183
|
+
'''agent : optagent
|
|
184
|
+
| qviagent
|
|
185
|
+
| viagent
|
|
186
|
+
| dualvar
|
|
187
|
+
| implicit
|
|
188
|
+
| visol'''
|
|
189
|
+
p[0] = p[1]
|
|
190
|
+
|
|
191
|
+
def p_optagent(p):
|
|
192
|
+
'''optagent : MAX item ST itemlist
|
|
193
|
+
| MIN item ST itemlist'''
|
|
194
|
+
p[0] = [Agent(p[1].lower(),p[4],p[2])]
|
|
195
|
+
|
|
196
|
+
def p_qviagent(p):
|
|
197
|
+
'qviagent : QVI itemlist'
|
|
198
|
+
p[0] = [Agent('qvi',p[2])]
|
|
199
|
+
|
|
200
|
+
def p_viagent(p):
|
|
201
|
+
'viagent : VI itemlist'
|
|
202
|
+
p[0] = [Agent('vi',p[2])]
|
|
203
|
+
|
|
204
|
+
def p_dualvar(p):
|
|
205
|
+
'dualvar : DUALVAR itemlist'
|
|
206
|
+
p[0] = [Agent('dualvar',p[2])]
|
|
207
|
+
|
|
208
|
+
def p_implicit(p):
|
|
209
|
+
'implicit : IMPLICIT itemlist'
|
|
210
|
+
p[0] = [Agent('implicit',p[2])]
|
|
211
|
+
|
|
212
|
+
def p_visol(p):
|
|
213
|
+
'visol : VISOL itemlist'
|
|
214
|
+
p[0] = [Agent('visol',p[2])]
|
|
215
|
+
|
|
216
|
+
def p_itemlist_list(p):
|
|
217
|
+
'itemlist : itemlist COMMA item'
|
|
218
|
+
p[0] = p[1] + p[3]
|
|
219
|
+
|
|
220
|
+
def p_itemlist_item(p):
|
|
221
|
+
'itemlist : item'
|
|
222
|
+
p[0] = p[1]
|
|
223
|
+
|
|
224
|
+
def p_item(p):
|
|
225
|
+
'item : ID'
|
|
226
|
+
p[0] = [Item(p[1])]
|
|
227
|
+
|
|
228
|
+
def p_item_tuple(p):
|
|
229
|
+
'item : ID LPAREN tuple RPAREN'
|
|
230
|
+
p[0] = [Item(p[1],p[3])]
|
|
231
|
+
|
|
232
|
+
def p_item_suchthat(p):
|
|
233
|
+
'item : ID LPAREN tuple RPAREN DOLLAR ID LPAREN dset RPAREN'
|
|
234
|
+
p[0] = [Item(p[1],p[3],Item(p[6],p[8]))]
|
|
235
|
+
|
|
236
|
+
def p_item_suchthat_inparen(p):
|
|
237
|
+
'item : ID LPAREN tuple RPAREN DOLLAR LPAREN ID LPAREN dset RPAREN RPAREN'
|
|
238
|
+
p[0] = [Item(p[1],p[3],Item(p[7],p[9]))]
|
|
239
|
+
|
|
240
|
+
def p_item_suchthat_inparen_with_not(p):
|
|
241
|
+
'item : ID LPAREN tuple RPAREN DOLLAR LPAREN NOT ID LPAREN dset RPAREN RPAREN'
|
|
242
|
+
p[0] = [Item(p[1],p[3],Item(p[8],p[10],None,True))]
|
|
243
|
+
|
|
244
|
+
def p_item_zero(p):
|
|
245
|
+
'item : NUMBER'
|
|
246
|
+
p[0] = [Item(p[1])]
|
|
247
|
+
|
|
248
|
+
def p_tuple_list(p):
|
|
249
|
+
'tuple : tuple COMMA setitem'
|
|
250
|
+
p[0] = p[1] + p[3]
|
|
251
|
+
|
|
252
|
+
def p_tuple_setitem(p):
|
|
253
|
+
'tuple : setitem'
|
|
254
|
+
p[0] = p[1]
|
|
255
|
+
|
|
256
|
+
def p_setitem_quote(p):
|
|
257
|
+
'''setitem : SQUOTE ID SQUOTE
|
|
258
|
+
| DQUOTE ID DQUOTE
|
|
259
|
+
| SQUOTE NUMBER SQUOTE
|
|
260
|
+
| DQUOTE NUMBER DQUOTE'''
|
|
261
|
+
p[0] = [Setitem(p[2],True)]
|
|
262
|
+
|
|
263
|
+
def p_setitem_set(p):
|
|
264
|
+
'setitem : ID'
|
|
265
|
+
p[0] = [Setitem(p[1],False)]
|
|
266
|
+
|
|
267
|
+
def p_dset_list(p):
|
|
268
|
+
'dset : dset COMMA ID'
|
|
269
|
+
p[0] = p[1] + [Setitem(p[3],False)]
|
|
270
|
+
|
|
271
|
+
def p_dset_id(p):
|
|
272
|
+
'dset : ID'
|
|
273
|
+
p[0] = [Setitem(p[1],False)]
|
|
274
|
+
|
|
275
|
+
def p_error(p):
|
|
276
|
+
print("\n\n Syntax error: " + p.value + " in line " + str(p.lineno))
|
|
277
|
+
print(" wildshot: equilibrium keyword was omitted.")
|
|
278
|
+
raise Exception
|
|
279
|
+
|
|
280
|
+
# Build the parser.
|
|
281
|
+
parser = yacc.yacc()
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#
|
|
2
|
+
# GAMS - General Algebraic Modeling System Python API
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2017-2026 GAMS Development Corp. <support@gams.com>
|
|
5
|
+
# Copyright (c) 2017-2026 GAMS Software GmbH <support@gams.com>
|
|
6
|
+
#
|
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
# furnished to do so, subject to the following conditions:
|
|
13
|
+
#
|
|
14
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
# copies or substantial portions of the Software.
|
|
16
|
+
#
|
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
# SOFTWARE.
|
|
24
|
+
#
|
|
25
|
+
|
|
26
|
+
from gams.core.gdx.gdxcc import *
|
|
Binary file
|