internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: interlegis/sapl

Issue:
Número Ordem na Edição de Matéria do Expediente ou da Ordem do Dia
<!--- Forneça um resumo geral da _issue_ no título acima -->

## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->
Na edição de Matéria do Expediente ou da Ordem do Dia, o Número Ordem deve ser o mesmo que foi cadastrado.

## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Em alguns testes, na edição de Matéria do Expediente ou da Ordem do Dia, o Número Ordem era alterado sem a interferência do usuário.
 







Discussion:

Resolving patch:
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -583,9 +583,12 @@ class UpdateView(MasterDetailCrud.UpdateView):
 
         def get_initial(self):
             initial = super().get_initial()
+
             initial['tipo_materia'] = self.object.materia.tipo.id
             initial['numero_materia'] = self.object.materia.numero
             initial['ano_materia'] = self.object.materia.ano
+            initial['numero_ordem'] = self.object.numero_ordem
+
             return initial
 
     class DetailView(MasterDetailCrud.DetailView):
@@ -677,9 +680,12 @@ class UpdateView(MasterDetailCrud.UpdateView):
 
         def get_initial(self):
             initial = super().get_initial()
+
             initial['tipo_materia'] = self.object.materia.tipo.id
             initial['numero_materia'] = self.object.materia.numero
             initial['ano_materia'] = self.object.materia.ano
+            initial['numero_ordem'] = self.object.numero_ordem
+
             return initial
 
     class DetailView(MasterDetailCrud.DetailView):


Test patch:
Repository: interlegis/sapl

Issue:
Parlamentar que renunciou não aparece se Data Fim do Mandato estiver informada
## Comportamento Esperado
A lista de parlamentares deve mostrar todos.

## Comportamento Atual
OParlamentar que renunciou não é mostrado, caso do Vereador Rui Milbradt, que renunciou em 20/07/2020. Acho adequado informar a dada de Fim do Mandato.

## Passos para Reproduzir (para bugs)
https://sapl.agudo.rs.leg.br/parlamentar/

## Contexto
Consulta de parlamentares.

## Imagens do Ocorrido


## Seu Ambiente
Versão usada (Release): 3.1.161-RC2
Nome e versão do navegador: Versão 81.0.4044.138 (Versão oficial)
Nome e versão do Sistema Operacional (desktop ou mobile): Ubuntu 16.04 64 bits


Discussion:

Resolving patch:
diff --git a/sapl/api/views.py b/sapl/api/views.py
--- a/sapl/api/views.py
+++ b/sapl/api/views.py
@@ -381,19 +381,16 @@ def parlamentares_by_legislatura(self,request,*args,**kwargs):
         data_atual = timezone.now().date()
 
         filter_params = {
-            'legislatura':legislatura,
-            'data_inicio_mandato__gte':legislatura.data_inicio,
-            'data_fim_mandato__gte':legislatura.data_fim,
+            'legislatura': legislatura,
+            'data_inicio_mandato__gte': legislatura.data_inicio,
+            'data_fim_mandato__lte': legislatura.data_fim,
         }
 
-        if legislatura.data_inicio < data_atual < legislatura.data_fim:
-            filter_params['data_fim_mandato__gte'] = data_atual
-
-        mandatos = Mandato.objects.filter(**filter_params).order_by('-data_inicio_mandato')  
+        mandatos = Mandato.objects.filter(**filter_params).order_by('-data_inicio_mandato')
         parlamentares = Parlamentar.objects.filter(mandato__in=mandatos).distinct()
-        serializer_class = ParlamentarResumeSerializer(parlamentares,
-                                                        many=True,
-                                                        context={'request':request,'legislatura':kwargs['pk']})
+        serializer_class = ParlamentarResumeSerializer(parlamentares, many=True, context={
+            'request': request, 'legislatura': kwargs['pk']
+        })
         return Response(serializer_class.data)
 
     @action(detail=False,methods=['GET'])


Test patch:
Repository: interlegis/sapl

Issue:
Organizar formulário de Configurações da Aplicação
Seguir a modularização das tabelas auxilares concentrando configurações modulares que se segue, um fieldset para cada item da lista:
Configurações Gerais
Módulo Parlamentares
Módulo Mesa Diretora
Módulo Comissões
Módulo Bancadas Parlamentares
Módulo Proposições
Módulo Matéria Legislativa
Módulo Normas Jurídicas
Módulo Textos Articulados
Módulo Sessão Plenária
Módulo LexML
Módulo Administrativo

Sugiro refatorar o form com todos os fieldsets, reposicionar fields e depois desativar, mas não excluir, os fieldsets que ainda não possuem fields.



Discussion:

Resolving patch:
diff --git a/sapl/base/views.py b/sapl/base/views.py
--- a/sapl/base/views.py
+++ b/sapl/base/views.py
@@ -2117,6 +2117,7 @@ def get(self, request, *args, **kwargs):
 
     class UpdateView(CrudAux.UpdateView):
 
+        template_name = 'base/AppConfig.html'
         form_class = ConfiguracoesAppForm
 
         def form_valid(self, form):


Test patch:
Repository: interlegis/sapl

Issue:
Link de Matéria Legislative em Audiência
## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Quando clica-se no link da Matéria Legislativa, é redirecionado para outra Matéria Legislativa e não a com o título no link

## Possível Solução
<!--- Não é obrigatório, mas sugira uma possível correção/razão para o bug -->
<!--- ou ideias de como implementar a adição/mudança. -->
Número das audiências estão repetidos. Talvez isso tá causando o bug.


Discussion:

Resolving patch:
diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py
--- a/sapl/audiencia/forms.py
+++ b/sapl/audiencia/forms.py
@@ -115,12 +115,14 @@ def clean(self):
                 raise ValidationError(msg)
 
         if not cleaned_data['numero']:
-
             ultima_audiencia = AudienciaPublica.objects.all().order_by('numero').last()
             if ultima_audiencia:
                 cleaned_data['numero'] = ultima_audiencia.numero + 1
             else:
                 cleaned_data['numero'] = 1
+        else:
+            if AudienciaPublica.objects.filter(numero=cleaned_data['numero']).exclude(pk=self.instance.pk).exists():
+                raise ValidationError(f"Já existe uma audiência com a numeração {cleaned_data['numero']}.")
 
         if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']:
             if self.cleaned_data['hora_fim'] < self.cleaned_data['hora_inicio']:
diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py
--- a/sapl/audiencia/views.py
+++ b/sapl/audiencia/views.py
@@ -29,15 +29,13 @@ class ListView(Crud.ListView):
         def get_context_data(self, **kwargs):
             context = super().get_context_data(**kwargs)
 
-            audiencia_materia = {}
-            for o in context['object_list']:
-                # indexado pelo numero da audiencia
-                audiencia_materia[str(o.numero)] = o.materia
+            audiencia_materia = {str(a.id): a.materia for a in context['object_list']}
 
             for row in context['rows']:
-                coluna_materia = row[3] # se mudar a ordem de listagem mudar aqui
+                coluna_materia = row[3]  # se mudar a ordem de listagem mudar aqui
                 if coluna_materia[0]:
-                    materia = audiencia_materia[row[0][0]]
+                    audiencia_id = row[0][1].split('/')[-1]
+                    materia = audiencia_materia[audiencia_id]
                     if materia:
                         url_materia = reverse('sapl.materia:materialegislativa_detail',
                                               kwargs={'pk': materia.id})


Test patch:
Repository: interlegis/sapl

Issue:
Visualização de Audiências Públicas
Estamos utilizando o módulo de audiências públicas, mas temos várias pessoas que não entendem que ao clicar no número você acesso o conteúdo.
No módulo de sessões plenárias, este problema não acontece, pois pessoa vê o link no nome da sessão e clica para ver o conteúdo.
Existe alguma forma de montar a visualização da sessão plenária com os dados das audiências públicas?
Segue anexo imagens relacionadas.
[VisualizaçãoAudienciaPublica.pdf](https://github.com/interlegis/sapl/files/5523487/VisualizacaoAudienciaPublica.pdf)

https://sapl.saojoaodaboavista.sp.leg.br/


Discussion:

Resolving patch:
diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py
--- a/sapl/audiencia/views.py
+++ b/sapl/audiencia/views.py
@@ -19,8 +19,7 @@ class AudienciaCrud(Crud):
     public = [RP_LIST, RP_DETAIL, ]
 
     class BaseMixin(Crud.BaseMixin):
-        list_field_names = ['numero', 'nome', 'tipo', 'materia',
-                            'data'] 
+        list_field_names = [ 'nome', 'tipo', 'materia', 'data']
         ordering = '-data', 'nome', 'numero', 'tipo'
 
     class ListView(Crud.ListView):
@@ -29,19 +28,20 @@ class ListView(Crud.ListView):
         def get_context_data(self, **kwargs):
             context = super().get_context_data(**kwargs)
 
-            audiencia_materia = {str(a.id): a.materia for a in context['object_list']}
+            audiencia_materia = { str(a.id): (a.materia, a.numero) for a in context['object_list'] }
 
             for row in context['rows']:
-                coluna_materia = row[3]  # se mudar a ordem de listagem mudar aqui
+                audiencia_id = row[0][1].split('/')[-1]
+                tema = str(audiencia_materia[audiencia_id][1]) + ' - ' + row[0][0]
+                row[0] = (tema, row[0][1])
+                coluna_materia = row[2]                             # Se mudar a ordem de listagem, mudar aqui.
                 if coluna_materia[0]:
-                    audiencia_id = row[0][1].split('/')[-1]
-                    materia = audiencia_materia[audiencia_id]
+                    materia = audiencia_materia[audiencia_id][0]
                     if materia:
-                        url_materia = reverse('sapl.materia:materialegislativa_detail',
-                                              kwargs={'pk': materia.id})
+                        url_materia = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id})
                     else:
                         url_materia = None
