)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d2a9a2e08cb4ae39bac195ae07fd8771e784bdef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6e1580e8_e8b9382d","updated":"2024-12-09 23:53:53.000000000","message":"Looks OK to me","commit_id":"96a40311c9a5a1e1a6d1e6a3f331fb242a3c1a57"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1d63c4b8a5050290629ca91b55f47e9334d9eaf0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f3ddc1dc_b7e627da","updated":"2025-01-07 20:05:55.000000000","message":"i ment to push up this comemtn before i went on pto.\n\ni ran out of time today but ill start form the bottom of the serise tomorrow","commit_id":"04718d65b60e817b5f47c5a3f50e302fe2302dfd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d7bd94c95e58bde618a3aafe1fa2bf25d7ab6c5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"14964a8e_cb132230","updated":"2024-12-12 03:26:32.000000000","message":"recheck ERROR nova.compute.manager [instance: 4f812f59-0f8a-4573-82eb-0e91c757132a] oslo_messaging.exceptions.MessagingTimeout: Timed out waiting for a reply to message ID d06a4213287642339dc86783e85e9855\n\nWeird message before that too: INFO oslo_messaging._drivers.amqpdriver [-] No calling threads waiting for msg_id : d06a4213287642339dc86783e85e9855\n\nFull traceback:\n\nhttps://paste.openstack.org/show/bsTMOpdhpAnxd1maKyvr/\n\nLog:\n\nhttps://zuul.opendev.org/t/openstack/build/50c7f0f8dd0e48b9bcb757fb2fb0336a/log/controller/logs/screen-n-cpu.txt#71055","commit_id":"04718d65b60e817b5f47c5a3f50e302fe2302dfd"}],"placement/objects/allocation_candidate.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36e0c9d383ca2c868080e59da51fbf6ac9ed7e4e","unresolved":true,"context_lines":[{"line_number":733,"context_line":"    num_granular_groups \u003d len(all_suffixes - set([\u0027\u0027]))"},{"line_number":734,"context_line":"    max_a_c \u003d rw_ctx.config.placement.max_allocation_candidates"},{"line_number":735,"context_line":"    for areq_lists_by_suffix in areq_lists_by_anchor.values():"},{"line_number":736,"context_line":"        # Filter out any entries that don\u0027t have allocation requests for"},{"line_number":737,"context_line":"        # *all* suffixes (i.e. all RequestGroups)"},{"line_number":738,"context_line":"        if set(areq_lists_by_suffix) !\u003d all_suffixes:"},{"line_number":739,"context_line":"            continue"},{"line_number":740,"context_line":"        # We\u0027re using itertools.product to go from this:"},{"line_number":741,"context_line":"        # areq_lists_by_suffix \u003d {"},{"line_number":742,"context_line":"        #     \u0027\u0027:   [areq__A,   areq__B,   ...],"},{"line_number":743,"context_line":"        #     \u00271\u0027:  [areq_1_A,  areq_1_B,  ...],"},{"line_number":744,"context_line":"        #     ..."},{"line_number":745,"context_line":"        #     \u002742\u0027: [areq_42_A, areq_42_B, ...],"},{"line_number":746,"context_line":"        # }"},{"line_number":747,"context_line":"        # to this:"},{"line_number":748,"context_line":"        # [ [areq__A, areq_1_A, ..., areq_42_A],  Each of these lists is one"},{"line_number":749,"context_line":"        #   [areq__A, areq_1_A, ..., areq_42_B],  areq_list in the loop below."},{"line_number":750,"context_line":"        #   [areq__A, areq_1_B, ..., areq_42_A],  each areq_list contains one"},{"line_number":751,"context_line":"        #   [areq__A, areq_1_B, ..., areq_42_B],  AllocationRequest from each"},{"line_number":752,"context_line":"        #   [areq__B, areq_1_A, ..., areq_42_A],  RequestGroup. So taken as a"},{"line_number":753,"context_line":"        #   [areq__B, areq_1_A, ..., areq_42_B],  whole, each list is a viable"},{"line_number":754,"context_line":"        #   [areq__B, areq_1_B, ..., areq_42_A],  (preliminary) candidate to"},{"line_number":755,"context_line":"        #   [areq__B, areq_1_B, ..., areq_42_B],  return."},{"line_number":756,"context_line":"        #   ...,"},{"line_number":757,"context_line":"        # ]"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        # This loops on each merged candidate where a candidate is represented"},{"line_number":760,"context_line":"        # by the areq_list containing the allocations that fulfills each"},{"line_number":761,"context_line":"        # request groups"},{"line_number":762,"context_line":"        for areq_list in itertools.product("},{"line_number":763,"context_line":"                *list(areq_lists_by_suffix.values())):"},{"line_number":764,"context_line":"            # At this point, each AllocationRequest in areq_list is still"},{"line_number":765,"context_line":"            # marked as use_same_provider. This is necessary to filter by group"},{"line_number":766,"context_line":"            # policy, which enforces how these interact with each other."}],"source_content_type":"text/x-python","patch_set":1,"id":"8ed07c2e_72d823a4","side":"PARENT","line":763,"range":{"start_line":736,"start_character":0,"end_line":763,"end_character":54},"updated":"2024-12-06 17:49:39.000000000","message":"this logic is pulled out to the helper","commit_id":"8589498abb9090713185af6dcdc8c84ad29ef774"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"898c4f8f130db61c9ffad2fecea4f5126fcc7c53","unresolved":false,"context_lines":[{"line_number":733,"context_line":"    num_granular_groups \u003d len(all_suffixes - set([\u0027\u0027]))"},{"line_number":734,"context_line":"    max_a_c \u003d rw_ctx.config.placement.max_allocation_candidates"},{"line_number":735,"context_line":"    for areq_lists_by_suffix in areq_lists_by_anchor.values():"},{"line_number":736,"context_line":"        # Filter out any entries that don\u0027t have allocation requests for"},{"line_number":737,"context_line":"        # *all* suffixes (i.e. all RequestGroups)"},{"line_number":738,"context_line":"        if set(areq_lists_by_suffix) !\u003d all_suffixes:"},{"line_number":739,"context_line":"            continue"},{"line_number":740,"context_line":"        # We\u0027re using itertools.product to go from this:"},{"line_number":741,"context_line":"        # areq_lists_by_suffix \u003d {"},{"line_number":742,"context_line":"        #     \u0027\u0027:   [areq__A,   areq__B,   ...],"},{"line_number":743,"context_line":"        #     \u00271\u0027:  [areq_1_A,  areq_1_B,  ...],"},{"line_number":744,"context_line":"        #     ..."},{"line_number":745,"context_line":"        #     \u002742\u0027: [areq_42_A, areq_42_B, ...],"},{"line_number":746,"context_line":"        # }"},{"line_number":747,"context_line":"        # to this:"},{"line_number":748,"context_line":"        # [ [areq__A, areq_1_A, ..., areq_42_A],  Each of these lists is one"},{"line_number":749,"context_line":"        #   [areq__A, areq_1_A, ..., areq_42_B],  areq_list in the loop below."},{"line_number":750,"context_line":"        #   [areq__A, areq_1_B, ..., areq_42_A],  each areq_list contains one"},{"line_number":751,"context_line":"        #   [areq__A, areq_1_B, ..., areq_42_B],  AllocationRequest from each"},{"line_number":752,"context_line":"        #   [areq__B, areq_1_A, ..., areq_42_A],  RequestGroup. So taken as a"},{"line_number":753,"context_line":"        #   [areq__B, areq_1_A, ..., areq_42_B],  whole, each list is a viable"},{"line_number":754,"context_line":"        #   [areq__B, areq_1_B, ..., areq_42_A],  (preliminary) candidate to"},{"line_number":755,"context_line":"        #   [areq__B, areq_1_B, ..., areq_42_B],  return."},{"line_number":756,"context_line":"        #   ...,"},{"line_number":757,"context_line":"        # ]"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        # This loops on each merged candidate where a candidate is represented"},{"line_number":760,"context_line":"        # by the areq_list containing the allocations that fulfills each"},{"line_number":761,"context_line":"        # request groups"},{"line_number":762,"context_line":"        for areq_list in itertools.product("},{"line_number":763,"context_line":"                *list(areq_lists_by_suffix.values())):"},{"line_number":764,"context_line":"            # At this point, each AllocationRequest in areq_list is still"},{"line_number":765,"context_line":"            # marked as use_same_provider. This is necessary to filter by group"},{"line_number":766,"context_line":"            # policy, which enforces how these interact with each other."}],"source_content_type":"text/x-python","patch_set":1,"id":"54aa0050_175b7424","side":"PARENT","line":763,"range":{"start_line":736,"start_character":0,"end_line":763,"end_character":54},"in_reply_to":"8ed07c2e_72d823a4","updated":"2025-01-08 19:24:12.000000000","message":"Acknowledged","commit_id":"8589498abb9090713185af6dcdc8c84ad29ef774"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36e0c9d383ca2c868080e59da51fbf6ac9ed7e4e","unresolved":true,"context_lines":[{"line_number":761,"context_line":"        # request groups"},{"line_number":762,"context_line":"        for areq_list in itertools.product("},{"line_number":763,"context_line":"                *list(areq_lists_by_suffix.values())):"},{"line_number":764,"context_line":"            # At this point, each AllocationRequest in areq_list is still"},{"line_number":765,"context_line":"            # marked as use_same_provider. This is necessary to filter by group"},{"line_number":766,"context_line":"            # policy, which enforces how these interact with each other."},{"line_number":767,"context_line":"            # TODO(efried): Move _satisfies_group_policy to rw_ctx?"},{"line_number":768,"context_line":"            if not _satisfies_group_policy("},{"line_number":769,"context_line":"                    areq_list, rw_ctx.group_policy, num_granular_groups):"},{"line_number":770,"context_line":"                continue"},{"line_number":771,"context_line":"            if not _satisfies_same_subtree(areq_list, rw_ctx):"},{"line_number":772,"context_line":"                continue"},{"line_number":773,"context_line":"            # Now we go from this (where \u0027arr\u0027 is AllocationRequestResource):"},{"line_number":774,"context_line":"            # [ areq__B(arrX, arrY, arrZ),"},{"line_number":775,"context_line":"            #   areq_1_A(arrM, arrN),"},{"line_number":776,"context_line":"            #   ...,"},{"line_number":777,"context_line":"            #   areq_42_B(arrQ)"},{"line_number":778,"context_line":"            # ]"},{"line_number":779,"context_line":"            # to this:"},{"line_number":780,"context_line":"            # areq_combined(arrX, arrY, arrZ, arrM, arrN, arrQ)"},{"line_number":781,"context_line":"            # Note that the information telling us which RequestGroup led to"},{"line_number":782,"context_line":"            # which piece of the AllocationRequest has been lost from the outer"},{"line_number":783,"context_line":"            # layer of the data structure (the key of areq_lists_by_suffix)."},{"line_number":784,"context_line":"            # \u003d\u003e We needed that to be present for the previous filter; we need"},{"line_number":785,"context_line":"            # it to be *absent* for the next one."},{"line_number":786,"context_line":"            # \u003d\u003e However, it still exists embedded in each"},{"line_number":787,"context_line":"            # AllocationRequestResource. That\u0027s needed to construct the"},{"line_number":788,"context_line":"            # mappings for the output."},{"line_number":789,"context_line":"            areq \u003d _consolidate_allocation_requests(areq_list, rw_ctx)"},{"line_number":790,"context_line":"            # Since we sourced this AllocationRequest from multiple"},{"line_number":791,"context_line":"            # *independent* queries, it\u0027s possible that the combined result"},{"line_number":792,"context_line":"            # now exceeds capacity where amounts of the same RP+RC were"},{"line_number":793,"context_line":"            # folded together.  So do a final capacity check/filter."},{"line_number":794,"context_line":"            if rw_ctx.exceeds_capacity(areq):"},{"line_number":795,"context_line":"                continue"},{"line_number":796,"context_line":"            areqs.add(areq)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"            if max_a_c \u003e\u003d 0 and len(areqs) \u003e\u003d max_a_c:"},{"line_number":799,"context_line":"                # This duplicated check will go away in the next patch that"}],"source_content_type":"text/x-python","patch_set":1,"id":"8a89ac97_e8210ee2","side":"PARENT","line":796,"range":{"start_line":764,"start_character":0,"end_line":796,"end_character":27},"updated":"2024-12-06 17:49:39.000000000","message":"this logic remains just indented out","commit_id":"8589498abb9090713185af6dcdc8c84ad29ef774"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"898c4f8f130db61c9ffad2fecea4f5126fcc7c53","unresolved":false,"context_lines":[{"line_number":761,"context_line":"        # request groups"},{"line_number":762,"context_line":"        for areq_list in itertools.product("},{"line_number":763,"context_line":"                *list(areq_lists_by_suffix.values())):"},{"line_number":764,"context_line":"            # At this point, each AllocationRequest in areq_list is still"},{"line_number":765,"context_line":"            # marked as use_same_provider. This is necessary to filter by group"},{"line_number":766,"context_line":"            # policy, which enforces how these interact with each other."},{"line_number":767,"context_line":"            # TODO(efried): Move _satisfies_group_policy to rw_ctx?"},{"line_number":768,"context_line":"            if not _satisfies_group_policy("},{"line_number":769,"context_line":"                    areq_list, rw_ctx.group_policy, num_granular_groups):"},{"line_number":770,"context_line":"                continue"},{"line_number":771,"context_line":"            if not _satisfies_same_subtree(areq_list, rw_ctx):"},{"line_number":772,"context_line":"                continue"},{"line_number":773,"context_line":"            # Now we go from this (where \u0027arr\u0027 is AllocationRequestResource):"},{"line_number":774,"context_line":"            # [ areq__B(arrX, arrY, arrZ),"},{"line_number":775,"context_line":"            #   areq_1_A(arrM, arrN),"},{"line_number":776,"context_line":"            #   ...,"},{"line_number":777,"context_line":"            #   areq_42_B(arrQ)"},{"line_number":778,"context_line":"            # ]"},{"line_number":779,"context_line":"            # to this:"},{"line_number":780,"context_line":"            # areq_combined(arrX, arrY, arrZ, arrM, arrN, arrQ)"},{"line_number":781,"context_line":"            # Note that the information telling us which RequestGroup led to"},{"line_number":782,"context_line":"            # which piece of the AllocationRequest has been lost from the outer"},{"line_number":783,"context_line":"            # layer of the data structure (the key of areq_lists_by_suffix)."},{"line_number":784,"context_line":"            # \u003d\u003e We needed that to be present for the previous filter; we need"},{"line_number":785,"context_line":"            # it to be *absent* for the next one."},{"line_number":786,"context_line":"            # \u003d\u003e However, it still exists embedded in each"},{"line_number":787,"context_line":"            # AllocationRequestResource. That\u0027s needed to construct the"},{"line_number":788,"context_line":"            # mappings for the output."},{"line_number":789,"context_line":"            areq \u003d _consolidate_allocation_requests(areq_list, rw_ctx)"},{"line_number":790,"context_line":"            # Since we sourced this AllocationRequest from multiple"},{"line_number":791,"context_line":"            # *independent* queries, it\u0027s possible that the combined result"},{"line_number":792,"context_line":"            # now exceeds capacity where amounts of the same RP+RC were"},{"line_number":793,"context_line":"            # folded together.  So do a final capacity check/filter."},{"line_number":794,"context_line":"            if rw_ctx.exceeds_capacity(areq):"},{"line_number":795,"context_line":"                continue"},{"line_number":796,"context_line":"            areqs.add(areq)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"            if max_a_c \u003e\u003d 0 and len(areqs) \u003e\u003d max_a_c:"},{"line_number":799,"context_line":"                # This duplicated check will go away in the next patch that"}],"source_content_type":"text/x-python","patch_set":1,"id":"74ee44b1_a8a17f26","side":"PARENT","line":796,"range":{"start_line":764,"start_character":0,"end_line":796,"end_character":27},"in_reply_to":"8a89ac97_e8210ee2","updated":"2025-01-08 19:24:12.000000000","message":"Acknowledged","commit_id":"8589498abb9090713185af6dcdc8c84ad29ef774"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36e0c9d383ca2c868080e59da51fbf6ac9ed7e4e","unresolved":true,"context_lines":[{"line_number":795,"context_line":"                continue"},{"line_number":796,"context_line":"            areqs.add(areq)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"            if max_a_c \u003e\u003d 0 and len(areqs) \u003e\u003d max_a_c:"},{"line_number":799,"context_line":"                # This duplicated check will go away in the next patch that"},{"line_number":800,"context_line":"                # refactors this logic a bit."},{"line_number":801,"context_line":"                break"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        if max_a_c \u003e\u003d 0 and len(areqs) \u003e\u003d max_a_c:"},{"line_number":804,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":1,"id":"deb05f42_78780121","side":"PARENT","line":801,"range":{"start_line":798,"start_character":0,"end_line":801,"end_character":21},"updated":"2024-12-06 17:49:39.000000000","message":"this is not needed as we don\u0027t have the nested for loop here any more so a simple break below is enough to exit.","commit_id":"8589498abb9090713185af6dcdc8c84ad29ef774"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"898c4f8f130db61c9ffad2fecea4f5126fcc7c53","unresolved":false,"context_lines":[{"line_number":795,"context_line":"                continue"},{"line_number":796,"context_line":"            areqs.add(areq)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"            if max_a_c \u003e\u003d 0 and len(areqs) \u003e\u003d max_a_c:"},{"line_number":799,"context_line":"                # This duplicated check will go away in the next patch that"},{"line_number":800,"context_line":"                # refactors this logic a bit."},{"line_number":801,"context_line":"                break"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"        if max_a_c \u003e\u003d 0 and len(areqs) \u003e\u003d max_a_c:"},{"line_number":804,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":1,"id":"139933f8_1aac9bbc","side":"PARENT","line":801,"range":{"start_line":798,"start_character":0,"end_line":801,"end_character":21},"in_reply_to":"deb05f42_78780121","updated":"2025-01-08 19:24:12.000000000","message":"Acknowledged","commit_id":"8589498abb9090713185af6dcdc8c84ad29ef774"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36e0c9d383ca2c868080e59da51fbf6ac9ed7e4e","unresolved":true,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"def _merge_candidates(candidates, rw_ctx):"},{"line_number":729,"context_line":"    \"\"\"Given a dict, keyed by RequestGroup suffix, of allocation_requests,"},{"line_number":730,"context_line":"    produce a single tuple of (allocation_requests, provider_summaries) that"}],"source_content_type":"text/x-python","patch_set":1,"id":"2743950d_6f19615b","line":727,"updated":"2024-12-06 17:49:39.000000000","message":"this is autopep8 :/","commit_id":"c52310a9a563b2a5e2bd720ebe7ff2c44e55afea"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1c702d9dab7f3372058b36fad8d9d6e533320d39","unresolved":true,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"def _merge_candidates(candidates, rw_ctx):"},{"line_number":729,"context_line":"    \"\"\"Given a dict, keyed by RequestGroup suffix, of allocation_requests,"},{"line_number":730,"context_line":"    produce a single tuple of (allocation_requests, provider_summaries) that"}],"source_content_type":"text/x-python","patch_set":1,"id":"998f088c_726a8cc2","line":727,"in_reply_to":"2743950d_6f19615b","updated":"2024-12-09 15:50:23.000000000","message":"yep its a module level comment so it wants 2 spaces.\n\nyou can turn off autopep8 with other commets for blocks and perhaps per line\nbut i have not realy looked into that much.\n\ni know stpehen has done it before however.\n\nhttps://pypi.org/project/autopep8/#disabling-line-by-line\n\nis more for an entire block of code so that not actully wahat you want here.\n#noqa might work but i just let it add these instead of fighting it.\n\ni belive its triggering on E26\n\nE26  - Fix spacing after comment hash for inline comments.\nE265 - Fix spacing after comment hash for block comments.\n\nso we coudl add that to the ignore list if we really wanted.\n\nhttps://pypi.org/project/autopep8/#features","commit_id":"c52310a9a563b2a5e2bd720ebe7ff2c44e55afea"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"81b0460cbe7b57ff79b0696a82b18736eef9aee1","unresolved":true,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"def _merge_candidates(candidates, rw_ctx):"},{"line_number":729,"context_line":"    \"\"\"Given a dict, keyed by RequestGroup suffix, of allocation_requests,"},{"line_number":730,"context_line":"    produce a single tuple of (allocation_requests, provider_summaries) that"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e2ea4b6_9b25288a","line":727,"in_reply_to":"410ae47a_483aaed4","updated":"2024-12-11 12:38:30.000000000","message":"* Adding `# noqa` at the end of the comment or top of the comment line does not help :/\n* adding `# autopep8: off` and `# autopep8: on` around the comment does not help either \n\n\nIt is actually triggering `E302 expected 2 blank lines, found 1` but that is in general useful so I would not like to add it to the global ignore.\n\nSo I guess we need to live with this change.","commit_id":"c52310a9a563b2a5e2bd720ebe7ff2c44e55afea"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b6c9f419803979a02eafc01a2d72ca5b681aa70a","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"def _merge_candidates(candidates, rw_ctx):"},{"line_number":729,"context_line":"    \"\"\"Given a dict, keyed by RequestGroup suffix, of allocation_requests,"},{"line_number":730,"context_line":"    produce a single tuple of (allocation_requests, provider_summaries) that"}],"source_content_type":"text/x-python","patch_set":1,"id":"12fd4dd0_442c91bc","line":727,"in_reply_to":"4e2ea4b6_9b25288a","updated":"2024-12-11 13:07:22.000000000","message":"ack, eventually we may consider moving to somethign like ruff, instead of autopep8 but for now autopep8 is to useful to remove in my opion and i agree E302 is also generally correct os ya lets just live with this slight annoyance.\n\nits still massivly net positive to quality of life.","commit_id":"c52310a9a563b2a5e2bd720ebe7ff2c44e55afea"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d2a9a2e08cb4ae39bac195ae07fd8771e784bdef","unresolved":true,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"def _merge_candidates(candidates, rw_ctx):"},{"line_number":729,"context_line":"    \"\"\"Given a dict, keyed by RequestGroup suffix, of allocation_requests,"},{"line_number":730,"context_line":"    produce a single tuple of (allocation_requests, provider_summaries) that"}],"source_content_type":"text/x-python","patch_set":1,"id":"410ae47a_483aaed4","line":727,"in_reply_to":"998f088c_726a8cc2","updated":"2024-12-09 23:53:53.000000000","message":"Too bad it\u0027s not smart enough to treat it like a regular code comment about the code below it.","commit_id":"c52310a9a563b2a5e2bd720ebe7ff2c44e55afea"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1d63c4b8a5050290629ca91b55f47e9334d9eaf0","unresolved":true,"context_lines":[{"line_number":719,"context_line":""},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"def _generate_areq_lists(areq_lists_by_anchor, all_suffixes):"},{"line_number":722,"context_line":"    generators \u003d _get_areq_list_generators(areq_lists_by_anchor, all_suffixes)"},{"line_number":723,"context_line":"    return itertools.chain(*generators)"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"# TODO(efried): Move _merge_candidates to rw_ctx?"},{"line_number":726,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"eb205bd5_7cd95d41","line":723,"range":{"start_line":722,"start_character":0,"end_line":723,"end_character":39},"updated":"2025-01-07 20:05:55.000000000","message":"nit: technically this is not a generator its  its an itteror of iterators that tempselve are lazy.\n\nso its still at least partially greedy in that we will greaddy constuct the list of iteraotrs which we then chain into a single iterator but\nthe products will be computed lazily as we iterate.\n\nso its mostly equvalent to a generator we are just not using yeild to yeild the values. we are isntead using the iterator interface to more  or less get the same result.\n\nthe delta is that product completely consumes it inputs at construciton\n\nhttps://docs.python.org/3/library/itertools.html#itertools.product\n\n```\nBefore product() runs, it completely consumes the input iterables,\nkeeping pools of values in memory to generate the products.\nAccordingly, it is only useful with finite inputs.\n```\n\nchain is lazy which is why itertools.chain(*generators)\ndoes not compute all the products when we create it.\nhttps://docs.python.org/3/library/itertools.html#itertools.chain","commit_id":"04718d65b60e817b5f47c5a3f50e302fe2302dfd"}]}
