Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doc/fpl22 #79

Merged
merged 8 commits into from
Sep 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions documentation/tutorial_fpl_2022/01-introduction/Exercise1/bambu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash
script=$(readlink -e $0)
root_dir=$(dirname $script)

rm -rf icrc1
mkdir -p icrc1
cd icrc1
echo "#synthesis of icrc1"
bambu ../icrc.c --top-fname=icrc1 \
--generate-tb=../test_icrc1.xml --simulator=VERILATOR --simulate \
-v2 --print-dot --pretty-print=a.c "$@" |& tee icrc1.log
14 changes: 14 additions & 0 deletions documentation/tutorial_fpl_2022/01-introduction/Exercise1/icrc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
unsigned short icrc1(unsigned short crc, unsigned char onech)
{
int i;
unsigned short ans=(crc^onech << 8);

for (i=0;i<8;i++) {
if (ans & 0x8000)
ans = (ans <<= 1) ^ 4129;
else
ans <<= 1;
}
return ans;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
void min_max(int * input, int num_elements, int * max, int * min)
{
int local_max = input[0];
int local_min = input[0];
int i = 0;
for(i = 0; i < num_elements; i++)
{
if(input[i] > local_max)
{
local_max = input[i];
}
else if(input[i] < local_min)
{
local_min = input[i];
}
}
*min = local_min;
*max = local_max;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/bash
bambu minmax.c --generate-tb=testbench.xml --simulate "$@" |& tee log.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0"?>
<function>
<testbench input="{0,1,2,3,4}" num_elements="5" max="{0}" min="{0}"/>
<testbench input="{0,1,2,3,4,5,6,7,8,9}" num_elements="10" max="{0}" min="{0}"/>
<testbench input="{0,0,0,0,0,0,0,0,0,0}" num_elements="10" max="{0}" min="{0}"/>
<testbench input="{0}" num_elements="1" max="{0}" min="{0}"/>
</function>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/bash
bambu matmul.ll --top-fname=main_kernel --generate-tb=test.xml --simulate --simulator=VERILATOR --compiler=I386_CLANG12 "$@" |& tee log.txt
637 changes: 637 additions & 0 deletions documentation/tutorial_fpl_2022/01-introduction/Exercise3/matmul.ll

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<function>
<testbench
P0="{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}"
P1="{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}"
P2="{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}"
/>
</function>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/bash
bambu proxies.c --top-fname=funcA "$@" |& tee log.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
int __attribute__ ((noinline)) funcC(int a[2]){
return a[0] * a[0] + a[1] * a[1];
}

int __attribute__ ((noinline)) funcB(int a[2]){
int i;
for(i=0; i<2; i++)
a[i] = a[i] + 1;
return funcC(a);
}

int funcA(){
int temp1, temp2;
int a[2] = {0,1};
temp1 = funcC(a);
temp2 = funcB(a);
return temp1 + temp2;
}

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions documentation/tutorial_fpl_2022/01-introduction/Exercise5/bambu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash
script=$(readlink -e $0)
root_dir=$(dirname $script)

rm -rf ludecomp
mkdir -p ludecomp
cd ludecomp
echo "#synthesis of fun"
bambu $root_dir/LUdecomposition.c --top-fname=fun \
-O1 \
--generate-tb=$root_dir/test.xml --simulate --simulator=VERILATOR \
-v2 --print-dot "$@" |& tee log.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0"?>
<function>
<testbench A="{1.0, 1.0, 1.0, 1.0, 1.0, 4.0, 2.0, 3.0, 1.0, 2.0, 1.0, 2.0, 1.0, 1.0, 1.0, 0.0}" invA="{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}" x="{0.0, 0.0, 0.0, 0.0}" b="{63.0, 105.0, 48.0, 186.0}" I="{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}"/>
</function>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

!bambu helm.c --top-fname=helm_naive -Icommon.h --simulate --simulator=VERILATOR --generate-tb=test.xml --compiler=I386_CLANG6
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#pragma once

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef float real_t;

real_t* make_empty(size_t size)
{
return (real_t*)calloc(size, sizeof(real_t));
}

real_t* make_random(size_t size)
{
real_t* result = make_empty(size);
if (!result) return NULL;

real_t* end = result + size;
for (real_t* ptr = result; ptr != end; ++ptr) {
*ptr = ((real_t)random() / RAND_MAX) * (real_t)(2) - (real_t)(1);
}

return result;
}

real_t* make_copy(const real_t* data, size_t size)
{
real_t* result = make_empty(size);
if (!result) return NULL;

memcpy(result, data, size*sizeof(real_t));
return result;
}

real_t mse(const real_t* a, const real_t* b, size_t size)
{
real_t accu = 0;
const real_t* a_end = a + size;
for (; a != a_end; ++a,++b) {
real_t err = (*a - *b);
accu += err * err;
}
return accu / (real_t)(size);
}
146 changes: 146 additions & 0 deletions documentation/tutorial_fpl_2022/01-introduction/Exercise5a/helm.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
#include "common.h"

#pragma GCC diagnostic ignored "-Wincompatible-pointer-types"

const size_t P = 11;

void helm_naive(
real_t w[P],
real_t L[P][P],
real_t d[4],
real_t u[P][P][P],
real_t r[P][P][P]
)
{
for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
r[x][y][z] = d[0] * w[x] * w[y] * w[z] * u[x][y][z];
}

for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t accu = 0;
for (size_t k = 0; k < P; ++k) {
accu += L[x][k] * w[y] * w[z] * u[k][y][z];
}
r[x][y][z] += d[1] * accu;
}

for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t accu = 0;
for (size_t k = 0; k < P; ++k) {
accu += w[x] * L[y][k] * w[z] * u[x][k][z];
}
r[x][y][z] += d[2] * accu;
}

