gamsapi 52.5.0__tar.gz → 53.0.0rc1__tar.gz

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.
Files changed (283) hide show
  1. {gamsapi-52.5.0/src/gamsapi.egg-info → gamsapi-53.0.0rc1}/PKG-INFO +16 -16
  2. gamsapi-53.0.0rc1/VERSION +1 -0
  3. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/pyproject.toml +1 -1
  4. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/setup.py +4 -4
  5. gamsapi-53.0.0rc1/src/gams/_version.py +1 -0
  6. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_excel/excelagent.py +5 -3
  7. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_excel/workbook.py +15 -0
  8. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_accesshandler.py +1 -0
  9. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_databasehandler.py +17 -0
  10. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlitehandler.py +1 -0
  11. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/connectagent.py +9 -2
  12. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/csvreader.py +74 -16
  13. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/excelreader.py +6 -2
  14. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/ExcelWriter.yaml +8 -2
  15. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/sqlreader.py +5 -1
  16. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/sqlwriter.py +2 -0
  17. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/sqlitewrite.py +92 -99
  18. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/algorithms.py +2 -2
  19. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_container.py +109 -61
  20. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/gdx.py +3 -2
  21. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/gmd.py +5 -4
  22. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_mixins/ccc.py +276 -271
  23. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/pivot.py +3 -3
  24. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/ve.py +4 -1
  25. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_parameter.py +2 -0
  26. {gamsapi-52.5.0 → gamsapi-53.0.0rc1/src/gamsapi.egg-info}/PKG-INFO +16 -16
  27. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/requires.txt +15 -15
  28. gamsapi-52.5.0/VERSION +0 -1
  29. gamsapi-52.5.0/src/gams/_version.py +0 -1
  30. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/LICENSE +0 -0
  31. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/MANIFEST.in +0 -0
  32. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/setup.cfg +0 -0
  33. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/__init__.py +0 -0
  34. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/__init__.py +0 -0
  35. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/__init__.py +0 -0
  36. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_excel/__init__.py +0 -0
  37. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/__init__.py +0 -0
  38. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_mysqlhandler.py +0 -0
  39. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_postgreshandler.py +0 -0
  40. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_pyodbchandler.py +0 -0
  41. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlalchemyhandler.py +0 -0
  42. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/_sqlconnectors/_sqlserverhandler.py +0 -0
  43. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/concatenate.py +0 -0
  44. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/csvwriter.py +0 -0
  45. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/domainwriter.py +0 -0
  46. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/excelwriter.py +0 -0
  47. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/filter.py +0 -0
  48. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gamsreader.py +0 -0
  49. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gamswriter.py +0 -0
  50. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gdxreader.py +0 -0
  51. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/gdxwriter.py +0 -0
  52. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/labelmanipulator.py +0 -0
  53. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/projection.py +0 -0
  54. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/pythoncode.py +0 -0
  55. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/rawcsvreader.py +0 -0
  56. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/rawexcelreader.py +0 -0
  57. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/CSVReader.yaml +0 -0
  58. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/CSVWriter.yaml +0 -0
  59. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/Concatenate.yaml +0 -0
  60. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/DomainWriter.yaml +0 -0
  61. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/ExcelReader.yaml +0 -0
  62. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/Filter.yaml +0 -0
  63. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GAMSReader.yaml +0 -0
  64. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GAMSWriter.yaml +0 -0
  65. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GDXReader.yaml +0 -0
  66. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/GDXWriter.yaml +0 -0
  67. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/LabelManipulator.yaml +0 -0
  68. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/Projection.yaml +0 -0
  69. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/PythonCode.yaml +0 -0
  70. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/RawCSVReader.yaml +0 -0
  71. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/RawExcelReader.yaml +0 -0
  72. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/SQLReader.yaml +0 -0
  73. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/agents/schema/SQLWriter.yaml +0 -0
  74. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/connectdatabase.py +0 -0
  75. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/connectvalidator.py +0 -0
  76. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/connect/errors.py +0 -0
  77. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/__init__.py +0 -0
  78. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/database.py +0 -0
  79. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/execution.py +0 -0
  80. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/options.py +0 -0
  81. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/control/workspace.py +0 -0
  82. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/__init__.py +0 -0
  83. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/__init__.py +0 -0
  84. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc.c +0 -0
  85. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc.h +0 -0
  86. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc.py +0 -0
  87. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/cfg/cfgmcc_wrap.c +0 -0
  88. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/__init__.py +0 -0
  89. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc.c +0 -0
  90. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc.h +0 -0
  91. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc.py +0 -0
  92. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/dct/dctmcc_wrap.c +0 -0
  93. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/embedded/__init__.py +0 -0
  94. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/embedded/gamsemb.py +0 -0
  95. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/emp/__init__.py +0 -0
  96. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/emp/emplexer.py +0 -0
  97. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/emp/empyacc.py +0 -0
  98. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gclgms.h +0 -0
  99. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/__init__.py +0 -0
  100. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc.c +0 -0
  101. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc.h +0 -0
  102. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc.py +0 -0
  103. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gdx/gdxcc_wrap.c +0 -0
  104. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/__init__.py +0 -0
  105. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc.c +0 -0
  106. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc.h +0 -0
  107. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc.py +0 -0
  108. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gev/gevmcc_wrap.c +0 -0
  109. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/__init__.py +0 -0
  110. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc.c +0 -0
  111. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc.h +0 -0
  112. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc.py +0 -0
  113. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmd/gmdcc_wrap.c +0 -0
  114. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/__init__.py +0 -0
  115. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc.c +0 -0
  116. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc.h +0 -0
  117. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc.py +0 -0
  118. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/gmo/gmomcc_wrap.c +0 -0
  119. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/__init__.py +0 -0
  120. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc.c +0 -0
  121. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc.h +0 -0
  122. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc.py +0 -0
  123. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/idx/idxcc_wrap.c +0 -0
  124. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/numpy/__init__.py +0 -0
  125. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/numpy/_gams2numpy.c +0 -0
  126. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/numpy/gams2numpy.py +0 -0
  127. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/__init__.py +0 -0
  128. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc.c +0 -0
  129. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc.h +0 -0
  130. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc.py +0 -0
  131. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/core/opt/optcc_wrap.c +0 -0
  132. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/__init__.py +0 -0
  133. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/__init__.py +0 -0
  134. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/auth_api.py +0 -0
  135. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/cleanup_api.py +0 -0
  136. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/default_api.py +0 -0
  137. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/hypercube_api.py +0 -0
  138. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/jobs_api.py +0 -0
  139. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/licenses_api.py +0 -0
  140. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/namespaces_api.py +0 -0
  141. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/usage_api.py +0 -0
  142. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api/users_api.py +0 -0
  143. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api_client.py +0 -0
  144. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/api_response.py +0 -0
  145. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/configuration.py +0 -0
  146. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/exceptions.py +0 -0
  147. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/__init__.py +0 -0
  148. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/bad_input.py +0 -0
  149. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/cleanable_job_result.py +0 -0
  150. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/cleanable_job_result_page.py +0 -0
  151. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/engine_license.py +0 -0
  152. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/files_not_found.py +0 -0
  153. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/forwarded_token_response.py +0 -0
  154. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/generic_key_value_pair.py +0 -0
  155. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube.py +0 -0
  156. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube_page.py +0 -0
  157. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube_summary.py +0 -0
  158. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/hypercube_token.py +0 -0
  159. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider.py +0 -0
  160. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_ldap.py +0 -0
  161. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oauth2.py +0 -0
  162. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oauth2_scope.py +0 -0
  163. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oauth2_with_secret.py +0 -0
  164. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oidc.py +0 -0
  165. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/identity_provider_oidc_with_secret.py +0 -0
  166. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/inex.py +0 -0
  167. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/invitation.py +0 -0
  168. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/invitation_quota.py +0 -0
  169. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/invitation_token.py +0 -0
  170. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/job.py +0 -0
  171. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/job_no_text_entry.py +0 -0
  172. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/job_no_text_entry_page.py +0 -0
  173. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/license.py +0 -0
  174. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/log_piece.py +0 -0
  175. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/message.py +0 -0
  176. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/message_and_token.py +0 -0
  177. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/message_with_webhook_id.py +0 -0
  178. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_auth_token.py +0 -0
  179. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_configuration.py +0 -0
  180. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_default_instance.py +0 -0
  181. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_default_user_instance.py +0 -0
  182. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_hypercube_job.py +0 -0
  183. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_hypercube_usage.py +0 -0
  184. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_instance_info.py +0 -0
  185. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_instance_info_full.py +0 -0
  186. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_instance_pool_info.py +0 -0
  187. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_job_labels.py +0 -0
  188. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_job_usage.py +0 -0
  189. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_pool_usage.py +0 -0
  190. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_usage.py +0 -0
  191. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_user.py +0 -0
  192. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_userinstance_info.py +0 -0
  193. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_userinstancepool_info.py +0 -0
  194. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/model_version.py +0 -0
  195. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/models.py +0 -0
  196. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/namespace.py +0 -0
  197. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/namespace_quota.py +0 -0
  198. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/namespace_with_permission.py +0 -0
  199. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/not_found.py +0 -0
  200. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/password_policy.py +0 -0
  201. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/perm_and_username.py +0 -0
  202. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/quota.py +0 -0
  203. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/quota_exceeded.py +0 -0
  204. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/status_code_meaning.py +0 -0
  205. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/stream_entry.py +0 -0
  206. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/system_wide_license.py +0 -0
  207. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/text_entries.py +0 -0
  208. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/text_entry.py +0 -0
  209. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/time_span.py +0 -0
  210. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/time_span_pool_worker.py +0 -0
  211. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/token_forward_error.py +0 -0
  212. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/user.py +0 -0
  213. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/user_group_member.py +0 -0
  214. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/user_groups.py +0 -0
  215. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/vapid_info.py +0 -0
  216. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/webhook.py +0 -0
  217. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/models/webhook_parameterized_event.py +0 -0
  218. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/py.typed +0 -0
  219. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/engine/rest.py +0 -0
  220. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/magic/__init__.py +0 -0
  221. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/magic/gams_magic.py +0 -0
  222. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/magic/interactive.py +0 -0
  223. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/__init__.py +0 -0
  224. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/errors.py +0 -0
  225. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/__init__.py +0 -0
  226. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/alg/__init__.py +0 -0
  227. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/alg/rank.py +0 -0
  228. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/__init__.py +0 -0
  229. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/csvread.py +0 -0
  230. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/csvwrite.py +0 -0
  231. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/data/exceldump.py +0 -0
  232. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/gdxservice/__init__.py +0 -0
  233. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/gdxservice/gdxencoding.py +0 -0
  234. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/gdxservice/gdxrename.py +0 -0
  235. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/__init__.py +0 -0
  236. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/cholesky.py +0 -0
  237. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/eigenvalue.py +0 -0
  238. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/eigenvector.py +0 -0
  239. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/invert.py +0 -0
  240. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/linalg/ols.py +0 -0
  241. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/tooltemplate.py +0 -0
  242. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/__init__.py +0 -0
  243. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/excelmerge.py +0 -0
  244. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/exceltalk.py +0 -0
  245. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/msappavail.py +0 -0
  246. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/toolcollection/win32/shellexecute.py +0 -0
  247. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/tools/tools.py +0 -0
  248. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/__init__.py +0 -0
  249. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_abcs/__init__.py +0 -0
  250. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_abcs/container_abcs.py +0 -0
  251. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/__init__.py +0 -0
  252. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/casepreservingdict.py +0 -0
  253. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/constants.py +0 -0
  254. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/domainviolation.py +0 -0
  255. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/_internals/specialvalues.py +0 -0
  256. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/__init__.py +0 -0
  257. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/__init__.py +0 -0
  258. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_io/containers.py +0 -0
  259. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/containers/_mixins/__init__.py +0 -0
  260. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/__init__.py +0 -0
  261. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/__init__.py +0 -0
  262. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/tables.py +0 -0
  263. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/toDict.py +0 -0
  264. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/toList.py +0 -0
  265. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_methods/toValue.py +0 -0
  266. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/__init__.py +0 -0
  267. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/equals.py +0 -0
  268. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/generateRecords.py +0 -0
  269. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/pve.py +0 -0
  270. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/sa.py +0 -0
  271. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/sapve.py +0 -0
  272. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/saua.py +0 -0
  273. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/sauapve.py +0 -0
  274. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/_mixins/spve.py +0 -0
  275. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/__init__.py +0 -0
  276. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_alias.py +0 -0
  277. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_equation.py +0 -0
  278. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_set.py +0 -0
  279. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_universe_alias.py +0 -0
  280. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gams/transfer/syms/container_syms/_variable.py +0 -0
  281. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/SOURCES.txt +0 -0
  282. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/dependency_links.txt +0 -0
  283. {gamsapi-52.5.0 → gamsapi-53.0.0rc1}/src/gamsapi.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gamsapi
3
- Version: 52.5.0
3
+ Version: 53.0.0rc1
4
4
  Summary: GAMS Python API
5
5
  Home-page: https://www.gams.com/
6
6
  Author: GAMS Development Corporation
@@ -24,7 +24,7 @@ Requires-Python: >=3.10
24
24
  Description-Content-Type: text/markdown
25
25
  License-File: LICENSE
26
26
  Provides-Extra: connect
27
- Requires-Dist: pandas<2.4,>=2.2.2; extra == "connect"
27
+ Requires-Dist: pandas<3.1,>=2.2.2; extra == "connect"
28
28
  Requires-Dist: pyyaml; extra == "connect"
29
29
  Requires-Dist: openpyxl>=3.1.0; extra == "connect"
30
30
  Requires-Dist: sqlalchemy; extra == "connect"
@@ -45,30 +45,30 @@ Requires-Dist: python_dateutil; extra == "engine"
45
45
  Requires-Dist: urllib3; extra == "engine"
46
46
  Provides-Extra: magic
47
47
  Requires-Dist: ipython; extra == "magic"
48
- Requires-Dist: pandas<2.4,>=2.2.2; extra == "magic"
48
+ Requires-Dist: pandas<3.1,>=2.2.2; extra == "magic"
49
49
  Provides-Extra: tools
50
- Requires-Dist: pandas<2.4,>=2.2.2; extra == "tools"
50
+ Requires-Dist: pandas<3.1,>=2.2.2; extra == "tools"
51
51
  Provides-Extra: transfer
52
- Requires-Dist: pandas<2.4,>=2.2.2; extra == "transfer"
52
+ Requires-Dist: pandas<3.1,>=2.2.2; extra == "transfer"
53
53
  Requires-Dist: scipy; extra == "transfer"
54
54
  Provides-Extra: all
55
- Requires-Dist: scipy; extra == "all"
56
- Requires-Dist: sqlalchemy; extra == "all"
57
- Requires-Dist: pymssql; extra == "all"
55
+ Requires-Dist: openpyxl>=3.1.0; extra == "all"
56
+ Requires-Dist: urllib3; extra == "all"
58
57
  Requires-Dist: cerberus; extra == "all"
59
- Requires-Dist: pyodbc; extra == "all"
58
+ Requires-Dist: pandas<3.1,>=2.2.2; extra == "all"
59
+ Requires-Dist: pydantic; extra == "all"
60
60
  Requires-Dist: psycopg2-binary; extra == "all"
61
- Requires-Dist: pymysql; extra == "all"
62
- Requires-Dist: urllib3; extra == "all"
63
- Requires-Dist: python_dateutil; extra == "all"
64
- Requires-Dist: ply; extra == "all"
65
61
  Requires-Dist: pyyaml; extra == "all"
62
+ Requires-Dist: scipy; extra == "all"
66
63
  Requires-Dist: certifi; extra == "all"
67
- Requires-Dist: pydantic; extra == "all"
64
+ Requires-Dist: pyodbc; extra == "all"
65
+ Requires-Dist: pymssql; extra == "all"
66
+ Requires-Dist: ply; extra == "all"
68
67
  Requires-Dist: ipython; extra == "all"
68
+ Requires-Dist: sqlalchemy; extra == "all"
69
69
  Requires-Dist: numpy; extra == "all"
70
- Requires-Dist: openpyxl>=3.1.0; extra == "all"
71
- Requires-Dist: pandas<2.4,>=2.2.2; extra == "all"
70
+ Requires-Dist: pymysql; extra == "all"
71
+ Requires-Dist: python_dateutil; extra == "all"
72
72
  Dynamic: author
73
73
  Dynamic: author-email
74
74
  Dynamic: classifier
@@ -0,0 +1 @@
1
+ 53.0.0rc1
@@ -1,3 +1,3 @@
1
1
  [build-system]
2
2
  requires = ["setuptools", "build", "numpy"]
3
- build-backend = "setuptools.build_meta"
3
+ build-backend = "setuptools.build_meta"
@@ -35,7 +35,7 @@ py_version = ".".join(sys.version.split(".")[:2])
35
35
 
36
36
  EXTRAS = {
37
37
  "connect": [
38
- "pandas>=2.2.2,<2.4",
38
+ "pandas>=2.2.2,<3.1",
39
39
  "pyyaml",
40
40
  "openpyxl>=3.1.0",
41
41
  "sqlalchemy",
@@ -48,9 +48,9 @@ EXTRAS = {
48
48
  "control": ["certifi", "urllib3"],
49
49
  "core": ["ply", "numpy"],
50
50
  "engine": ["pydantic", "python_dateutil", "urllib3"],
51
- "magic": ["ipython", "pandas>=2.2.2,<2.4"],
52
- "tools": ["pandas>=2.2.2,<2.4"],
53
- "transfer": ["pandas>=2.2.2,<2.4", "scipy"],
51
+ "magic": ["ipython", "pandas>=2.2.2,<3.1"],
52
+ "tools": ["pandas>=2.2.2,<3.1"],
53
+ "transfer": ["pandas>=2.2.2,<3.1", "scipy"],
54
54
  }
55
55
  EXTRAS["all"] = list(set([x for k, v in EXTRAS.items() for x in v]))
56
56
 
@@ -0,0 +1 @@
1
+ __version__ = "53.0.0"
@@ -186,8 +186,8 @@ class ExcelAgent(ConnectAgent):
186
186
  def parse_range(self, sym_range, wb, clear_sheet=False, create_missing=False):
187
187
  sheet, rng = self._split_range(sym_range, wb)
188
188
  toc_range = f"'{sheet}'!{rng.split(':')[0]}"
189
- sheet = self.sheet_by_name(sheet, wb, clear_sheet, create_missing)
190
189
  nw_col, nw_row, se_col, se_row = self._range_to_coords(rng)
190
+ sheet = self.sheet_by_name(sheet, wb, clear_sheet, create_missing, nw_col, nw_row, se_col, se_row)
191
191
  return sheet, nw_col, nw_row, se_col, se_row, toc_range
192
192
 
193
193
  def parse_index(self, index, wb, index_parameter_map):
@@ -240,12 +240,14 @@ class ExcelAgent(ConnectAgent):
240
240
  symbols.append(sym)
241
241
  return symbols
242
242
 
243
- def sheet_by_name(self, sheet, wb, clear_sheet=False, create_missing=False):
243
+ def sheet_by_name(self, sheet, wb, clear_sheet=False, create_missing=False, nw_col=None, nw_row=None, se_col=None, se_row=None):
244
244
  for idx, s in enumerate(wb.sheetnames):
245
245
  if sheet.lower() == s.lower():
246
- if clear_sheet:
246
+ if clear_sheet is True:
247
247
  wb.delete_sheet(s)
248
248
  return wb.create_sheet(s, idx)
249
+ if clear_sheet == "range":
250
+ wb.delete_range(s, nw_col, nw_row, se_col, se_row)
249
251
  return wb.get_sheet(s)
250
252
  if create_missing:
251
253
  return wb.create_sheet(sheet)
@@ -111,6 +111,21 @@ class Workbook:
111
111
  else:
112
112
  raise Exception("Invalid engine.")
113
113
 
114
+ def delete_range(self, sheet_name, nw_col, nw_row, se_col, se_row):
115
+ if self._engine == "xlwings":
116
+ raise Exception("Not imlemented.")
117
+ elif self._engine == "openpyxl":
118
+ sheet = self._wb[sheet_name]
119
+ if se_row is None:
120
+ se_row = sheet.max_row
121
+ if se_col is None:
122
+ se_col = sheet.max_column
123
+ for row in range(nw_row+1, se_row + 1):
124
+ for col in range(nw_col+1, se_col + 1):
125
+ sheet.cell(row=row, column=col).value = None
126
+ else:
127
+ raise Exception("Invalid engine.")
128
+
114
129
  def delete_sheet(self, sheet_name):
115
130
  if self._engine == "xlwings":
116
131
  self._wb.sheets[sheet_name].delete()
@@ -30,6 +30,7 @@ from gams.connect.agents._sqlconnectors._databasehandler import DatabaseConnecto
30
30
  class AccessConnector(DatabaseConnector):
31
31
  SUPPORTED_INSERT_METHODS = ["default", "bulkInsert"]
32
32
  QUOTE_CHAR = ["[]", '""', "``"]
33
+ SCHEMA_SUPPORT = False
33
34
 
34
35
  @staticmethod
35
36
  def _create_accdb(dbpath):
@@ -45,10 +45,20 @@ class ConnectionType(Enum):
45
45
  SQLSERVER = "sqlserver"
46
46
  ACCESS = "access"
47
47
 
48
+ CONNECTOR = {
49
+ "SQLiteConnector": ConnectionType.SQLITE.value,
50
+ "SQLAlchemyConnector": ConnectionType.SQLALCHEMY.value,
51
+ "PyodbcConnector": ConnectionType.PYODBC.value,
52
+ "MySQLConnector": ConnectionType.MYSQL.value,
53
+ "PostgresConnector": ConnectionType.POSTGRES.value,
54
+ "SQLServerConnector": ConnectionType.SQLSERVER.value,
55
+ "AccessConnector": ConnectionType.ACCESS.value,
56
+ }
48
57
 
49
58
  class DatabaseConnector(ABC):
50
59
  SUPPORTED_INSERT_METHODS = []
51
60
  QUOTE_CHAR = []
61
+ SCHEMA_SUPPORT = True
52
62
 
53
63
  def __init__(
54
64
  self,
@@ -70,6 +80,13 @@ class DatabaseConnector(ABC):
70
80
  f"Valid methods are >{self.SUPPORTED_INSERT_METHODS}<"
71
81
  )
72
82
 
83
+ def is_schema_available(self, schema: str | None):
84
+ """Checks if the connectionType allows schema"""
85
+ if (not self.SCHEMA_SUPPORT) and (schema is not None):
86
+ self._raise_error(
87
+ f"connectionType >{CONNECTOR[type(self).__name__]}< does not support schema but schemaName is set to >{schema}<."
88
+ )
89
+
73
90
  def read_table(self, sql_query: str, read_sql_args: dict) -> pd.DataFrame:
74
91
  """
75
92
  Read data from select DBMS using the provided SQL Query. Returns a pandas.DataFrame
@@ -31,6 +31,7 @@ from gams.connect.agents._sqlconnectors._databasehandler import DatabaseConnecto
31
31
  class SQLiteConnector(DatabaseConnector):
32
32
  SUPPORTED_INSERT_METHODS = ["default"]
33
33
  QUOTE_CHAR = ["[]", '""', "``"]
34
+ SCHEMA_SUPPORT = False
34
35
 
35
36
  def connect(self, connection_details, connection_args, **kwargs) -> None:
36
37
 
@@ -381,14 +381,21 @@ class ConnectAgent(ABC):
381
381
  # pandas-version-check
382
382
  if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
383
383
  df.iloc[:, -1] = df.iloc[:, -1].replace(vs)
384
- else: # pandas >= 2.2.0
384
+ elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
385
385
  with pd.option_context("future.no_silent_downcasting", True):
386
386
  df.iloc[:, -1] = df.iloc[:, -1].replace(vs).infer_objects()
387
+ else: # pandas >= 3.0.0
388
+ df.iloc[:, -1] = df.iloc[:, -1].replace(vs).infer_objects()
389
+
387
390
  else:
388
391
  # pandas-version-check
389
392
  if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
390
393
  df.iloc[~mask, -1] = df.iloc[~mask, -1].replace(vs)
391
- else: # pandas >= 2.2.0
394
+ elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
395
+ df.iloc[~mask, -1] = (
396
+ df.iloc[~mask, -1].replace(vs).infer_objects()
397
+ )
398
+ else: # pandas >= 3.0.0
392
399
  with pd.option_context("future.no_silent_downcasting", True):
393
400
  df.iloc[~mask, -1] = (
394
401
  df.iloc[~mask, -1].replace(vs).infer_objects()
@@ -325,9 +325,11 @@ class CSVReader(ConnectAgent):
325
325
  # pandas-version-check
326
326
  if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
327
327
  df.isetitem(-1, df.iloc[:, -1].replace(self._value_sub))
328
- else: # pandas >= 2.2.0
328
+ elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
329
329
  with pd.option_context("future.no_silent_downcasting", True):
330
330
  df.isetitem(-1, df.iloc[:, -1].replace(self._value_sub).infer_objects())
331
+ else: # pandas >= 3.0.0
332
+ df.isetitem(-1, df.iloc[:, -1].replace(self._value_sub).infer_objects())
331
333
 
332
334
  if self._trace > 2:
333
335
  self._cdb.print_log(f"DataFrame after value substitution:\n{df}")
@@ -426,9 +428,10 @@ class CSVReader(ConnectAgent):
426
428
  # pandas-version-check
427
429
  if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
428
430
  df = df.stack(level=df.columns.names, dropna=False)
429
- else: # pandas >= 2.2.0
431
+ elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
430
432
  df = df.stack(level=df.columns.names, future_stack=True)
431
-
433
+ else: # pandas >= 3.0.0
434
+ df = df.stack(level=df.columns.names)
432
435
  return df
433
436
 
434
437
  def _sort_value_columns(self, df: pd.DataFrame) -> pd.DataFrame:
@@ -495,6 +498,36 @@ class CSVReader(ConnectAgent):
495
498
  )
496
499
 
497
500
  return df
501
+
502
+ def _create_sym(self, df, domain):
503
+ """Creates symbol (parameter or set) in the Connect container
504
+
505
+ Parameters
506
+ ----------
507
+ df : pd.DataFrame | None
508
+ Symbol records
509
+ domain : list
510
+ Symbol domains
511
+
512
+ Returns
513
+ -------
514
+ Symbol object
515
+ Created symbol
516
+ """
517
+ if self._sym_type == "par":
518
+ sym = self._cdb.container.addParameter(
519
+ self._name,
520
+ domain,
521
+ records=df,
522
+ )
523
+ else:
524
+ sym = self._cdb.container.addSet(
525
+ self._name,
526
+ domain,
527
+ records=df,
528
+ )
529
+
530
+ return sym
498
531
 
499
532
  def execute(self):
500
533
  if self._trace > 0:
@@ -543,7 +576,37 @@ class CSVReader(ConnectAgent):
543
576
  f"Arguments for reading the CSV file:\n{self._read_csv_args}"
544
577
  )
545
578
 
546
- df = pd.read_csv(self._file, **self._read_csv_args)
579
+ try:
580
+ df = pd.read_csv(self._file, **self._read_csv_args)
581
+
582
+ except pd.errors.EmptyDataError:
583
+ if self._trace > 1:
584
+ self._cdb.print_log(
585
+ "Empty data after reading CSV file."
586
+ )
587
+
588
+ # set dimensionality
589
+ dim = len(self._index_cols)
590
+ if self._stack:
591
+ if self._multiheader:
592
+ dim += len(self._header)
593
+ else:
594
+ dim += 1
595
+
596
+ sym = self._create_sym(None, ["*"] * dim)
597
+
598
+ # For symbols with None records, empty df is assigned
599
+ self._transform_sym_none_to_empty(sym)
600
+
601
+ if self._trace > 2:
602
+ self._cdb.print_log(
603
+ f"Connect Container symbol={self._name}:\n {sym.records}\n"
604
+ )
605
+
606
+ if self._trace > 0:
607
+ self._describe_container(self._cdb.container, "Connect Container (after):")
608
+
609
+ return
547
610
 
548
611
  if self._trace > 2:
549
612
  self._cdb.print_log(
@@ -569,11 +632,7 @@ class CSVReader(ConnectAgent):
569
632
  if self._auto_col is not None and not df.columns.empty:
570
633
  self._generate_column_labels(df)
571
634
 
572
- if self._stack:
573
- dim += 1
574
- domain.append("*")
575
-
576
- elif self._stack:
635
+ if self._stack:
577
636
  if self._multiheader:
578
637
  dim += len(self._header)
579
638
  domain.extend(
@@ -596,8 +655,12 @@ class CSVReader(ConnectAgent):
596
655
  pd.__version__, "2.2"
597
656
  ): # pandas < 2.2.0
598
657
  df = df.stack(dropna=False)
599
- else: # pandas >= 2.2.0
658
+ elif self._pandas_version_before(
659
+ pd.__version__, "3.0"
660
+ ): # 2.2.0 <= pandas < 3.0.0
600
661
  df = df.stack(future_stack=True)
662
+ else: # pandas >= 3.0.0
663
+ df = df.stack()
601
664
 
602
665
  if dim == 1 or (self._multiheader and dim == columns.nlevels):
603
666
  # drop pandas default index level
@@ -638,11 +701,6 @@ class CSVReader(ConnectAgent):
638
701
  self._substitute_values(df)
639
702
  df.dropna(inplace=True)
640
703
 
641
- if self._sym_type == "par":
642
- sym = gt.Parameter(self._cdb.container, self._name, domain=domain)
643
- else:
644
- sym = gt.Set(self._cdb.container, self._name, domain=domain)
645
-
646
704
  # reset the index to the default integer index
647
705
  df = df.reset_index(drop=True)
648
706
 
@@ -651,7 +709,7 @@ class CSVReader(ConnectAgent):
651
709
  "Final DataFrame that will be processed by" f" GAMSTransfer:\n{df}"
652
710
  )
653
711
 
654
- sym.setRecords(df)
712
+ sym = self._create_sym(df, domain)
655
713
 
656
714
  if dim > 0 and self._stack:
657
715
  if self._multiheader:
@@ -276,9 +276,11 @@ class ExcelReader(ExcelAgent):
276
276
  # pandas-version-check
277
277
  if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
278
278
  df.replace(value_sub, inplace=True)
279
- else: # pandas >= 2.2.0
279
+ elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
280
280
  with pd.option_context("future.no_silent_downcasting", True):
281
281
  df = df.replace(value_sub).infer_objects()
282
+ else: # pandas >= 3.0.0
283
+ df = df.replace(value_sub).infer_objects()
282
284
  return df
283
285
 
284
286
  def _write(self, df, sym_name, sym_type, rdim, cdim):
@@ -654,9 +656,11 @@ class ExcelReader(ExcelAgent):
654
656
  # pandas-version-check
655
657
  if self._pandas_version_before(pd.__version__, "2.2"): # pandas < 2.2.0
656
658
  df.replace(regex=pattern, value=GMS_SV_UNDEF, inplace=True)
657
- else: # pandas >= 2.2.0
659
+ elif self._pandas_version_before(pd.__version__, "3.0"): # 2.2.0 <= pandas < 3.0.0
658
660
  with pd.option_context("future.no_silent_downcasting", True):
659
661
  df = df.replace(regex=pattern, value=GMS_SV_UNDEF).infer_objects()
662
+ else: # pandas >= 3.0.0
663
+ df = df.replace(regex=pattern, value=GMS_SV_UNDEF).infer_objects()
660
664
  self._write(df, sym_name, sym_type, rdim, cdim)
661
665
 
662
666
  def _open(self):
@@ -10,8 +10,11 @@ columnDimension:
10
10
  min: 0
11
11
  max: 20
12
12
  clearSheet:
13
- type: boolean
14
13
  default: false
14
+ oneof:
15
+ - type: string
16
+ allowed: [range]
17
+ - type: boolean
15
18
  mergedCells:
16
19
  type: boolean
17
20
  default: false
@@ -65,9 +68,12 @@ symbols:
65
68
  - type: string
66
69
  allowed: [infer]
67
70
  clearSheet:
68
- type: boolean
69
71
  default: null
70
72
  nullable: true
73
+ oneof:
74
+ - type: string
75
+ allowed: [range]
76
+ - type: boolean
71
77
  mergedCells:
72
78
  type: boolean
73
79
  default: null
@@ -216,8 +216,12 @@ class SQLReader(ConnectAgent):
216
216
  pd.__version__, "2.2"
217
217
  ): # pandas < 2.2.0
218
218
  df = df.stack(dropna=False)
219
- else: # pandas >= 2.2.0
219
+ elif self._pandas_version_before(
220
+ pd.__version__, "3.0"
221
+ ): # 2.2.0 <= pandas < 3.0.0
220
222
  df = df.stack(future_stack=True)
223
+ else: # pandas >= 3.0.0
224
+ df = df.stack()
221
225
  if dim == 1:
222
226
  df = df.droplevel(
223
227
  level=0
@@ -117,6 +117,7 @@ class SQLWriter(ConnectAgent):
117
117
  self._describe_container(self._cdb.container, "Connect Container:")
118
118
 
119
119
  self._handler.validate_insert_method(method=self._insertMethod)
120
+ self._handler.is_schema_available(schema=self._schema_name)
120
121
  self._open()
121
122
 
122
123
  try:
@@ -170,6 +171,7 @@ class SQLWriter(ConnectAgent):
170
171
  insertMethod = sym["insertMethod"]
171
172
  skip_text = sym["skipText"]
172
173
  self._handler.validate_insert_method(method=insertMethod)
174
+ self._handler.is_schema_available(schema=schema)
173
175
 
174
176
  if self._small and table_name == "UEL$":
175
177
  self._connect_error(