-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy path2e1c805f-4412-4836-89cf-099ed0ea6b1a.py
435 lines (409 loc) · 27.6 KB
/
2e1c805f-4412-4836-89cf-099ed0ea6b1a.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
# This program was generated by "Generative Art Synthesizer"
# Generation date: 2021-11-28 09:21:40 UTC
# GAS change date: 2021-11-28 09:20:21 UTC
# GAS md5 hash: ad55481e87ca5a7e9a8e92cd336d1cad
# Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)]
# For more information visit: https://github.com/volotat/GAS
#import python libraries
import os #OS version: default
import numpy as np #Numpy version: 1.19.5
from PIL import Image #PIL version: 8.1.2
#set initial params
SIZE = 768
GRID_CHANNELS = 16
def test_values(arr):
if np.isnan(arr).any():
raise Exception('Array has None elements!')
if np.amin(arr) < -1 or np.amax(arr) > 1:
raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) )
return arr
#define grid transformation methods
def transit(x, t_indx, s_indx, alphas):
res = x.copy()
res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1)
return test_values(res.clip(-1,1))
def sin(x, t_indx, s_indx, scale = 1, shift = 0):
res = x.copy()
res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift)
return test_values(res)
def magnitude(x, t_indx, s_indx, ord = 2):
res = x.copy()
res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx))
return test_values(res)
def shift(x, t_indx, s_indx, shift):
res = x.copy()
if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1
if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1
return test_values(res)
def inverse(x, t_indx, s_indx):
res = x.copy()
res[:,:,t_indx] = -x[:,:,s_indx]
return test_values(res)
def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10):
res = x.copy()
res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07
return test_values(res)
def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10):
res = x.copy()
res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07
return test_values(res)
def prod(x, t_indx, s_indx):
res = x.copy()
res[:,:,t_indx] = np.prod(x[:,:,s_indx], -1)
return test_values(res)
def power(x, t_indx, s_indx, p = 1):
res = x.copy()
res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p
return test_values(res)
#set initial grid
grid = np.zeros((SIZE, SIZE, GRID_CHANNELS))
x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0)
y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1)
grid[:,:,0] = (x * -0.9772301245363628 + y * 0.8284220097588726) / 2
grid[:,:,1] = (x * 0.7420413787751454 + y * 0.6273879040295758) / 2
grid[:,:,2] = (x * 0.569970194339448 + y * 0.8920712193380254) / 2
grid[:,:,3] = (x * -0.8884570765949966 + y * -0.44881538298591384) / 2
grid[:,:,4] = (x * -0.24512827958625172 + y * -0.6422190420422715) / 2
grid[:,:,5] = (x * -0.404753905826309 + y * 0.16725757576209088) / 2
grid[:,:,6] = (x * 0.6457454463473065 + y * -0.102285521023467) / 2
grid[:,:,7] = (x * -0.7875394814390695 + y * 0.9770767057810901) / 2
grid[:,:,8] = (x * -0.15177977570233758 + y * 0.1422174133569869) / 2
grid[:,:,9] = (x * -0.4267695017023727 + y * -0.8589723135588523) / 2
grid[:,:,10] = (x * -0.11839373318029556 + y * 0.5454291761338037) / 2
grid[:,:,11] = (x * 0.3152114096183598 + y * 0.7262805774814525) / 2
grid[:,:,12] = (x * -0.8954804985897968 + y * -0.22413306137159172) / 2
grid[:,:,13] = (x * -0.3133199738581147 + y * 0.20507786648133308) / 2
grid[:,:,14] = (x * -0.6839754616903377 + y * -0.7946186897127587) / 2
grid[:,:,15] = (x * 0.7959679193241125 + y * 0.5522310099131351) / 2
#apply transformations to the grid
grid = transit(grid, 3, [5, 7, 6], [0.3962714411774644, 0.16006533786274288, 0.4436632209597928])
grid = transit(grid, 3, [2, 8], [0.8282175584710026, 0.1717824415289974])
grid = smooth_min(grid, 11, 4, 10)
grid = sin(grid, 15, 10, -2.81187111779213, 30.578741710847567)
grid = transit(grid, 14, [0, 14, 3, 5, 4, 1, 15, 7, 2, 12], [0.04492951531949313, 0.1032769741585513, 0.008554626273320575, 0.1844301483989783, 0.05155668920945148, 0.04160566130789678, 0.17616204890719003, 0.017987918391588635, 0.12047709102397088, 0.25101932700955903])
grid = transit(grid, 10, [12, 2, 7], [0.36511568140482437, 0.17439221854571188, 0.46049210004946384])
grid = transit(grid, 10, [7, 4], [0.6535874824116772, 0.34641251758832287])
grid = sin(grid, 2, 12, -0.4758589463774113, -99.12584391135941)
grid = sin(grid, 4, 2, -0.3858384440513433, -22.882493543511416)
grid = magnitude(grid, 13, [0, 12, 10, 6, 1], 2)
grid = transit(grid, 11, [14, 11, 8, 10, 0, 12, 4, 7, 2, 6], [0.15295981848089954, 0.012265148075395487, 0.028653751554135645, 0.019861051798936002, 0.15738431647714352, 0.01838775936004726, 0.2751820776499543, 0.14441436721151604, 0.04884491772421227, 0.14204679166776002])
grid = sin(grid, 6, 4, -1.7715712770765584, 35.838852883924886)
grid = transit(grid, 1, [6], [1.0])
grid = power(grid, 7, 13, 3.8529210059457264)
grid = transit(grid, 6, [7, 1, 15], [0.26181749491390116, 0.44583064675686784, 0.292351858329231])
grid = transit(grid, 2, [10, 3, 14, 2, 8, 15], [0.3138760563225663, 0.08548117913572588, 0.10909271963915138, 0.1612205187685257, 0.22185421791229454, 0.10847530822173618])
grid = transit(grid, 3, [5, 13, 0, 7, 8, 15, 1, 12, 14], [0.013130821893185684, 0.03351546264980958, 0.184946934997818, 0.016233123832323462, 0.01274956107925013, 0.01784086973040233, 0.142833895109279, 0.35051313075699164, 0.2282361999509403])
grid = prod(grid, 3, [5, 1])
grid = prod(grid, 3, [8, 4, 10, 12, 3, 6, 7])
grid = sin(grid, 15, 14, -2.711991836272408, -98.867794982127)
grid = magnitude(grid, 7, [13, 9, 7, 3, 5, 0, 6, 1, 10], 2)
grid = smooth_min(grid, 8, 1, 10)
grid = transit(grid, 11, [1, 2, 12, 8, 7, 0, 13, 5, 15], [0.03461378270853012, 0.033625481496332855, 0.009577141463165411, 0.17942247888813548, 0.18105482324212022, 0.1330544067747384, 0.18510522700685425, 0.12534656935894029, 0.11820008906118286])
grid = power(grid, 2, 15, 0.1345840652634475)
grid = transit(grid, 4, [13, 10, 0, 5, 9, 15], [0.008304139432492776, 0.09554106242163109, 0.3389598745022655, 0.34268645275649734, 0.1217193848856375, 0.09278908600147577])
grid = sin(grid, 8, 7, 1.6442128032227346, 65.42553772291257)
grid = sin(grid, 5, 2, -0.04306960778476998, 12.448419977394536)
grid = sin(grid, 11, 14, 0.9129834873789532, 73.0640350263852)
grid = magnitude(grid, 7, [15, 4, 5, 13, 10, 2], 2)
grid = sin(grid, 14, 11, 2.5402909421728, -86.32824677979416)
grid = shift(grid, 4, 11, 2.3925964888020284)
grid = shift(grid, 15, 4, -0.7372708631479445)
grid = sin(grid, 0, 2, 1.594891222212393, 16.628278092846458)
grid = sin(grid, 11, 13, -0.9327674147516039, -15.541013282637977)
grid = sin(grid, 11, 4, -4.993775143892229, 80.96747762431698)
grid = smooth_max(grid, 10, 0, 15)
grid = transit(grid, 12, [6, 10, 14, 12, 15, 2, 13], [0.09985103750264886, 0.026949378786003914, 0.06087019157286385, 0.3158303216282256, 0.14013677674605268, 0.12826012256120262, 0.22810217120300252])
grid = prod(grid, 8, [8, 5, 9, 2, 0, 14, 7, 1])
grid = transit(grid, 9, [3, 9], [0.876452537375533, 0.12354746262446699])
grid = smooth_min(grid, 8, 10, 6)
grid = transit(grid, 1, [1, 0], [0.9538810320364223, 0.046118967963577756])
grid = sin(grid, 1, 12, 3.3410290205031137, -25.743804847404974)
grid = prod(grid, 10, [2, 14, 11, 12, 0, 9])
grid = transit(grid, 11, [13, 2, 11, 7, 6, 5, 0, 12], [0.09281695951990547, 0.17624088228853832, 0.05634762625525204, 0.07896014369556593, 0.19702354876600972, 0.13125843806948617, 0.10069656855488293, 0.1666558328503595])
grid = smooth_max(grid, 11, 6, 15)
grid = sin(grid, 2, 15, 5.785514504408521, -40.611858718726836)
grid = transit(grid, 3, [11, 5, 15, 1, 0], [0.6162699269604909, 0.14424572769193936, 0.11500148040195407, 0.09365692467494352, 0.03082594027067211])
grid = magnitude(grid, 6, [2, 12, 13, 6, 7], 2)
grid = inverse(grid, 2, 1)
grid = transit(grid, 3, [5, 14], [0.770391387127944, 0.22960861287205592])
grid = sin(grid, 6, 6, 3.825749251323949, 72.27777003146554)
grid = smooth_max(grid, 12, 1, 9)
grid = shift(grid, 0, 5, -1.2130539541947831)
grid = transit(grid, 13, [0, 15], [0.23162618407149907, 0.768373815928501])
grid = transit(grid, 9, [15, 14, 7], [0.1907238497173048, 0.6292726762874267, 0.18000347399526861])
grid = sin(grid, 8, 2, 0.7430484736508824, -84.25954782421516)
grid = sin(grid, 13, 6, -3.810046988818433, -6.789933138061684)
grid = inverse(grid, 12, 1)
grid = transit(grid, 12, [8, 10, 5, 9], [0.11929585185006639, 0.2114953692273783, 0.3136928001595172, 0.35551597876303814])
grid = transit(grid, 4, [12, 0, 5, 6, 4, 3, 7, 2, 1], [0.0921941943931091, 0.10658398655979018, 0.0646849340879924, 0.09549054900098725, 0.23000054506202997, 0.23265792933019552, 0.12639406038563974, 0.02418055928965866, 0.027813241890597123])
grid = transit(grid, 4, [5, 6, 15], [0.23673895494297528, 0.6875264015472036, 0.0757346435098213])
grid = sin(grid, 4, 15, 0.3689412417509138, -37.286150237665)
grid = transit(grid, 3, [1, 14, 13, 8], [0.235968430357205, 0.15181596313120294, 0.19728935279429996, 0.4149262537172921])
grid = smooth_min(grid, 5, 7, 13)
grid = prod(grid, 7, [7, 14, 5, 10, 8, 1, 12, 15])
grid = sin(grid, 3, 15, -5.303372135627032, -5.401797547977694)
grid = shift(grid, 3, 2, 1.380193201302221)
grid = smooth_max(grid, 6, 9, 11)
grid = sin(grid, 3, 2, 1.657099047995458, 5.329745854466708)
grid = transit(grid, 5, [7], [1.0])
grid = transit(grid, 13, [14, 10], [0.5104299213419905, 0.48957007865800956])
grid = transit(grid, 6, [0], [1.0])
grid = sin(grid, 0, 4, -3.4755676589778726, 99.66914198550933)
grid = smooth_max(grid, 2, 5, 12)
grid = transit(grid, 14, [8, 5, 2, 0], [0.047685592444889555, 0.2957771390129271, 0.05485968745584492, 0.6016775810863384])
grid = magnitude(grid, 9, [15, 7, 3, 11, 1, 4], 2)
grid = transit(grid, 10, [10, 1, 14, 2], [0.0607648494329387, 0.24910648467704677, 0.4496685682218551, 0.24046009766815934])
grid = sin(grid, 6, 3, 0.653008433613337, 33.71713045387867)
grid = transit(grid, 14, [7, 4, 14], [0.20393075692366466, 0.7529736670046318, 0.04309557607170369])
grid = prod(grid, 10, [12, 0])
grid = inverse(grid, 14, 2)
grid = transit(grid, 3, [14, 5, 7, 3, 6, 11, 9, 0], [0.012782892992306005, 0.15559435318009912, 0.2758108968961064, 0.15486897377007164, 0.04523192685450211, 0.13927008110407843, 0.021799097251099814, 0.19464177795173665])
grid = transit(grid, 15, [13, 14, 15, 6, 11, 7, 1], [0.013919282562548017, 0.09782138883553308, 0.1308854042757214, 0.6092743828389294, 0.11162819771299519, 0.012793015529680568, 0.02367832824459244])
grid = smooth_min(grid, 9, 9, 9)
grid = transit(grid, 2, [11, 1, 0, 15, 4], [0.04702513907218175, 0.318517576849402, 0.2814043059854424, 0.3154096212746778, 0.03764335681829592])
grid = transit(grid, 6, [11, 1, 7], [0.04510956031341787, 0.35511310456409917, 0.5997773351224829])
grid = sin(grid, 15, 5, 0.9883101573863393, -37.3437977042536)
grid = prod(grid, 5, [14, 4, 7, 8, 5, 13])
grid = transit(grid, 5, [4, 10, 5, 8, 1, 11], [0.32489867493040925, 0.3362994099063879, 0.046680592691049426, 0.02112029936330436, 0.2515686471980886, 0.01943237591076041])
grid = transit(grid, 2, [11], [1.0])
grid = magnitude(grid, 13, [10, 0], 2)
grid = sin(grid, 14, 5, -5.763208987860649, 94.20330525879137)
grid = transit(grid, 6, [9], [1.0])
grid = sin(grid, 7, 11, -8.84500530111595, -58.29896256555682)
grid = transit(grid, 14, [9, 2], [0.14230405067145288, 0.8576959493285471])
grid = shift(grid, 11, 3, 1.544958311497465)
grid = transit(grid, 8, [2, 15, 0, 4], [0.4606724063937241, 0.2206630536445932, 0.20489739294445614, 0.1137671470172266])
grid = smooth_max(grid, 11, 8, 7)
grid = power(grid, 4, 11, 1.1319193363708844)
grid = prod(grid, 15, [12])
grid = smooth_min(grid, 15, 1, 9)
grid = transit(grid, 6, [4, 3, 8, 0, 11, 12, 15], [0.010549788917157453, 0.18404065180598841, 0.2879562353292947, 0.10965135100883056, 0.0725963939057477, 0.24645070652561327, 0.08875487250736798])
grid = transit(grid, 13, [7, 2], [0.49160032249040264, 0.5083996775095974])
grid = smooth_min(grid, 1, 1, 14)
grid = transit(grid, 13, [13, 3, 4, 5, 0, 6, 9], [0.21194370824350384, 0.011478684104207342, 0.1519043464651473, 0.14476204498461465, 0.04460174478278611, 0.20540186584060885, 0.22990760557913184])
grid = transit(grid, 8, [13, 0, 10, 7, 2], [0.5385504708834093, 0.044172458841539246, 0.04366081223568676, 0.11616993757552775, 0.25744632046383686])
grid = transit(grid, 12, [15, 9, 11, 12], [0.16194724377074177, 0.12902497945453706, 0.3681130099978702, 0.3409147667768509])
grid = power(grid, 12, 6, 0.9621146449655409)
grid = smooth_max(grid, 14, 11, 7)
grid = transit(grid, 14, [14], [1.0])
grid = transit(grid, 4, [3], [1.0])
grid = transit(grid, 15, [15, 11, 1], [0.25981354505300397, 0.36158746021347316, 0.3785989947335229])
grid = shift(grid, 9, 6, 0.2646088334554064)
grid = magnitude(grid, 5, [7, 6, 4, 5, 0, 12, 14], 2)
grid = smooth_min(grid, 7, 3, 14)
grid = transit(grid, 13, [14, 1, 13, 10], [0.10088451891396819, 0.191510273997324, 0.16770397506443765, 0.5399012320242702])
grid = transit(grid, 14, [3, 2, 4, 6, 14, 1], [0.0447180143489295, 0.030004114341812396, 0.1377420890427628, 0.057861671084617955, 0.35208161347577965, 0.3775924977060977])
grid = transit(grid, 6, [15], [1.0])
grid = shift(grid, 0, 6, -2.1754833096430093)
grid = transit(grid, 12, [1, 7], [0.31906778199631697, 0.680932218003683])
grid = sin(grid, 11, 2, 1.0463363397045784, -55.290321984273724)
grid = shift(grid, 7, 13, -1.635025558164322)
grid = smooth_max(grid, 7, 15, 4)
grid = sin(grid, 7, 5, 4.217003134290231, -84.7301553073353)
grid = transit(grid, 4, [15, 7, 3, 4, 10, 11, 12, 9, 13], [0.14459404046513513, 0.06662190811089809, 0.3257782176528333, 0.08510574215017955, 0.03851679873396843, 0.03959221341358759, 0.0017117638203937083, 0.2171987456103738, 0.0808805700426305])
grid = transit(grid, 7, [14, 2, 8, 3, 9], [0.14789215616692392, 0.08132548488741291, 0.4243347973822542, 0.05721250589223747, 0.2892350556711714])
grid = transit(grid, 5, [2, 14, 6], [0.23510882498789704, 0.06989671383890285, 0.6949944611732001])
grid = sin(grid, 0, 12, 1.2684010385313085, -92.48198248560789)
grid = transit(grid, 11, [2, 7, 12, 8, 6, 3, 4, 10, 9, 0], [0.11106492437454482, 0.05600616904896314, 0.09321759037849306, 0.07124725465228712, 0.13302311545062054, 0.10410707635655471, 0.0008459850928252534, 0.024169112249513364, 0.269571164213665, 0.13674760818253293])
grid = sin(grid, 2, 10, 2.023632188543528, -71.8702439215892)
grid = shift(grid, 2, 2, 3.406225898683278)
grid = sin(grid, 6, 2, -3.3618705129783546, -39.213874352584256)
grid = transit(grid, 14, [0, 2, 5], [0.3659014258755244, 0.4323842841373779, 0.20171428998709778])
grid = shift(grid, 1, 2, -5.647145403350814)
grid = sin(grid, 4, 13, 2.6059959458332056, -58.410181334666575)
grid = sin(grid, 10, 14, 2.525267990241818, -95.25636060128892)
grid = smooth_min(grid, 15, 13, 14)
grid = transit(grid, 13, [2, 7, 14, 9, 3, 1, 13], [0.023217692150903795, 0.2401269372064785, 0.17734519398666324, 0.02487077158943781, 0.30256180051785053, 0.13633537841896037, 0.09554222612970566])
grid = sin(grid, 5, 9, -3.325439136617531, 8.703841767152753)
grid = transit(grid, 14, [15, 5], [0.4668899818773747, 0.5331100181226254])
grid = prod(grid, 0, [4, 15, 7, 11, 13, 1, 12])
grid = transit(grid, 10, [11], [1.0])
grid = transit(grid, 3, [1, 12, 3, 9], [0.15876603964988217, 0.13272525418652648, 0.22770018072143047, 0.48080852544216085])
grid = shift(grid, 14, 9, -1.113818326564914)
grid = prod(grid, 11, [2])
grid = smooth_min(grid, 3, 0, 10)
grid = transit(grid, 10, [2, 6, 5, 4, 10, 15, 14], [0.19084700942372185, 0.019369652278004294, 0.15410393107320866, 0.036098992104869075, 0.12546925942495724, 0.12257684354138026, 0.35153431215385855])
grid = transit(grid, 14, [3, 6, 9], [0.041399596899217225, 0.2109512829238257, 0.7476491201769572])
grid = smooth_max(grid, 4, 0, 5)
grid = sin(grid, 14, 11, -0.7952185031848616, -79.99369531590408)
grid = transit(grid, 10, [0, 11, 9, 10, 1, 2], [0.08145512193146691, 0.2868271498726411, 0.13627367938772128, 0.11207872460565382, 0.18298945170154962, 0.2003758725009674])
grid = transit(grid, 15, [8], [1.0])
grid = transit(grid, 11, [11, 3, 10, 6, 15, 14, 2], [0.06129458688285442, 0.22780033189136034, 0.03825330316791381, 0.24796776203265053, 0.11058960275282681, 0.12130111200710307, 0.192793301265291])
grid = prod(grid, 7, [12])
grid = sin(grid, 11, 10, -4.012921031273755, 70.94281048828063)
grid = shift(grid, 8, 1, -0.8586049100713232)
grid = transit(grid, 14, [4, 8, 15], [0.5840522031602384, 0.3621879750179246, 0.05375982182183693])
grid = sin(grid, 1, 7, 1.714333532241929, -40.10125111372134)
grid = magnitude(grid, 2, [4], 2)
grid = transit(grid, 2, [2, 8, 14], [0.602784809951269, 0.1442339594287627, 0.25298123061996836])
grid = transit(grid, 4, [12], [1.0])
grid = inverse(grid, 12, 9)
grid = transit(grid, 8, [3], [1.0])
grid = transit(grid, 8, [8, 10, 9, 5, 4], [0.13739802796429007, 0.029174991157951916, 0.3192116565569712, 0.25920089446219136, 0.25501442985859546])
grid = sin(grid, 6, 4, 0.09945772643448075, -63.133807920697)
grid = power(grid, 1, 0, 0.06129416878021343)
grid = transit(grid, 8, [13, 14, 7, 5, 3, 8, 1, 4, 11, 9], [0.07703142154634139, 0.16266889493733563, 0.13191674140440357, 0.09780108874613608, 0.07526278695252407, 0.10469583394640247, 0.0932457243037449, 0.07229262736530592, 0.07707470235555856, 0.10801017844224726])
grid = power(grid, 7, 8, 2.3799816592943026)
grid = sin(grid, 5, 12, 0.600042994377764, 85.6006702545412)
grid = inverse(grid, 15, 0)
grid = sin(grid, 8, 9, 0.39707616958377756, 37.16231712661943)
grid = sin(grid, 2, 1, -3.7466085680717587, 14.928025674343061)
grid = shift(grid, 10, 12, 0.28681375211832794)
grid = power(grid, 5, 8, 0.5281544557364306)
grid = sin(grid, 5, 11, -0.673144440372863, -62.38079972341439)
grid = prod(grid, 0, [8, 9, 2, 7, 6, 1])
grid = transit(grid, 12, [4, 10, 9, 2, 14, 12, 11], [0.042234521151971745, 0.1825153522795678, 0.27103762596433184, 0.1972788079034748, 0.0478327512153379, 0.25214964239312443, 0.006951299092191472])
grid = sin(grid, 8, 6, 3.6461117148651674, -40.3336348480567)
grid = prod(grid, 3, [3, 1, 9, 11])
grid = shift(grid, 6, 15, -2.7207456861641095)
grid = transit(grid, 15, [13, 6, 9], [0.17274476801488867, 0.426932810471596, 0.40032242151351544])
grid = inverse(grid, 11, 15)
grid = power(grid, 4, 15, 2.3965766145617677)
grid = smooth_min(grid, 11, 1, 8)
grid = prod(grid, 5, [5, 15, 14, 8])
grid = transit(grid, 6, [2], [1.0])
grid = transit(grid, 13, [4, 13, 8], [0.6264014322482245, 0.23408187641511977, 0.13951669133665576])
grid = shift(grid, 8, 9, 3.2979491477758076)
grid = sin(grid, 3, 12, -0.22767319641770223, 25.172435804994507)
grid = sin(grid, 9, 10, 3.812194119158854, 85.20583394681466)
grid = sin(grid, 13, 9, 5.189712115668549, -13.305870307783124)
grid = sin(grid, 0, 8, -0.2813081531876115, -75.10210391258016)
grid = power(grid, 6, 6, 0.014486046165856086)
grid = transit(grid, 5, [8], [1.0])
grid = shift(grid, 7, 5, -1.1255176290174376)
grid = smooth_min(grid, 6, 11, 0)
grid = sin(grid, 12, 6, -1.9933856549781392, -92.96707943737457)
grid = transit(grid, 11, [5, 14, 0, 3, 4, 6], [0.07615720765810789, 0.2740313709752172, 0.1695088237133496, 0.15056584856178212, 0.1023181376751256, 0.2274186114164175])
grid = magnitude(grid, 9, [12], 2)
grid = sin(grid, 5, 7, -1.3757024785248675, 59.84981388202152)
grid = sin(grid, 10, 8, -1.8368871551516843, 48.34484312367812)
grid = sin(grid, 3, 2, 3.219692657170689, -64.98291420859309)
grid = transit(grid, 13, [12, 15, 13, 8, 7, 14], [0.2094178163064464, 0.30372804325002756, 0.10053726491291264, 0.05904258280511587, 0.243184512882807, 0.08408977984269055])
grid = transit(grid, 11, [10, 2, 8, 6], [0.49301795913463026, 0.1703152662436898, 0.12537686739465687, 0.21128990722702298])
grid = transit(grid, 15, [14, 12, 13, 6, 7], [0.13115926220768984, 0.08738453404434984, 0.30427221698395557, 0.23352930208594314, 0.24365468467806153])
grid = transit(grid, 2, [12], [1.0])
grid = transit(grid, 12, [12, 15], [0.6109006629753452, 0.3890993370246548])
grid = transit(grid, 6, [8], [1.0])
grid = smooth_max(grid, 4, 11, 9)
grid = sin(grid, 9, 5, 2.876588672199383, -44.64391319385035)
grid = transit(grid, 0, [8], [1.0])
grid = transit(grid, 11, [13, 6, 1], [0.24505903920792102, 0.6308705794553203, 0.12407038133675873])
grid = sin(grid, 9, 2, 6.091547476402439, -77.65159648242383)
grid = transit(grid, 12, [7, 5], [0.575373906963971, 0.4246260930360291])
grid = magnitude(grid, 5, [4, 9, 13, 7, 6, 11], 2)
grid = transit(grid, 1, [5, 14, 1], [0.20685662464461516, 0.10579996578325454, 0.6873434095721301])
grid = sin(grid, 13, 11, 1.2258799593667475, 66.95275606227898)
grid = transit(grid, 12, [6], [1.0])
grid = magnitude(grid, 4, [13, 0], 2)
grid = transit(grid, 10, [7, 4, 5, 8], [0.7205785380543926, 0.009231986010664349, 0.12794486645116065, 0.14224460948378234])
grid = prod(grid, 14, [7])
grid = sin(grid, 3, 5, 0.30667750866689003, 18.936754339100844)
grid = power(grid, 11, 6, 0.1456176305678269)
grid = sin(grid, 8, 9, 1.1255264770511006, -11.691221682084944)
grid = prod(grid, 3, [6, 5])
grid = shift(grid, 0, 0, 4.463591781267054)
grid = prod(grid, 12, [11, 0, 13, 9, 10, 8, 15, 12, 6])
grid = smooth_min(grid, 12, 6, 6)
grid = sin(grid, 10, 12, -3.3508969910353423, -36.53264276524335)
grid = transit(grid, 14, [14, 7, 8, 6], [0.2615532961267899, 0.11026330817273189, 0.2509703115400265, 0.3772130841604517])
grid = sin(grid, 4, 11, 0.0750148025545996, 93.84599316019552)
grid = smooth_max(grid, 0, 8, 11)
grid = transit(grid, 13, [11, 8, 9, 1, 2], [0.2372813659609297, 0.18167551157095235, 0.23406729038854324, 0.12369839158806627, 0.22327744049150858])
grid = sin(grid, 4, 9, 3.495327924160875, 10.227452077836688)
grid = sin(grid, 14, 13, 2.568004319763818, 24.83561217811088)
grid = sin(grid, 6, 5, 0.34670102481582077, -66.80409962054111)
grid = transit(grid, 1, [3, 9, 1, 4, 14, 6, 15], [0.24085381178311666, 0.19868712524155435, 0.1931281722954742, 0.06818440244804039, 0.10253104782054577, 0.014695173481133111, 0.1819202669301355])
grid = transit(grid, 3, [15, 13, 1, 12, 6], [0.3256800441662938, 0.19983220068945678, 0.06443045193626011, 0.19949050142523514, 0.2105668017827542])
grid = shift(grid, 0, 1, -4.307585146992545)
grid = sin(grid, 7, 7, 0.6433604744635049, 94.62579973437443)
grid = inverse(grid, 4, 4)
grid = sin(grid, 8, 0, 6.018585249436265, -73.2299442192341)
grid = smooth_min(grid, 14, 1, 12)
grid = sin(grid, 7, 0, 5.19319245142954, -44.42210897068386)
grid = transit(grid, 14, [15, 12], [0.761893761228318, 0.238106238771682])
grid = shift(grid, 10, 6, -4.110865704722827)
grid = power(grid, 8, 15, 0.19675250069085287)
grid = power(grid, 6, 14, 0.07985978686246452)
grid = prod(grid, 4, [8])
grid = smooth_max(grid, 7, 13, 0)
grid = transit(grid, 0, [5, 8], [0.7468716048283879, 0.2531283951716122])
grid = sin(grid, 2, 7, 4.16268292668652, 30.095159521521737)
grid = sin(grid, 13, 9, 2.0858388135828045, 44.680503064208295)
grid = sin(grid, 11, 8, -3.4706236432180173, -34.68959492936648)
grid = prod(grid, 5, [7, 4, 8, 12, 10])
grid = sin(grid, 13, 1, 6.772999801907664, -63.54794841520024)
grid = sin(grid, 12, 10, -0.9151194110588524, -50.46442188002447)
grid = transit(grid, 2, [14, 3], [0.4992385335693942, 0.5007614664306058])
grid = power(grid, 10, 2, 4.405835897888022)
grid = sin(grid, 2, 15, -4.847790644661658, 61.42197387208125)
grid = inverse(grid, 5, 14)
grid = shift(grid, 1, 9, 2.258578365823189)
grid = transit(grid, 13, [0, 3, 14], [0.20104552368290016, 0.5083446151706453, 0.29060986114645454])
grid = sin(grid, 7, 3, -2.1533327733234042, -43.212882475223125)
grid = sin(grid, 13, 2, 1.4460613196662622, 23.566675328257716)
grid = sin(grid, 3, 7, 1.5600908324936626, -10.392517190428023)
grid = sin(grid, 15, 1, 0.754836725743574, -36.254615941212975)
grid = sin(grid, 3, 9, 5.346260639976991, -94.98595087539259)
grid = transit(grid, 10, [1, 2, 10], [0.2048295087403088, 0.5066609513955465, 0.28850953986414474])
grid = prod(grid, 7, [5, 14, 2, 13, 7, 4])
grid = inverse(grid, 0, 13)
grid = transit(grid, 7, [1, 3, 10], [0.4215127886394601, 0.26365878035519397, 0.31482843100534597])
grid = smooth_min(grid, 14, 11, 3)
grid = inverse(grid, 0, 3)
grid = transit(grid, 0, [1], [1.0])
grid = sin(grid, 13, 0, 4.370439674943002, -72.63638415196019)
grid = prod(grid, 13, [10, 3, 8, 12])
grid = sin(grid, 0, 14, 2.405670543347627, -92.32346530007302)
grid = smooth_max(grid, 8, 2, 0)
grid = smooth_max(grid, 13, 3, 15)
grid = transit(grid, 8, [15, 14, 4, 13, 12, 8, 6, 2, 0], [0.1816853377356766, 0.10628231530365687, 0.04922158875006307, 0.08462331317148171, 0.015790078903641945, 0.20140965909960548, 0.1530504636735908, 0.17862010860654676, 0.029317134755736832])
grid = transit(grid, 15, [15, 6, 4], [0.40802982725562104, 0.38776980509326714, 0.2042003676511118])
grid = sin(grid, 8, 6, 2.19002447343762, -50.159110582502024)
grid = sin(grid, 3, 13, 0.27911730457679623, 23.35078784249032)
grid = transit(grid, 7, [7, 12, 14, 4], [0.4082646425578374, 0.1395125577125453, 0.09274463629776601, 0.3594781634318512])
grid = transit(grid, 10, [2, 11], [0.552836640754652, 0.447163359245348])
grid = sin(grid, 8, 12, -4.921074975923396, -76.56325185919412)
grid = sin(grid, 3, 11, 2.396730907064764, -45.489703528808654)
grid = transit(grid, 7, [13, 12, 10, 11, 5], [0.2691564773555254, 0.1562406026121113, 0.2031011659541174, 0.10462477857280658, 0.2668769755054394])
grid = smooth_max(grid, 8, 13, 14)
grid = sin(grid, 10, 12, 2.081029840009405, 29.023667501364827)
grid = magnitude(grid, 8, [4, 7, 8, 12, 13], 2)
grid = smooth_max(grid, 13, 4, 3)
grid = sin(grid, 6, 13, 6.014244513337356, 23.792371580401124)
grid = transit(grid, 4, [5, 8, 11, 4, 10, 0], [0.2652108310768467, 0.12501591792933145, 0.05306508014114585, 0.09184867496126753, 0.19409245806743697, 0.27076703782397155])
grid = sin(grid, 9, 6, 1.5720266582834044, -21.38262791904306)
grid = prod(grid, 3, [12, 9, 7, 14, 11, 8, 10, 13, 4, 6, 2])
grid = transit(grid, 13, [12, 10, 4, 2, 5, 15], [0.21621335691645346, 0.28279135813056944, 0.014981969691295885, 0.15390489793126802, 0.30459146214168054, 0.027516955188732664])
grid = sin(grid, 14, 6, 2.3273089488618877, -74.11919953293327)
grid = sin(grid, 13, 3, 1.4387104885316502, -86.76001806481185)
grid = power(grid, 7, 6, 0.23433211995567746)
grid = sin(grid, 8, 2, -1.0666413219189432, 23.271683590871618)
grid = sin(grid, 2, 11, -2.4337219024975423, 75.68193288075088)
grid = transit(grid, 13, [4, 12, 15, 13, 5], [0.1351951960002691, 0.27050934040204805, 0.32992666534526716, 0.2569574621335345, 0.007411336118881272])
grid = smooth_min(grid, 3, 10, 4)
grid = sin(grid, 1, 4, -4.160732453838902, 93.43381060424588)
#create color space
def shift_colors(x, shift):
res = x.copy()
for i in range(x.shape[-1]):
if shift[i] > 0: res[:,:,i] = (-np.abs(((x[:,:,i] + 1) / 2) ** (1 + shift[i]) - 1) ** (1 / (1 + shift[i])) + 1) * 2 - 1
if shift[i] < 0: res[:,:,i] = np.abs((1 - (x [:,:,i]+ 1) / 2) ** (1 - shift[i]) - 1) ** (1 / (1 - shift[i])) * 2 - 1
return test_values(res)
res = np.zeros((SIZE, SIZE, 3))
res += shift_colors(grid[:,:,0:1].repeat(3, -1), [1.7859972913733364, 1.510517025328302, 0.23840626088533767])
res += shift_colors(grid[:,:,1:2].repeat(3, -1), [0.9036737398969701, 0.802208108691278, 0.38530357122395253])
res += shift_colors(grid[:,:,2:3].repeat(3, -1), [1.0588456492992533, 0.6034242559988638, 0.8316279682917929])
res = res / 3
res = ((res + 1) / 2 * 255).clip(0,255)
#save results
im = Image.fromarray(np.uint8(res))
im.save(os.path.basename(__file__) + '.png')
#save layers
img = np.zeros((SIZE * 4, SIZE * 4))
for j in range(GRID_CHANNELS):
x = j % 4
y = j // 4
img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j]
img = (img + 1) * 127.5
im = Image.fromarray(np.uint8(img))
im.save(os.path.basename(__file__) + '_layers.png')