for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t accu = 0;
for (size_t k = 0; k < P; ++k) {
accu += w[x] * w[y] * L[z][k] * u[x][y][k];
}
r[x][y][z] += d[3] * accu;
}
}

void helm_factor_impl(
real_t w[P],
real_t L[P][P],
real_t d[4],
real_t u[P][P][P],
real_t L_hat[P][P],
real_t M_u[P][P][P],
real_t r[P][P][P]
)
{
for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t M_u_xyz = w[x] * w[y] * w[z] * u[x][y][z];
M_u[x][y][z] = M_u_xyz;
r[x][y][z] = M_u_xyz * d[0];
}

for (size_t i = 0; i < P; ++i)
for (size_t j = 0; j < P; ++j) {
L_hat[i][j] = L[i][j] / w[j];
}

for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t accu = 0;
for (size_t k = 0; k < P; ++k) {
accu += L_hat[x][k] * M_u[k][y][z];
}
r[x][y][z] += d[1] * accu;
}

for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t accu = 0;
for (size_t k = 0; k < P; ++k) {
accu += L_hat[y][k] * M_u[x][k][z];
}
r[x][y][z] += d[2] * accu;
}

for (size_t x = 0; x < P; ++x)
for (size_t y = 0; y < P; ++y)
for (size_t z = 0; z < P; ++z) {
real_t accu = 0;
for (size_t k = 0; k < P; ++k) {
accu += L_hat[z][k] * M_u[x][y][k];
}
r[x][y][z] += d[3] * accu;
}
}

void helm_factor(
real_t w[P],
real_t L[P][P],
real_t d[4],
real_t u[P][P][P],
real_t r[P][P][P]
)
{
real_t* L_hat = make_empty(P*P);
real_t* M_u = make_empty(P*P*P);

helm_factor_impl(
w,
L,
d,
u,
L_hat,
M_u,
r
);
}

int main(int argc, const char* argv[])
{
srandom(0xDEADBEEF);

real_t* w = make_random(P);
real_t* L = make_random(P*P);
real_t* d = make_random(4);
real_t* u = make_random(P*P*P);

real_t* r1 = make_empty(P*P*P);
helm_naive(w, L, d, u, r1);

real_t* r2 = make_empty(P*P*P);
helm_factor(w, L, d, u, r2);
real_t mse2 = mse(r1, r2, P*P*P);
printf("mse2 = %G\n", mse2);

return EXIT_SUCCESS;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<function>
<testbench
w="{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}"
L="{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}}"
d="{1.6,2.4,3.6,4.2}"
u="{{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}}}"
r="{{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}},{{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10},{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10}}}"
/>
</function>
Loading