-                    row[3] = (coluna_materia[0], url_materia)
+                    row[2] = (coluna_materia[0], url_materia)       # Se mudar a ordem de listagem, mudar aqui.
             return context
 
     class CreateView(Crud.CreateView):


Test patch:
Repository: interlegis/sapl

Issue:
Numeração de sessões por legislatura
## Comportamento Esperado
A numeração automática da criação de sessões deve dar continuidade à da sessão anterior, dentro da legislatura.

## Comportamento Atual
O número da nova sessão recomeça em 1, à exceção do tipo "Numeração única".

## Passos para Reproduzir (para bugs)
https://sapl.agudo.rs.leg.br/sessao/create

## Contexto
Adição de sessão plenária.

## Imagens do Ocorrido
![Captura de tela de 2021-12-06 13-59-31](https://user-images.githubusercontent.com/19169882/144890126-9e7e5286-f566-46e9-bf49-6ca2cc5933cc.png)
![Captura de tela de 2021-12-06 14-00-00](https://user-images.githubusercontent.com/19169882/144890169-06e02a20-168c-4421-9d3b-cc884f6e6cc7.png)

## Seu Ambiente
Versão usada (Release): 3.1.162-RC18
Nome e versão do navegador: Versão 95.0.4638.69 (Versão oficial)
Nome e versão do Sistema Operacional (desktop ou mobile): Ubuntu 18.04 64 bits


Discussion:
Considerar #2217

Resolving patch:
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -66,7 +66,7 @@ def clean(self):
             "para a Legislatura, Sessão Legislativa e Tipo informados. "
             "Favor escolher um número distinto.")
 
-        qs = tipo.queryset_tipo_numeracao(leg, sl, abertura)
+        qs = tipo.build_predicados_queryset(leg, sl, abertura)
         qs &= Q(numero=num)
 
         if SessaoPlenaria.objects.filter(qs).exclude(pk=instance.pk).exists():
diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py
--- a/sapl/sessao/models.py
+++ b/sapl/sessao/models.py
@@ -103,7 +103,7 @@ class Meta:
     def __str__(self):
         return self.nome
 
-    def queryset_tipo_numeracao(self, legislatura, sessao_legislativa, data):
+    def build_predicados_queryset(self, legislatura, sessao_legislativa, data):
 
         qs = Q(tipo=self)
         tnc = self.TIPO_NUMERACAO_CHOICES
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1143,9 +1143,9 @@ def get_success_url(self):
 
 def recuperar_numero_sessao_view(request):
     try:
-        tipo = TipoSessaoPlenaria.objects.get(pk=request.GET.get('tipo', '0'))
-        sl = request.GET.get('sessao_legislativa', '0')
-        l = request.GET.get('legislatura', '0')
+        tipo = TipoSessaoPlenaria.objects.get(pk=request.GET.get('tipo'))
+        sl = request.GET.get('sessao_legislativa')
+        l = request.GET.get('legislatura')
         data = request.GET.get('data_inicio', timezone.now())
 
         if isinstance(data, str):
@@ -1155,7 +1155,7 @@ def recuperar_numero_sessao_view(request):
                 data = timezone.now().date()
 
         sessao = SessaoPlenaria.objects.filter(
-            tipo.queryset_tipo_numeracao(
+            tipo.build_predicados_queryset(
                 l, sl, data
             )).last()
 


Test patch:
Repository: tinygrad/tinygrad

Issue:
EOFError: Ran out of input
When running example and solving "Can't import fetch from utils" issue, this one comes up:

![](https://user-images.githubusercontent.com/55894077/98364197-a42f1480-2030-11eb-99c8-d0784873ae22.png)



Discussion:

Resolving patch:
diff --git a/tinygrad/utils.py b/tinygrad/utils.py
--- a/tinygrad/utils.py
+++ b/tinygrad/utils.py
@@ -1,4 +1,5 @@
 import numpy as np
+import os
 
 def mask_like(like, mask_inx, mask_value = 1.0):
   mask = np.zeros_like(like).reshape(-1)
@@ -12,7 +13,7 @@ def layer_init_uniform(*x):
 def fetch(url):
   import requests, os, hashlib, tempfile
   fp = os.path.join(tempfile.gettempdir(), hashlib.md5(url.encode('utf-8')).hexdigest())    
-  if os.path.isfile(fp):
+  if os.path.isfile(fp) and os.stat(fp).st_size > 0:
     with open(fp, "rb") as f:
       dat = f.read()
   else:


Test patch:
Repository: tinygrad/tinygrad

Issue:
LLVM test failing without OPT
OPT=1 LLVM=1 python3 test/test_ops.py TestOps.test_topo_sort

Still failing, but default OPT is now 2 so you have to say OPT=1 to make it fail.


Discussion:

Resolving patch:
diff --git a/tinygrad/ast.py b/tinygrad/ast.py
--- a/tinygrad/ast.py
+++ b/tinygrad/ast.py
@@ -32,9 +32,7 @@ def __repr__(self): return f"<{self.typ}{'*' if self.ptr else str()} {self.tok}{
 # ast kernel can contain one ReduceOp with arbitrary Binary/Unary ops
 class ASTKernel:
   def __init__(self, ast:LazyOp, output_buffer=None):
-    # key for lookup in cache (can change, str might not be right)
     self.input_ast = ast
-    self.key = str(ast)
 
     # if the AST ends with a RESHAPE, we remove it and create the buffer accordingly
     if ast.op == MovementOps.RESHAPE:
@@ -59,6 +57,10 @@ def __init__(self, ast:LazyOp, output_buffer=None):
     self.ret = output_buffer if output_buffer else type(self.bufs[0])(output_shape if output_shape else self.info.shape, force_create=True)
     self.bufs = ([type(self.ret)(self.info.shape, hostbuf=self.ret)] if output_shape else [self.ret]) + self.bufs
 
+    # key for lookup in cache (can change, str might not be right)
+    # bufs are needed because kernels like f(x) = x + x and f(x, y) = x + y have the same str(ast), but are different kernels.
+    self.key = f"ASTKernelKey ast={str(ast)} bufs={self.bufs}"
+
   def process(self) -> None:
     if hasattr(self, "sts"): return   # already processed
 


Test patch:
Repository: tinygrad/tinygrad

Issue:
Assertion error running deep_deterministic_policy_gradient.py example
- Python 3.9.2
- osx M1

` python3 deep_deterministic_policy_gradient.py`

```
cuda backend not available No module named 'pycuda'
gpu backend not available No module named 'pyopencl'
metal backend not available No module named 'Metal'
Traceback (most recent call last):
  File "tinygrad/examples/deep_deterministic_policy_gradient.py", line 229, in <module>
    agent = DeepDeterministicPolicyGradient(env)
  File "tinygrad/examples/deep_deterministic_policy_gradient.py", line 166, in __init__
    self.update_network_parameters(tau=1.0)
  File "tinygrad/examples/deep_deterministic_policy_gradient.py", line 176, in update_network_parameters
    target_param.assign(param * tau + target_param * (1.0 - tau))
  File "tinygrad/tinygrad/tensor.py", line 83, in assign
    assert not x.requires_grad  # self requires_grad is okay?
AssertionError
```


Discussion:

Resolving patch:
diff --git a/examples/deep_deterministic_policy_gradient.py b/examples/deep_deterministic_policy_gradient.py
--- a/examples/deep_deterministic_policy_gradient.py
+++ b/examples/deep_deterministic_policy_gradient.py
@@ -173,12 +173,12 @@ def update_network_parameters(self, tau: Optional[float] = None) -> None:
     for param, target_param in zip(
         optim.get_parameters(self.actor), optim.get_parameters(self.target_actor)
     ):
-      target_param.assign(param * tau + target_param * (1.0 - tau))
+      target_param.assign(param.detach() * tau + target_param * (1.0 - tau))
 
     for param, target_param in zip(
         optim.get_parameters(self.critic), optim.get_parameters(self.target_critic)
     ):
-      target_param.assign(param * tau + target_param * (1.0 - tau))
+      target_param.assign(param.detach() * tau + target_param * (1.0 - tau))
 
   def choose_action(self, state: Tensor, evaluate: bool = False) -> NDArray:
     mu = self.actor.forward(state, self.max_action)


Test patch:
Repository: tinygrad/tinygrad

Issue:
Broadcasting discrepancies
```python
import torch
from tinygrad.tensor import Tensor

A = torch.ones(4, 3)
B = torch.ones(1, 3, 3, 3)
C = A @ B


# torch torch.Size([1, 3, 4, 3])
print('torch', C.shape)

D = Tensor.ones(4, 3)
E = Tensor.ones(1, 3, 3, 3)
F = D @ E

# tinygrad (4, 9)
print('tinygrad', F.shape)
```

ref: 
https://pytorch.org/docs/stable/notes/broadcasting.html
https://numpy.org/doc/stable/user/basics.broadcasting.html
https://github.com/geohot/tinygrad/pull/114



Discussion:

Resolving patch:
diff --git a/tinygrad/tensor.py b/tinygrad/tensor.py
--- a/tinygrad/tensor.py
+++ b/tinygrad/tensor.py
@@ -388,7 +388,8 @@ def conv2d(self, weight:Tensor, bias:Optional[Tensor]=None, groups=1, stride=1,
   def dot(self, w:Tensor) -> Tensor:
     x = self.reshape(*self.shape[0:-1], 1, self.shape[-1])
     w = w.reshape(*w.shape[0:-2], 1, w.shape[-2], w.shape[-1]).transpose(-1, -2)
-    return (x*w).sum(-1).reshape(*x.shape[0:-2], -1)
+    r = (x*w).sum(-1)
+    return r.reshape((*r.shape[:-2], r.shape[-1])) if len(self.shape) == 1 else r
 
   # ***** mlops (unary) *****
 


Test patch:
diff --git a/test/test_ops.py b/test/test_ops.py
--- a/test/test_ops.py
+++ b/test/test_ops.py
@@ -186,6 +186,14 @@ def test_matmul_simple(self):
     helper_test_op([(4), (4,4)], lambda x,y: x.matmul(y), Tensor.dot, atol=1e-4)
   def test_matmul(self):
     helper_test_op([(64), (64,99)], lambda x,y: x.matmul(y), Tensor.dot, atol=1e-4)
+
+  @unittest.skipIf(IMAGE>0, "no batched matmul on images")
+  def test_matmul_batched(self):
+    helper_test_op([(3), (1,3,3,5)], lambda x,y: x.matmul(y), Tensor.dot, atol=1e-4)
+
+  @unittest.skipIf(IMAGE>0, "no batched matmul on images")
+  def test_matmul_batched_vector(self):
+    helper_test_op([(4,3), (1,3,3,5)], lambda x,y: x.matmul(y), Tensor.dot, atol=1e-4)
   def test_gemm(self):
     helper_test_op([(64,64), (64,64)], lambda x,y: x.matmul(y), Tensor.dot, atol=1e-3)
   def test_broadcastdot(self):
Repository: tinygrad/tinygrad

Issue:
Use tokens as the 'tiny' metric instead of lines
The current state of things is goofy. Your lines are long as heck because you promised to keep things under 1000 lines. That's obviously cheating, and SLoC is a bad metric anyway. Better to set an upper bound on the number of tokens, as counted by Python's `tokenize`.

If you want to put an upper bound on code complexity, use units which can't be "stuffed" with extra complexity.


Discussion:
Want to add this metric to `sz.sh`?

Resolving patch:
diff --git a/count_tokens.py b/count_tokens.py
new file mode 100755
--- /dev/null
+++ b/count_tokens.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+
+import os
+import token
+import tokenize
+
+
+TOKEN_WHITELIST = [
+  token.OP,
+  token.NAME,
+  token.NUMBER,
+  token.STRING
+]
+
+
+if __name__ == "__main__":
+  count_by_file = {}
+
+  for path, subdirs, files in os.walk("tinygrad"):
+    for name in files:
+      if not name.endswith(".py"):
+        continue
+      filepath = os.path.join(path, name)
+      with tokenize.open(filepath) as file_:
+        tokens = tokenize.generate_tokens(file_.readline)
+        count_by_file[filepath] = len([t for t in tokens if t.type in TOKEN_WHITELIST])
+
+  count_by_file = dict(sorted(count_by_file.items(), key=lambda el: el[1], reverse=True))
+  max_length = max(len(k) for k in count_by_file.keys()) + 10
+  print(f"{'File':<{max_length}}  {'Token count'}")
+  print('-' * (max_length + 14))
+  for key, value in count_by_file.items():
+    print(f"{key:<{max_length}}  {value}")
+  print('-' * (max_length + 14))
+  print(f"{'Total':<{max_length}} {sum(count_by_file.values())}")


Test patch: