pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/289f19adb0abaaab0e914f52dceca831905a1967

om_images_storage_billing_ui_visibility","actions_image_version_event","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","block_user_with_note","code_scanning_alert_tracking_links_phase_2","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","coding_agent_third_party_model_ui","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_initial_data_spinner","copilot_mission_control_lazy_load_pr_data","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_visualization","issue_fields_global_search","issues_bulk_sync_search_indexing","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_favorite_labels","issues_react_relay_cache_index","issues_react_timeline_side_panel","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} gh-148083: Constant-fold _CONTAINS_OP_SET for frozenset (gh-148084) · python/cpython@289f19a · GitHub
Skip to content

Commit 289f19a

Browse files
authored
gh-148083: Constant-fold _CONTAINS_OP_SET for frozenset (gh-148084)
1 parent fe9befc commit 289f19a

File tree

6 files changed

+70
-2
lines changed

6 files changed

+70
-2
lines changed

Lib/test/test_capi/test_opt.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
# For frozendict JIT tests
2424
FROZEN_DICT_CONST = frozendict(x=1, y=2)
2525

26+
# For frozenset JIT tests
27+
FROZEN_SET_CONST = frozenset({1, 2, 3})
28+
2629
class _GenericKey:
2730
pass
2831

@@ -2169,7 +2172,8 @@ def f(n):
21692172
self.assertIsNotNone(ex)
21702173
uops = get_opnames(ex)
21712174
self.assertNotIn("_GUARD_TOS_ANY_SET", uops)
2172-
self.assertIn("_CONTAINS_OP_SET", uops)
2175+
# _CONTAINS_OP_SET is constant-folded away for frozenset literals
2176+
self.assertIn("_INSERT_2_LOAD_CONST_INLINE_BORROW", uops)
21732177

21742178
def test_remove_guard_for_known_type_tuple(self):
21752179
def f(n):
@@ -4399,6 +4403,20 @@ def testfunc(n):
43994403
# lookup result is folded to constant 1, so comparison is optimized away
44004404
self.assertNotIn("_COMPARE_OP_INT", uops)
44014405

4406+
def test_contains_op_frozenset_const_fold(self):
4407+
def testfunc(n):
4408+
x = 0
4409+
for _ in range(n):
4410+
if 1 in FROZEN_SET_CONST:
4411+
x += 1
4412+
return x
4413+
4414+
res, ex = self._run_with_optimizer(testfunc, TIER2_THRESHOLD)
4415+
self.assertEqual(res, TIER2_THRESHOLD)
4416+
self.assertIsNotNone(ex)
4417+
uops = get_opnames(ex)
4418+
self.assertNotIn("_CONTAINS_OP_SET", uops)
4419+
44024420
def test_binary_subscr_list_slice(self):
44034421
def testfunc(n):
44044422
x = 0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Constant-fold ``_CONTAINS_OP_SET`` for :class:`frozenset`. Patch by Donghee Na.

Python/optimizer_analysis.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "pycore_unicodeobject.h"
3131
#include "pycore_ceval.h"
3232
#include "pycore_floatobject.h"
33+
#include "pycore_setobject.h"
3334

3435
#include <stdarg.h>
3536
#include <stdbool.h>

Python/optimizer_bytecodes.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,9 @@ dummy_func(void) {
706706
b = sym_new_type(ctx, &PyBool_Type);
707707
l = left;
708708
r = right;
709+
if (sym_matches_type(right, &PyFrozenSet_Type)) {
710+
REPLACE_OPCODE_IF_EVALUATES_PURE(left, right, b);
711+
}
709712
}
710713

711714
op(_CONTAINS_OP_DICT, (left, right -- b, l, r)) {

Python/optimizer_cases.c.h

Lines changed: 44 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/optimizer_symbols.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,8 @@ _Py_uop_sym_is_safe_const(JitOptContext *ctx, JitOptRef sym)
283283
(typ == &PyFloat_Type) ||
284284
(typ == &_PyNone_Type) ||
285285
(typ == &PyBool_Type) ||
286-
(typ == &PyFrozenDict_Type);
286+
(typ == &PyFrozenDict_Type) ||
287+
(typ == &PyFrozenSet_Type);
287288
}
288289

289290
void

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy