import numpy as np
class AdamOptim():
    def __init__(self, eta=0.01, beta1=0.9, beta2=0.999, epsilon=1e-8):
        self.m_dw, self.v_dw = 0, 0
        self.m_db, self.v_db = 0, 0
        self.beta1 = beta1
        self.beta2 = beta2
        self.epsilon = epsilon
        self.eta = eta
    def update(self, t, w, b, dw, db):
        ## dw, db are from current minibatch
        ## momentum beta 1
        # *** weights *** #
        self.m_dw = self.beta1*self.m_dw + (1-self.beta1)*dw
        # *** biases *** #
        self.m_db = self.beta1*self.m_db + (1-self.beta1)*db

        ## rms beta 2
        # *** weights *** #
        self.v_dw = self.beta2*self.v_dw + (1-self.beta2)*(dw**2)
        # *** biases *** #
        self.v_db = self.beta2*self.v_db + (1-self.beta2)*(db)

        ## bias correction
        m_dw_corr = self.m_dw/(1-self.beta1**t)
        m_db_corr = self.m_db/(1-self.beta1**t)
        v_dw_corr = self.v_dw/(1-self.beta2**t)
        v_db_corr = self.v_db/(1-self.beta2**t)

        ## update weights and biases
        w = w - self.eta*(m_dw_corr/(np.sqrt(v_dw_corr)+self.epsilon))
        b = b - self.eta*(m_db_corr/(np.sqrt(v_db_corr)+self.epsilon))
        return w, b
## define loss functions and gradient descent. We don't really use the loss function here.
def loss_function(m):
    return m**2-2*m+1
## take derivative
def grad_function(m):
    return 2*m-2
def check_convergence(w0, w1):
    return (w0 == w1)
## initialize weights and biases, and our optimizer
w_0 = 0
b_0 = 0
adam = AdamOptim()
t = 1 
converged = False

while not converged:
    dw = grad_function(w_0)
    db = grad_function(b_0)
    w_0_old = w_0
    w_0, b_0 = adam.update(t,w=w_0, b=b_0, dw=dw, db=db)
    if check_convergence(w_0, w_0_old):
        print('converged after '+str(t)+' iterations')
        break
    else:
        print('iteration '+str(t)+': weight='+str(w_0))
        t+=1
iteration 1: weight=0.009999999950000001
iteration 2: weight=0.01999725400385255
iteration 3: weight=0.029989900621600046
iteration 4: weight=0.039976060276935343
iteration 5: weight=0.049953839711732076
iteration 6: weight=0.05992133621693422
iteration 7: weight=0.06987664190678831
iteration 8: weight=0.07981784795404925
iteration 9: weight=0.08974304875491491
iteration 10: weight=0.0996503459940126
iteration 11: weight=0.10953785258172263
iteration 12: weight=0.11940369643843479
iteration 13: weight=0.12924602410293135
iteration 14: weight=0.13906300414491304
iteration 15: weight=0.14885283036466956
iteration 16: weight=0.15861372476597732
iteration 17: weight=0.1683439402914239
iteration 18: weight=0.17804176331244895
iteration 19: weight=0.1877055158694015
iteration 20: weight=0.19733355765979776
iteration 21: weight=0.2069242877756729
iteration 22: weight=0.21647614619342795
iteration 23: weight=0.22598761502184558
iteration 24: weight=0.23545721951596985
iteration 25: weight=0.24488352886630008
iteration 26: weight=0.25426515677423506
iteration 27: weight=0.26360076182591813
iteration 28: weight=0.2728890476775851
iteration 29: weight=0.2821287630662142
iteration 30: weight=0.2913187016597368
iteration 31: weight=0.3004577017613055
iteration 32: weight=0.30954464588215314
iteration 33: weight=0.3185784601974346
iteration 34: weight=0.32755811389914286
iteration 35: weight=0.3364826184597571
iteration 36: weight=0.3453510268197323
iteration 37: weight=0.3541624325113025
iteration 38: weight=0.36291596873035775
iteration 39: weight=0.3716108073673929
iteration 40: weight=0.38024615800772815
iteration 41: weight=0.3888212669103811
iteration 42: weight=0.3973354159741451
iteration 43: weight=0.405787921698609
iteration 44: weight=0.4141781341470465
iteration 45: weight=0.42250543591732403
iteration 46: weight=0.4307692411262221
iteration 47: weight=0.4389689944118521
iteration 48: weight=0.44710416995817326
iteration 49: weight=0.455174270544982
iteration 50: weight=0.4631788266261575
iteration 51: weight=0.47111739543840325
iteration 52: weight=0.47898956014222716
iteration 53: weight=0.4867949289964492
iteration 54: weight=0.4945331345671171
iteration 55: weight=0.502203832971342
iteration 56: weight=0.5098067031562412
iteration 57: weight=0.5173414462128868
iteration 58: weight=0.5248077847249037
iteration 59: weight=0.5322054621511477
iteration 60: weight=0.5395342422417011
iteration 61: weight=0.5467939084862693
iteration 62: weight=0.5539842635939275
iteration 63: weight=0.5611051290030595
iteration 64: weight=0.568156344420244
iteration 65: weight=0.5751377673867769
iteration 66: weight=0.5820492728714711
iteration 67: weight=0.5888907528883383
iteration 68: weight=0.5956621161377404
iteration 69: weight=0.6023632876695909
iteration 70: weight=0.6089942085671857
iteration 71: weight=0.615554835650261
iteration 72: weight=0.6220451411958915
iteration 73: weight=0.6284651126758695
iteration 74: weight=0.6348147525092407
iteration 75: weight=0.641094077828706
iteration 76: weight=0.6473031202596423
iteration 77: weight=0.653441925710538
iteration 78: weight=0.6595105541736849
iteration 79: weight=0.6655090795350186
iteration 80: weight=0.6714375893920466
iteration 81: weight=0.6772961848788547
iteration 82: weight=0.6830849804972335
iteration 83: weight=0.6888041039530174
iteration 84: weight=0.6944536959967778
iteration 85: weight=0.7000339102680659
iteration 86: weight=0.7055449131424467
iteration 87: weight=0.7109868835806149
iteration 88: weight=0.7163600129789347
iteration 89: weight=0.7216645050207873
iteration 90: weight=0.7269005755281592
iteration 91: weight=0.7320684523129467
iteration 92: weight=0.7371683750274948
iteration 93: weight=0.7422005950139324
iteration 94: weight=0.7471653751519031
iteration 95: weight=0.7520629897043302
iteration 96: weight=0.7568937241608946
iteration 97: weight=0.7616578750789351
iteration 98: weight=0.7663557499215196
iteration 99: weight=0.7709876668924653
iteration 100: weight=0.7755539547681211
iteration 101: weight=0.7800549527257501
iteration 102: weight=0.7844910101683854
iteration 103: weight=0.7888624865460541
iteration 104: weight=0.7931697511732935
iteration 105: weight=0.7974131830429079
iteration 106: weight=0.8015931706359366
iteration 107: weight=0.8057101117278274
iteration 108: weight=0.8097644131908287
iteration 109: weight=0.8137564907926365
iteration 110: weight=0.8176867689913462
iteration 111: weight=0.8215556807267823
iteration 112: weight=0.8253636672082894
iteration 113: weight=0.8291111776990878
iteration 114: weight=0.8327986692973092
iteration 115: weight=0.8364266067138391
iteration 116: weight=0.8399954620471094
iteration 117: weight=0.8435057145549907
iteration 118: weight=0.846957850423946
iteration 119: weight=0.8503523625356184
iteration 120: weight=0.8536897502310298
iteration 121: weight=0.8569705190725782
iteration 122: weight=0.860195180604026
iteration 123: weight=0.8633642521086788
iteration 124: weight=0.8664782563659569
iteration 125: weight=0.8695377214065675
iteration 126: weight=0.8725431802664898
iteration 127: weight=0.8754951707399848
iteration 128: weight=0.8783942351318468
iteration 129: weight=0.8812409200091125
iteration 130: weight=0.8840357759524461
iteration 131: weight=0.8867793573074179
iteration 132: weight=0.8894722219358927
iteration 133: weight=0.8921149309677457
iteration 134: weight=0.8947080485531188
iteration 135: weight=0.8972521416154303
iteration 136: weight=0.8997477796053487
iteration 137: weight=0.9021955342559357
iteration 138: weight=0.9045959793391636
iteration 139: weight=0.9069496904240053
iteration 140: weight=0.9092572446362935
iteration 141: weight=0.9115192204205393
iteration 142: weight=0.9137361973038962
iteration 143: weight=0.9159087556624508
iteration 144: weight=0.918037476490016
iteration 145: weight=0.9201229411695963
iteration 146: weight=0.9221657312476885
iteration 147: weight=0.9241664282115778
iteration 148: weight=0.9261256132697787
iteration 149: weight=0.9280438671357686
iteration 150: weight=0.9299217698151505
iteration 151: weight=0.9317599003963796
iteration 152: weight=0.933558836845177
iteration 153: weight=0.9353191558027519
iteration 154: weight=0.9370414323879417
iteration 155: weight=0.938726240003377
iteration 156: weight=0.9403741501457696
iteration 157: weight=0.9419857322204138
iteration 158: weight=0.9435615533599866
iteration 159: weight=0.9451021782477242
iteration 160: weight=0.946608168945046
iteration 161: weight=0.9480800847236891
iteration 162: weight=0.9495184819024132
iteration 163: weight=0.950923913688324
iteration 164: weight=0.9522969300228624
iteration 165: weight=0.9536380774324956
iteration 166: weight=0.9549478988841421
iteration 167: weight=0.9562269336453583
iteration 168: weight=0.9574757171493036
iteration 169: weight=0.9586947808645
iteration 170: weight=0.9598846521693933
iteration 171: weight=0.9610458542317184
iteration 172: weight=0.9621789058926664
iteration 173: weight=0.9632843215558446
iteration 174: weight=0.9643626110810171
iteration 175: weight=0.9654142796826064
iteration 176: weight=0.9664398278329352
iteration 177: weight=0.9674397511701782
iteration 178: weight=0.9684145404109944
iteration 179: weight=0.9693646812678026
iteration 180: weight=0.9702906543706602
iteration 181: weight=0.9711929351937009
iteration 182: weight=0.9720719939860842
iteration 183: weight=0.9729282957074055
iteration 184: weight=0.9737622999675106
iteration 185: weight=0.9745744609706605
iteration 186: weight=0.9753652274639815
iteration 187: weight=0.9761350426901402
iteration 188: weight=0.9768843443441767
iteration 189: weight=0.9776135645344266
iteration 190: weight=0.9783231297474617
iteration 191: weight=0.9790134608169765
iteration 192: weight=0.9796849728965454
iteration 193: weight=0.9803380754361745
iteration 194: weight=0.9809731721625682
iteration 195: weight=0.9815906610630333
iteration 196: weight=0.9821909343729368
iteration 197: weight=0.9827743785666372
iteration 198: weight=0.9833413743518047
iteration 199: weight=0.9838922966670466
iteration 200: weight=0.984427514682753
iteration 201: weight=0.9849473918050764
iteration 202: weight=0.98545228568296
iteration 203: weight=0.985942548218127
iteration 204: weight=0.9864185255779455
iteration 205: weight=0.9868805582110803
iteration 206: weight=0.9873289808658458
iteration 207: weight=0.9877641226111719
iteration 208: weight=0.9881863068600975
iteration 209: weight=0.988595851395703
iteration 210: weight=0.9889930683993977
iteration 211: weight=0.9893782644814731
iteration 212: weight=0.9897517407138409
iteration 213: weight=0.9901137926648667
iteration 214: weight=0.9904647104362185
iteration 215: weight=0.9908047787016447
iteration 216: weight=0.9911342767475994
iteration 217: weight=0.9914534785156336
iteration 218: weight=0.9917626526464719
iteration 219: weight=0.9920620625256936
iteration 220: weight=0.9923519663309407
iteration 221: weight=0.9926326170805743
iteration 222: weight=0.9929042626837034
iteration 223: weight=0.9931671459915103
iteration 224: weight=0.9934215048497993
iteration 225: weight=0.993667572152694
iteration 226: weight=0.993905575897414
iteration 227: weight=0.9941357392400594
iteration 228: weight=0.9943582805523336
iteration 229: weight=0.9945734134791384
iteration 230: weight=0.9947813469969744
iteration 231: weight=0.9949822854730818
iteration 232: weight=0.9951764287252586
iteration 233: weight=0.995363972082295
iteration 234: weight=0.9955451064449625
iteration 235: weight=0.9957200183474998
iteration 236: weight=0.9958888900195372
iteration 237: weight=0.9960518994484044
iteration 238: weight=0.9962092204417675
iteration 239: weight=0.9963610226905409
iteration 240: weight=0.9965074718320245
iteration 241: weight=0.9966487295132145
iteration 242: weight=0.9967849534542412
iteration 243: weight=0.9969162975118857
iteration 244: weight=0.99704291174313
iteration 245: weight=0.9971649424686971
iteration 246: weight=0.9972825323365392
iteration 247: weight=0.9973958203852304
iteration 248: weight=0.9975049421072285
iteration 249: weight=0.9976100295119631
iteration 250: weight=0.9977112111887169
iteration 251: weight=0.997808612369263
iteration 252: weight=0.9979023549902253
iteration 253: weight=0.997992557755128
iteration 254: weight=0.9980793361961048
iteration 255: weight=0.9981628027352366
iteration 256: weight=0.9982430667454899
iteration 257: weight=0.9983202346112277
iteration 258: weight=0.9983944097882684
iteration 259: weight=0.9984656928634669
iteration 260: weight=0.998534181613794
iteration 261: weight=0.9985999710648938
iteration 262: weight=0.9986631535490955
iteration 263: weight=0.9987238187628614
iteration 264: weight=0.9987820538236523
iteration 265: weight=0.9988379433261909
iteration 266: weight=0.9988915693981099
iteration 267: weight=0.9989430117549652
iteration 268: weight=0.9989923477546039
iteration 269: weight=0.9990396524508698
iteration 270: weight=0.9990849986466379
iteration 271: weight=0.9991284569461627
iteration 272: weight=0.9991700958067327
iteration 273: weight=0.9992099815896199
iteration 274: weight=0.9992481786103167
iteration 275: weight=0.9992847491880505
iteration 276: weight=0.9993197536945726
iteration 277: weight=0.9993532506022106
iteration 278: weight=0.9993852965311832
iteration 279: weight=0.999415946296171
iteration 280: weight=0.9994452529521384
iteration 281: weight=0.9994732678394059
iteration 282: weight=0.999500040627969
iteration 283: weight=0.9995256193610621
iteration 284: weight=0.9995500504979664
iteration 285: weight=0.9995733789560621
iteration 286: weight=0.9995956481521241
iteration 287: weight=0.9996169000428623
iteration 288: weight=0.9996371751647086
iteration 289: weight=0.9996565126728514
iteration 290: weight=0.9996749503795203
iteration 291: weight=0.9996925247915246
iteration 292: weight=0.9997092711470486
iteration 293: weight=0.9997252234517061
iteration 294: weight=0.9997404145138615
iteration 295: weight=0.9997548759792192
iteration 296: weight=0.9997686383646873
iteration 297: weight=0.9997817310915225
iteration 298: weight=0.9997941825177595
iteration 299: weight=0.9998060199699335
iteration 300: weight=0.9998172697740993
iteration 301: weight=0.9998279572861581
iteration 302: weight=0.9998381069214939
iteration 303: weight=0.9998477421839309
iteration 304: weight=0.9998568856940179
iteration 305: weight=0.9998655592166464
iteration 306: weight=0.9998737836880133
iteration 307: weight=0.9998815792419323
iteration 308: weight=0.9998889652355071
iteration 309: weight=0.9998959602741706
iteration 310: weight=0.9999025822361022
iteration 311: weight=0.9999088482960293
iteration 312: weight=0.9999147749484246
iteration 313: weight=0.999920378030106
iteration 314: weight=0.9999256727422497
iteration 315: weight=0.9999306736718255
iteration 316: weight=0.9999353948124632
iteration 317: weight=0.9999398495847598
iteration 318: weight=0.9999440508560381
iteration 319: weight=0.9999480109595638
iteration 320: weight=0.9999517417132329
iteration 321: weight=0.9999552544377384
iteration 322: weight=0.9999585599742249
iteration 323: weight=0.9999616687014424
iteration 324: weight=0.9999645905524075
iteration 325: weight=0.999967335030582
iteration 326: weight=0.9999699112255794
iteration 327: weight=0.9999723278284075
iteration 328: weight=0.9999745931462574
iteration 329: weight=0.9999767151168482
iteration 330: weight=0.9999787013223368
iteration 331: weight=0.9999805590028027
iteration 332: weight=0.9999822950693158
iteration 333: weight=0.9999839161165983
iteration 334: weight=0.9999854284352881
iteration 335: weight=0.9999868380238144
iteration 336: weight=0.9999881505998927
iteration 337: weight=0.9999893716116505
iteration 338: weight=0.9999905062483903
iteration 339: weight=0.9999915594509997
iteration 340: weight=0.9999925359220176
iteration 341: weight=0.9999934401353642
iteration 342: weight=0.9999942763457434
iteration 343: weight=0.9999950485977274
iteration 344: weight=0.9999957607345287
iteration 345: weight=0.999996416406471
iteration 346: weight=0.9999970190791647
iteration 347: weight=0.9999975720413955
iteration 348: weight=0.9999980784127344
iteration 349: weight=0.9999985411508757
iteration 350: weight=0.9999989630587119
iteration 351: weight=0.9999993467911512
iteration 352: weight=0.9999996948616862
iteration 353: weight=1.0000000096487203
iteration 354: weight=1.0000002934016596
iteration 355: weight=1.0000005482467753
iteration 356: weight=1.0000007761928456
iteration 357: weight=1.0000009791365825
iteration 358: weight=1.0000011588678495
iteration 359: weight=1.0000013170746784
iteration 360: weight=1.0000014553480892
iteration 361: weight=1.0000015751867204
iteration 362: weight=1.0000016780012766
iteration 363: weight=1.0000017651187962
iteration 364: weight=1.0000018377867486
iteration 365: weight=1.0000018971769635
iteration 366: weight=1.0000019443894
iteration 367: weight=1.0000019804557585
iteration 368: weight=1.0000020063429436
iteration 369: weight=1.0000020229563793
iteration 370: weight=1.0000020311431854
iteration 371: weight=1.0000020316952167
iteration 372: weight=1.0000020253519715
iteration 373: weight=1.0000020128033733
iteration 374: weight=1.0000019946924315
iteration 375: weight=1.0000019716177821
iteration 376: weight=1.0000019441361176
iteration 377: weight=1.0000019127645048
iteration 378: weight=1.000001877982599
iteration 379: weight=1.0000018402347561
iteration 380: weight=1.0000017999320474
iteration 381: weight=1.000001757454179
iteration 382: weight=1.0000017131513226
iteration 383: weight=1.0000016673458578
iteration 384: weight=1.000001620334032
iteration 385: weight=1.0000015723875386
iteration 386: weight=1.0000015237550193
iteration 387: weight=1.0000014746634915
iteration 388: weight=1.0000014253197047
iteration 389: weight=1.0000013759114286
iteration 390: weight=1.0000013266086762
iteration 391: weight=1.0000012775648637
iteration 392: weight=1.0000012289179103
iteration 393: weight=1.0000011807912805
iteration 394: weight=1.0000011332949712
iteration 395: weight=1.000001086526446
iteration 396: weight=1.000001040571519
iteration 397: weight=1.0000009955051905
iteration 398: weight=1.0000009513924366
iteration 399: weight=1.0000009082889536
iteration 400: weight=1.0000008662418622
iteration 401: weight=1.0000008252903696
iteration 402: weight=1.0000007854663946
iteration 403: weight=1.0000007467951555
iteration 404: weight=1.000000709295723
iteration 405: weight=1.0000006729815407
iteration 406: weight=1.0000006378609128
iteration 407: weight=1.0000006039374625
iteration 408: weight=1.0000005712105615
iteration 409: weight=1.0000005396757328
iteration 410: weight=1.0000005093250262
iteration 411: weight=1.0000004801473712
iteration 412: weight=1.0000004521289048
iteration 413: weight=1.0000004252532784
iteration 414: weight=1.0000003995019433
iteration 415: weight=1.000000374854416
iteration 416: weight=1.0000003512885252
iteration 417: weight=1.000000328780641
iteration 418: weight=1.0000003073058867
iteration 419: weight=1.0000002868383355
iteration 420: weight=1.0000002673511916
iteration 421: weight=1.000000248816957
iteration 422: weight=1.000000231207586
iteration 423: weight=1.0000002144946256
iteration 424: weight=1.0000001986493454
iteration 425: weight=1.0000001836428556
iteration 426: weight=1.0000001694462146
iteration 427: weight=1.0000001560305274
iteration 428: weight=1.0000001433670334
iteration 429: weight=1.0000001314271876
iteration 430: weight=1.0000001201827318
iteration 431: weight=1.0000001096057591
iteration 432: weight=1.000000099668772
iteration 433: weight=1.000000090344732
iteration 434: weight=1.000000081607105
iteration 435: weight=1.0000000734299008
iteration 436: weight=1.0000000657877053
iteration 437: weight=1.0000000586557103
iteration 438: weight=1.0000000520097374
iteration 439: weight=1.0000000458262583
iteration 440: weight=1.0000000400824103
iteration 441: weight=1.000000034756009
iteration 442: weight=1.0000000298255576
iteration 443: weight=1.0000000252702532
iteration 444: weight=1.0000000210699902
iteration 445: weight=1.0000000172053607
iteration 446: weight=1.0000000136576537
iteration 447: weight=1.0000000104088511
iteration 448: weight=1.000000007441623
iteration 449: weight=1.0000000047393205
iteration 450: weight=1.0000000022859659
iteration 451: weight=1.0000000000662446
iteration 452: weight=0.9999999980654928
iteration 453: weight=0.9999999962696857
iteration 454: weight=0.9999999946654243
iteration 455: weight=0.9999999932399216
iteration 456: weight=0.9999999919809877
iteration 457: weight=0.9999999908770149
iteration 458: weight=0.999999989916962
iteration 459: weight=0.9999999890903385
iteration 460: weight=0.9999999883871876
iteration 461: weight=0.9999999877980703
iteration 462: weight=0.9999999873140484
iteration 463: weight=0.9999999869266677
iteration 464: weight=0.9999999866279413
iteration 465: weight=0.9999999864103329
iteration 466: weight=0.9999999862667397
iteration 467: weight=0.9999999861904763
iteration 468: weight=0.9999999861752578
iteration 469: weight=0.9999999862151839
iteration 470: weight=0.9999999863047233
iteration 471: weight=0.9999999864386969
iteration 472: weight=0.9999999866122634
iteration 473: weight=0.9999999868209039
iteration 474: weight=0.9999999870604066
iteration 475: weight=0.9999999873268534
iteration 476: weight=0.9999999876166047
iteration 477: weight=0.9999999879262865
iteration 478: weight=0.9999999882527769
iteration 479: weight=0.999999988593193
iteration 480: weight=0.9999999889448784
iteration 481: weight=0.9999999893053915
iteration 482: weight=0.9999999896724932
iteration 483: weight=0.9999999900441359
iteration 484: weight=0.9999999904184526
iteration 485: weight=0.9999999907937464
iteration 486: weight=0.9999999911684802
iteration 487: weight=0.9999999915412672
iteration 488: weight=0.9999999919108616
iteration 489: weight=0.9999999922761498
iteration 490: weight=0.9999999926361411
iteration 491: weight=0.9999999929899606
iteration 492: weight=0.9999999933368405
iteration 493: weight=0.9999999936761135
iteration 494: weight=0.9999999940072047
iteration 495: weight=0.9999999943296259
iteration 496: weight=0.9999999946429682
iteration 497: weight=0.9999999949468965
iteration 498: weight=0.9999999952411437
iteration 499: weight=0.999999995525505
iteration 500: weight=0.9999999957998327
iteration 501: weight=0.9999999960640314
iteration 502: weight=0.9999999963180537
iteration 503: weight=0.999999996561895
iteration 504: weight=0.9999999967955902
iteration 505: weight=0.9999999970192094
iteration 506: weight=0.9999999972328546
iteration 507: weight=0.9999999974366559
iteration 508: weight=0.9999999976307687
iteration 509: weight=0.9999999978153705
iteration 510: weight=0.9999999979906583
iteration 511: weight=0.9999999981568457
iteration 512: weight=0.999999998314161
iteration 513: weight=0.9999999984628445
iteration 514: weight=0.9999999986031467
iteration 515: weight=0.9999999987353264
iteration 516: weight=0.9999999988596489
iteration 517: weight=0.9999999989763841
iteration 518: weight=0.9999999990858058
iteration 519: weight=0.9999999991881894
iteration 520: weight=0.9999999992838112
iteration 521: weight=0.9999999993729474
iteration 522: weight=0.9999999994558726
iteration 523: weight=0.9999999995328595
iteration 524: weight=0.9999999996041773
iteration 525: weight=0.9999999996700918
iteration 526: weight=0.9999999997308642
iteration 527: weight=0.9999999997867507
iteration 528: weight=0.999999999838002
iteration 529: weight=0.9999999998848629
iteration 530: weight=0.9999999999275718
iteration 531: weight=0.9999999999663607
iteration 532: weight=1.0000000000014544
iteration 533: weight=1.0000000000330709
iteration 534: weight=1.0000000000614209
iteration 535: weight=1.0000000000867075
iteration 536: weight=1.0000000001091267
iteration 537: weight=1.000000000128867
iteration 538: weight=1.0000000001461087
iteration 539: weight=1.0000000001610256
iteration 540: weight=1.0000000001737834
iteration 541: weight=1.0000000001845408
iteration 542: weight=1.0000000001934488
iteration 543: weight=1.0000000002006517
iteration 544: weight=1.0000000002062863
iteration 545: weight=1.0000000002104827
iteration 546: weight=1.0000000002133642
iteration 547: weight=1.0000000002150473
iteration 548: weight=1.0000000002156426
iteration 549: weight=1.0000000002152538
iteration 550: weight=1.0000000002139788
iteration 551: weight=1.0000000002119098
iteration 552: weight=1.0000000002091332
iteration 553: weight=1.0000000002057299
iteration 554: weight=1.0000000002017755
iteration 555: weight=1.0000000001973406
iteration 556: weight=1.000000000192491
iteration 557: weight=1.0000000001872875
iteration 558: weight=1.0000000001817868
iteration 559: weight=1.0000000001760414
iteration 560: weight=1.0000000001700993
iteration 561: weight=1.000000000164005
iteration 562: weight=1.0000000001577996
iteration 563: weight=1.00000000015152
iteration 564: weight=1.0000000001452
iteration 565: weight=1.000000000138871
iteration 566: weight=1.0000000001325604
iteration 567: weight=1.0000000001262936
iteration 568: weight=1.000000000120093
iteration 569: weight=1.0000000001139786
iteration 570: weight=1.000000000107968
iteration 571: weight=1.0000000001020772
iteration 572: weight=1.0000000000963196
iteration 573: weight=1.0000000000907068
iteration 574: weight=1.000000000085249
iteration 575: weight=1.0000000000799543
iteration 576: weight=1.0000000000748297
iteration 577: weight=1.0000000000698805
iteration 578: weight=1.0000000000651112
iteration 579: weight=1.0000000000605247
iteration 580: weight=1.0000000000561229
iteration 581: weight=1.000000000051907
iteration 582: weight=1.000000000047877
iteration 583: weight=1.0000000000440323
iteration 584: weight=1.0000000000403715
iteration 585: weight=1.0000000000368925
iteration 586: weight=1.0000000000335927
iteration 587: weight=1.000000000030469
iteration 588: weight=1.0000000000275175
iteration 589: weight=1.0000000000247347
iteration 590: weight=1.000000000022116
iteration 591: weight=1.0000000000196572
iteration 592: weight=1.000000000017353
iteration 593: weight=1.0000000000151987
iteration 594: weight=1.000000000013189
iteration 595: weight=1.0000000000113185
iteration 596: weight=1.000000000009582
iteration 597: weight=1.0000000000079738
iteration 598: weight=1.0000000000064888
iteration 599: weight=1.0000000000051212
iteration 600: weight=1.0000000000038658
iteration 601: weight=1.0000000000027172
iteration 602: weight=1.0000000000016698
iteration 603: weight=1.0000000000007185
iteration 604: weight=0.9999999999998581
iteration 605: weight=0.9999999999990835
iteration 606: weight=0.9999999999983898
iteration 607: weight=0.9999999999977722
iteration 608: weight=0.999999999997226
iteration 609: weight=0.9999999999967466
iteration 610: weight=0.9999999999963296
iteration 611: weight=0.9999999999959708
iteration 612: weight=0.999999999995666
iteration 613: weight=0.9999999999954114
iteration 614: weight=0.9999999999952033
iteration 615: weight=0.999999999995038
iteration 616: weight=0.999999999994912
iteration 617: weight=0.999999999994822
iteration 618: weight=0.999999999994765
iteration 619: weight=0.9999999999947379
iteration 620: weight=0.999999999994738
iteration 621: weight=0.9999999999947625
iteration 622: weight=0.999999999994809
iteration 623: weight=0.9999999999948752
iteration 624: weight=0.9999999999949587
iteration 625: weight=0.9999999999950575
iteration 626: weight=0.9999999999951696
iteration 627: weight=0.9999999999952933
iteration 628: weight=0.9999999999954268
iteration 629: weight=0.9999999999955685
iteration 630: weight=0.9999999999957171
iteration 631: weight=0.9999999999958711
iteration 632: weight=0.9999999999960292
iteration 633: weight=0.9999999999961904
iteration 634: weight=0.9999999999963536
iteration 635: weight=0.9999999999965179
iteration 636: weight=0.9999999999966823
iteration 637: weight=0.9999999999968462
iteration 638: weight=0.9999999999970088
iteration 639: weight=0.9999999999971695
iteration 640: weight=0.9999999999973277
iteration 641: weight=0.9999999999974829
iteration 642: weight=0.9999999999976348
iteration 643: weight=0.9999999999977829
iteration 644: weight=0.9999999999979269
iteration 645: weight=0.9999999999980665
iteration 646: weight=0.9999999999982015
iteration 647: weight=0.9999999999983318
iteration 648: weight=0.9999999999984571
iteration 649: weight=0.9999999999985775
iteration 650: weight=0.9999999999986927
iteration 651: weight=0.9999999999988028
iteration 652: weight=0.9999999999989078
iteration 653: weight=0.9999999999990076
iteration 654: weight=0.9999999999991023
iteration 655: weight=0.999999999999192
iteration 656: weight=0.9999999999992767
iteration 657: weight=0.9999999999993565
iteration 658: weight=0.9999999999994316
iteration 659: weight=0.9999999999995018
iteration 660: weight=0.9999999999995676
iteration 661: weight=0.999999999999629
iteration 662: weight=0.999999999999686
iteration 663: weight=0.999999999999739
iteration 664: weight=0.999999999999788
iteration 665: weight=0.9999999999998331
iteration 666: weight=0.9999999999998747
iteration 667: weight=0.9999999999999126
iteration 668: weight=0.9999999999999473
iteration 669: weight=0.9999999999999788
iteration 670: weight=1.0000000000000073
iteration 671: weight=1.0000000000000329
iteration 672: weight=1.0000000000000557
iteration 673: weight=1.0000000000000762
iteration 674: weight=1.0000000000000941
iteration 675: weight=1.00000000000011
iteration 676: weight=1.0000000000001235
iteration 677: weight=1.0000000000001352
iteration 678: weight=1.000000000000145
iteration 679: weight=1.0000000000001532
iteration 680: weight=1.0000000000001599
iteration 681: weight=1.000000000000165
iteration 682: weight=1.0000000000001688
iteration 683: weight=1.0000000000001714
iteration 684: weight=1.000000000000173
iteration 685: weight=1.0000000000001734
iteration 686: weight=1.000000000000173
iteration 687: weight=1.0000000000001716
iteration 688: weight=1.0000000000001696
iteration 689: weight=1.000000000000167
iteration 690: weight=1.0000000000001639
iteration 691: weight=1.00000000000016
iteration 692: weight=1.0000000000001559
iteration 693: weight=1.0000000000001514
iteration 694: weight=1.0000000000001465
iteration 695: weight=1.0000000000001414
iteration 696: weight=1.0000000000001361
iteration 697: weight=1.0000000000001306
iteration 698: weight=1.000000000000125
iteration 699: weight=1.0000000000001195
iteration 700: weight=1.0000000000001137
iteration 701: weight=1.000000000000108
iteration 702: weight=1.0000000000001021
iteration 703: weight=1.0000000000000966
iteration 704: weight=1.000000000000091
iteration 705: weight=1.0000000000000855
iteration 706: weight=1.0000000000000802
iteration 707: weight=1.0000000000000748
iteration 708: weight=1.0000000000000697
iteration 709: weight=1.0000000000000648
iteration 710: weight=1.00000000000006
iteration 711: weight=1.0000000000000553
iteration 712: weight=1.0000000000000508
iteration 713: weight=1.0000000000000466
iteration 714: weight=1.0000000000000426
iteration 715: weight=1.0000000000000386
iteration 716: weight=1.0000000000000349
iteration 717: weight=1.0000000000000313
iteration 718: weight=1.000000000000028
iteration 719: weight=1.0000000000000249
iteration 720: weight=1.000000000000022
iteration 721: weight=1.000000000000019
iteration 722: weight=1.0000000000000164
iteration 723: weight=1.000000000000014
iteration 724: weight=1.0000000000000118
iteration 725: weight=1.0000000000000098
iteration 726: weight=1.0000000000000078
iteration 727: weight=1.000000000000006
iteration 728: weight=1.0000000000000044
iteration 729: weight=1.0000000000000029
iteration 730: weight=1.0000000000000016
iteration 731: weight=1.0000000000000002
iteration 732: weight=0.9999999999999991
iteration 733: weight=0.9999999999999981
iteration 734: weight=0.9999999999999972
iteration 735: weight=0.9999999999999964
iteration 736: weight=0.9999999999999958
iteration 737: weight=0.9999999999999952
iteration 738: weight=0.9999999999999947
iteration 739: weight=0.9999999999999942
iteration 740: weight=0.9999999999999939
iteration 741: weight=0.9999999999999936
iteration 742: weight=0.9999999999999933
iteration 743: weight=0.9999999999999931
iteration 744: weight=0.999999999999993
iteration 745: weight=0.9999999999999929
converged after 746 iterations
/opt/venv/lib/python3.7/site-packages/ipykernel_launcher.py:31: RuntimeWarning: invalid value encountered in sqrt