codeshift 0.2.0__tar.gz → 0.2.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.
- {codeshift-0.2.0 → codeshift-0.2.1}/PKG-INFO +1 -1
- codeshift-0.2.1/codeshift/knowledge_base/libraries/fastapi.yaml +190 -0
- codeshift-0.2.1/codeshift/knowledge_base/libraries/pandas.yaml +311 -0
- codeshift-0.2.1/codeshift/knowledge_base/libraries/pydantic.yaml +253 -0
- codeshift-0.2.1/codeshift/knowledge_base/libraries/requests.yaml +263 -0
- codeshift-0.2.1/codeshift/knowledge_base/libraries/sqlalchemy.yaml +282 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift.egg-info/PKG-INFO +1 -1
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift.egg-info/SOURCES.txt +5 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/pyproject.toml +4 -1
- {codeshift-0.2.0 → codeshift-0.2.1}/LICENSE +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/README.md +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/analyzer/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/analyzer/risk_assessor.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/auth.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/config.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/database.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/main.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/models/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/models/auth.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/models/billing.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/models/migrate.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/models/usage.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/routers/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/routers/auth.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/routers/billing.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/routers/migrate.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/routers/usage.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/api/routers/webhooks.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/apply.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/auth.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/diff.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/scan.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/upgrade.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/commands/upgrade_all.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/main.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/cli/quota.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge/cache.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge/generator.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge/models.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge/parser.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge/sources.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge_base/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge_base/loader.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/knowledge_base/models.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/ast_transforms.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/engine.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/llm_migrator.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/transforms/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/transforms/fastapi_transformer.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/transforms/pandas_transformer.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/transforms/pydantic_v1_to_v2.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/transforms/requests_transformer.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/migrator/transforms/sqlalchemy_transformer.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/scanner/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/scanner/code_scanner.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/scanner/dependency_parser.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/utils/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/utils/api_client.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/utils/cache.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/utils/config.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/utils/llm_client.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/validator/__init__.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/validator/syntax_checker.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift/validator/test_runner.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift.egg-info/dependency_links.txt +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift.egg-info/entry_points.txt +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift.egg-info/requires.txt +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/codeshift.egg-info/top_level.txt +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/setup.cfg +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_code_scanner.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_fastapi_transforms.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_knowledge_base.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_pandas_transforms.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_pydantic_transforms.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_requests_transforms.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_risk_assessor.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_sqlalchemy_transforms.py +0 -0
- {codeshift-0.2.0 → codeshift-0.2.1}/tests/test_syntax_checker.py +0 -0
|
@@ -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
|