project1 / lambda_utils.py
teamalphabmsit's picture
Upload folder using huggingface_hub
44504f7 verified
import re
from typing import Tuple, Any
def extract_code_in_one_cell(text: str, lang) -> tuple[bool, Any]: #
pattern = r'```{lang}([^\n]*)(.*?)```'.format(lang=lang)
matches = re.findall(pattern, text, re.DOTALL)
if len(matches)>1:
code_blocks = ''
for match in matches:
code_block = match[1]
code_blocks += code_block
return True, code_blocks
elif len(matches):
code_block = matches[-1]
#if 'python' in code_block[0]:
return True, code_block[1]
else:
return False, ''
def extract_code(text: str) -> tuple[bool, Any]:
pattern = r'```python([^\n]*)(.*?)```'
matches = re.findall(pattern, text, re.DOTALL)
if len(matches)>1:
code_blocks = ''
for match in matches:
code_block = match[1]
code_blocks += code_block
return True, code_blocks
elif len(matches):
code_block = matches[-1]
#if 'python' in code_block[0]:
return True, code_block[1]
else:
return False, ''
def remove_code_blocks(text):
pattern = r'(```.*?```)'
text = re.sub(pattern, '', text, flags=re.DOTALL)
text = text.replace("Execution result:", '')
return text
def check_msg_ua(msg):
corrected_lst = []
for item in msg:
if corrected_lst and corrected_lst[-1] == item:
continue
corrected_lst.append(item)
if corrected_lst and corrected_lst[-1] != 'assistant':
corrected_lst.append('assistant')
return corrected_lst
if __name__ == '__main__':
pmt = """
Retrieval: The retriever found the following pieces of code cloud address the problem. All functions are well-defined and have been executed in the back-end. So, you should directly refer to the core code and modify it as appropriate instead of re-implement any function in runnable function.
Core code (All functions have been well-defined in the runnable function):
```core_function
args = argparse.ArgumentParser()
args.net = 'nn_sigmoid'
args.lr = 5e-3
args.epochs = 30
args.wd = 0
args.b = 64
train_nn_network(args)
```
Runnable function (Have been executed in back-end):
```runnable
import numpy as np
import scipy.io as sio
import scipy
import sys
import time
import argparse
import torch
import math
from torch import nn
from torch.nn.utils.parametrizations import spectral_norm
from pathlib import Path
from torch import optim
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision import datasets
from tqdm import tqdm
def initialize_weights(tensor):
return tensor.uniform_() * math.sqrt(0.25 / (tensor.shape[0] + tensor.shape[1]))
class _RRAutoencoder(nn.Module):
def __init__(self):
super().__init__()
self.linear_1 = nn.Linear(784, 200)
self.linear_2 = nn.Linear(200, 784)
self.encoder = self.linear_1
self.decoder = self.linear_2
def forward(self, x):
x = self.encoder(x)
x = self.decoder(x)
return x
def clamp(self):
pass
class _NNAutoencoder(_RRAutoencoder):
def __init__(self):
super().__init__()
self.linear_1.bias.data.zero_()
self.linear_2.bias.data.zero_()
self.linear_1.weight = nn.Parameter(
initialize_weights(self.linear_1.weight.data)
)
self.linear_2.weight = nn.Parameter(
initialize_weights(self.linear_2.weight.data)
)
def clamp(self):
self.linear_1.weight.data.clamp_(min=0)
self.linear_2.weight.data.clamp_(min=0)
self.linear_1.bias.data.clamp_(min=0)
self.linear_2.bias.data.clamp_(min=0)
class _PNAutoencoder(_NNAutoencoder):
def clamp(self):
self.linear_1.weight.data.clamp_(min=1e-3)
self.linear_2.weight.data.clamp_(min=1e-3)
self.linear_1.bias.data.clamp_(min=0)
self.linear_2.bias.data.clamp_(min=0)
class _NRAutoencoder(_NNAutoencoder):
def clamp(self):
self.linear_1.weight.data.clamp_(min=0)
self.linear_2.weight.data.clamp_(min=0)
class SigmoidNNAutoencoder(_NNAutoencoder):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(self.linear_1, nn.Sigmoid())
self.decoder = nn.Sequential(self.linear_2, nn.Sigmoid())
class TanhNNAutoencoder(_NNAutoencoder):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(self.linear_1, nn.Tanh())
self.decoder = nn.Sequential(self.linear_2, nn.Tanh())
class TanhPNAutoencoder(_PNAutoencoder):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(self.linear_1, nn.Tanh())
self.decoder = nn.Sequential(self.linear_2, nn.Tanh())
class ReLUNNAutoencoder(_NNAutoencoder):
def __init__(self):
super().__init__()
self.linear_1 = spectral_norm(self.linear_1)
self.linear_2 = spectral_norm(self.linear_2)
self.encoder = nn.Sequential(self.linear_1, nn.ReLU())
self.decoder = nn.Sequential(self.linear_2, nn.ReLU())
def clamp(self):
self.linear_1.parametrizations.weight.original.data.clamp_(min=0)
self.linear_2.parametrizations.weight.original.data.clamp_(min=0)
self.linear_1.bias.data.clamp_(min=0)
self.linear_2.bias.data.clamp_(min=0)
class ReLUPNAutoencoder(_PNAutoencoder):
def __init__(self):
super().__init__()
self.linear_1 = spectral_norm(self.linear_1)
self.linear_2 = spectral_norm(self.linear_2)
self.encoder = nn.Sequential(self.linear_1, nn.ReLU())
self.decoder = nn.Sequential(self.linear_2, nn.ReLU())
def clamp(self):
self.linear_1.parametrizations.weight.original.data.clamp_(min=1e-3)
self.linear_2.parametrizations.weight.original.data.clamp_(min=1e-3)
self.linear_1.bias.data.clamp_(min=0)
self.linear_2.bias.data.clamp_(min=0)
class TanhSwishNNAutoencoder(_NNAutoencoder):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(self.linear_1, nn.Tanh())
self.decoder = nn.Sequential(self.linear_2, nn.SiLU())
class ReLUSigmoidNRAutoencoder(_NRAutoencoder):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(self.linear_1, nn.ReLU())
self.decoder = nn.Sequential(self.linear_2, nn.Sigmoid())
class ReLUSigmoidRRAutoencoder(_RRAutoencoder):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(self.linear_1, nn.ReLU())
self.decoder = nn.Sequential(self.linear_2, nn.Sigmoid())
def get_network(name):
match name:
case "nn_sigmoid":
return SigmoidNNAutoencoder()
case "nn_tanh":
return TanhNNAutoencoder()
case "pn_tanh":
return TanhPNAutoencoder()
case "nn_relu":
return ReLUNNAutoencoder()
case "pn_relu":
return ReLUPNAutoencoder()
case "nn_tanh_swish":
return TanhSwishNNAutoencoder()
case "nr_relu_sigmoid":
return ReLUSigmoidNRAutoencoder()
case "rr_relu_sigmoid":
return ReLUSigmoidRRAutoencoder()
case _:
raise NotImplementedError(
f"Autoencoder of name '{name}' currently is not supported"
)
class AverageMeter(object):
def __init__(self):
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0
self.count = 0
def update(self, val, n=1):
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
def epoch(loader, model, device, criterion, opt=None):
losses = AverageMeter()
if opt is None:
model.eval()
else:
model.train()
for inputs, _ in tqdm(loader, leave=False):
inputs = inputs.view(-1, 28 * 28).to(device)
outputs = model(inputs)
loss = criterion(outputs, inputs)
if opt:
opt.zero_grad(set_to_none=True)
loss.backward()
opt.step()
model.clamp()
losses.update(loss.item(), inputs.size(0))
return losses.avg
def train_nn_network(args):
# p = Path(__file__)
# weights_path = f"{p.parent}/weights"
# Path(weights_path).mkdir(parents=True, exist_ok=True)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = get_network(args.net)
model.to(device)
mnist_train = datasets.MNIST(
".", train=True, download=True, transform=transforms.ToTensor()
)
mnist_test = datasets.MNIST(
".", train=False, download=True, transform=transforms.ToTensor()
)
train_loader = DataLoader(
mnist_train, batch_size=args.b, shuffle=True, num_workers=4, pin_memory=True
)
test_loader = DataLoader(
mnist_test, batch_size=args.b, shuffle=False, num_workers=4, pin_memory=True
)
opt = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.wd)
criterion = nn.MSELoss()
best_loss = None
for i in range(1, args.epochs + 1):
train_loss = epoch(train_loader, model, device, criterion, opt)
test_loss = epoch(test_loader, model, device, criterion)
if best_loss is None or best_loss > test_loss:
best_loss = test_loss
# torch.save(model.state_dict(), f"{weights_path}/{args.net}.pth")
print(f"Epoch: {i} | Train Loss: {train_loss:.4f} | Test Loss: {test_loss:.4f}")
```
Your modified code:
```python
import argparse
args = argparse.ArgumentParser()
args.net = 'nn_sigmoid'
args.lr = 5e-3
args.epochs = 5 # Changed epochs to 5 as per the request
args.wd = 0
args.b = 64
train_nn_network(args)
```
"""
print(extract_code(pmt))
print(extract_code_in_one_cell(pmt,'python'))