codeshift 0.2.0__tar.gz → 0.3.1__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 (85) hide show
  1. {codeshift-0.2.0 → codeshift-0.3.1}/PKG-INFO +1 -1
  2. codeshift-0.3.1/codeshift/knowledge_base/libraries/fastapi.yaml +190 -0
  3. codeshift-0.3.1/codeshift/knowledge_base/libraries/pandas.yaml +311 -0
  4. codeshift-0.3.1/codeshift/knowledge_base/libraries/pydantic.yaml +253 -0
  5. codeshift-0.3.1/codeshift/knowledge_base/libraries/requests.yaml +263 -0
  6. codeshift-0.3.1/codeshift/knowledge_base/libraries/sqlalchemy.yaml +282 -0
  7. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift.egg-info/PKG-INFO +1 -1
  8. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift.egg-info/SOURCES.txt +5 -0
  9. codeshift-0.3.1/pyproject.toml +73 -0
  10. codeshift-0.2.0/pyproject.toml +0 -117
  11. {codeshift-0.2.0 → codeshift-0.3.1}/LICENSE +0 -0
  12. {codeshift-0.2.0 → codeshift-0.3.1}/README.md +0 -0
  13. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/__init__.py +0 -0
  14. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/analyzer/__init__.py +0 -0
  15. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/analyzer/risk_assessor.py +0 -0
  16. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/__init__.py +0 -0
  17. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/auth.py +0 -0
  18. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/config.py +0 -0
  19. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/database.py +0 -0
  20. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/main.py +0 -0
  21. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/models/__init__.py +0 -0
  22. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/models/auth.py +0 -0
  23. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/models/billing.py +0 -0
  24. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/models/migrate.py +0 -0
  25. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/models/usage.py +0 -0
  26. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/routers/__init__.py +0 -0
  27. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/routers/auth.py +0 -0
  28. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/routers/billing.py +0 -0
  29. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/routers/migrate.py +0 -0
  30. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/routers/usage.py +0 -0
  31. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/api/routers/webhooks.py +0 -0
  32. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/__init__.py +0 -0
  33. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/__init__.py +0 -0
  34. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/apply.py +0 -0
  35. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/auth.py +0 -0
  36. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/diff.py +0 -0
  37. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/scan.py +0 -0
  38. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/upgrade.py +0 -0
  39. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/commands/upgrade_all.py +0 -0
  40. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/main.py +0 -0
  41. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/cli/quota.py +0 -0
  42. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge/__init__.py +0 -0
  43. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge/cache.py +0 -0
  44. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge/generator.py +0 -0
  45. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge/models.py +0 -0
  46. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge/parser.py +0 -0
  47. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge/sources.py +0 -0
  48. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge_base/__init__.py +0 -0
  49. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge_base/loader.py +0 -0
  50. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/knowledge_base/models.py +0 -0
  51. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/__init__.py +0 -0
  52. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/ast_transforms.py +0 -0
  53. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/engine.py +0 -0
  54. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/llm_migrator.py +0 -0
  55. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/transforms/__init__.py +0 -0
  56. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/transforms/fastapi_transformer.py +0 -0
  57. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/transforms/pandas_transformer.py +0 -0
  58. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/transforms/pydantic_v1_to_v2.py +0 -0
  59. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/transforms/requests_transformer.py +0 -0
  60. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/migrator/transforms/sqlalchemy_transformer.py +0 -0
  61. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/scanner/__init__.py +0 -0
  62. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/scanner/code_scanner.py +0 -0
  63. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/scanner/dependency_parser.py +0 -0
  64. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/utils/__init__.py +0 -0
  65. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/utils/api_client.py +0 -0
  66. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/utils/cache.py +0 -0
  67. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/utils/config.py +0 -0
  68. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/utils/llm_client.py +0 -0
  69. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/validator/__init__.py +0 -0
  70. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/validator/syntax_checker.py +0 -0
  71. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift/validator/test_runner.py +0 -0
  72. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift.egg-info/dependency_links.txt +0 -0
  73. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift.egg-info/entry_points.txt +0 -0
  74. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift.egg-info/requires.txt +0 -0
  75. {codeshift-0.2.0 → codeshift-0.3.1}/codeshift.egg-info/top_level.txt +0 -0
  76. {codeshift-0.2.0 → codeshift-0.3.1}/setup.cfg +0 -0
  77. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_code_scanner.py +0 -0
  78. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_fastapi_transforms.py +0 -0
  79. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_knowledge_base.py +0 -0
  80. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_pandas_transforms.py +0 -0
  81. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_pydantic_transforms.py +0 -0
  82. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_requests_transforms.py +0 -0
  83. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_risk_assessor.py +0 -0
  84. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_sqlalchemy_transforms.py +0 -0
  85. {codeshift-0.2.0 → codeshift-0.3.1}/tests/test_syntax_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeshift
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: AI-powered CLI tool that migrates Python code to handle breaking dependency changes
5
5
  Author: PyResolve Team
6
6
  License: MIT
@@ -0,0 +1,190 @@
1
+ # FastAPI Knowledge Base
2
+ # Breaking changes from 0.x to 0.100+/1.0
3
+
4
+ name: fastapi
5
+ display_name: FastAPI
6
+ description: Modern, fast web framework for building APIs with Python based on type hints
7
+ migration_guide_url: https://fastapi.tiangolo.com/release-notes/
8
+
9
+ supported_migrations:
10
+ - from: "0.99"
11
+ to: "0.100"
12
+ - from: "0.x"
13
+ to: "1.0"
14
+
15
+ breaking_changes:
16
+ # Pydantic v2 compatibility changes (0.100+)
17
+ - symbol: "response_model_exclude_unset"
18
+ change_type: behavior_changed
19
+ severity: medium
20
+ from_version: "0.99"
21
+ to_version: "0.100"
22
+ description: "Pydantic v2 changes how unset fields are handled in response models"
23
+ replacement: "Use response_model_exclude_unset=True explicitly"
24
+ has_deterministic_transform: false
25
+ notes: "Behavior may differ between Pydantic v1 and v2"
26
+
27
+ - symbol: "Field(regex=...)"
28
+ change_type: renamed
29
+ severity: medium
30
+ from_version: "0.99"
31
+ to_version: "0.100"
32
+ description: "Pydantic Field regex parameter renamed to pattern"
33
+ replacement: "Field(pattern=...)"
34
+ has_deterministic_transform: true
35
+ transform_name: field_regex_to_pattern
36
+
37
+ - symbol: "Body(regex=...)"
38
+ change_type: renamed
39
+ severity: medium
40
+ from_version: "0.99"
41
+ to_version: "0.100"
42
+ description: "Body regex parameter renamed to pattern"
43
+ replacement: "Body(pattern=...)"
44
+ has_deterministic_transform: true
45
+ transform_name: body_regex_to_pattern
46
+
47
+ - symbol: "Query(regex=...)"
48
+ change_type: renamed
49
+ severity: medium
50
+ from_version: "0.99"
51
+ to_version: "0.100"
52
+ description: "Query regex parameter renamed to pattern"
53
+ replacement: "Query(pattern=...)"
54
+ has_deterministic_transform: true
55
+ transform_name: query_regex_to_pattern
56
+
57
+ - symbol: "Path(regex=...)"
58
+ change_type: renamed
59
+ severity: medium
60
+ from_version: "0.99"
61
+ to_version: "0.100"
62
+ description: "Path regex parameter renamed to pattern"
63
+ replacement: "Path(pattern=...)"
64
+ has_deterministic_transform: true
65
+ transform_name: path_regex_to_pattern
66
+
67
+ # Deprecated features
68
+ - symbol: "from starlette.responses import JSONResponse"
69
+ change_type: deprecated
70
+ severity: low
71
+ from_version: "0.x"
72
+ to_version: "1.0"
73
+ description: "Import JSONResponse directly from fastapi.responses instead"
74
+ replacement: "from fastapi.responses import JSONResponse"
75
+ has_deterministic_transform: true
76
+ transform_name: starlette_to_fastapi_responses
77
+
78
+ - symbol: "from starlette.requests import Request"
79
+ change_type: deprecated
80
+ severity: low
81
+ from_version: "0.x"
82
+ to_version: "1.0"
83
+ description: "Import Request directly from fastapi instead"
84
+ replacement: "from fastapi import Request"
85
+ has_deterministic_transform: true
86
+ transform_name: starlette_to_fastapi_request
87
+
88
+ - symbol: "from starlette.status import *"
89
+ change_type: deprecated
90
+ severity: low
91
+ from_version: "0.x"
92
+ to_version: "1.0"
93
+ description: "Import status from fastapi instead"
94
+ replacement: "from fastapi import status"
95
+ has_deterministic_transform: true
96
+ transform_name: starlette_to_fastapi_status
97
+
98
+ - symbol: "from starlette.websockets import WebSocket"
99
+ change_type: deprecated
100
+ severity: low
101
+ from_version: "0.x"
102
+ to_version: "1.0"
103
+ description: "Import WebSocket directly from fastapi instead"
104
+ replacement: "from fastapi import WebSocket"
105
+ has_deterministic_transform: true
106
+ transform_name: starlette_to_fastapi_websocket
107
+
108
+ # OpenAPI schema changes
109
+ - symbol: "openapi_prefix"
110
+ change_type: removed
111
+ severity: medium
112
+ from_version: "0.x"
113
+ to_version: "0.100"
114
+ description: "openapi_prefix parameter removed from FastAPI app"
115
+ replacement: "Use root_path parameter instead"
116
+ has_deterministic_transform: true
117
+ transform_name: openapi_prefix_to_root_path
118
+
119
+ - symbol: "app.openapi_schema"
120
+ change_type: behavior_changed
121
+ severity: low
122
+ from_version: "0.99"
123
+ to_version: "0.100"
124
+ description: "OpenAPI schema generation updated for Pydantic v2 compatibility"
125
+ replacement: "Review generated schema for Pydantic v2 format"
126
+ has_deterministic_transform: false
127
+ notes: "Schema structure may differ slightly"
128
+
129
+ # Dependency Injection changes
130
+ - symbol: "Depends(use_cache=False)"
131
+ change_type: renamed
132
+ severity: low
133
+ from_version: "0.x"
134
+ to_version: "0.100"
135
+ description: "use_cache parameter renamed to use_cached"
136
+ replacement: "Depends(use_cached=False)"
137
+ has_deterministic_transform: true
138
+ transform_name: depends_use_cache_rename
139
+
140
+ # Response model changes
141
+ - symbol: "response_model_by_alias"
142
+ change_type: behavior_changed
143
+ severity: medium
144
+ from_version: "0.99"
145
+ to_version: "0.100"
146
+ description: "Pydantic v2 changes alias behavior in response models"
147
+ replacement: "Use model_config = ConfigDict(populate_by_name=True) in Pydantic models"
148
+ has_deterministic_transform: false
149
+ notes: "May require updates to Pydantic models"
150
+
151
+ # Form and File handling
152
+ - symbol: "UploadFile.file"
153
+ change_type: behavior_changed
154
+ severity: low
155
+ from_version: "0.x"
156
+ to_version: "0.100"
157
+ description: "UploadFile.file is now a SpooledTemporaryFile with async methods"
158
+ replacement: "Use await file.read() instead of file.file.read()"
159
+ has_deterministic_transform: false
160
+ notes: "Async methods preferred for file operations"
161
+
162
+ # Security utilities
163
+ - symbol: "OAuth2PasswordRequestForm"
164
+ change_type: behavior_changed
165
+ severity: low
166
+ from_version: "0.x"
167
+ to_version: "0.100"
168
+ description: "OAuth2PasswordRequestForm scopes parameter handling changed"
169
+ replacement: "Check scopes handling in your authentication flow"
170
+ has_deterministic_transform: false
171
+
172
+ # Background tasks
173
+ - symbol: "BackgroundTasks.add_task"
174
+ change_type: behavior_changed
175
+ severity: low
176
+ from_version: "0.x"
177
+ to_version: "0.100"
178
+ description: "BackgroundTasks now uses anyio for better async handling"
179
+ replacement: "No code changes required, but behavior may differ"
180
+ has_deterministic_transform: false
181
+
182
+ # Middleware changes
183
+ - symbol: "app.add_middleware"
184
+ change_type: behavior_changed
185
+ severity: medium
186
+ from_version: "0.x"
187
+ to_version: "0.100"
188
+ description: "Middleware execution order and exception handling improved"
189
+ replacement: "Review middleware order and exception handling"
190
+ has_deterministic_transform: false
@@ -0,0 +1,311 @@
1
+ # Pandas Knowledge Base
2
+ # Breaking changes from 1.x to 2.0
3
+
4
+ name: pandas
5
+ display_name: Pandas
6
+ description: Powerful data structures for data analysis, time series, and statistics
7
+ migration_guide_url: https://pandas.pydata.org/docs/whatsnew/v2.0.0.html
8
+
9
+ supported_migrations:
10
+ - from: "1.5"
11
+ to: "2.0"
12
+
13
+ breaking_changes:
14
+ # Major deprecations and removals
15
+ - symbol: "DataFrame.append()"
16
+ change_type: removed
17
+ severity: high
18
+ from_version: "1.5"
19
+ to_version: "2.0"
20
+ description: "DataFrame.append() removed in favor of pd.concat()"
21
+ replacement: "pd.concat([df1, df2], ignore_index=True)"
22
+ has_deterministic_transform: true
23
+ transform_name: append_to_concat
24
+ notes: "Use pd.concat() with a list of DataFrames"
25
+
26
+ - symbol: "Series.append()"
27
+ change_type: removed
28
+ severity: high
29
+ from_version: "1.5"
30
+ to_version: "2.0"
31
+ description: "Series.append() removed in favor of pd.concat()"
32
+ replacement: "pd.concat([s1, s2], ignore_index=True)"
33
+ has_deterministic_transform: true
34
+ transform_name: series_append_to_concat
35
+
36
+ - symbol: "DataFrame.iteritems()"
37
+ change_type: removed
38
+ severity: medium
39
+ from_version: "1.5"
40
+ to_version: "2.0"
41
+ description: "iteritems() removed, use items() instead"
42
+ replacement: "DataFrame.items()"
43
+ has_deterministic_transform: true
44
+ transform_name: iteritems_to_items
45
+
46
+ - symbol: "Series.iteritems()"
47
+ change_type: removed
48
+ severity: medium
49
+ from_version: "1.5"
50
+ to_version: "2.0"
51
+ description: "iteritems() removed, use items() instead"
52
+ replacement: "Series.items()"
53
+ has_deterministic_transform: true
54
+ transform_name: series_iteritems_to_items
55
+
56
+ # Index changes
57
+ - symbol: "Index.is_monotonic"
58
+ change_type: removed
59
+ severity: medium
60
+ from_version: "1.5"
61
+ to_version: "2.0"
62
+ description: "is_monotonic removed, use is_monotonic_increasing"
63
+ replacement: "Index.is_monotonic_increasing"
64
+ has_deterministic_transform: true
65
+ transform_name: is_monotonic_to_increasing
66
+
67
+ - symbol: "Index.is_all_dates"
68
+ change_type: removed
69
+ severity: low
70
+ from_version: "1.5"
71
+ to_version: "2.0"
72
+ description: "is_all_dates removed"
73
+ replacement: "isinstance(index, pd.DatetimeIndex)"
74
+ has_deterministic_transform: false
75
+ notes: "Check index type directly instead"
76
+
77
+ # Datetime and timezone changes
78
+ - symbol: "DatetimeIndex.to_pydatetime()"
79
+ change_type: behavior_changed
80
+ severity: medium
81
+ from_version: "1.5"
82
+ to_version: "2.0"
83
+ description: "Returns array of datetime objects, not ndarray"
84
+ replacement: "DatetimeIndex.to_pydatetime()"
85
+ has_deterministic_transform: false
86
+ notes: "Return type changed but method signature same"
87
+
88
+ - symbol: "datetime64[ns]"
89
+ change_type: behavior_changed
90
+ severity: high
91
+ from_version: "1.5"
92
+ to_version: "2.0"
93
+ description: "datetime64 now supports multiple resolutions (s, ms, us, ns)"
94
+ replacement: "datetime64[ns] still supported but other resolutions available"
95
+ has_deterministic_transform: false
96
+ notes: "Check dtype explicitly if nanosecond precision required"
97
+
98
+ # Copy behavior changes
99
+ - symbol: "DataFrame.copy()"
100
+ change_type: behavior_changed
101
+ severity: high
102
+ from_version: "1.5"
103
+ to_version: "2.0"
104
+ description: "Copy-on-Write (CoW) mode introduced, changes copy semantics"
105
+ replacement: "Use .copy() explicitly when mutation intended"
106
+ has_deterministic_transform: false
107
+ notes: "Enable with pd.options.mode.copy_on_write = True"
108
+
109
+ - symbol: "DataFrame[col]"
110
+ change_type: behavior_changed
111
+ severity: high
112
+ from_version: "1.5"
113
+ to_version: "2.0"
114
+ description: "Indexing returns view by default, changes with CoW"
115
+ replacement: "Use .loc or .iloc for explicit selection"
116
+ has_deterministic_transform: false
117
+ notes: "CoW affects chained assignment detection"
118
+
119
+ # Groupby changes
120
+ - symbol: "GroupBy.apply()"
121
+ change_type: behavior_changed
122
+ severity: medium
123
+ from_version: "1.5"
124
+ to_version: "2.0"
125
+ description: "apply() no longer called twice on first group for inference"
126
+ replacement: "Same API but may need to update expected behavior"
127
+ has_deterministic_transform: false
128
+ notes: "Performance improvement, but side-effect behavior changes"
129
+
130
+ - symbol: "DataFrameGroupBy.mean(numeric_only=None)"
131
+ change_type: signature_changed
132
+ severity: medium
133
+ from_version: "1.5"
134
+ to_version: "2.0"
135
+ description: "numeric_only defaults to False instead of None"
136
+ replacement: "GroupBy.mean(numeric_only=True)"
137
+ has_deterministic_transform: true
138
+ transform_name: groupby_numeric_only
139
+ notes: "Explicitly set numeric_only for non-numeric columns"
140
+
141
+ - symbol: "DataFrameGroupBy.sum()"
142
+ change_type: signature_changed
143
+ severity: medium
144
+ from_version: "1.5"
145
+ to_version: "2.0"
146
+ description: "numeric_only defaults to False"
147
+ replacement: "GroupBy.sum(numeric_only=True)"
148
+ has_deterministic_transform: true
149
+ transform_name: groupby_sum_numeric_only
150
+
151
+ - symbol: "DataFrameGroupBy.prod()"
152
+ change_type: signature_changed
153
+ severity: medium
154
+ from_version: "1.5"
155
+ to_version: "2.0"
156
+ description: "numeric_only defaults to False"
157
+ replacement: "GroupBy.prod(numeric_only=True)"
158
+ has_deterministic_transform: true
159
+ transform_name: groupby_prod_numeric_only
160
+
161
+ # read_* function changes
162
+ - symbol: "pd.read_csv()"
163
+ change_type: behavior_changed
164
+ severity: medium
165
+ from_version: "1.5"
166
+ to_version: "2.0"
167
+ description: "Default dtype backend changed, considers nullable types"
168
+ replacement: "Explicitly set dtype_backend='numpy' for old behavior"
169
+ has_deterministic_transform: false
170
+ notes: "New nullable dtypes may be inferred"
171
+
172
+ - symbol: "pd.read_json()"
173
+ change_type: behavior_changed
174
+ severity: medium
175
+ from_version: "1.5"
176
+ to_version: "2.0"
177
+ description: "orient='table' with StringIO behavior changed"
178
+ replacement: "Pass string directly instead of StringIO"
179
+ has_deterministic_transform: false
180
+
181
+ - symbol: "pd.read_excel()"
182
+ change_type: behavior_changed
183
+ severity: low
184
+ from_version: "1.5"
185
+ to_version: "2.0"
186
+ description: "Default engine changed for .xls files"
187
+ replacement: "Specify engine='xlrd' explicitly for .xls files"
188
+ has_deterministic_transform: false
189
+
190
+ # Nullable dtypes
191
+ - symbol: "Int64"
192
+ change_type: behavior_changed
193
+ severity: medium
194
+ from_version: "1.5"
195
+ to_version: "2.0"
196
+ description: "Nullable Int64 dtype now more widely inferred"
197
+ replacement: "Same API, check for NA handling"
198
+ has_deterministic_transform: false
199
+ notes: "Better NA support but behavior may differ"
200
+
201
+ - symbol: "StringDtype"
202
+ change_type: behavior_changed
203
+ severity: low
204
+ from_version: "1.5"
205
+ to_version: "2.0"
206
+ description: "String dtype behavior improved with pyarrow backend"
207
+ replacement: "pd.StringDtype('pyarrow') for Arrow-backed strings"
208
+ has_deterministic_transform: false
209
+
210
+ # Sorting changes
211
+ - symbol: "DataFrame.sort_values(inplace=True)"
212
+ change_type: behavior_changed
213
+ severity: medium
214
+ from_version: "1.5"
215
+ to_version: "2.0"
216
+ description: "inplace operations deprecated in many contexts"
217
+ replacement: "df = df.sort_values(...)"
218
+ has_deterministic_transform: true
219
+ transform_name: remove_inplace_sort
220
+
221
+ # Method signature changes
222
+ - symbol: "DataFrame.to_csv(line_terminator=...)"
223
+ change_type: renamed
224
+ severity: low
225
+ from_version: "1.5"
226
+ to_version: "2.0"
227
+ description: "line_terminator renamed to lineterminator"
228
+ replacement: "to_csv(lineterminator='\\n')"
229
+ has_deterministic_transform: true
230
+ transform_name: line_terminator_rename
231
+
232
+ # Resample changes
233
+ - symbol: "Resampler.apply()"
234
+ change_type: behavior_changed
235
+ severity: medium
236
+ from_version: "1.5"
237
+ to_version: "2.0"
238
+ description: "Resample apply no longer calls func twice on first group"
239
+ replacement: "Same API, remove workarounds for double-call"
240
+ has_deterministic_transform: false
241
+
242
+ # Deprecated syntax
243
+ - symbol: "df.groupby(level=...)"
244
+ change_type: deprecated
245
+ severity: low
246
+ from_version: "1.5"
247
+ to_version: "2.0"
248
+ description: "level parameter deprecated in some contexts"
249
+ replacement: "Use df.groupby(df.index.get_level_values(level))"
250
+ has_deterministic_transform: false
251
+
252
+ # Index constructor changes
253
+ - symbol: "pd.Index([], dtype=object)"
254
+ change_type: behavior_changed
255
+ severity: low
256
+ from_version: "1.5"
257
+ to_version: "2.0"
258
+ description: "Empty Index dtype inference changed"
259
+ replacement: "Explicitly specify dtype for empty Index"
260
+ has_deterministic_transform: false
261
+
262
+ # DataFrame constructor changes
263
+ - symbol: "DataFrame(data, dtype=...)"
264
+ change_type: behavior_changed
265
+ severity: medium
266
+ from_version: "1.5"
267
+ to_version: "2.0"
268
+ description: "dtype parameter behavior with mixed types changed"
269
+ replacement: "Use astype() after construction for explicit conversion"
270
+ has_deterministic_transform: false
271
+
272
+ # String methods
273
+ - symbol: "Series.str.split(expand=True)"
274
+ change_type: behavior_changed
275
+ severity: low
276
+ from_version: "1.5"
277
+ to_version: "2.0"
278
+ description: "Split with expand returns nullable string dtype"
279
+ replacement: "Same API, check for NA handling in result"
280
+ has_deterministic_transform: false
281
+
282
+ # Window operations
283
+ - symbol: "Rolling.apply()"
284
+ change_type: behavior_changed
285
+ severity: low
286
+ from_version: "1.5"
287
+ to_version: "2.0"
288
+ description: "raw parameter default changed for numba engine"
289
+ replacement: "Explicitly set raw=True for numba"
290
+ has_deterministic_transform: false
291
+
292
+ # Removed deprecated features
293
+ - symbol: "DataFrame.swaplevel()"
294
+ change_type: signature_changed
295
+ severity: low
296
+ from_version: "1.5"
297
+ to_version: "2.0"
298
+ description: "axis parameter removed"
299
+ replacement: "Use df.swaplevel(i, j) without axis"
300
+ has_deterministic_transform: true
301
+ transform_name: swaplevel_remove_axis
302
+
303
+ - symbol: "DataFrame.reorder_levels()"
304
+ change_type: signature_changed
305
+ severity: low
306
+ from_version: "1.5"
307
+ to_version: "2.0"
308
+ description: "axis parameter deprecated"
309
+ replacement: "Use df.reorder_levels(order) without axis"
310
+ has_deterministic_transform: true
311
+ transform_name: reorder_levels_remove_axis