mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-14 23:22:51 +00:00
parent
efc1be0a5b
commit
24dd5ea7e3
3 changed files with 67 additions and 0 deletions
49
graph.fabro
Normal file
49
graph.fabro
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
digraph SWEBench {
|
||||
graph [goal="Abstract model field should not be equal across models
|
||||
Description
|
||||
|
||||
Consider the following models:
|
||||
class A(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
myfield = IntegerField()
|
||||
class B(A):
|
||||
pass
|
||||
class C(A):
|
||||
pass
|
||||
If I pull the fields of B and C into a shared set, one will be de-duplicated away, because they compare as equal. I found this surprising, though in practice using a list was sufficient for my need. The root of the issue is that they compare equal, as fields only consider self.creation_counter when comparing for equality.
|
||||
len({B._meta.get_field('myfield'), C._meta.get_field('myfield')}) == 1
|
||||
B._meta.get_field('myfield') == C._meta.get_field('myfield')
|
||||
We should adjust __eq__ so that if the field.model is different, they will compare unequal. Similarly, it is probably wise to adjust __hash__ and __lt__ to match.
|
||||
When adjusting __lt__, it may be wise to order first by self.creation_counter so that cases not affected by this equality collision won't be re-ordered. In my experimental branch, there was one test that broke if I ordered them by model first.
|
||||
I brought this up on IRC django-dev to check my intuitions, and those conversing with me there seemed to agree that the current behavior is not intuitive.
|
||||
"]
|
||||
rankdir=LR
|
||||
|
||||
start [shape=Mdiamond]
|
||||
exit [shape=Msquare]
|
||||
|
||||
setup [label="Setup", shape=parallelogram, script="git clone https://github.com/django/django.git . && git checkout 453967477e3ddae704cd739eac2449c0e13d464c && python -m pip install -e ."]
|
||||
solve [label="Solve", prompt="Fix this GitHub issue in the repository. Make the minimal code change needed.\n\nAbstract model field should not be equal across models
|
||||
Description
|
||||
|
||||
Consider the following models:
|
||||
class A(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
myfield = IntegerField()
|
||||
class B(A):
|
||||
pass
|
||||
class C(A):
|
||||
pass
|
||||
If I pull the fields of B and C into a shared set, one will be de-duplicated away, because they compare as equal. I found this surprising, though in practice using a list was sufficient for my need. The root of the issue is that they compare equal, as fields only consider self.creation_counter when comparing for equality.
|
||||
len({B._meta.get_field('myfield'), C._meta.get_field('myfield')}) == 1
|
||||
B._meta.get_field('myfield') == C._meta.get_field('myfield')
|
||||
We should adjust __eq__ so that if the field.model is different, they will compare unequal. Similarly, it is probably wise to adjust __hash__ and __lt__ to match.
|
||||
When adjusting __lt__, it may be wise to order first by self.creation_counter so that cases not affected by this equality collision won't be re-ordered. In my experimental branch, there was one test that broke if I ordered them by model first.
|
||||
I brought this up on IRC django-dev to check my intuitions, and those conversing with me there seemed to agree that the current behavior is not intuitive.
|
||||
"]
|
||||
extract_patch [label="Extract Patch", shape=parallelogram, script="git diff"]
|
||||
|
||||
start -> setup -> solve -> extract_patch -> exit
|
||||
}
|
||||
13
manifest.json
Normal file
13
manifest.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"run_id": "01KKTJ3AJJBN9XG481JG4DYQBD",
|
||||
"workflow_name": "SWEBench",
|
||||
"goal": "Abstract model field should not be equal across models\nDescription\n\t\nConsider the following models:\nclass A(models.Model):\n\tclass Meta:\n\t\tabstract = True\n\tmyfield = IntegerField()\nclass B(A):\n\tpass\nclass C(A):\n\tpass\nIf I pull the fields of B and C into a shared set, one will be de-duplicated away, because they compare as equal. I found this surprising, though in practice using a list was sufficient for my need. The root of the issue is that they compare equal, as fields only consider self.creation_counter when comparing for equality.\nlen({B._meta.get_field('myfield'), C._meta.get_field('myfield')}) == 1\nB._meta.get_field('myfield') == C._meta.get_field('myfield')\nWe should adjust __eq__ so that if the field.model is different, they will compare unequal. Similarly, it is probably wise to adjust __hash__ and __lt__ to match.\nWhen adjusting __lt__, it may be wise to order first by self.creation_counter so that cases not affected by this equality collision won't be re-ordered. In my experimental branch, there was one test that broke if I ordered them by model first.\nI brought this up on IRC django-dev to check my intuitions, and those conversing with me there seemed to agree that the current behavior is not intuitive.\n",
|
||||
"start_time": "2026-03-16T05:32:37.423371Z",
|
||||
"node_count": 5,
|
||||
"edge_count": 4,
|
||||
"run_branch": "fabro/run/01KKTJ3AJJBN9XG481JG4DYQBD",
|
||||
"base_sha": "470fcfe1200b2102c0cdf91c73b0ed8d925f258a",
|
||||
"base_branch": "main",
|
||||
"workflow_slug": "django__django-13401",
|
||||
"host_repo_path": "/Users/bhelmkamp/p/fabro-sh/fabro/evals/swe-bench/results/opus-baseline/runs/django__django-13401"
|
||||
}
|
||||
5
sandbox.json
Normal file
5
sandbox.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"provider": "daytona",
|
||||
"working_directory": "/home/daytona/workspace",
|
||||
"identifier": "fabro-01KKTJ3AJJBN9XG481JG4DYQBD"
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue