From 5664d13e96fbb244379692ac4fec2660d13b112a Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 00:24:36 -0700 Subject: [PATCH 01/67] Better printing. Use the simple method of matching (all ...) and add a new 'Print' key to the step run output for it. Because it's an 'all' primitive, it can't be skipped if anything dynamic is in one of its arguments. The user can decide how to incorporate functions that use this signal, as in whether to print the value passing through or not. It can be matched at runtime without symbols and puts all consumers on the same footing. Add a test to test_clvm_step.py and a test of the command line tool. --- .github/workflows/build-test.yml | 7 +++ resources/tests/mandelbrot/mandelbrot.clsp | 55 +++++++++++++++++ .../tests/mandelbrot/mandelbrot.clvm.hex | 1 + resources/tests/mandelbrot/mandelbrot.sym | 1 + resources/tests/test_clvm_step.py | 59 ++++++++++++++++++- src/classic/clvm_tools/cmds.rs | 18 +++++- src/compiler/cldb.rs | 42 ++++++++++++- 7 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 resources/tests/mandelbrot/mandelbrot.clsp create mode 100644 resources/tests/mandelbrot/mandelbrot.clvm.hex create mode 100644 resources/tests/mandelbrot/mandelbrot.sym diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 3143632a9..8a2cf4654 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -139,6 +139,13 @@ jobs: python -c 'import clvm_rs; print(clvm_rs.__file__)' python -c 'import clvm_tools_rs; print(clvm_tools_rs.__file__)' + - name: Run step run tests + run: | + . ./activate + cd resources/tests && \ + python test_clvm_step.py && \ + python mandelbrot-cldb.py + - name: Verify recompilation of old sources match if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python, '3.7') run: | diff --git a/resources/tests/mandelbrot/mandelbrot.clsp b/resources/tests/mandelbrot/mandelbrot.clsp new file mode 100644 index 000000000..031b76635 --- /dev/null +++ b/resources/tests/mandelbrot/mandelbrot.clsp @@ -0,0 +1,55 @@ +;; Mandelbrot set in chialisp +(mod (X1 Y1 X2 Y2 STEP) + (include *standard-cl-21*) + (defconstant LIMIT 0x0400) + (defconstant MAXITERS 15) + (defconstant CHARS "0123456789ABCDEF") + + (defun print (M P) (if (all "$print$" M P) P P)) + + (defun to-char (V) + (c 1 (substr CHARS V (+ 1 V))) + ) + + (defun escape-steps (X Y WX WY V) + (if (> MAXITERS V) + (let + ((xsqr (ash (* X X) -8)) + (ysqr (ash (* Y Y) -8))) + (if (> (+ xsqr ysqr) LIMIT) + (- V 1) + (let + ((next-x (+ (- xsqr ysqr) WX)) + (next-y (+ (* 2 (ash (* X Y) -8)) WY))) + (escape-steps next-x next-y WX WY (+ 1 V)) + ) + ) + ) + (- V 1) + ) + ) + + + (defun basic-scanline (X1 Y1 X2 STEP) + (if (> X2 X1) + (let ((escape (print (list "escape-at" X1 Y1) (escape-steps 0 0 X1 Y1 0))) + (rest (basic-scanline (+ X1 STEP) Y1 X2 STEP))) + (c (to-char escape) rest) + ) + () + ) + ) + + (defun stringify-row (R) + (a (c 14 (c (c 1 "|") R)) ()) + ) + + (defun scan (X1 Y1 X2 Y2 STEP) + (if (> Y2 Y1) + (c (c 1 (stringify-row (basic-scanline X1 Y1 X2 STEP))) (scan X1 (+ STEP Y1) X2 Y2 STEP)) + () + ) + ) + + (print "result" (stringify-row (scan X1 Y1 X2 Y2 STEP))) + ) diff --git a/resources/tests/mandelbrot/mandelbrot.clvm.hex b/resources/tests/mandelbrot/mandelbrot.clvm.hex new file mode 100644 index 000000000..cc02257d3 --- /dev/null +++ b/resources/tests/mandelbrot/mandelbrot.clvm.hex @@ -0,0 +1 @@ +ff02ffff01ff02ff08ffff04ff02ffff04ffff0186726573756c74ffff04ffff02ff16ffff04ff02ffff04ffff02ff1effff04ff02ffff04ff05ffff04ff0bffff04ff17ffff04ff2fffff04ff5fff8080808080808080ff80808080ff8080808080ffff04ffff01ffffff02ffff01ff02ffff03ffff22ffff0187247072696e7424ff05ff0b80ffff01ff02ffff010bff0180ffff01ff02ffff010bff018080ff0180ff0180ffff02ffff01ff04ffff0101ffff0cffff019030313233343536373839414243444546ff05ffff10ffff0101ff05808080ff0180ff02ffff01ff02ffff03ffff15ffff010fff5f80ffff01ff02ffff01ff02ffff03ffff15ffff10ffff16ffff12ff05ff0580ffff0181f880ffff16ffff12ff0bff0b80ffff0181f88080ffff0182040080ffff01ff02ffff01ff11ffff05ffff06ffff06ffff06ffff06ffff06ff01808080808080ffff010180ff0180ffff01ff02ffff01ff02ff1cffff04ff02ffff04ffff10ffff11ffff16ffff12ff05ff0580ffff0181f880ffff16ffff12ff0bff0b80ffff0181f88080ffff05ffff06ffff06ffff06ff018080808080ffff04ffff10ffff12ffff0102ffff16ffff12ffff05ffff06ff018080ffff05ffff06ffff06ff0180808080ffff0181f88080ffff05ffff06ffff06ffff06ffff06ff01808080808080ffff04ffff05ffff06ffff06ffff05ffff04ffff04ffff05ffff06ff018080ffff04ffff05ffff06ffff06ff01808080ffff04ffff05ffff06ffff06ffff06ff0180808080ffff04ffff05ffff06ffff06ffff06ffff06ff018080808080ffff04ffff05ffff06ffff06ffff06ffff06ffff06ff01808080808080ffff01808080808080ffff04ffff16ffff12ff05ff0580ffff0181f880ffff04ffff16ffff12ff0bff0b80ffff0181f880ffff018080808080808080ffff04ffff05ffff06ffff06ffff06ffff05ffff04ffff04ffff05ffff06ff018080ffff04ffff05ffff06ffff06ff01808080ffff04ffff05ffff06ffff06ffff06ff0180808080ffff04ffff05ffff06ffff06ffff06ffff06ff018080808080ffff04ffff05ffff06ffff06ffff06ffff06ffff06ff01808080808080ffff01808080808080ffff04ffff16ffff12ff05ff0580ffff0181f880ffff04ffff16ffff12ff0bff0b80ffff0181f880ffff01808080808080808080ffff04ffff10ffff0101ffff05ffff06ffff06ffff06ffff06ffff05ffff04ffff04ffff05ffff06ff018080ffff04ffff05ffff06ffff06ff01808080ffff04ffff05ffff06ffff06ffff06ff0180808080ffff04ffff05ffff06ffff06ffff06ffff06ff018080808080ffff04ffff05ffff06ffff06ffff06ffff06ffff06ff01808080808080ffff01808080808080ffff04ffff16ffff12ff05ff0580ffff0181f880ffff04ffff16ffff12ff0bff0b80ffff0181f880ffff018080808080808080808080ff8080808080808080ff018080ff0180ff0180ffff01ff02ffff01ff11ff5fffff010180ff018080ff0180ff0180ffff02ffff01ff02ffff03ffff15ff17ff0580ffff01ff02ffff01ff04ffff02ff14ffff04ff02ffff04ffff02ff08ffff04ff02ffff04ffff04ffff01896573636170652d6174ffff04ff05ffff04ff0bffff0180808080ffff04ffff02ff1cffff04ff02ffff04ffff0180ffff04ffff0180ffff04ff05ffff04ff0bffff04ffff0180ff8080808080808080ff8080808080ff80808080ffff02ff0affff04ff02ffff04ffff10ff05ff2f80ffff04ff0bffff04ff17ffff04ff2fff8080808080808080ff0180ffff01ff02ffff01ff0180ff018080ff0180ff0180ffff02ffff01ff02ffff04ffff010effff04ffff04ffff0101ffff017c80ff058080ffff018080ff0180ff02ffff01ff02ffff03ffff15ff2fff0b80ffff01ff02ffff01ff04ffff04ffff0101ffff02ff16ffff04ff02ffff04ffff02ff0affff04ff02ffff04ff05ffff04ff0bffff04ff17ffff04ff5fff80808080808080ff8080808080ffff02ff1effff04ff02ffff04ff05ffff04ffff10ff5fff0b80ffff04ff17ffff04ff2fffff04ff5fff808080808080808080ff0180ffff01ff02ffff01ff0180ff018080ff0180ff0180ff018080 diff --git a/resources/tests/mandelbrot/mandelbrot.sym b/resources/tests/mandelbrot/mandelbrot.sym new file mode 100644 index 000000000..4a22371ef --- /dev/null +++ b/resources/tests/mandelbrot/mandelbrot.sym @@ -0,0 +1 @@ +{"4450d921c3b1e4d2d0b689daa7f17ddb9faccf150c42e0bc25bedccb449b537c":"./mandelbrot.clsp(8):31-./mandelbrot.clsp(8):40","6b6daa8334bbcc8f6b5906b6c04be041d92700b74024f73f50e0a9f0dae5f06f":"*prims*(1):1","d3e0f134a2c055fb43aaff77cc14c45578c4b634789bbaf12d0c72e582da0411":"./mandelbrot.clsp(54):49-./mandelbrot.clsp(54):51","7b3aaa149b08ece69f8f69ccd24337922cb8fc8458456d8249e3e80e2e4bcf84_left_env":"1","594567f88230b7941db740e747a755fb52953e426e377bb573461523b4199555":"./mandelbrot.clsp(54):40-./mandelbrot.clsp(54):42","46f1ed138462f6d869464773eed5913ff10047020ec869fd2ac83a93ea8da02f_left_env":"1","1b949d6b278e028e3ec8cd7d7daef53c5417f9f3a86ea82a56792bda931f4de3":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","f3891bd9a39a9d7b0fa4d1b78dff2aafee0c9ee492d29e91e7865530599835e4":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","4c9c45c76173dd2908c19f47a65585d8052adf5f89e0f758d136bc50c0b2aec4":"./mandelbrot.clsp(20):16","3f6ac88fd33af5263214784fc08997f6eb718bdf2b482efb1a7e3689ad185875":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","6a20a8d77b1b5b2b8348b909d97e8ef40976f3043e0cae182af681dffd4a2a38":"./mandelbrot.clsp(22):23","434648b85e6c5930169e369d6a83a0fa10122938ac4f3223da6d91f69e2d7ea7":"./mandelbrot.clsp(35):46-./mandelbrot.clsp(35):48","3334138d299f1de76c84b0d4090e2360def4a1c613f7de1decf048aa7d1197f6":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","e6252bdd0b00c42989e9b667482d349cbfa4296384cfbe833584bf22169668d7":"./mandelbrot.clsp(35):69","4bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","09608e9c85cbcce6171589e6e289076b4301c8221dc8cc7644d4685149c1591a":"./mandelbrot.clsp(19):14","07e68843f37a4086657ab6de3d1aaae83ff4dc9852e33602ad82f8200862aac2":"./mandelbrot.clsp(20):12","223a6f32d5f71d5cf376a617e924617523c5c063455e4b6c4192a3f7f49349ab":"./mandelbrot.clsp(35):67","2e4a591bbbe0c79c73366e33ace99f76ba708a458ffb617e978467b74fee4d14":"./mandelbrot.clsp(36):38-./mandelbrot.clsp(36):40","89122ad41d83077facf794f65221c3144d7fcdca91b2113a1938371352487de0":"*macros*(2):44-*macros*(2):48","aa5ba8fe6b974ef11057153132832066c3445621c3a97facfaedb0adaf2d3684":"./mandelbrot.clsp(17):24","197d556587b3441efb11831053c7f0f6c198c2e2e360e232a46db8c8ce221aab":"*macros*(2):27","539c49322a85b5bdf9a8a677ed9020bf8991f2cafe6d868dd9852649f8c40e3e":"./mandelbrot.clsp(49):46-./mandelbrot.clsp(49):48","16f5fd57daa7d9788f6bbedbafbf6498a8f1a55c81a70b6cd1f884bcd32fe47f":"*macros*(2):30","9357197dc217c963e1e9b084d9742cd856741a585c0bfc3db060a5543c4b5c48":"*macros*(2):27","061863da78980eb8019dcaec1e5a6cc6147f96b767679160c46e922733d78532":"to-char","3f9e45d04ef985010b9699fbfed921611528a1bfe14a3c93e79067c60031f20c":"./mandelbrot.clsp(23):26","9bec9204059871252b76df417663fdeabbca3832f2bbcea74c35e1059f9815ec":"./mandelbrot.clsp(54):43-./mandelbrot.clsp(54):45","849315f3d2d1a8e89b3cfc009da8c7dc10a25af138b589c72e361d565c78789b":"./mandelbrot.clsp(36):53-./mandelbrot.clsp(36):57","a503a4d5f1403af3ee517a2725e7a4b55ef6bcec0946afa51bb7f30baf6e9bf6":"./mandelbrot.clsp(36):47-./mandelbrot.clsp(36):49","fc07c28f3ebc5f0a261597284630ff9624aa3e42af86b0d4b63855aef86313d2":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","3e87daa5ebaf2ee5cd48b9438b42925fe907ac9c08218bd639b1be99af26e4c4":"*macros*(2):62-*macros*(2):66","ea4a9e5056b1789526c5ed997c0a158a5b22aaf22842000ce2e9cbf19b5cc219":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","ae00e9a1052297b0781daa7a4c3e828f79bcb96967933a0d8beed96990291d07":"./mandelbrot.clsp(6):22-./mandelbrot.clsp(6):40","d9eb3c8d23e5befbc1d45029173db60059b820a7dfec2b2bc5e2d1c82863fa8f":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","a224efd9ea0fc5576b802d33c5cb4e2e747fe35ff641358c6c283a517c72a9c2":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","e9bf753365df837bef5dcc3e4988dde9a7d56ae56b1a6a21b2ed83961ab5c231":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","5ca75215696c4e1cfeaab1bfcbf71513d176f05a849b283eb569e6bb5add46c5":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","1b7b61b9c0c1b1a2a0c9350d80e5bc54727137072415fdc7a5217e7e9edd39ef":"*macros*(2):44-*macros*(2):48","c302512931ec9f4af8fad29088125d3f3fe3974058c451ec83318dcf0405280b":"./mandelbrot.clsp(23):31-./mandelbrot.clsp(23):34","5d9703662ebae00022cb64042b40cf99794e70b15a595d1cbd67c0bdce72d0fd":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","29ef7156fdad6528ba3411182b1c58a173972d8a0844f81ab393617714d3642d":"./mandelbrot.clsp(49):87-./mandelbrot.clsp(49):89","78a86a80432b9091a380be930c43552a06c2d64996d8812463f757d362b62492":"./mandelbrot.clsp(11):6","29fafe8f93be3b524ace28517f02acc57cd681ce82f863f3856746a91e6da0a1":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","38b204391a173c348b89eff00b1f7316ec53a487472770e07699167a77c2a945":"./mandelbrot.clsp(54):43-./mandelbrot.clsp(54):45","7c3815a1eb636c752709c028bfa64c05226bf12c8b5af6491198ba73346472b3":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","16b895ddddbc4c9bd10d39d95164be2c33fb2ca3555a76086ad31da1d2e0a94d":"./mandelbrot.clsp(54):43-./mandelbrot.clsp(54):45","884eef994532b1cd3ec86ff3f7c4df6c9ffcc9104c28b69fb972fce0f137cb3d":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","a459f7f4cdfb74f6a604468d2051253c723ed1921af39a2e118dd751ee7406df":"./mandelbrot.clsp(4):3-./mandelbrot.clsp(4):15","55da2d4ab580eb174ef0d60e6a3acc254cdaea9cf953af022a9ccfa2f27ea48f":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","8a537ba84ec85638174ab0cda197087552deae16db8646f517f7547b73c68605":"*macros*(2):62-*macros*(2):66","567bbd019a2a58d4fcd5e10a24dfd9a64dbff240b0ae09487a234a705a2d2c94":"./mandelbrot.clsp(18):24","3d1494c9b144b93171c1f2419e70ca29d6a6a6a8ff780e6a1525e17631c9d5cc":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","4f3dc0185f579d9021bafbab55496d7e5c39a5e4f41ef55e19a55c6e5133be5a":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","5dad34896875f6daf7b967625bf6aac00b454bb1337abff61ad41845444f4316":"escape-steps","81fe15c959d94e34066dce10dbe61eb327e268f069cc276bc74c8fb263aa936e":"./mandelbrot.clsp(22):26","fde7336437fff05e284c51201609f0c5d39f1dbfd1cd2fb7815268ddc570cc19":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","5bef23cfce6d5c27bb44ad76442bbe287ed5a631a1cee188b4309fb3b86b2666":"./mandelbrot.clsp(36):53-./mandelbrot.clsp(36):57","1f20af3739451bb5d65447048c6825f40528a2273e549b3b86969532e9c32b3f":"./mandelbrot.clsp(36):36","48f6eb3dcb192667016ff10dac09fb21b9388f18d91a863a270f4a91477e8528":"./mandelbrot.clsp(23):28","24a803f02e0a5257518e9f9d23fc7cbe0819a91edadc5abf0ef0ae57d27ea09c":"./mandelbrot.clsp(23):31-./mandelbrot.clsp(23):34","923b3160cd3468875985f94df688f8c8479f4871a4e06521ac237e36cc08c5f7":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","cf9b94590392051bffc5bc8973ac4a50a2f30e3e53787c951db98b3cf8c78a72":"*macros*(7):33","5de4da88fe1ddee38f6809451626fd1011ea8329df0f6c18f003a2c940401d0b":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","a74d51f16ad535cd1bb21237eb976e874c0d67ed8ef9b677e294eb989df1bc13":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","d2d9d291c3d6dcbefad50fbdfec2090ea5f717730f6406ca05b4d2e5b5da7502":"*macros*(2):62-*macros*(2):66","c5692e2bbdb538d502925e148a96d6df05f56f03fa605fa5127134893e564bb0":"*macros*(2):27","f0fa1c8f22be6894e7c68cbebae552385bc4986d5f90fbaa8410802723c9ae58":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","882b1693f43f5e102dd5e19556f93c6f428fdb1d1e55cdd05387b233d8738deb":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","b5a05d9eebd4b9d5ee8d44bed0d2966e3388e854e23362f19103a5820bcd7f97":"./mandelbrot.clsp(44):15","cc89c923a9e3276f8d8138ddeac04e07ac319e5af710d72d61a36bff10aa8202":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","52db9ef97986e7382ef78b8eae2dacdbb2ce823ed1396a0fb2f7f120a2b40a63":"./mandelbrot.clsp(54):52-./mandelbrot.clsp(54):56","6b2884fef44bd4288621a2cda9f88ca07b4808619dcf88729412a0bef080a581":"./mandelbrot.clsp(49):90-./mandelbrot.clsp(49):94","620882dbaf649530c3ef3065b70e2740dcad4a1c77782f26f60a738bcfec1f6c":"./mandelbrot.clsp(18):29-./mandelbrot.clsp(18):31","2f5ff29521b993de6c1d397fc93a870229064ea9af3e18c5fb39fcf26bfac9ce":"./mandelbrot.clsp(44):6","4b5b8ebe890394a40aa0dcc9b8f94beab72e29f0bf9e77a3666727622818ed39":"*macros*(2):62-*macros*(2):66","9d6026a622a69c8055f771aa1bc5a544489883fa016edf356212272256a5e7b7":"./mandelbrot.clsp(49):11","59351c082d30c6133a61c4956e473275694de8bb91fcd63142d20eba518a959d":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","c80643a5f715da07a5a21db7371f2677f918dcc7dcad5042c4d9621b112b2e6d":"./mandelbrot.clsp(23):23","47ad8d4a1a53af2a5b94af0d46529cd4fa53dec5852eb2bfeed9620b072c3e99":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","d6471351f36a2129317816775f6451f4e74e865bef4dfbbb98b4d59e8068e208":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","dec4ed4c297e02ff76dccd6d37d9acf4c92d229c480089269691d96de243c627":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","ff0e987bcf502abb6afca535aff650d2a5209541172863e6ab761d3a0477d7a3":"./mandelbrot.clsp(49):69-./mandelbrot.clsp(49):71","1ae0b1bf50e0b7691d36f19ff55f1c0b5cb1fd9e495e6bdd3c892a549d14fd6c":"./mandelbrot.clsp(49):69-./mandelbrot.clsp(49):71","76c85c0b1a02ccd0f9d278fb110232cfce365ce23c1abd41cddb2bff0ac7407e":"./mandelbrot.clsp(54):46-./mandelbrot.clsp(54):48","2cdca32b31f1fe1f022095209df8a814e78865792aa36838da1d97ac8804bd9b":"./mandelbrot.clsp(36):50-./mandelbrot.clsp(36):52","55e3787d6a9434a3eca44186565ffe1a4054127f0fbd3555dc1559d0771ab952":"./mandelbrot.clsp(4):22-./mandelbrot.clsp(4):28","8cb0ceb4b117150af4258ed6a11861f388200787d0345e60e2f42da4a2940ef7":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","93f54cc969c6d48e8d96cde6b14d8e01f6b9be907e6555f48e9a383243e7f4b9":"*macros*(7):33","c0273cd964422e631339d301db8857e4c921b71e0e3eca814bd7738f2c9590ef":"./mandelbrot.clsp(37):10","7cad36d86280fb6b83a994dbb5d2197fd1d621dd4231ff472d0970e031f07a6f":"./mandelbrot.clsp(11):6","03c824b8202f36146c07455861cadeb55aee3eea277474322364144df20d1b97":"*macros*(2):44-*macros*(2):48","d09b948577b7b9b9a825b4974edcb1e4d47194848fd0eb85e7a8d9a7d11c98a8":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35","d70864348248f5c52bf12eff7801d42a95e89e90ca912b2e2516e21951d3b8d9":"./mandelbrot.clsp(54):46-./mandelbrot.clsp(54):48","f18b8f2991a49cbd247bc3baaca852218c72f0808360ee7f7da907778510f92b":"./mandelbrot.clsp(54):10-./mandelbrot.clsp(54):18","b922a0a22d907eb42291f4031165e8c298e3b6a179059d7cc011ef966efdaab1":"./mandelbrot.clsp(23):36","4876725a057a543284746d102d274b81901de5934003ec7cb268facf5092ccf3":"./mandelbrot.clsp(28):8","74fe3ebaf58a999451ddadecab22a5e39c270b2f40100ca4f953bcc4da4a7ebd":"./mandelbrot.clsp(34):10","de5f93759073ee1e132bbb049b49df55036b0ca9dd5f66ee44c2a97f4af5d0b6":"*macros*(2):44-*macros*(2):48","36f37e323236f180acdcc05fd2c8122e099ff4abf9cc5fc69688ea048444f92f":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","8747e8226fc7f9799fdb8d3b697cf2c9c13576b6dedfb8cd7e0599074f2124bc":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","93a6456382561b77ee999692c1e7d2fb648ee685e848196a60e8824e80a1f355":"./mandelbrot.clsp(2):1-./mandelbrot.clsp(2):5","ac7bbd322858f36037b228ebc6dd14bc945a572337ffabb7c56d6610300893b0":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","1f44c101240629bd2a48c41d61c3bdf93a49b1dbffab9124b284e8d07e861b1f":"./mandelbrot.clsp(17):22","ba4484b961b7a2369d948d06c55b64bdbfaffb326bc13b490ab1215dd33d8d46":"./mandelbrot.clsp(8):43","19ecae439422e92a0aa42f82fec455b23e0445155a9bec61ef74208299bda147":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","f7974ed1a08d2184335b5759a9408d87693862b29c32efbaa108f01a162df846":"./mandelbrot.clsp(11):6","6b501d1533e2e0474aec1fe8f64bdde06f88d08906556676d2e14dbda4fd08ca":"*macros*(2):44-*macros*(2):48","3dba991a3e7832d2d889c5e004a9f8f302cc523d3c69688c3b25a69213e0d479":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","d2a4943cb9d957b9f69f6151cf7659cb063e4e4c651677ff741ab21cd3f36641":"./mandelbrot.clsp(49):8","af340aa58ea7d72c2f9a7405f3734167bb27dd2a520d216addef65f8362102b6":"*prims*(1):1","fe3b2967fa2a6a9433ab52b13b72a39da5182e7e27eac2cca4feb333e9daa2dd":"./mandelbrot.clsp(8):41","18b0d0a1079d1c863616d8f0a8f468e8610a286934f6ba1a1e25fca2d099db4e":"./mandelbrot.clsp(4):3-./mandelbrot.clsp(4):15","8183752fd41561855fc5cd3e9278c9f4d93d7eb472076fcb886d535399d09ed4":"./mandelbrot.clsp(18):17-./mandelbrot.clsp(18):20","301fb3a3a77c72312105b1e7563b3836e75334b93d39212bd3c9a7148cb880c1":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","2bead8a7c10b51c09ff289eb7df2910ce4913ab5079ecad9440b8fd68dad396f":"./mandelbrot.clsp(28):8","45e48faf92f8dc6ed30131ee34f1180989ae895d85308039c4bdf6477ccd6fd4":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","c7dbf122ed575ea7e4b3560b2f11504f95b1495e5c337a9b8b5d31ab70a175f8":"./mandelbrot.clsp(36):41-./mandelbrot.clsp(36):45","6685779900b54efb10c33c5dfbbf32529a2b06eb26aba6f7736162376fcdab9f":"./mandelbrot.clsp(35):77","50997e78f46c9f96e921c626e0cdf180d87bf3cb59d95061154f633fb9e39f39":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","94fbd5901719bd8b406c75f65d638dc40a1797e89c3910be36d5383dbe49a0ce":"./mandelbrot.clsp(49):13","5d5f24a187d8025dc760a91c06102ea14820c4cf20e4f65312f58392e446b741":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","c964f6070c2acd94830298b53597fbfed11a0ddabf0a215825e7bde0acd04795":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","000210c2e752a93b0cf54840ccfbd4282132b7feb0b8598a8f84cbfff5c95680":"./mandelbrot.clsp(11):27","2fd44dc17723eca0691884d8fc135e52824584231e5325d0d8ddc8c09877f20a_arguments":"(X1 Y1 X2 STEP)","c04b5bb1a5b2eb3e9cd4805420dba5a9d133da5b7adeeafb5474c4adae9faa80":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","91a441bc7b5d751fa55f8df2aa643ec0ad412e4f66ecc1ba310e140d32c2a358":"./mandelbrot.clsp(17):22","c1f8372ca12269e64acf510770506adab862b4cad6776d2c3b4cb1ddc79c3723":"*macros*(2):44-*macros*(2):48","d6e65f94133902de192e317565d60d26514e2eb337d5c969b7296559d8d72553":"*macros*(2):44-*macros*(2):48","02bdbc61375c496c56d7b9ef499d3af49bdde282c61e0f20c3d3996b283eaaff":"./mandelbrot.clsp(23):26","78c5f714d87fea5b56fb635aee2b53c79e95fdb935cd91db4d68880ef561a87a":"./mandelbrot.clsp(34):10","1cb2de17f861daaba687bd573193816c59963d4931444dde2ac5fb5720e0cfda":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","7516e4e0597d19ad0b9515131a332ec5f1c19f17abf7b1d2c62fd3d7417a3bbd":"./mandelbrot.clsp(36):36","69646e956cb2c6cf794ca22b0f49e4a2d3def7193b706474a9552961f1a2031c":"*macros*(2):44-*macros*(2):48","43951e60bf4ed96961150527b56dc538ebed86d0917d11f85813ac8597c2c905":"./mandelbrot.clsp(49):49-./mandelbrot.clsp(49):51","20c0f569dd52dadd6afae9430a40f785fa346871ffb159621a574f2dd27c6821":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","de6a84ae3b385f53e2ef47aa749883f9a2262c9a6431b33dff3cceb98d8ee986":"./mandelbrot.clsp(20):12","ed9139a4b09a4441e7e6bd1108aa2667ef93e3fb20871937b13d62d0eba94919":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","588d99d1b72c8b6d611c85b3e1e9c8491606589aeed3eebde9f5f58622f71919":"./mandelbrot.clsp(35):74-./mandelbrot.clsp(35):76","9911de70343613344dcbf53301d85226e2c6080cff4e4fd182bdcc3a7d516599":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","f8604f8807b3199f0cf73cb7520337a6942c491f89326abe6b3a0019e85078f8":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","486631bbf2d1892ec94769a3e06c7e0796f51d9d417d62b4831474b75345ac76":"./mandelbrot.clsp(24):50","52dd0c0573bfb971380907bebc8fe4ed5eac739d4913782fa56a9f7909f78578":"*macros*(7):33","73678aa6442ccb57d00bf9f33dc621b9a11bef8eb8583c7e9f6af87b3c350f4e":"./mandelbrot.clsp(37):10","d5f647e2bb3c55f8b9ece7cb40b6578fe322086bf7ed745e504898245e8006f4":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","2d93a3138dc33a0c34097b86a9a83e781808f6c065b97564befa8b2a3049840a":"./mandelbrot.clsp(49):73","a704cd228b68710cd62b6f3a9a0625a63b3d724cbd65d3b60ddaae13ab871613":"*macros*(2):44-*macros*(2):48","7ecd2773e54961073d513aec45f4bed6e60e4acc032cc4a204d4aab55181fb99":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","042c55b626937b8d6be258a97f8d25cdedeee2e712dbddef9438fa900eff883e":"*macros*(2):27","d8485e197ea0b6f2f11780d2a735a2ec42303b38d7eb18bfe6ab9fe58d5ddf50":"./mandelbrot.clsp(17):29-./mandelbrot.clsp(17):31","f4f35aaedd5f692cb4c845b5d86141668076dfa622cf762c6ce9211a71dc8b54":"./mandelbrot.clsp(17):29-./mandelbrot.clsp(17):31","1974e6c12f4645021b388e9f7dcbde947fc730cd7f1f01a40d81782564a94c27":"./mandelbrot.clsp(35):34-./mandelbrot.clsp(35):45","2fd44dc17723eca0691884d8fc135e52824584231e5325d0d8ddc8c09877f20a_left_env":"1","c57d8b60a6c62f7737ce1db025521bfbc280e5b6736b67d2d51898d4253b58c3":"./mandelbrot.clsp(15):21","cb9c847f86251a5d97592a8fecd65e314f262e25dd63524e7d52998bae8ba841":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","09701390c7f4be7398c39300b97326444a233afa457072922189ce137cafe05f":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","19bc3eaee7d7b5cc33223479a4511731d7eebac9d91fc97b00b7207f6f6740b0":"./mandelbrot.clsp(35):67","b9e48d4b6e77b651b1a19589c95b9092f0313c5443511802ee9cc9d16794b051":"./mandelbrot.clsp(8):31-./mandelbrot.clsp(8):40","24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6":"./mandelbrot.clsp(5):25-./mandelbrot.clsp(5):27","a05b97e73bc28de3b3350fb79732e47382e49db2b3e611588b89f393fdcee6a8":"./mandelbrot.clsp(5):3-./mandelbrot.clsp(5):15","d58b3d4714a24620e1761c5029c1bce397452916a1f64cfd8e078f5c1c356555":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","26c27894c42bacec825f1fe68f930ade223beed2977895ced732262b141812b2":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35","f1bbfd4aea1d2b42aa3d8e128e37ab2564c5e8f23dd80c7b7d3f9e6915481db1":"*macros*(2):27","8abae9f0d95e6754ee45c71605f8d567f4cd822042b9d1f3d19524fa49d449cc":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","240db6ce2aa102856bacc2ce1b5f7e4fe4852a791ea02f360bfb643e007a041d":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","5836e66e20081ee82faf3b94aa932220144674e85998e6ce81e20d67ab67cc8e":"./mandelbrot.clsp(44):20","5a7dc2e260e506304c6b8bcea38a15a0ddee7503d88bbbbe809cbfebd272c9d5":"*macros*(2):30","631e5fe753a0e6b819c4705d5551b00e5f9d63bb5bef305f04d85f2537ca4a95":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","3ff41d112d5d42fab83d3204fb618b36e31f10db02fa2bf04b68fe8032b8bfe8":"./mandelbrot.clsp(28):8","061863da78980eb8019dcaec1e5a6cc6147f96b767679160c46e922733d78532_arguments":"(V)","84a32717c39cb5423042c379c3d4b54a74bc4590463cbdd3318c11c37c6ab0f5":"./mandelbrot.clsp(6):3-./mandelbrot.clsp(6):15","a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222":"./mandelbrot.clsp(50):7-./mandelbrot.clsp(50):9","cfb036dc14f3d4fb977a0619668fa0b6f48fbc24479fa87d73506b9902657f3e":"./mandelbrot.clsp(15):10","feb8ff785ea3c2a99453a0248b4e8e5688557d4b7c73d92c03c21d9cbd2b68c5":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","f2e82ac5fdb42480a3f73484cfa7cb44366c695deb253d3c547cbb7087844857":"./mandelbrot.clsp(54):49-./mandelbrot.clsp(54):51","0e169cdd7e431e402360732cf5dede578621536bfdf69dd9fec5e654febd1d41":"./mandelbrot.clsp(6):3-./mandelbrot.clsp(6):15","2f291b1e011d6c035bac8d2d87a700beeaa7f34a37ca344ee2c613897cef236c":"./mandelbrot.clsp(20):12","08cc9c079a254dcbbf30c8172e15a8e0b40b77e5e169524010940d5fcef7d67a":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","387da93c57e24aca43495b2e241399d532048e038ee0ed9ca740c22a06cbce91":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","95f36862dda90b60d7c2fe8a5f0ef350bc02969208e4f847bc1a3f4038eb8084":"./mandelbrot.clsp(22):26","cbc6606f011046556c24d20903574162478339946260bbb7fbce2886409a59a8":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","ab8f2cb3e0c9b003a6267bd4fb7d1e3e26148f33a0bbbfe65342fa0e02ca2222":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","57d399996a6f69c888007a60f4f2dab98b68a95783a38ba69fb00bb3802daf87":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","bb0ea81768ff20d868536ad9003d43f3491675e44c5ecfb7c9d184201c0ec698":"*macros*(2):27","641d935acb7cbc7d0c71841a642e71c366b892cf1b2b7b83641a1705f857f971":"./mandelbrot.clsp(28):10","a252efa0d73bad23fed7a9148a0527b68c2e9787b2bbcfbb08df0991820f2f99":"./mandelbrot.clsp(54):49-./mandelbrot.clsp(54):51","1eb5fd9bfac583ca9fdc24cc2e12015e5974be4e8dbdc2b930eb492e60598f5e":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","061863da78980eb8019dcaec1e5a6cc6147f96b767679160c46e922733d78532_left_env":"1","57bfd1cb0adda3d94315053fda723f2028320faa8338225d99f629e3d46d43a9":"./mandelbrot.clsp(49):80-./mandelbrot.clsp(49):82","aeef4757d36b14fb7654e1cc67b3ea5b4aea9a8108ae54712b31bff989ebbdd5":"./mandelbrot.clsp(19):17","006bff8fe95364956c926bb544bb0e42d5709e874e7cc31c851c705fc5a47627":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","0a5af5ae61fae2e53cb309d4d9c2c64baf0261824823008b9cf2b21b09221e44":"./mandelbrot.clsp(8):43","13b7dcd665f5257f0c2351c366a3df2da385c68b244bdbc768ee05cb7845dc9c":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","6c2486e256f1d35b04972492fd377c62d46b344f6c515c4086ce1d45b4baf0d0":"./mandelbrot.clsp(35):74-./mandelbrot.clsp(35):76","3492218e7e04e9350b06aa34971be853d8f55344affc2fe2a66f547bb983c7af":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","5dad34896875f6daf7b967625bf6aac00b454bb1337abff61ad41845444f4316_arguments":"(X Y WX WY V)","8bd59b5acaecb6779640f6fd47adb9b3dce694777473e710858d341e29b7f515":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","94901f8ff3f22c1c8d475f03da3e5bad460ee16ad85373eb7a1633828d6aae01":"*macros*(2):30","653b3bb3e18ef84d5b1e8ff9884aecf1950c7a1c98715411c22b987663b86dda":"./mandelbrot.clsp(44):11-./mandelbrot.clsp(44):13","2098d8ceb40fe063596ac5cd73a8b21b7bf2ebaddcf62be7bf96889b44de1200":"./mandelbrot.clsp(44):18","51e3b5c13aa65e2a8b719f2c752f89f4a2e53fea0fba54d1039d80ca86b4252d":"./mandelbrot.clsp(49):49-./mandelbrot.clsp(49):51","8a76a7583b2ece4cb40c6cb7c211204882b8d539d5243b777c6b3308932bc891":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","4351796555753ee7f1ac53bf79c7c901cb1c8021395dadc4c322b6eea565ca15":"./mandelbrot.clsp(36):50-./mandelbrot.clsp(36):52","534b7996f58e3571f0cc67c210ca2eb856af7eec95457508ec6d46a21d32a47f":"*macros*(2):27","d066f9812625c40e18953381cb5d1b13c53553fd3eba6d4ade59cf707368098f":"./mandelbrot.clsp(37):10","f4500e4ba0a321c24636b173e70ec844c2aabd10c4ef3d69636b89d3701c823e":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","47d0b492e50e145ee2fab7c3b164df0d2cdce80ffabcb00b19df7e5fb9e6c67b":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","b98ea6eb7b4b99e5eeb6d1a3cfc3610ae93354fe1c322e8a74797004a750e60a":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","b6b45134fa3b154152aee8b4c8d8e40d976d0c7d564993156c302ffad5046e30":"./mandelbrot.clsp(44):6","df70f052682504228b50fc0b868e52de96552bf4654d4948ec43be27d4765622":"./mandelbrot.clsp(49):73","870f1251c064791acaf21669f63f0c5b8b70c087d176fb647b05d9a97190f21d":"./mandelbrot.clsp(49):8","5dad345ae3c23d573a6560f4f46b8a824ad7109669e4d2b960b53b3bcfa5d4b9":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","acfa5f9fcbd7cbc7a06ae863001da960f12302d27acfdea38ae7b003c5f5be20":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","462b7380e2907434d4e0676219f9a0f57787aadc8bb3167a1b617ae5d9b4657b":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","d185810df1bfc294d19d75a5bce24e14a7711d1dcdeb4517b1a4d7212e8c37e9":"*macros*(2):44-*macros*(2):48","cccff94de4e1cea74215e5d6370f5e52a9a4dff0fce75f9016e4de021b48d1ff":"./mandelbrot.clsp(35):77","d0e5290348881028d8bddf188318dcd15640a4843744dd1b9ae5a70f1b909302":"./mandelbrot.clsp(37):10","c65b39898818191e95c0bda9021af4eb69c78973edede92c6aa950f5fd66f75b":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","e2b7805b720c1ec7c0a009f39dca1928ff911a0e6e046c1f0c50e1922f9e2eee":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","28d0bcd82277a716a65520fd33fcacacaa220ecfb148efa9010e6e2db5499524":"./mandelbrot.clsp(8):27-./mandelbrot.clsp(8):30","1803d5ecc8f1ef577e52cd3904645e298c5edc1f4446bdafd603a5b1adcf47b0":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","7c14174364837d391cf50b08ec6760d6b63ad88d2fefc71550ff4c6ac2a44360":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","764c8a3561c7cf261771b4e1969b84c210836f3c034baebac5e49a394a6ee0a9":"*prims*(1):1","ad2cf336c8b4d4e1d7681f71f685e921a0f3d068ccb775cbce7d2851c7fdc565":"*macros*(7):33","115b498ce94335826baa16386cd1e2fde8ca408f6f50f3785964f263cdf37ebe":"*prims*(1):1","e8e1df5d0fb20bc4d578c4208beda333fc63c74c50c1a658091e27b2490bb41f":"./mandelbrot.clsp(11):11-./mandelbrot.clsp(11):17","461a46d263cf2f775539581ffb15736e7720f5320aef49258ad668886332ec96":"./mandelbrot.clsp(8):27-./mandelbrot.clsp(8):30","b70654fead634e1ede4518ef34872c9d4f083a53773bdbfb75ae926bd3a4ce47":"*prims*(1):1","6f421c534f410909658a60d0c35a30691dee19290a35b36fe44db5d68e89d8f9":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35","8c0028f07e418b57a26c2fc48e0c1ff10a4f01db9847e1cf5d0c5b4f86ee15ed":"./mandelbrot.clsp(28):8","492ef8cb6ea502c54e14a14c35ce6e0573f9a7cac19b3be6d336419522c8ba5c":"*macros*(2):30","83a6579c642b8d702f3bc701119311357ea78c871791c560c9898f88dcb4327c":"*macros*(2):27","d9540129c8d25b0aa886b06d9a99d4ea93bea2b6df9ffa7c0706351132b49ce6":"*macros*(2):30","46027ef94d5f9e5f433cace3fe5cb704e1a4eae5820a0250d58fabeaddfd6bca":"*macros*(7):33","1d16a54d70b70c3a7150afaafe55e62ef0a24bae747d3f1287bb3bca893f861b":"./mandelbrot.clsp(36):47-./mandelbrot.clsp(36):49","d678eed223f93a31a64833d740fa3446634e1a5bb4633949fd4c6be87ce565bd":"./mandelbrot.clsp(36):47-./mandelbrot.clsp(36):49","093aea7495b2cea8dcfa7b715b96f849bab27cefbfd38f3a816b2b1a37f6b5df":"*macros*(2):27","e993481360cff6d1798522698baf3e6cac611d34a33f0ee8622288d64dda1e15":"./mandelbrot.clsp(44):11-./mandelbrot.clsp(44):13","032d4ced7a27276100e4f9a6f084f8c76529798a8e7f0a537f9369bb1b75ba40":"./mandelbrot.clsp(48):10","d9a505a6966253b0b602d5cd1731b50fdda58f96b22341689be996495a67e8fd":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35","d2d50de29a287ac02a224293299411f235f3b1f3994d94d43b4e4d6e783b3c16":"./mandelbrot.clsp(35):69","c59908cff9dda698c6cd6d8412a11b44a688ef56a4c1c6a6708bdd110441a90d":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","187f5f4920b6aa7ab95f623a4f775878cda061335dd30cb4cba51f7dcd5d174c":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","d5db4e0b961efa15fc5db88991d25b224302c24c6d055a7a29bef40f08dc238d":"./mandelbrot.clsp(54):52-./mandelbrot.clsp(54):56","4b5974238f4f77a4f78fc568794c2922758fdfc99c0e470042fd47f9879e74b2":"./mandelbrot.clsp(11):8","7b3aaa149b08ece69f8f69ccd24337922cb8fc8458456d8249e3e80e2e4bcf84":"print","2b84bad14b6113746e1547c2ccc7fbde6f71d9632b24371ccd4cb17b321561d9":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","5d673620c1551f0d113cefbb7ad432627112e665b11995d8ffb7346c31d8c749":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","source_file":"./mandelbrot.clsp","2f626e647d7ea5662d930b77c3ad61c038adedcab94e240f7a9a7447dddf89bd":"*macros*(2):27","edb091197e890ca2794aa8969995271fca9144447ab8fc37e1a3a342770ade44":"*macros*(7):33","733c6171213c38cb4f2338de312b6b271ec7f3cd048240142bc7bc899dde8e23":"./mandelbrot.clsp(35):74-./mandelbrot.clsp(35):76","f32af4d5808c759643cb0129d2394c2563b54c30d6df418694e6b8e41e7e5f99":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","7638d6f19f8c4b1661fbfddd0bce6c4abff36c6f18aa52c8e5513c5d67f6ceca":"*macros*(7):33","3dbf38db11596fffdbadb99fffb800ecfbae4a34f51b5c95db3a8b2338687b00":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","ef318c36a54fbf750c3393bfcb4e005789c96ca84e8bf590777422671658c4c4":"./mandelbrot.clsp(19):14","0945d00f8c5e75b7d372c94390a0dcff78624ba47492b7c4c56a1746ba57df2f":"./mandelbrot.clsp(15):10","d78282a250bd430da333eeadf387a1e5fcf549ff0ab49667e68fed9aefae8125":"./mandelbrot.clsp(35):34-./mandelbrot.clsp(35):45","9d748086dbfe2f3fc671d8a037b9f1923dc8f2c4d8a335de28a87efc6c72df95":"./mandelbrot.clsp(35):34-./mandelbrot.clsp(35):45","af2f5c0848be28991bf7afc8b4b6611bd017bcc128725b31d697a22bc035cf2f":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","0ad33e725fb15991df4f6d7397ffb4f792a33f42c849a7495a5a827ff7352dc1":"./mandelbrot.clsp(36):36","4dc1ac5ca33dd21b551a3220f483f6d866adc9f7859e6e7790dfb7a71cfb012e":"./mandelbrot.clsp(35):77","7e88af07fe7d3756ff745346230e10a204817a488a27899a36df92d9771ffec3":"./mandelbrot.clsp(44):6","ef98d286a35becacc078a285b41f9c0e000e54e1d97c6adff7286765bdc95eee":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","f595963cbe26a718677c1274180103a0eac93973842a855b6d074211d046b414":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","4756c6d16e9cd878a37cefeedfc8fa380fa935227eda6d4ac37983d36b3ee7a2_left_env":"1","9394079ce11abf4105ee988738e5e16c196668055272b7a95ceffabfed3c292f":"./mandelbrot.clsp(36):20-./mandelbrot.clsp(36):34","26e7f98cfafee5b213726e22632923bf31bf3e988233235f8f5ca5466b3ac0ed":"*prims*(1):1","d6423421cd514c39b893e0f01c56de376cc909adf00bed2e637346a4b4915905":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","3efad2b120ec04ead8b80dcaeb0ead48021e7cc84705bdba8d98d16d49fbf2df":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","bf7969f41e3f44c2656752df835d74d0071fa7b01818f8d19b9efc6f1249991c":"./mandelbrot.clsp(54):52-./mandelbrot.clsp(54):56","76c02de572d12c3fc0953075230cce9a94b125bdd3680df4f213194f2a7ec2f9":"./mandelbrot.clsp(8):31-./mandelbrot.clsp(8):40","b4b690773ca7ccefc76e2371d8660030f853fce58c6159f54c4330508bc4b650":"./mandelbrot.clsp(24):14-./mandelbrot.clsp(24):26","fce7ea546f39e2fa276656015eb8b4c5a4fc2c7708bda55050fd0c474b61f91c":"*macros*(2):30","8544dde32c24d9f465d18db3797bca9e021474b1ae8eb9eda99e733bd92fb69d":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","9dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","5940533954bbc36e7e5834cb6cc3695fb4a1400e047043b217cdf9dfeb5ca49b":"./mandelbrot.clsp(49):8","536b0c61fff3474f46a605343ff0df83d974369f13a088b809123669c66fd8f8":"./mandelbrot.clsp(11):27","4756c6d16e9cd878a37cefeedfc8fa380fa935227eda6d4ac37983d36b3ee7a2_arguments":"(R)","30483f747949752783a80e6bb0a8a2cb7fbaa934ea44b0f30f36f935d2ef391d":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","8c8e14368079d92c7ce1d9dabf2335a7790c90fee26e5f45ce15cd043aa7ebe6":"./mandelbrot.clsp(44):22-./mandelbrot.clsp(44):25","4e0722cf28d67c4abe42848047e08c65284ab86908a6b94e1f157c6585813668":"./mandelbrot.clsp(44):9","91ee779e9599100bedcec1ec16c6a72fa8416d34a9b0be7cabe1c56ca6976c8c":"./mandelbrot.clsp(11):24","088cbb515ec0b5263653a681fc21956e8d04c4e723c02c40129c1769e876f63c":"./mandelbrot.clsp(2):1-./mandelbrot.clsp(2):5","fff586cc17a000df36970cc27ba7eb1095afcd61694e0c89ce139d95f12067bd":"./mandelbrot.clsp(8):43","155f2e1c4fb48e759a3ecf0d055dcef972a91906cd19d3fa1105075caa7cf9a3":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","e2ae1fe78b53c261a95827186146bb8afb2ce065fce96cd51d44a1dd319526df":"./mandelbrot.clsp(24):48","6953a91e2c2a47eea11c61f5b71287f63f2b733e686edb9f335dfde5acbf06bd":"./mandelbrot.clsp(18):17-./mandelbrot.clsp(18):20","d5df60aa14af601f0a14296bb7360996f17ee16c5904ab44db46ea70356c9df9":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","12a6eb7c301c87555ed8a084543129cf3816faa92fb94361386bd1423912b1ad":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","026610f80f7caed612208aaeeba9d777c73eec98a477f403ee997f734de5502f":"./mandelbrot.clsp(54):10-./mandelbrot.clsp(54):18","7b3aaa149b08ece69f8f69ccd24337922cb8fc8458456d8249e3e80e2e4bcf84_arguments":"(M P)","5809addc9f6926fc5c4e20cf87958858c4454c21cdfc6b02f377f12c06b35cca":"./mandelbrot.clsp(49):84-./mandelbrot.clsp(49):86","ab51e0d32da318a9b5f48c6e81beb83ba9f6e93fd51168cf160dd80c899e82d8":"./mandelbrot.clsp(54):10-./mandelbrot.clsp(54):18","8b40786b5cb0989e5337390cf6ba93a3b6d641dc0a71a19ada52f8bb4865e0c3":"*macros*(2):62-*macros*(2):66","0763c1e3e33c124d58ba24b8c5c5e7b977e2043c096f4a0173bf08bdcc9b8654":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","44602a999abbebedf7de0ae1318e4f57e3cb1d67e482a65f9657f7541f3fe4bb":"*prims*(1):1","62eedd00022359daf488006b39b825aa9f0c2088c474ba24c1f09457894e159a":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","a866d02017cc9cc4bbb31031495001e937dd641730c921fb87d8fa5ff73522d9":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","11c6118724a6966e3ed400816e1155d951f0330ae2a7f8e007938a8d552b9c93":"./mandelbrot.clsp(17):17-./mandelbrot.clsp(17):20","68a6e6c0fe45fc676d10299ad4d4d3d77e79c175a41b47ad9cf9d2ef85b501a4":"./mandelbrot.clsp(24):48","5ae951f94671144915f0a8f1c7bbd6c9adb805cd9c19d1879a102599154c603e":"./mandelbrot.clsp(35):71-./mandelbrot.clsp(35):73","477fba7a42ba568dd1fcd401b8063b75f19d9fbd2a9469687bb7fad50151ffc0":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","7207999dcec15009b71d3c32ad5415bb914ae83cb83326bbfbfc38f4732d4b04":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","54ac34cf4977340a7de0c847b37a974a727c66475bd5880c0ae40eb21047da7d":"./mandelbrot.clsp(35):77","e950ce0b56c2ea387b6c152e45422bf542c987587bede42fc30a8980b7b9a516":"*macros*(2):27","4e37cc6a79f5a52ddd99f1cd3fcf23e9f0af1be281f68cb21f65165a4eb2b657":"./mandelbrot.clsp(23):28","7f2dce06acdeea2633ff324e5cb502ee2a42d979278d8926a2e4e5728592fd87":"./mandelbrot.clsp(44):22-./mandelbrot.clsp(44):25","f16b9c4ae6091303b8fbdcc84d46daccbff782e664f38dc9c912aca09aafb522":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35","822e62246f590c7324d8951d572b5b8818a526791fb321e79351e36dc3abfb2f":"./mandelbrot.clsp(2):1-./mandelbrot.clsp(2):5","5f3322021bc04a79aa63f5ce5234a819450411b6e6a1550afed7d0fc70b78e9f":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","9f7769e5e3d1793d5841f813d73b3166e819055a759580e579b6a392e80c859e":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","8a7ac2881d772500dba5f12903492cfae45f7bf7a36e9b749456f2b57505bbeb":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","a374e1f0851fffb43fa5c33baa52e97d3beb3911638d3c5db4eb9427b3d8b1ea":"./mandelbrot.clsp(54):46-./mandelbrot.clsp(54):48","69ae360134b1fae04326e5546f25dc794a19192a1f22a44a46d038e7f0d1ecbb":"./mandelbrot.clsp(11):8","724790ad0b9e1d34577ef60026fb2d886272ab02b75748dcc900b7c5cd5b8531":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):36","e0d534c962a405ef38a2e3627d4245821c6e2aac1d62e03100db64bbd2e4cfc1":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","34af6938669a377ca6e5f4e06d8ef90ee0a2bc39169f50b42334225788a5fdfd":"./mandelbrot.clsp(35):49-./mandelbrot.clsp(35):51","46f1ed138462f6d869464773eed5913ff10047020ec869fd2ac83a93ea8da02f_arguments":"(X1 Y1 X2 Y2 STEP)","5e6f2db50a5ba492531b236b67c524112466b61222bebd43d4a06a9ecd7a3989":"*macros*(2):30","3d0be4daa73ea972c2ef6e418cef115d0de1fbade2ebd54c78b17c73169da363":"./mandelbrot.clsp(8):43","f528bdfc742ea058a1cfb97c6e30707b6cdda765e39936b20e61959c09d1eb95":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","b20cb24a3d4131b8f456a996992a575bc1ee6dc4b90338028c40fd53df9a15c4":"./mandelbrot.clsp(49):46-./mandelbrot.clsp(49):48","502a705bf2aba777946441ea7af6af9614886faef067153a7c4e749de434235c":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","6dbd79ff4ee9005b355d8dd703112e17978777191c131ab0cfaaf2e29a538590":"./mandelbrot.clsp(49):11","fbbfc73885b20795a10e3db453362278b98fa9e944b71bce529bde0f87992034":"./mandelbrot.clsp(35):77","__chia__main_arguments":"(X1 Y1 X2 Y2 STEP)","303ddbfff351571c8f52039b16e791f51cfe1c3f5717eaeacfad270f9fcd050b":"./mandelbrot.clsp(36):36","c73ef88f89c96dc3ef7b83d6d5bca89a298cff4510b08a3837cc6cf35ed7992e":"*macros*(2):27","42a819bf3c4247de5ab4ab183149e71ba49d7da9197534870e99f1f64ef4547f":"./mandelbrot.clsp(44):11-./mandelbrot.clsp(44):13","942e877c30fa70de8f7594bcea49124c361f900f46ad3928942449a244a98c48":"./mandelbrot.clsp(48):10","9b9e21db9e6a897eb51b478ca1a64cb33f4d26159a3f0683467b8e15980c74a6":"./mandelbrot.clsp(2):1-./mandelbrot.clsp(2):5","06b0ae9b621689e1c2259654a4aa7c68aa83bb72f211de871410c338de25a753":"*macros*(2):62-*macros*(2):66","c558a2bb59be7219100edde8844d94afed7f386aa89c3e1f7ce25df70f8cc7d5":"*macros*(2):62-*macros*(2):66","9a4b45b508f949e2482c46d2aea26fcf630d42841a21b7d71e16adb40bc61e7a":"./mandelbrot.clsp(54):10-./mandelbrot.clsp(54):18","0aa5c8c5a83ec11a75bdc024190702d715284d41b5195d5ecf496a6be52e7517":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","77f3fac0ade047e894991b86bb3b14b1a55e8c84787d635289502bb7a48120f4":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","b81abe03a7b086d1a21c54bf04ee118d5129dda6bdc29d369611c2768e5733fa":"./mandelbrot.clsp(54):40-./mandelbrot.clsp(54):42","27a22d17a8739b2c80d86c2dc6a7f7b3be394335a5e5202bd9d349c68869eedb":"./mandelbrot.clsp(22):23","5bcba3add59b485320f3b612d1461b03af7632f203b123d68908a2f095919d46":"*macros*(2):27","3563a178fd0dd86b57134b9ff9e8a8e31a2637c9bb2b75b8f5f3fd7ff7a24d2e":"./mandelbrot.clsp(44):9","04b33101947ea7b950c0edefdac5ca49cb35303c694884c9535259856ae0938c":"./mandelbrot.clsp(49):52-./mandelbrot.clsp(49):54","391b4d96fe8d9830731ea7a316017f0470d1b5d6c45ddfb8ee84af64fe08a0e0":"./mandelbrot.clsp(23):36","f8d392cb57eea7a33e4987854f0540a9193814e407582a62216ff1f1b385d127":"./mandelbrot.clsp(49):8","46f1ed138462f6d869464773eed5913ff10047020ec869fd2ac83a93ea8da02f":"scan","def482f1f8cc690c01361da76aad34a0d103c622d252c3d2328dd6baede562f7":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","a8daf08e9d9fb4aebdefaae0f248877e08b2e158402b163cc05baeb273d6fbd7":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","94e72f09b749d14a28b0b9194c5394fcbfbd32a3b02fea0059c43d18c93fbf68":"./mandelbrot.clsp(17):17-./mandelbrot.clsp(17):20","9e6282e4f25e370ce617e21d6fe265e88b9e7b8682cf00059b9d128d9381f09d":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","a88529d773f65ba97447b4af8acecb44062f9c7bf33769f13a5e5da7cdc7cb36":"./mandelbrot.clsp(36):50-./mandelbrot.clsp(36):52","7b9ac78486f7f4666f9baabcb44c2fa03059ddd4d0117378d84701deea9a38ce":"./mandelbrot.clsp(54):10-./mandelbrot.clsp(54):18","1048bd8314983bb84e47e9aefcc19aebc02d18271865659b37334bc60d428649":"./mandelbrot.clsp(18):22","f8821498f37c4f9616b227ddee128d4af97c34a6acd60c03ee4de2cbbf67ce0b":"./mandelbrot.clsp(35):67","943538e8aa6684606bd41d2b41f8c89783362c028fdf0f5ae3628e9442d4c2ab":"./mandelbrot.clsp(23):23","aea5e413ae6095893ff41a597f3fe2d08b55183f66aa1dddecf60379adad117c":"./mandelbrot.clsp(44):22-./mandelbrot.clsp(44):25","d31ed87c874e69ab40250e76d667738308301e3576fb7fa97464c230fe7bff09":"./mandelbrot.clsp(49):49-./mandelbrot.clsp(49):51","bc5959f43bc6e47175374b6716e53c9a7d72c59424c821336995bad760d9aeb3":"./mandelbrot.clsp(49):69-./mandelbrot.clsp(49):71","73bfff796ce0e83c7e33d2d1de730d69dbfbb28df9d59c771f0885dc651d5d02":"*macros*(7):33","2ce7d33e136c99843bc914384f1380620ab94d370cac6f37ba643190bcead691":"./mandelbrot.clsp(16):8-./mandelbrot.clsp(16):11","87ec3945171fd30b58f49aeb8768ed84fbbaaf3ba1c1f6ad10b47b4488750187":"./mandelbrot.clsp(24):48","6016333f3edd7ea4bab8509a314ef22d871fd3b3d7cb993054edcafd42f213dd":"./mandelbrot.clsp(22):23","63865961097d9653bdb0cd3720f44d95e40f56c2ec16e31fc26c534aaee2a884":"./mandelbrot.clsp(35):71-./mandelbrot.clsp(35):73","f359b3ad74817ef67e453957f4ef79e41a0a45a7c412a0e3c9bbd1020761adf1":"./mandelbrot.clsp(17):17-./mandelbrot.clsp(17):20","b25b1da71a74dead84c50033b1b26db4ea4022340544694fc2b807f189ba7815":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","bc8ae71034c92b6682c97bd2a66219d05057458d1f73d9ee4a8905a04f4b27e0":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","4580bcbb5d6102ec056777f1bf13f724b1912f27f7c502519e38c1344a07c87a":"./mandelbrot.clsp(44):18","dbe726e81a7221a385e007ef9e834a975a4b528c6f55a5d2ece288bee831a3d1":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","ac9103f5282051571e5447dc82e8eb2c6b89a4bd56df3e6038e0ca036e93ba58":"./mandelbrot.clsp(11):29","52b5329430d1157b29c2a79df810dc2d6bb79b6683e3e26d1925eec1bb55cfc6":"./mandelbrot.clsp(35):69","f4b17c2d3d6b94253cb61a6fc619ee58e2ed34ff729d8d64a86d02da29c82dd9":"./mandelbrot.clsp(2):1-./mandelbrot.clsp(2):5","4756c6d16e9cd878a37cefeedfc8fa380fa935227eda6d4ac37983d36b3ee7a2":"stringify-row","867de77504b7d142e2528855a2931d0a55581a538f9cbfd9b17f58857d59f82b":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","dde55600d50418ee692b84129d0511e805d5e317e5852a3afc6904c3c7aec4ea":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","9b99edc96bbd13f5ba77dbea545943086e3c1bb06f5e379733c7493ce3deda65":"./mandelbrot.clsp(49):46-./mandelbrot.clsp(49):48","ca99ad4b2c3f54fed58ab8d6b46305d257e7724ecbf766af21fe592b303931e3":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","5df7504bc193ee4c3deadede1459eccca172e87cca35e81f11ce14be5e94acaf":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","54118bd7409dddc9c343a6c39b0d459fa427f3de1729ca2305e7175ceee0d777":"./mandelbrot.clsp(34):12-./mandelbrot.clsp(34):14","d9029c8a6ecce948feb41869f7c44c6abe79c943101b23f8e2b5a9798c69bfce":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","3bf487f927475571f0f787b1bad2fb2223831b27ce62b1639b897ba4a7deffa3":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","6c8c938018dc7eb21b1b2968ee6795893d308f2ae6cb19e34d644b89d1d9bb23":"*macros*(2):30","ae6e7ecb050bacd9132845906ccb1b1695508aa3b3ab9e8dd2cfc3b04a4c7055":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","c783e31d1b575246fc592a0b7369166c666da61fd132156612787fae6568792b":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","5dad34896875f6daf7b967625bf6aac00b454bb1337abff61ad41845444f4316_left_env":"1","0b57824abfb9582bd84d117dce0e060d6c930a99f178f490f61ee9aba5b55e13":"./mandelbrot.clsp(11):31","dc88dedb475e3b334f03ed9e4d61dd5528425198f9a243ae7f02617146412f36":"./mandelbrot.clsp(18):17-./mandelbrot.clsp(18):20","f32debb6d08ebcd3beafb0a065952d2579b39460f38ed8ca303c1e179c558898":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","0df44b8f5cb8c2643b7e4d639689ff6a024c02b22ea9f71c80367fd8f889f1e0":"./mandelbrot.clsp(20):12","02b1ce3afa5f79e10e82c58322dc8a71352a2f219f13c9f587b460a2a59b932b":"./mandelbrot.clsp(23):23","c7d594f0a4193e3de597b1d675290c9cd66d99b5bceb67f3ca67d161f329d2d3":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5":"./mandelbrot.clsp(49):90-./mandelbrot.clsp(49):94","63e093fee19d7defbec9edf55fb05e77185392445ce851d2cad3e2cd945cbd6e":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","dbb2bd6129db16922f214018983188da1f74546182491757cb6bae962a23248b":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","bfd0ac66e7e972108ce0fec4daa87bbc7edfc460511ea5df04e20fd40e2cd3ae":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","905ca1d302a6c2f6aca2e1a1c6cf87e9420d8442b3803b448589b8cba66d4f5a":"*macros*(2):27","258ca94b68b2d818eb542f0fbd4b1e72df2cbd7a8f600e75bce8a89a715b6e41":"./mandelbrot.clsp(35):71-./mandelbrot.clsp(35):73","39c49587062166a79c55da9855a916587506ee87b66d84f2e32d84c1a7fa06ac":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","7ce7ee01c7feafbba2d8da264881cdc2214c9edfff17c2ac7347f5262627b0e6":"./mandelbrot.clsp(48):12-./mandelbrot.clsp(48):14","d69be10416fb29ad0515fcfd94b0ee91ed3e8c89fe48871085e20a5250ac31b9":"./mandelbrot.clsp(49):69-./mandelbrot.clsp(49):71","2ee8bf5211e8deeaa66d444d1ccdfd7ae3921b8cc9039ccc01924884f64f4585":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","7d370012bbc0b92777eaea27351b943ecac797af623f43e9651fcc08d77d48bb":"./mandelbrot.clsp(54):35-./mandelbrot.clsp(54):39","1e69ab8b04b2824c3fa1c4d7cb9eb9cb464fe3507ed3c153feda00fca2afb749":"./mandelbrot.clsp(8):43","c79b932e1e1da3c0e098e5ad2c422937eb904a76cf61d83975a74a68fbb04b99":"*prims*(1):1","fbec97a5f73546ed8eb86dd0b27e751f5811982e51328d44a11ca3d0d30123e4":"./mandelbrot.clsp(22):23","827af7172f157da208fb79733b5fceaa4b4a11ce8d8afce55a0e1237eb3cb906":"*macros*(2):30","6378d2cf7162395d6933367f2456e505d5da7da3c4557c58f19810965093a8c7":"./mandelbrot.clsp(49):73","0449ba2bae061ff636ee27fb882dc943f4b51ef66a880e20af033086065f17b7":"*macros*(2):27","c1873f940d1223d1d61f1f34d22457bb6613d95d7f72a640bd6a0bd1c152f83b":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","7f4e0f9648a6705b92711aff33e6175be45b2ad34d7ac1fc738c97ae8b2b1f24":"./mandelbrot.clsp(19):17","51608d9cdfe6393b9f8c87fe23f960e3c093f70b323a6b801c1b5be408a35720":"./mandelbrot.clsp(5):3-./mandelbrot.clsp(5):15","744df121e99a3c9c89b6f14e7e4768872be48db3340ecc36adbfefc8e2a97962":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","01b525cb2a6f8b763e77022a97c4519051dda3513955151bae305b63285071ca":"./mandelbrot.clsp(35):54-./mandelbrot.clsp(35):66","f4a150250cbe8ea6d65add7a7ee4020dac27113618fae4cbdb07fb3a682925d6":"./mandelbrot.clsp(49):75-./mandelbrot.clsp(49):79","dce37f3512b6337d27290436ba9289e2fd6c775494c33668dd177cf811fbd47a":"./mandelbrot.clsp(49):16-./mandelbrot.clsp(49):29","833ef47e743bbb86130af630a59a85c9ad3c515855102a975069fccc360f3cc8":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","4e023b2595ce01ffe9cbce4caafb54190eaf066dede85d065cbdc2875cfe0fdc":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","c4c1ddb5716001cda175ca5c0ac25c14b4522f6cffe1cc5f7d81dd449ae00994":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):25","324d9a0fa7a7f95e4297c91c21f9a8d74e632047b94c2836c5b694a2e3e5419b":"./mandelbrot.clsp(49):52-./mandelbrot.clsp(49):54","0d989d311d6ece516d4f7b5944d4348dfa7ccc35204026420ee6e7381a59627c":"./mandelbrot.clsp(23):23","57481c14bfbbd6d7dbc587cdc0abedd960905f44cf13e2f548c4e19a58a242f0":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","18e249e71e10d67d4f5d3fad5ac2999f26e27e3df94576bd48a74eaf6e8d3ccb":"./mandelbrot.clsp(18):22","0f91a6e15f8cb3e8e7ee09b736d856b5b3e9913254e87ed3b613fe4c08ffd04f":"*macros*(2):27","d0aa45f753fb9381e2ffffc321e1d14ddf3e93923eb5100bc63ac9a754f57be0":"./mandelbrot.clsp(49):64-./mandelbrot.clsp(49):68","47e4cfd46afccae981bf5d31a52b54029a60004f67ecd00f8b1858c956478ea1":"./mandelbrot.clsp(54):20-./mandelbrot.clsp(54):33","687d0de30bbdc157324f88bbcafa8bd84555c9ea63e2cf2aed50c71752b3a85e":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","3bc1653dfbbf56863fd7a9d0532fbd1633755290029ef8f9bd63cb871f274aec":"*macros*(2):30","cb207bf0bf7469a53b6f3b0c41068e3a64e9bb2d906d4eb2d75343c6ddcb9485":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","4cee7c983848ae872f01b0f9e2cef01c776e433a48610c1a7e1f2c90eccfda46":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):30","c8f59113bc243854fec80dc25f13f53f037f9e51bcffdb54f57a21a629faeb13":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","5c5f52d1d391b199eeada24f10c541bd01cb1065e512d9d9f17ab6bdfe242039":"./mandelbrot.clsp(44):15","3113de2dae47a7ca5fbe05c1fd3eadf2dde2ab329c779fbfd002388397c77920":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35","67ce499a67ca76b487fe30c7ecf2556aed3a8bf65c75d72e086762d150ce9bfd":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):27","50acb7be79414d83f2c3cc2ab670b5e4d63cb833722e4afca1724cf6d8485eb8":"./mandelbrot.clsp(11):11-./mandelbrot.clsp(11):17","49c3235d881de538389729a5c716a882d104f6549ddfcb6e4c877500c5bcc450":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","4db25e31c1a9360861bfe10f7084ea70c98b97d6d041af9fe29ed2241ceef64f":"./mandelbrot.clsp(49):31-./mandelbrot.clsp(49):45","a3b3c5caf5eb78446c4bbce572a96b8cf3ea11d849dcbd8f8de7c64e67024533":"./mandelbrot.clsp(37):13-./mandelbrot.clsp(37):20","2bc736ac1df0c934c54fd0b436579b51958ff5aab99a513f6ca7913d9b9577f5":"./mandelbrot.clsp(35):22-./mandelbrot.clsp(35):27","27e648b49d240e1661611be90aec9fab35b96a1ed089b3c7c1dd4ef1543d7f0c":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):33","3717dc9b0e51dd5200d8d20a71f5949fb9bd4c8e041c6e8aac0d9386df2a5ae6":"./mandelbrot.clsp(54):40-./mandelbrot.clsp(54):42","2fd44dc17723eca0691884d8fc135e52824584231e5325d0d8ddc8c09877f20a":"basic-scanline","3f825a6ad7963cb166e559072469b8ee88e4e513e3d30f7f85117713473fbd63":"./mandelbrot.clsp(54):4-./mandelbrot.clsp(54):9","7cc8bb90648baa3abc349be36768805d9c246d008d973d0868cd71878d39b91a":"./mandelbrot.clsp(14):23-./mandelbrot.clsp(14):35"} \ No newline at end of file diff --git a/resources/tests/test_clvm_step.py b/resources/tests/test_clvm_step.py index 4f4b2f9d2..850d2a44a 100644 --- a/resources/tests/test_clvm_step.py +++ b/resources/tests/test_clvm_step.py @@ -4,7 +4,10 @@ import json from clvm_tools_rs import start_clvm_program, compose_run_function -def run_until_end(p): +def do_nothing(p): + pass + +def run_until_end(p,printing=do_nothing,spam=True): last = None location = None @@ -12,9 +15,12 @@ def run_until_end(p): step_result = p.step() if step_result is not None: last = step_result + if 'Print' in last: + printing(last['Print']) if 'Operator-Location' in last: location = last['Operator-Location'] - print(json.dumps(step_result)) + if spam: + print(json.dumps(step_result)) return (last, location) @@ -43,6 +49,54 @@ def fact_base_override(env): assert int(last['Final']) == 11880 +def test_with_printing(): + mypath = Path(os.path.abspath(__file__)) + testpath = mypath.parent.joinpath('mandelbrot') + symbols = json.loads(open(str(testpath.joinpath('mandelbrot.sym'))).read()) + + p = start_clvm_program(open(str(testpath.joinpath('mandelbrot.clvm.hex'))).read(), 'ff82ff40ff8180ff82ff70ff81a0ff0880', symbols, {}) + + print_outputs = [] + def do_print(p): + print(p) + print_outputs.append(p) + + last, location = run_until_end(p,printing=do_print,spam=False) + + expected_outcome = "||567AAC|68DEEE|78EEEE|78BEEE" + want_prints = [ + "((\"escape-at\" -152 -104) 14)", + "((\"escape-at\" -160 -104) 14)", + "((\"escape-at\" -168 -104) 14)", + "((\"escape-at\" -176 -104) 11)", + "((\"escape-at\" -184 -104) 8)", + "((\"escape-at\" -192 -104) 7)", + "((\"escape-at\" -152 -112) 14)", + "((\"escape-at\" -160 -112) 14)", + "((\"escape-at\" -168 -112) 14)", + "((\"escape-at\" -176 -112) 14)", + "((\"escape-at\" -184 -112) 8)", + "((\"escape-at\" -192 -112) 7)", + "((\"escape-at\" -152 -120) 14)", + "((\"escape-at\" -160 -120) 14)", + "((\"escape-at\" -168 -120) 14)", + "((\"escape-at\" -176 -120) 13)", + "((\"escape-at\" -184 -120) 8)", + "((\"escape-at\" -192 -120) 6)", + "((\"escape-at\" -152 -128) 12)", + "((\"escape-at\" -160 -128) 10)", + "((\"escape-at\" -168 -128) 10)", + "((\"escape-at\" -176 -128) 7)", + "((\"escape-at\" -184 -128) 6)", + "((\"escape-at\" -192 -128) 5)", + f"(\"result\" \"{expected_outcome}\")" + ] + + assert print_outputs == want_prints + to_hex = hex(int(last['Final'])) + have_outcome = bytes.fromhex(to_hex[2:]).decode('utf8') + assert have_outcome == expected_outcome + def single_function_test(): mypath = Path(os.path.abspath(__file__)) testpath = mypath.parent.joinpath('steprun') @@ -60,3 +114,4 @@ def single_function_test(): simple_test() complex_test() single_function_test() + test_with_printing() diff --git a/src/classic/clvm_tools/cmds.rs b/src/classic/clvm_tools/cmds.rs index ecc1a078a..45ddae1ec 100644 --- a/src/classic/clvm_tools/cmds.rs +++ b/src/classic/clvm_tools/cmds.rs @@ -295,6 +295,12 @@ pub fn cldb(args: &[String]) { .set_type(Rc::new(PathOrCodeConv {})) .set_help("path to symbol file".to_string()), ); + parser.add_argument( + vec!["-p".to_string(), "--only-print".to_string()], + Argument::new() + .set_action(TArgOptionAction::StoreTrue) + .set_help("only show printing from the program".to_string()), + ); parser.add_argument( vec!["path_or_code".to_string()], Argument::new() @@ -357,6 +363,8 @@ pub fn cldb(args: &[String]) { _ => None, }); + let only_print = parsed_args.get("only_print").map(|_| true).unwrap_or(false); + let do_optimize = parsed_args .get("optimize") .map(|x| matches!(x, ArgumentValue::ArgBool(true))) @@ -474,7 +482,15 @@ pub fn cldb(args: &[String]) { } if let Some(result) = cldbrun.step(&mut allocator) { - output.push(result); + if only_print { + if let Some(p) = result.get("Print") { + let mut only_print = BTreeMap::new(); + only_print.insert("Print".to_string(), p.clone()); + output.push(only_print); + } + } else { + output.push(result); + } } } } diff --git a/src/compiler/cldb.rs b/src/compiler/cldb.rs index b6a8530a8..7b2a41c65 100644 --- a/src/compiler/cldb.rs +++ b/src/compiler/cldb.rs @@ -18,7 +18,11 @@ use crate::compiler::clvm::{convert_from_clvm_rs, run_step, RunStep}; use crate::compiler::runtypes::RunFailure; use crate::compiler::sexp::SExp; use crate::compiler::srcloc::Srcloc; -use crate::util::Number; +use crate::util::{Number, u8_from_number}; + +fn print_atom() -> SExp { + SExp::Atom(Srcloc::start("*print*"), b"$print$".to_vec()) +} #[derive(Clone, Debug)] pub struct PriorResult { @@ -137,6 +141,36 @@ impl CldbRun { self.final_result.clone() } + fn is_print_request(&self, a: &SExp) -> Option<(Srcloc, Rc)> { + if let SExp::Cons(l, f, r) = a { + if &print_atom() == f.borrow() { + return Some((l.clone(), self.humanize(r.clone()))); + } + } + + None + } + + fn humanize(&self, a: Rc) -> Rc { + match a.borrow() { + SExp::Integer(l, i) => { + // If it has a nice string representation then show that. + let bytes_of_int = u8_from_number(i.clone()); + if bytes_of_int.len() > 2 && bytes_of_int.iter().all(|b| *b >= 32 && *b < 127) { + Rc::new(SExp::QuotedString(l.clone(), b'\'', bytes_of_int)) + } else { + a.clone() + } + } + SExp::Cons(l,a,b) => { + let new_a = self.humanize(a.clone()); + let new_b = self.humanize(b.clone()); + Rc::new(SExp::Cons(l.clone(), new_a, new_b)) + } + _ => a.clone() + } + } + pub fn step(&mut self, allocator: &mut Allocator) -> Option> { let mut produce_result = false; let mut result = BTreeMap::new(); @@ -197,6 +231,12 @@ impl CldbRun { get_arg_associations(&self.outputs_to_step, a.clone()); let args = format_arg_inputs(&arg_associations); self.to_print.insert("Argument-Refs".to_string(), args); + } else if v == 34_u32.to_bigint().unwrap() { + // Handle diagnostic output. + if let Some((loc,outputs)) = self.is_print_request(&a) { + self.to_print.insert("Print-Location".to_string(), loc.to_string()); + self.to_print.insert("Print".to_string(), outputs.to_string()); + } } } self.env.add_context( From 0bbebb1a37e5c5e4b6a3967c01b935f667ad5a5a Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 00:25:14 -0700 Subject: [PATCH 02/67] Better printing. Use the simple method of matching (all ...) and add a new 'Print' key to the step run output for it. Because it's an 'all' primitive, it can't be skipped if anything dynamic is in one of its arguments. The user can decide how to incorporate functions that use this signal, as in whether to print the value passing through or not. It can be matched at runtime without symbols and puts all consumers on the same footing. Add a test to test_clvm_step.py and a test of the command line tool. --- resources/tests/mandelbrot-cldb.py | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 resources/tests/mandelbrot-cldb.py diff --git a/resources/tests/mandelbrot-cldb.py b/resources/tests/mandelbrot-cldb.py new file mode 100644 index 000000000..4acad5f4a --- /dev/null +++ b/resources/tests/mandelbrot-cldb.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +import subprocess + +command = ['../../target/debug/cldb', '-p', './mandelbrot/mandelbrot.clsp', '(-192 -128 -144 -96 8)'] +want_output = """--- +- Print: ((escape-at -152 -104) 14) +- Print: ((escape-at -160 -104) 14) +- Print: ((escape-at -168 -104) 14) +- Print: ((escape-at -176 -104) 11) +- Print: ((escape-at -184 -104) 8) +- Print: ((escape-at -192 -104) 7) +- Print: ((escape-at -152 -112) 14) +- Print: ((escape-at -160 -112) 14) +- Print: ((escape-at -168 -112) 14) +- Print: ((escape-at -176 -112) 14) +- Print: ((escape-at -184 -112) 8) +- Print: ((escape-at -192 -112) 7) +- Print: ((escape-at -152 -120) 14) +- Print: ((escape-at -160 -120) 14) +- Print: ((escape-at -168 -120) 14) +- Print: ((escape-at -176 -120) 13) +- Print: ((escape-at -184 -120) 8) +- Print: ((escape-at -192 -120) 6) +- Print: ((escape-at -152 -128) 12) +- Print: ((escape-at -160 -128) 10) +- Print: ((escape-at -168 -128) 10) +- Print: ((escape-at -176 -128) 7) +- Print: ((escape-at -184 -128) 6) +- Print: ((escape-at -192 -128) 5) +- Print: "(\\"result\\" \\"||567AAC|68DEEE|78EEEE|78BEEE\\")" +""" + +have_output = subprocess.check_output(command).decode('utf8') +assert have_output == want_output From 0ccc2edd483c003e353b9956a1837d64bb17c85a Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 00:27:17 -0700 Subject: [PATCH 03/67] Better printing. Use the simple method of matching (all ...) and add a new 'Print' key to the step run output for it. Because it's an 'all' primitive, it can't be skipped if anything dynamic is in one of its arguments. The user can decide how to incorporate functions that use this signal, as in whether to print the value passing through or not. It can be matched at runtime without symbols and puts all consumers on the same footing. Add a test to test_clvm_step.py and a test of the command line tool. --- src/compiler/cldb.rs | 70 +++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/compiler/cldb.rs b/src/compiler/cldb.rs index 7b2a41c65..6999cead9 100644 --- a/src/compiler/cldb.rs +++ b/src/compiler/cldb.rs @@ -18,7 +18,7 @@ use crate::compiler::clvm::{convert_from_clvm_rs, run_step, RunStep}; use crate::compiler::runtypes::RunFailure; use crate::compiler::sexp::SExp; use crate::compiler::srcloc::Srcloc; -use crate::util::{Number, u8_from_number}; +use crate::util::{u8_from_number, Number}; fn print_atom() -> SExp { SExp::Atom(Srcloc::start("*print*"), b"$print$".to_vec()) @@ -108,6 +108,36 @@ pub struct CldbRun { outputs_to_step: HashMap, } +fn humanize(a: Rc) -> Rc { + match a.borrow() { + SExp::Integer(l, i) => { + // If it has a nice string representation then show that. + let bytes_of_int = u8_from_number(i.clone()); + if bytes_of_int.len() > 2 && bytes_of_int.iter().all(|b| *b >= 32 && *b < 127) { + Rc::new(SExp::QuotedString(l.clone(), b'\'', bytes_of_int)) + } else { + a.clone() + } + } + SExp::Cons(l, a, b) => { + let new_a = humanize(a.clone()); + let new_b = humanize(b.clone()); + Rc::new(SExp::Cons(l.clone(), new_a, new_b)) + } + _ => a.clone(), + } +} + +fn is_print_request(a: &SExp) -> Option<(Srcloc, Rc)> { + if let SExp::Cons(l, f, r) = a { + if &print_atom() == f.borrow() { + return Some((l.clone(), humanize(r.clone()))); + } + } + + None +} + impl CldbRun { /// Create a new CldbRun for running a program. /// Takes an CldbEnvironment and a prepared RunStep, which will be stepped @@ -141,36 +171,6 @@ impl CldbRun { self.final_result.clone() } - fn is_print_request(&self, a: &SExp) -> Option<(Srcloc, Rc)> { - if let SExp::Cons(l, f, r) = a { - if &print_atom() == f.borrow() { - return Some((l.clone(), self.humanize(r.clone()))); - } - } - - None - } - - fn humanize(&self, a: Rc) -> Rc { - match a.borrow() { - SExp::Integer(l, i) => { - // If it has a nice string representation then show that. - let bytes_of_int = u8_from_number(i.clone()); - if bytes_of_int.len() > 2 && bytes_of_int.iter().all(|b| *b >= 32 && *b < 127) { - Rc::new(SExp::QuotedString(l.clone(), b'\'', bytes_of_int)) - } else { - a.clone() - } - } - SExp::Cons(l,a,b) => { - let new_a = self.humanize(a.clone()); - let new_b = self.humanize(b.clone()); - Rc::new(SExp::Cons(l.clone(), new_a, new_b)) - } - _ => a.clone() - } - } - pub fn step(&mut self, allocator: &mut Allocator) -> Option> { let mut produce_result = false; let mut result = BTreeMap::new(); @@ -233,9 +233,11 @@ impl CldbRun { self.to_print.insert("Argument-Refs".to_string(), args); } else if v == 34_u32.to_bigint().unwrap() { // Handle diagnostic output. - if let Some((loc,outputs)) = self.is_print_request(&a) { - self.to_print.insert("Print-Location".to_string(), loc.to_string()); - self.to_print.insert("Print".to_string(), outputs.to_string()); + if let Some((loc, outputs)) = is_print_request(a) { + self.to_print + .insert("Print-Location".to_string(), loc.to_string()); + self.to_print + .insert("Print".to_string(), outputs.to_string()); } } } From 7759853ffdf0300978f4a5af859197fe408cfcfc Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 00:39:58 -0700 Subject: [PATCH 04/67] Ensure tools are built --- .github/workflows/build-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 8a2cf4654..075a165b9 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -139,11 +139,13 @@ jobs: python -c 'import clvm_rs; print(clvm_rs.__file__)' python -c 'import clvm_tools_rs; print(clvm_tools_rs.__file__)' + # Test cldb output both run from python and via its command line tool. - name: Run step run tests run: | . ./activate cd resources/tests && \ python test_clvm_step.py && \ + cargo build --no-default-features python mandelbrot-cldb.py - name: Verify recompilation of old sources match From 4a5e01d74efe75f1aa55600bc2f626c86ae86c1c Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 00:53:56 -0700 Subject: [PATCH 05/67] Try a different way of doing this on windows --- .github/workflows/build-test.yml | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 075a165b9..477588697 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -140,12 +140,36 @@ jobs: python -c 'import clvm_tools_rs; print(clvm_tools_rs.__file__)' # Test cldb output both run from python and via its command line tool. - - name: Run step run tests + # Thanks: https://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script-on-the-first-error + - name: Run step run tests (windows) + if: startsWith(matrix.os, 'windows'): run: | . ./activate + + Set-StrictMode -Version Latest + $ErrorActionPreference = "Stop" + $PSDefaultParameterValues['*:ErrorAction']='Stop' + function ThrowOnNativeFailure { + if (-not $?) + { + throw 'Native Failure' + } + } + + cargo build --no-default-features + cd resources/tests + python test_clvm_step.py + ThrowOnNativeFailure + python mandelbrot-cldb.py + ThrowOnNativeFailure + + - name: Run step run tests (others) + if: not(startsWith(matrix.os, 'windows')): + run: | + . ./activate + cargo build --no-default-features cd resources/tests && \ python test_clvm_step.py && \ - cargo build --no-default-features python mandelbrot-cldb.py - name: Verify recompilation of old sources match From 1400a5ac7677f9d3bcd2b1a3f48371efd9a50c2a Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 01:06:05 -0700 Subject: [PATCH 06/67] try to fix syntax error in github workflow --- .github/workflows/build-test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 477588697..115a113d2 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -141,8 +141,8 @@ jobs: # Test cldb output both run from python and via its command line tool. # Thanks: https://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script-on-the-first-error - - name: Run step run tests (windows) - if: startsWith(matrix.os, 'windows'): + - name: "Run step run tests (windows)" + if: ${{ startsWith(matrix.os, 'windows') }}: run: | . ./activate @@ -164,7 +164,7 @@ jobs: ThrowOnNativeFailure - name: Run step run tests (others) - if: not(startsWith(matrix.os, 'windows')): + if: ${{ !startsWith(matrix.os, 'windows') }}: run: | . ./activate cargo build --no-default-features From 66f1a695bc465ae477396a43971724b5738663d7 Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 27 Mar 2023 01:08:05 -0700 Subject: [PATCH 07/67] it isn't python --- .github/workflows/build-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 115a113d2..d78bce1a1 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -142,7 +142,7 @@ jobs: # Test cldb output both run from python and via its command line tool. # Thanks: https://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script-on-the-first-error - name: "Run step run tests (windows)" - if: ${{ startsWith(matrix.os, 'windows') }}: + if: ${{ startsWith(matrix.os, 'windows') }} run: | . ./activate @@ -164,7 +164,7 @@ jobs: ThrowOnNativeFailure - name: Run step run tests (others) - if: ${{ !startsWith(matrix.os, 'windows') }}: + if: ${{ !startsWith(matrix.os, 'windows') }} run: | . ./activate cargo build --no-default-features From a5b6e3a96a6bddcd45389c027ee607fe24759474 Mon Sep 17 00:00:00 2001 From: Adam Kelly <338792+aqk@users.noreply.github.com> Date: Wed, 17 May 2023 13:26:25 -0700 Subject: [PATCH 08/67] remove stray whitespace --- .github/workflows/build-test.yml | 6 +++--- resources/tests/mandelbrot/mandelbrot.clsp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 081ee4135..9fb103328 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -114,7 +114,7 @@ jobs: run: | . ./activate python -m pip install pytest - python -m pip install blspy + python -m pip install blspy - name: install clvm & clvm_tools run: | @@ -153,12 +153,12 @@ jobs: throw 'Native Failure' } } - + cargo build --no-default-features cd resources/tests python test_clvm_step.py ThrowOnNativeFailure - python mandelbrot-cldb.py + python mandelbrot-cldb.py ThrowOnNativeFailure - name: Run step run tests (others) diff --git a/resources/tests/mandelbrot/mandelbrot.clsp b/resources/tests/mandelbrot/mandelbrot.clsp index 031b76635..cef47ee7a 100644 --- a/resources/tests/mandelbrot/mandelbrot.clsp +++ b/resources/tests/mandelbrot/mandelbrot.clsp @@ -28,7 +28,7 @@ (- V 1) ) ) - + (defun basic-scanline (X1 Y1 X2 STEP) (if (> X2 X1) From 4814b39e618486759fdada159b7b8310e209f150 Mon Sep 17 00:00:00 2001 From: Adam Kelly <338792+aqk@users.noreply.github.com> Date: Fri, 19 May 2023 13:11:40 -0700 Subject: [PATCH 09/67] Make debug print on opcode 34 a compile-time option --- Cargo.toml | 3 ++- src/classic/clvm_tools/cmds.rs | 1 + src/compiler/cldb.rs | 8 +++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4619abb5e..e64ebae69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,8 @@ crate-type = ["cdylib", "rlib"] [features] extension-module = ["pyo3"] -default = ["extension-module"] +debug-print = [] +default = ["debug-print", "extension-module"] [target.'cfg(target_family="wasm")'.dependencies] wasm-bindgen = { version = "0.2.80", features = ["serde-serialize"] } diff --git a/src/classic/clvm_tools/cmds.rs b/src/classic/clvm_tools/cmds.rs index 094fe4f04..fefd44cd4 100644 --- a/src/classic/clvm_tools/cmds.rs +++ b/src/classic/clvm_tools/cmds.rs @@ -494,6 +494,7 @@ pub fn cldb(args: &[String]) { .set_type(Rc::new(PathOrCodeConv {})) .set_help("path to symbol file".to_string()), ); + #[cfg(feature = "debug-print")] parser.add_argument( vec!["-p".to_string(), "--only-print".to_string()], Argument::new() diff --git a/src/compiler/cldb.rs b/src/compiler/cldb.rs index 53b15602f..b36c64390 100644 --- a/src/compiler/cldb.rs +++ b/src/compiler/cldb.rs @@ -21,8 +21,11 @@ use crate::compiler::clvm::{convert_from_clvm_rs, run_step, RunStep}; use crate::compiler::runtypes::RunFailure; use crate::compiler::sexp::SExp; use crate::compiler::srcloc::Srcloc; -use crate::util::{u8_from_number, Number}; +#[cfg(feature = "debug-print")] +use crate::util::u8_from_number; +use crate::util::Number; +#[cfg(feature = "debug-print")] fn print_atom() -> SExp { SExp::Atom(Srcloc::start("*print*"), b"$print$".to_vec()) } @@ -111,6 +114,7 @@ pub struct CldbRun { outputs_to_step: HashMap, } +#[cfg(feature = "debug-print")] fn humanize(a: Rc) -> Rc { match a.borrow() { SExp::Integer(l, i) => { @@ -131,6 +135,7 @@ fn humanize(a: Rc) -> Rc { } } +#[cfg(feature = "debug-print")] fn is_print_request(a: &SExp) -> Option<(Srcloc, Rc)> { if let SExp::Cons(l, f, r) = a { if &print_atom() == f.borrow() { @@ -235,6 +240,7 @@ impl CldbRun { let args = format_arg_inputs(&arg_associations); self.to_print.insert("Argument-Refs".to_string(), args); } else if v == 34_u32.to_bigint().unwrap() { + #[cfg(feature = "debug-print")] // Handle diagnostic output. if let Some((loc, outputs)) = is_print_request(a) { self.to_print From 6a24ed4c6d40bb34156c7af6da049eaea6569e00 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 13:56:55 -0700 Subject: [PATCH 10/67] Experimenting with feature flags in workflows --- .github/workflows/build-arm64-wheels.yml | 2 +- .github/workflows/build-m1-wheel.yml | 4 ++-- .github/workflows/build-test.yml | 16 ++++++++++------ support/feature-fishing.py | 6 ++++++ 4 files changed, 19 insertions(+), 9 deletions(-) create mode 100755 support/feature-fishing.py diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index 60c9d5b1d..2428cfbbc 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -39,7 +39,7 @@ jobs: if [ ! -f "activate" ]; then ln -s venv/bin/activate; fi . ./activate pip install maturin==0.12.20 - CC=gcc maturin build --release --strip --manylinux 2014 --no-sdist --cargo-extra-args=--all-features + CC=gcc maturin build --release --strip --manylinux 2014 --no-sdist --cargo-extra-args="--features=${USE_FEATURES}" - name: Upload artifacts uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 87abadb73..4c2df4443 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -41,8 +41,8 @@ jobs: . ./venv/bin/activate export PATH=~/.cargo/bin:$PATH arch -arm64 pip install maturin==0.12.20 - arch -arm64 maturin build --no-sdist -i python --release --strip --cargo-extra-args="--all-features" - arch -arm64 cargo test --no-default-features + arch -arm64 maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" + arch -arm64 cargo test --features="${USE_FEATURES}" - name: Install clvm_tools_rs wheel run: | diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 9fb103328..82bf280c3 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -45,13 +45,17 @@ jobs: run: | python -m pip install maturin==0.12.20 + - name: Get feature flags to use for macos builds + run: | + echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" + - name: Build MacOs with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'macos') run: | python -m venv venv ln -s venv/bin/activate . ./activate - maturin build -i python --release --strip + maturin build -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" - name: Build Linux in manylinux2010 with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'ubuntu') @@ -95,7 +99,7 @@ jobs: python -m venv venv echo ". .\venv\Scripts\Activate.ps1" > activate.ps1 . ./activate - maturin build --no-sdist -i python --release --strip + maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" # Find and install the newly built wheel python support/wheelname.py @@ -154,7 +158,7 @@ jobs: } } - cargo build --no-default-features + cargo build --features="${USE_FEATURES}" cd resources/tests python test_clvm_step.py ThrowOnNativeFailure @@ -165,7 +169,7 @@ jobs: if: ${{ !startsWith(matrix.os, 'windows') }} run: | . ./activate - cargo build --no-default-features + cargo build --features="${USE_FEATURES}" cd resources/tests && \ python test_clvm_step.py && \ python mandelbrot-cldb.py @@ -175,7 +179,7 @@ jobs: run: | . ./activate # Build cmd line tools - PYO3_PYTHON=`which python` cargo build --no-default-features --release + PYO3_PYTHON=`which python` cargo build --features="${USE_FEATURES}" --release # Grab chia-blockchain rm -rf chia-blockchain @@ -215,7 +219,7 @@ jobs: - name: Run tests if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python, '3.7') - run: cargo test --no-default-features + run: cargo test --features="${USE_FEATURES}" - name: Check coverage if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python, '3.7') diff --git a/support/feature-fishing.py b/support/feature-fishing.py new file mode 100755 index 000000000..2d39b5ecc --- /dev/null +++ b/support/feature-fishing.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +from tomlkit import parse + +cargo_toml = parse(open('Cargo.toml').read()) +print(",".join(list(filter(lambda x: x != 'extension-module', cargo_toml['features']['default'])))) From 3de61bd2e9f48dea5a7ba19a5db390ce5aa8c69c Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 14:00:51 -0700 Subject: [PATCH 11/67] Add env var setting --- .github/workflows/build-arm64-wheels.yml | 4 ++++ .github/workflows/build-m1-wheel.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index 2428cfbbc..c4a209c9e 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -46,6 +46,10 @@ jobs: name: wheels path: target/wheels/ + - name: Get feature flags to use for macos builds + run: | + echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" + - name: Clean up AMR64 run: | rm -rf venv diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 4c2df4443..ba82ea467 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -35,6 +35,10 @@ jobs: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust.sh arch -arm64 sh rust.sh -y + - name: Get feature flags to use for macos builds + run: | + echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" + - name: Build m1 wheels run: | arch -arm64 python3 -m venv venv From 4cb43911fe7f37665c824aa3a0975445c98b1b81 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 14:06:37 -0700 Subject: [PATCH 12/67] Show what we fished out --- .github/workflows/build-m1-wheel.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index ba82ea467..1b0a935c8 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -38,6 +38,7 @@ jobs: - name: Get feature flags to use for macos builds run: | echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" + echo "using experimental features ${USE_FEATURES}" - name: Build m1 wheels run: | @@ -91,7 +92,7 @@ jobs: run: | . ./venv/bin/activate cd clvm_tools_rs - arch -arm64 cargo test + arch -arm64 cargo test --features="${USE_FEATURES}" - name: Upload wheels uses: actions/upload-artifact@v3 From 1a40e2a70f3deb55189322cca72b9bab45190ac8 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 14:10:06 -0700 Subject: [PATCH 13/67] Ensure tomlkit is installed --- .github/workflows/build-arm64-wheels.yml | 10 ++++++---- .github/workflows/build-m1-wheel.yml | 1 + .github/workflows/build-test.yml | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index c4a209c9e..ceae2ec44 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -33,6 +33,12 @@ jobs: rustup target add aarch64-unknown-linux-musl rm -rf venv export PATH="${PATH}:/opt/python/cp39-cp39/bin/:/opt/python/cp38-cp38/bin/:/opt/python/cp37-cp37m/bin/" + + - name: Get feature flags to use for macos builds + run: | + python -m pip install tomlkit + echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" + - name: Build Python wheels run: | /opt/python/cp38-cp38/bin/python -m venv venv @@ -46,10 +52,6 @@ jobs: name: wheels path: target/wheels/ - - name: Get feature flags to use for macos builds - run: | - echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" - - name: Clean up AMR64 run: | rm -rf venv diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 1b0a935c8..18dc31bc9 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -37,6 +37,7 @@ jobs: - name: Get feature flags to use for macos builds run: | + pip install tomlkit echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" echo "using experimental features ${USE_FEATURES}" diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 82bf280c3..5167880f4 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -47,6 +47,7 @@ jobs: - name: Get feature flags to use for macos builds run: | + python -m pip install tomlkit echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" - name: Build MacOs with maturin on Python ${{ matrix.python }} From 97b0d52fc1666bf8deb09b412db74bafe6b60421 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 14:41:35 -0700 Subject: [PATCH 14/67] Try another way --- .github/workflows/build-arm64-wheels.yml | 4 ++++ .github/workflows/build-m1-wheel.yml | 3 +++ .github/workflows/build-test.yml | 8 +++----- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index ceae2ec44..3132da49e 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -45,6 +45,10 @@ jobs: if [ ! -f "activate" ]; then ln -s venv/bin/activate; fi . ./activate pip install maturin==0.12.20 + pip install tomlkit + USE_FEATURES=$(./support/feature-fishing.py) + echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" + export CC=gcc maturin build --release --strip --manylinux 2014 --no-sdist --cargo-extra-args="--features=${USE_FEATURES}" - name: Upload artifacts uses: actions/upload-artifact@v3 diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 18dc31bc9..5f2d73a36 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -46,6 +46,9 @@ jobs: arch -arm64 python3 -m venv venv . ./venv/bin/activate export PATH=~/.cargo/bin:$PATH + arch -arm64 pip install tomlkit + USE_FEATURES=$(arch -arm64 ./support/feature-fishing.py) + echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" arch -arm64 pip install maturin==0.12.20 arch -arm64 maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" arch -arm64 cargo test --features="${USE_FEATURES}" diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 5167880f4..e4bc08317 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -43,12 +43,10 @@ jobs: - name: Install dependencies run: | + python -m pip install tomlkit python -m pip install maturin==0.12.20 - - - name: Get feature flags to use for macos builds - run: | - python -m pip install tomlkit - echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" + USE=FEATURES=$(./support/feature-fishing.py) + echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Build MacOs with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'macos') From 12a6df0a73e9b14cc9067bed4b000ce4d1afd986 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:07:49 -0700 Subject: [PATCH 15/67] Remove, this moved down to the next step --- .github/workflows/build-arm64-wheels.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index 3132da49e..4390fd4d9 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -34,11 +34,6 @@ jobs: rm -rf venv export PATH="${PATH}:/opt/python/cp39-cp39/bin/:/opt/python/cp38-cp38/bin/:/opt/python/cp37-cp37m/bin/" - - name: Get feature flags to use for macos builds - run: | - python -m pip install tomlkit - echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" - - name: Build Python wheels run: | /opt/python/cp38-cp38/bin/python -m venv venv From 9095c1021b8a66e915d73ae8857429abcadac435 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:10:46 -0700 Subject: [PATCH 16/67] Removed, moved down --- .github/workflows/build-m1-wheel.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 5f2d73a36..e4bf87f8e 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -35,12 +35,6 @@ jobs: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust.sh arch -arm64 sh rust.sh -y - - name: Get feature flags to use for macos builds - run: | - pip install tomlkit - echo "USE_FEATURES=$(./support/feature-fishing.py)" >> "$GITHUB_ENV" - echo "using experimental features ${USE_FEATURES}" - - name: Build m1 wheels run: | arch -arm64 python3 -m venv venv From d880b75b9e3f8134c38289e7fa48ffdae84810af Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:13:37 -0700 Subject: [PATCH 17/67] a bit of diagnostics --- .github/workflows/build-m1-wheel.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index e4bf87f8e..861a5dc1b 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -45,6 +45,7 @@ jobs: echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" arch -arm64 pip install maturin==0.12.20 arch -arm64 maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" + echo "cargo test using features: ${USE_FEATURES}" arch -arm64 cargo test --features="${USE_FEATURES}" - name: Install clvm_tools_rs wheel From 76e2dc88e6a82b06d19f24d5d92b681eb0bba9dd Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:16:16 -0700 Subject: [PATCH 18/67] test --no-default-features with --features --- .github/workflows/build-m1-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 861a5dc1b..88bf19629 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -46,7 +46,7 @@ jobs: arch -arm64 pip install maturin==0.12.20 arch -arm64 maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" echo "cargo test using features: ${USE_FEATURES}" - arch -arm64 cargo test --features="${USE_FEATURES}" + arch -arm64 cargo test --no-default-features --features="${USE_FEATURES}" - name: Install clvm_tools_rs wheel run: | From e75d13fd6f5a62e6ed30839686ddf16ed88bb7be Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:20:25 -0700 Subject: [PATCH 19/67] typo --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index e4bc08317..25897af85 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -45,7 +45,7 @@ jobs: run: | python -m pip install tomlkit python -m pip install maturin==0.12.20 - USE=FEATURES=$(./support/feature-fishing.py) + USE_FEATURES=$(./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Build MacOs with maturin on Python ${{ matrix.python }} From 443299de017fba8940804b73f3956aae16d31934 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:27:49 -0700 Subject: [PATCH 20/67] Try a windows specific setup, try including --no-default-features with --features in maturin command line --- .github/workflows/build-test.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 25897af85..7ffad0c83 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -43,8 +43,19 @@ jobs: - name: Install dependencies run: | - python -m pip install tomlkit python -m pip install maturin==0.12.20 + + - name: Set up feature flags to use + if: startsWith(matrix.os, 'windows') + run: | + python -m pip install tomlkit + $USE_FEATURES = @(./support/feature-fishing.py) + echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" + + - name: Set up feature flags to use + if: not(startsWith(matrix.os, 'windows')) + run: | + python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" @@ -54,7 +65,7 @@ jobs: python -m venv venv ln -s venv/bin/activate . ./activate - maturin build -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" + maturin build -i python --release --strip --cargo-extra-args="--no-default-features --features=${USE_FEATURES}" - name: Build Linux in manylinux2010 with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'ubuntu') @@ -98,7 +109,7 @@ jobs: python -m venv venv echo ". .\venv\Scripts\Activate.ps1" > activate.ps1 . ./activate - maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" + maturin build --no-sdist -i python --release --strip --cargo-extra-args="--no-default-features --features=${USE_FEATURES}" # Find and install the newly built wheel python support/wheelname.py From 4fc20c001d663970c060af20d27436f3956c9f57 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:31:56 -0700 Subject: [PATCH 21/67] Fix typo --- .github/workflows/build-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 7ffad0c83..bbd83eb2d 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -45,14 +45,14 @@ jobs: run: | python -m pip install maturin==0.12.20 - - name: Set up feature flags to use + - name: Set up feature flags to use (windows) if: startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit $USE_FEATURES = @(./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - - name: Set up feature flags to use + - name: Set up feature flags to use if: not(startsWith(matrix.os, 'windows')) run: | python -m pip install tomlkit From 2e4d1dff5c7de5e090124b3ec6073742d520b18c Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:34:34 -0700 Subject: [PATCH 22/67] right form of not --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index bbd83eb2d..bbe75df9e 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -53,7 +53,7 @@ jobs: echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Set up feature flags to use - if: not(startsWith(matrix.os, 'windows')) + if: ! startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) From 384d7ac48b334995e463e879c62a8a7e88fe1ace Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:36:01 -0700 Subject: [PATCH 23/67] must be glued? --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index bbe75df9e..6f5b395fc 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -53,7 +53,7 @@ jobs: echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Set up feature flags to use - if: ! startsWith(matrix.os, 'windows') + if: !startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) From 3ef4debf7203466251ec88bfa30b7a003216006b Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:39:57 -0700 Subject: [PATCH 24/67] braces? --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 6f5b395fc..f6290f381 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -53,7 +53,7 @@ jobs: echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Set up feature flags to use - if: !startsWith(matrix.os, 'windows') + if: {{ !startsWith(matrix.os, 'windows') }} run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) From c35fea8543741fccc64d53e3f48d05a70f8f298f Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 15:43:40 -0700 Subject: [PATCH 25/67] making yaml upset, will have to dive in --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index f6290f381..9d5258e20 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -53,7 +53,7 @@ jobs: echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Set up feature flags to use - if: {{ !startsWith(matrix.os, 'windows') }} + if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos') run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) From e6f3a39a6588a5640da9e7344c7949afd5fe4ec4 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 16:27:53 -0700 Subject: [PATCH 26/67] refine a bit --- .github/workflows/build-test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 9d5258e20..961064fe3 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -53,7 +53,7 @@ jobs: echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - name: Set up feature flags to use - if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos') + if: ${{ !startsWith(matrix.os, 'windows') }} run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) @@ -168,7 +168,7 @@ jobs: } } - cargo build --features="${USE_FEATURES}" + cargo build --no-default-features --features="${USE_FEATURES}" cd resources/tests python test_clvm_step.py ThrowOnNativeFailure @@ -179,7 +179,7 @@ jobs: if: ${{ !startsWith(matrix.os, 'windows') }} run: | . ./activate - cargo build --features="${USE_FEATURES}" + cargo build --no-default-features --features="${USE_FEATURES}" cd resources/tests && \ python test_clvm_step.py && \ python mandelbrot-cldb.py @@ -189,7 +189,7 @@ jobs: run: | . ./activate # Build cmd line tools - PYO3_PYTHON=`which python` cargo build --features="${USE_FEATURES}" --release + PYO3_PYTHON=`which python` cargo build --no-default-features --features="${USE_FEATURES}" --release # Grab chia-blockchain rm -rf chia-blockchain From 55e7fcdc0f94b14c22a9a52b8356436f4ea79d42 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 16:32:23 -0700 Subject: [PATCH 27/67] Hmm ya we don't need to exclude extension-module here --- .github/workflows/build-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 961064fe3..d76e4d90d 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -65,7 +65,7 @@ jobs: python -m venv venv ln -s venv/bin/activate . ./activate - maturin build -i python --release --strip --cargo-extra-args="--no-default-features --features=${USE_FEATURES}" + maturin build -i python --release --strip - name: Build Linux in manylinux2010 with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'ubuntu') @@ -109,7 +109,7 @@ jobs: python -m venv venv echo ". .\venv\Scripts\Activate.ps1" > activate.ps1 . ./activate - maturin build --no-sdist -i python --release --strip --cargo-extra-args="--no-default-features --features=${USE_FEATURES}" + maturin build --no-sdist -i python --release --strip # Find and install the newly built wheel python support/wheelname.py From 8dec664b86871ced54070b85be8b458baa7985b9 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 16:44:31 -0700 Subject: [PATCH 28/67] powershell --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index d76e4d90d..a3b8ac81f 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -50,7 +50,7 @@ jobs: run: | python -m pip install tomlkit $USE_FEATURES = @(./support/feature-fishing.py) - echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" + echo "USE_FEATURES=${USE_FEATURES}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - name: Set up feature flags to use if: ${{ !startsWith(matrix.os, 'windows') }} From d33804c04c2a3c2d8a258a6a481757c24eb03ee7 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 16:57:18 -0700 Subject: [PATCH 29/67] Try a different capture tactic for powershell --- .github/workflows/build-test.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index a3b8ac81f..90d6b4df9 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -49,9 +49,11 @@ jobs: if: startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit - $USE_FEATURES = @(./support/feature-fishing.py) - echo "USE_FEATURES=${USE_FEATURES}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - + Write-Host $Env:GITHUB_REF + $USE_FEATURES = &python ./support/feature-fishing.py + echo "USE_FEATURES=$USE_FEATURES" >> $Env:GITHUB_ENV + shell: pwsh + - name: Set up feature flags to use if: ${{ !startsWith(matrix.os, 'windows') }} run: | From 9686d7102a933bc6ac6d3e5f5fdd524e4f202937 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 16:57:36 -0700 Subject: [PATCH 30/67] Remove unneeded --- .github/workflows/build-test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 90d6b4df9..4a14f54a9 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -49,7 +49,6 @@ jobs: if: startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit - Write-Host $Env:GITHUB_REF $USE_FEATURES = &python ./support/feature-fishing.py echo "USE_FEATURES=$USE_FEATURES" >> $Env:GITHUB_ENV shell: pwsh From 5511dcca0afa94ce988ce5858a8f1bd6995765fb Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 17:07:15 -0700 Subject: [PATCH 31/67] Support a simpler style if desired, use a direct append in windows --- .github/workflows/build-test.yml | 3 +-- support/feature-fishing.py | 7 ++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 4a14f54a9..c9fc0ff1d 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -49,8 +49,7 @@ jobs: if: startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit - $USE_FEATURES = &python ./support/feature-fishing.py - echo "USE_FEATURES=$USE_FEATURES" >> $Env:GITHUB_ENV + python ./support/feature-fishing.py "USE_FEATURES=" >> $Env:GITHUB_ENV shell: pwsh - name: Set up feature flags to use diff --git a/support/feature-fishing.py b/support/feature-fishing.py index 2d39b5ecc..d63850b7c 100755 --- a/support/feature-fishing.py +++ b/support/feature-fishing.py @@ -1,6 +1,11 @@ #!/usr/bin/env python from tomlkit import parse +import sys cargo_toml = parse(open('Cargo.toml').read()) -print(",".join(list(filter(lambda x: x != 'extension-module', cargo_toml['features']['default'])))) +results=",".join(list(filter(lambda x: x != 'extension-module', cargo_toml['features']['default']))) +if len(sys.argv) > 1: + print(f"{sys.argv[1]}{results}") +else: + print(results) From 9e3b3b8c13d933dae03554ada63f7a6817df57f1 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 17:26:14 -0700 Subject: [PATCH 32/67] try bash on windows? --- .github/workflows/build-test.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index c9fc0ff1d..cd2303a91 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -49,8 +49,9 @@ jobs: if: startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit - python ./support/feature-fishing.py "USE_FEATURES=" >> $Env:GITHUB_ENV - shell: pwsh + USE_FEATURES=$(./support/feature-fishing.py) + echo "USE_FEATURES=${USE_FEATURES}" >> $Env:GITHUB_ENV + shell: bash - name: Set up feature flags to use if: ${{ !startsWith(matrix.os, 'windows') }} From 5f21194d7c8bcb5ed47260b1847a6fdbb8f5421b Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 17:35:00 -0700 Subject: [PATCH 33/67] try using GITHUB_ENV --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index cd2303a91..f040df1c0 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -50,7 +50,7 @@ jobs: run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) - echo "USE_FEATURES=${USE_FEATURES}" >> $Env:GITHUB_ENV + echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" shell: bash - name: Set up feature flags to use From 68f72027da76d52ed344be262f49296adccb7bee Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 17:51:33 -0700 Subject: [PATCH 34/67] Print the result --- .github/workflows/build-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index f040df1c0..7d66ec77a 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -50,6 +50,7 @@ jobs: run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) + echo "contents of USE_FEATURES is ${USE_FEATURES}" echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" shell: bash From b06c207630b9d41d9d6f5ba161cffce8047a2cc3 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 18:05:51 -0700 Subject: [PATCH 35/67] Try decorating with import environment variables --- .github/workflows/build-test.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 7d66ec77a..a9878f4ca 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -49,10 +49,7 @@ jobs: if: startsWith(matrix.os, 'windows') run: | python -m pip install tomlkit - USE_FEATURES=$(./support/feature-fishing.py) - echo "contents of USE_FEATURES is ${USE_FEATURES}" - echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - shell: bash + python ./support/feature-fishing.py USE_FEATURES= | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - name: Set up feature flags to use if: ${{ !startsWith(matrix.os, 'windows') }} @@ -157,6 +154,8 @@ jobs: # Thanks: https://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script-on-the-first-error - name: "Run step run tests (windows)" if: ${{ startsWith(matrix.os, 'windows') }} + env: + USE_FEATURES: "${{ env.USE_FEATURES }}" run: | . ./activate @@ -179,6 +178,8 @@ jobs: - name: Run step run tests (others) if: ${{ !startsWith(matrix.os, 'windows') }} + env: + USE_FEATURES: "${{ env.USE_FEATURES }}" run: | . ./activate cargo build --no-default-features --features="${USE_FEATURES}" From c671d370f6833373b5e35aee33993df427164084 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 20:05:49 -0700 Subject: [PATCH 36/67] Put this env on the wrong step --- .github/workflows/build-test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index a9878f4ca..f63632560 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -178,8 +178,6 @@ jobs: - name: Run step run tests (others) if: ${{ !startsWith(matrix.os, 'windows') }} - env: - USE_FEATURES: "${{ env.USE_FEATURES }}" run: | . ./activate cargo build --no-default-features --features="${USE_FEATURES}" From fdb8acb0ca4c443e7bf41f49ea191b56bd92841a Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 20:20:27 -0700 Subject: [PATCH 37/67] Try switching to bash --- .github/workflows/build-test.yml | 36 +++----------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index f63632560..2e6852f1a 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -45,14 +45,8 @@ jobs: run: | python -m pip install maturin==0.12.20 - - name: Set up feature flags to use (windows) - if: startsWith(matrix.os, 'windows') - run: | - python -m pip install tomlkit - python ./support/feature-fishing.py USE_FEATURES= | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: Set up feature flags to use - if: ${{ !startsWith(matrix.os, 'windows') }} + shell: bash run: | python -m pip install tomlkit USE_FEATURES=$(./support/feature-fishing.py) @@ -152,32 +146,8 @@ jobs: # Test cldb output both run from python and via its command line tool. # Thanks: https://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script-on-the-first-error - - name: "Run step run tests (windows)" - if: ${{ startsWith(matrix.os, 'windows') }} - env: - USE_FEATURES: "${{ env.USE_FEATURES }}" - run: | - . ./activate - - Set-StrictMode -Version Latest - $ErrorActionPreference = "Stop" - $PSDefaultParameterValues['*:ErrorAction']='Stop' - function ThrowOnNativeFailure { - if (-not $?) - { - throw 'Native Failure' - } - } - - cargo build --no-default-features --features="${USE_FEATURES}" - cd resources/tests - python test_clvm_step.py - ThrowOnNativeFailure - python mandelbrot-cldb.py - ThrowOnNativeFailure - - - name: Run step run tests (others) - if: ${{ !startsWith(matrix.os, 'windows') }} + - name: "Run step run tests" + shell: bash run: | . ./activate cargo build --no-default-features --features="${USE_FEATURES}" From 2e0f8a883f2067914c7b3d13be5e60c09c27970a Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 20:34:52 -0700 Subject: [PATCH 38/67] Experiment with more switching to bash on windows --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 2e6852f1a..09a809a50 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -98,9 +98,9 @@ jobs: - name: Build Windows with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'windows') + shell: bash run: | python -m venv venv - echo ". .\venv\Scripts\Activate.ps1" > activate.ps1 . ./activate maturin build --no-sdist -i python --release --strip # Find and install the newly built wheel From cba36a380cafc88f3bbbf2290999d36e7494e8fb Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 20:40:40 -0700 Subject: [PATCH 39/67] Link activate so our usual procedure for using the venv will work --- .github/workflows/build-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 09a809a50..7237e090a 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -101,6 +101,7 @@ jobs: shell: bash run: | python -m venv venv + ln -s venv/bin/activate ./activate . ./activate maturin build --no-sdist -i python --release --strip # Find and install the newly built wheel From 17f110c0832e14218c5ce7190ec104f904580e02 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 21:05:08 -0700 Subject: [PATCH 40/67] Symlinks imperfect in windows? --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 7237e090a..a4335b9d6 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -101,7 +101,7 @@ jobs: shell: bash run: | python -m venv venv - ln -s venv/bin/activate ./activate + cp venv/bin/activate . . ./activate maturin build --no-sdist -i python --release --strip # Find and install the newly built wheel From 0db234a2c015fc0b54ddf1be71f5aae66013d950 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 19 May 2023 21:53:07 -0700 Subject: [PATCH 41/67] On windows, these are in venv/Scripts --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index a4335b9d6..46fb351f1 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -101,7 +101,7 @@ jobs: shell: bash run: | python -m venv venv - cp venv/bin/activate . + cp venv/Scripts/activate . . ./activate maturin build --no-sdist -i python --release --strip # Find and install the newly built wheel From 65938c31ed66b9a383dd2c81b87f2fe874b7a3f6 Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 May 2023 10:23:59 -0700 Subject: [PATCH 42/67] Add final printing --- src/classic/clvm_tools/cmds.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/classic/clvm_tools/cmds.rs b/src/classic/clvm_tools/cmds.rs index 094fe4f04..ff94234ca 100644 --- a/src/classic/clvm_tools/cmds.rs +++ b/src/classic/clvm_tools/cmds.rs @@ -697,6 +697,14 @@ pub fn cldb(args: &[String]) { let step = start_step(program, args); let mut cldbrun = CldbRun::new(runner, Rc::new(prim_map), Box::new(cldbenv), step); + let print_tree = |output: &mut Vec<_>, result: &BTreeMap| { + let mut cvt_subtree = BTreeMap::new(); + for (k, v) in result.iter() { + cvt_subtree.insert(k.clone(), YamlElement::String(v.clone())); + } + output.push(cvt_subtree); + }; + loop { if cldbrun.is_ended() { println!("{}", yamlette_string(&output)); @@ -709,13 +717,16 @@ pub fn cldb(args: &[String]) { let mut only_print = BTreeMap::new(); only_print.insert("Print".to_string(), YamlElement::String(p.clone())); output.push(only_print); + } else { + let is_final = result.get("Final").is_some(); + let is_throw = result.get("Throw").is_some(); + let is_failure = result.get("Failure").is_some(); + if is_final || is_throw || is_failure { + print_tree(&mut output, &result); + } } } else { - let mut cvt_subtree = BTreeMap::new(); - for (k, v) in result.iter() { - cvt_subtree.insert(k.clone(), YamlElement::String(v.clone())); - } - output.push(cvt_subtree); + print_tree(&mut output, &result); } } } From efa9011a45b8ecc3dacd9c96b3d9566277b7502e Mon Sep 17 00:00:00 2001 From: arty Date: Sat, 20 May 2023 10:53:36 -0700 Subject: [PATCH 43/67] Add final output we now ensure is generated --- resources/tests/mandelbrot-cldb.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/tests/mandelbrot-cldb.py b/resources/tests/mandelbrot-cldb.py index 4acad5f4a..11a915fb6 100644 --- a/resources/tests/mandelbrot-cldb.py +++ b/resources/tests/mandelbrot-cldb.py @@ -29,6 +29,8 @@ - Print: ((escape-at -184 -128) 6) - Print: ((escape-at -192 -128) 5) - Print: "(\\"result\\" \\"||567AAC|68DEEE|78EEEE|78BEEE\\")" +- Final: "3356114000950459963475899699747220812557867594760040767593731831711045" + Final-Location: "./mandelbrot/mandelbrot.clsp(8):43" """ have_output = subprocess.check_output(command).decode('utf8') From 26211399d5097f15c0b0ac99bc0fd0581008fb78 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 3 Aug 2023 09:47:22 -0700 Subject: [PATCH 44/67] Ensure extension-module is added when we're calling maturin --- .github/workflows/build-arm64-wheels.yml | 2 +- .github/workflows/build-m1-wheel.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index 69b48ebac..c21618d42 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -44,7 +44,7 @@ jobs: USE_FEATURES=$(./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" export - CC=gcc maturin build --release --strip --manylinux 2014 "--features=${USE_FEATURES}" + CC=gcc maturin build --release --strip --manylinux 2014 "--features=extension-module,${USE_FEATURES}" - name: Upload artifacts uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 186b4f4b9..25260e28a 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -109,7 +109,7 @@ jobs: run: | . ./venv/bin/activate cd clvm_tools_rs - arch -arm64 cargo test --features="${USE_FEATURES}" + arch -arm64 cargo test --features="extension-module,${USE_FEATURES}" - name: Upload wheels uses: actions/upload-artifact@v3 From a67abe3232a3fb6845d6c5bbb92092f4080ab2f5 Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 14 Aug 2023 12:00:48 -0700 Subject: [PATCH 45/67] Remove accidentally-added merge marks --- .github/workflows/build-m1-wheel.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 25260e28a..2a2056fad 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -48,19 +48,13 @@ jobs: arch -arm64 python3 -m venv venv . ./venv/bin/activate export PATH=~/.cargo/bin:$PATH -<<<<<<< HEAD arch -arm64 pip install tomlkit USE_FEATURES=$(arch -arm64 ./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - arch -arm64 pip install maturin==0.12.20 - arch -arm64 maturin build --no-sdist -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" - echo "cargo test using features: ${USE_FEATURES}" - arch -arm64 cargo test --no-default-features --features="${USE_FEATURES}" -======= arch -arm64 pip install maturin==1.1.0 - arch -arm64 maturin build -i python --release --strip - arch -arm64 cargo test ->>>>>>> chia/base + arch -arm64 maturin build -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" + echo "cargo test using features: ${USE_FEATURES}" + arch -arm64 cargo test --features="extension-module,${USE_FEATURES}" - name: Install clvm_tools_rs wheel run: | From dee6f63f14f120cbeb62dad6b2af0959cd11a3d2 Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 14 Aug 2023 12:04:29 -0700 Subject: [PATCH 46/67] Fix nonsense --- .github/workflows/build-m1-wheel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 2a2056fad..64e5ed45f 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -52,9 +52,9 @@ jobs: USE_FEATURES=$(arch -arm64 ./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" arch -arm64 pip install maturin==1.1.0 - arch -arm64 maturin build -i python --release --strip --cargo-extra-args="--features=${USE_FEATURES}" + arch -arm64 maturin build -i python --release --strip "--features=extension-module,${USE_FEATURES}" echo "cargo test using features: ${USE_FEATURES}" - arch -arm64 cargo test --features="extension-module,${USE_FEATURES}" + arch -arm64 cargo test --features="${USE_FEATURES}" - name: Install clvm_tools_rs wheel run: | From e6a69bb8a160ec59a0c954386fd04c3087456c00 Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 14 Aug 2023 12:07:44 -0700 Subject: [PATCH 47/67] more detritus --- .github/workflows/build-m1-wheel.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 64e5ed45f..16f427dbc 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -102,7 +102,6 @@ jobs: - name: Run tests from clvm_tools run: | . ./venv/bin/activate - cd clvm_tools_rs arch -arm64 cargo test --features="extension-module,${USE_FEATURES}" - name: Upload wheels From 13ab198a0218d1c715caab2e3e14fb0e2a639e95 Mon Sep 17 00:00:00 2001 From: arty Date: Mon, 14 Aug 2023 12:12:15 -0700 Subject: [PATCH 48/67] One more mistaken feature set --- .github/workflows/build-m1-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 16f427dbc..c25ef5c2b 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -102,7 +102,7 @@ jobs: - name: Run tests from clvm_tools run: | . ./venv/bin/activate - arch -arm64 cargo test --features="extension-module,${USE_FEATURES}" + arch -arm64 cargo test --features="${USE_FEATURES}" - name: Upload wheels uses: actions/upload-artifact@v3 From 4cc32c912db9b0d9945b6a690e1fcbc2465fdb35 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 14 Sep 2023 13:59:53 -0700 Subject: [PATCH 49/67] Remove diff --- .github/workflows/build-m1-wheel.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index c78f1e909..7c61d4f03 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -52,7 +52,6 @@ jobs: python3 -m venv venv . ./venv/bin/activate export PATH=~/.cargo/bin:$PATH -<<<<<<< HEAD arch -arm64 pip install tomlkit USE_FEATURES=$(arch -arm64 ./support/feature-fishing.py) echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" @@ -60,11 +59,6 @@ jobs: arch -arm64 maturin build -i python --release --strip "--features=extension-module,${USE_FEATURES}" echo "cargo test using features: ${USE_FEATURES}" arch -arm64 cargo test --features="${USE_FEATURES}" -======= - pip install maturin==1.1.0 - maturin build -i python --release --strip - cargo test ->>>>>>> chia/base - name: Install clvm_tools_rs wheel run: | From 13cc4ec2154a4691cdba1d7cbc438fcd47f6b3b0 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 28 Sep 2023 20:18:17 -0700 Subject: [PATCH 50/67] Improve printing speed --- src/classic/clvm_tools/cmds.rs | 3 ++ src/compiler/cldb.rs | 84 ++++++++++++++++++++++------------ 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/classic/clvm_tools/cmds.rs b/src/classic/clvm_tools/cmds.rs index c392535d5..70e2ccb5a 100644 --- a/src/classic/clvm_tools/cmds.rs +++ b/src/classic/clvm_tools/cmds.rs @@ -740,6 +740,9 @@ pub fn cldb(args: &[String]) { output.push(cvt_subtree); }; + #[cfg(feature = "debug-print")] + cldbrun.set_print_only(only_print); + loop { if cldbrun.is_ended() { println!("{}", yamlette_string(&output)); diff --git a/src/compiler/cldb.rs b/src/compiler/cldb.rs index b36c64390..14ff0dfd7 100644 --- a/src/compiler/cldb.rs +++ b/src/compiler/cldb.rs @@ -110,6 +110,7 @@ pub struct CldbRun { to_print: BTreeMap, in_expr: bool, row: usize, + print_only: bool, outputs_to_step: HashMap, } @@ -168,9 +169,14 @@ impl CldbRun { in_expr: false, row: 0, outputs_to_step: HashMap::::new(), + print_only: false, } } + pub fn set_print_only(&mut self, pronly: bool) { + self.print_only = pronly; + } + pub fn is_ended(&self) -> bool { self.ended } @@ -179,6 +185,16 @@ impl CldbRun { self.final_result.clone() } + #[cfg(feature = "debug-print")] + pub fn should_print_basic_output(&self) -> bool { + !self.print_only + } + + #[cfg(not(feature = "debug-print"))] + pub fn should_print_basic_output(&self) -> bool { + true + } + pub fn step(&mut self, allocator: &mut Allocator) -> Option> { let mut produce_result = false; let mut result = BTreeMap::new(); @@ -197,23 +213,27 @@ impl CldbRun { match &new_step { Ok(RunStep::OpResult(l, x, _p)) => { if self.in_expr { - self.to_print - .insert("Result-Location".to_string(), l.to_string()); - self.to_print.insert("Value".to_string(), x.to_string()); - self.to_print - .insert("Row".to_string(), self.row.to_string()); - if let Ok(n) = x.get_number() { - self.outputs_to_step.insert( - n, - PriorResult { - reference: self.row, - // value: x.clone(), // for future - }, - ); + if self.should_print_basic_output() { + self.to_print + .insert("Result-Location".to_string(), l.to_string()); + self.to_print.insert("Value".to_string(), x.to_string()); + self.to_print + .insert("Row".to_string(), self.row.to_string()); + + if let Ok(n) = x.get_number() { + self.outputs_to_step.insert( + n, + PriorResult { + reference: self.row, + // value: x.clone(), // for future + }, + ); + } + swap(&mut self.to_print, &mut result); + produce_result = true; } + self.in_expr = false; - swap(&mut self.to_print, &mut result); - produce_result = true; } } Ok(RunStep::Done(l, x)) => { @@ -228,12 +248,16 @@ impl CldbRun { } Ok(RunStep::Step(_sexp, _c, _p)) => {} Ok(RunStep::Op(sexp, c, a, None, _p)) => { - self.to_print - .insert("Operator-Location".to_string(), a.loc().to_string()); - self.to_print - .insert("Operator".to_string(), sexp.to_string()); + let should_print_basic_output = self.should_print_basic_output(); + if should_print_basic_output { + self.to_print + .insert("Operator-Location".to_string(), a.loc().to_string()); + self.to_print + .insert("Operator".to_string(), sexp.to_string()); + } + if let Ok(v) = sexp.get_number() { - if v == 11_u32.to_bigint().unwrap() { + if v == 11_u32.to_bigint().unwrap() && should_print_basic_output { // Build source tree for hashes. let arg_associations = get_arg_associations(&self.outputs_to_step, a.clone()); @@ -247,17 +271,21 @@ impl CldbRun { .insert("Print-Location".to_string(), loc.to_string()); self.to_print .insert("Print".to_string(), outputs.to_string()); + swap(&mut self.to_print, &mut result); + produce_result = true; } } } - self.env.add_context( - sexp.borrow(), - c.borrow(), - Some(a.clone()), - &mut self.to_print, - ); - self.env.add_function(sexp, &mut self.to_print); - self.in_expr = true; + if should_print_basic_output { + self.env.add_context( + sexp.borrow(), + c.borrow(), + Some(a.clone()), + &mut self.to_print, + ); + self.env.add_function(sexp, &mut self.to_print); + self.in_expr = true; + } } Ok(RunStep::Op(_sexp, _c, _a, Some(_v), _p)) => {} Err(RunFailure::RunExn(l, s)) => { From f77802d6aac610645da6f05324839d5e7ced2ed9 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 2 Nov 2023 11:54:05 -0700 Subject: [PATCH 51/67] ungate this feature --- src/classic/clvm_tools/cmds.rs | 2 -- src/compiler/cldb.rs | 11 ----------- 2 files changed, 13 deletions(-) diff --git a/src/classic/clvm_tools/cmds.rs b/src/classic/clvm_tools/cmds.rs index 09eb1f864..817026fc1 100644 --- a/src/classic/clvm_tools/cmds.rs +++ b/src/classic/clvm_tools/cmds.rs @@ -531,7 +531,6 @@ pub fn cldb(args: &[String]) { .set_type(Rc::new(PathOrCodeConv {})) .set_help("path to symbol file".to_string()), ); - #[cfg(feature = "debug-print")] parser.add_argument( vec!["-p".to_string(), "--only-print".to_string()], Argument::new() @@ -747,7 +746,6 @@ pub fn cldb(args: &[String]) { output.push(cvt_subtree); }; - #[cfg(feature = "debug-print")] cldbrun.set_print_only(only_print); loop { diff --git a/src/compiler/cldb.rs b/src/compiler/cldb.rs index ba193d3aa..d8bb942cf 100644 --- a/src/compiler/cldb.rs +++ b/src/compiler/cldb.rs @@ -21,11 +21,9 @@ use crate::compiler::clvm::{convert_from_clvm_rs, run_step, RunStep}; use crate::compiler::runtypes::RunFailure; use crate::compiler::sexp::SExp; use crate::compiler::srcloc::Srcloc; -#[cfg(feature = "debug-print")] use crate::util::u8_from_number; use crate::util::Number; -#[cfg(feature = "debug-print")] fn print_atom() -> SExp { SExp::Atom(Srcloc::start("*print*"), b"$print$".to_vec()) } @@ -115,7 +113,6 @@ pub struct CldbRun { outputs_to_step: HashMap, } -#[cfg(feature = "debug-print")] fn humanize(a: Rc) -> Rc { match a.borrow() { SExp::Integer(l, i) => { @@ -136,7 +133,6 @@ fn humanize(a: Rc) -> Rc { } } -#[cfg(feature = "debug-print")] fn is_print_request(a: &SExp) -> Option<(Srcloc, Rc)> { if let SExp::Cons(l, f, r) = a { if &print_atom() == f.borrow() { @@ -185,16 +181,10 @@ impl CldbRun { self.final_result.clone() } - #[cfg(feature = "debug-print")] pub fn should_print_basic_output(&self) -> bool { !self.print_only } - #[cfg(not(feature = "debug-print"))] - pub fn should_print_basic_output(&self) -> bool { - true - } - pub fn step(&mut self, allocator: &mut Allocator) -> Option> { let mut produce_result = false; let mut result = BTreeMap::new(); @@ -265,7 +255,6 @@ impl CldbRun { let args = format_arg_inputs(&arg_associations); self.to_print.insert("Argument-Refs".to_string(), args); } else if v == 34_u32.to_bigint().unwrap() { - #[cfg(feature = "debug-print")] // Handle diagnostic output. if let Some((loc, outputs)) = is_print_request(a) { self.to_print From dc2823e59d3392f2611b7cc14941e6923783d4a8 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 2 Nov 2023 11:56:50 -0700 Subject: [PATCH 52/67] Back out feature infra, as we won't be using it here --- .github/workflows/build-arm64-wheels.yml | 7 +------ .github/workflows/build-m1-wheel.yml | 11 +++-------- .github/workflows/build-test.yml | 13 +++---------- Cargo.toml | 3 +-- support/feature-fishing.py | 11 ----------- 5 files changed, 8 insertions(+), 37 deletions(-) delete mode 100755 support/feature-fishing.py diff --git a/.github/workflows/build-arm64-wheels.yml b/.github/workflows/build-arm64-wheels.yml index 97ccdd435..6d8a5f72c 100644 --- a/.github/workflows/build-arm64-wheels.yml +++ b/.github/workflows/build-arm64-wheels.yml @@ -37,18 +37,13 @@ jobs: rustup target add aarch64-unknown-linux-musl rm -rf venv export PATH="${PATH}:/opt/python/cp39-cp39/bin/:/opt/python/cp38-cp38/bin/:/opt/python/cp37-cp37m/bin/" - - name: Build Python wheels run: | /opt/python/cp38-cp38/bin/python -m venv venv if [ ! -f "activate" ]; then ln -s venv/bin/activate; fi . ./activate pip install maturin==1.1.0 - pip install tomlkit - USE_FEATURES=$(./support/feature-fishing.py) - echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - export - CC=gcc maturin build --release --strip --manylinux 2014 "--features=extension-module,${USE_FEATURES}" + CC=gcc maturin build --release --strip --manylinux 2014 - name: Upload artifacts uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/build-m1-wheel.yml b/.github/workflows/build-m1-wheel.yml index 725bfcad3..a7a3c0a4e 100644 --- a/.github/workflows/build-m1-wheel.yml +++ b/.github/workflows/build-m1-wheel.yml @@ -52,13 +52,9 @@ jobs: python3 -m venv venv . ./venv/bin/activate export PATH=~/.cargo/bin:$PATH - arch -arm64 pip install tomlkit - USE_FEATURES=$(arch -arm64 ./support/feature-fishing.py) - echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - arch -arm64 pip install maturin==1.1.0 - arch -arm64 maturin build -i python --release --strip "--features=extension-module,${USE_FEATURES}" - echo "cargo test using features: ${USE_FEATURES}" - arch -arm64 cargo test --features="${USE_FEATURES}" + pip install maturin==1.1.0 + maturin build -i python --release --strip + cargo test - name: Install clvm_tools_rs wheel run: | @@ -106,7 +102,6 @@ jobs: - name: Run tests from clvm_tools run: | . ./venv/bin/activate - arch -arm64 cargo test --features="${USE_FEATURES}" cd clvm_tools pytest diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index a6ee8a771..633ba7d8b 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -49,13 +49,6 @@ jobs: run: | python -m pip install maturin==1.1.0 - - name: Set up feature flags to use - shell: bash - run: | - python -m pip install tomlkit - USE_FEATURES=$(./support/feature-fishing.py) - echo "USE_FEATURES=${USE_FEATURES}" >> "$GITHUB_ENV" - - name: Build MacOs with maturin on Python ${{ matrix.python }} if: startsWith(matrix.os, 'macos') env: @@ -154,7 +147,7 @@ jobs: shell: bash run: | . ./activate - cargo build --no-default-features --features="${USE_FEATURES}" + maturin develop cd resources/tests && \ python test_clvm_step.py && \ python mandelbrot-cldb.py @@ -165,7 +158,7 @@ jobs: set -x . ./activate # Build cmd line tools - PYO3_PYTHON=`which python` cargo build --no-default-features --features="${USE_FEATURES}" --release + PYO3_PYTHON=`which python` cargo build --release # Grab chia-blockchain rm -rf chia-blockchain @@ -228,7 +221,7 @@ jobs: - name: Run tests if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python, '3.8') - run: cargo test --features="${USE_FEATURES}" + run: cargo test - name: Exhaustive assign tests if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python, '3.8') diff --git a/Cargo.toml b/Cargo.toml index 6fd6b6888..a0a465bc0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,9 +52,8 @@ name = "clvm_tools_rs" crate-type = ["cdylib", "rlib"] [features] -debug-print = [] extension-module = ["dep:pyo3"] -default = ["debug-print"] +default = [] [target.'cfg(target_family="wasm")'.dependencies] wasm-bindgen = { version = "0.2.80", features = ["serde-serialize"] } diff --git a/support/feature-fishing.py b/support/feature-fishing.py deleted file mode 100755 index d63850b7c..000000000 --- a/support/feature-fishing.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -from tomlkit import parse -import sys - -cargo_toml = parse(open('Cargo.toml').read()) -results=",".join(list(filter(lambda x: x != 'extension-module', cargo_toml['features']['default']))) -if len(sys.argv) > 1: - print(f"{sys.argv[1]}{results}") -else: - print(results) From 5133fe0c28987fafd6c28d017859275828ab04e8 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 13:28:04 -0800 Subject: [PATCH 53/67] Run cargo build to ensure the binaries are available as newly built --- .github/workflows/build-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 633ba7d8b..07fd03c57 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -148,6 +148,7 @@ jobs: run: | . ./activate maturin develop + cargo build cd resources/tests && \ python test_clvm_step.py && \ python mandelbrot-cldb.py From 337accb37ffe2127549c7120c1c4f0c3f3923793 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 15:25:42 -0800 Subject: [PATCH 54/67] Add new test run and python interface to print running --- .github/workflows/build-test.yml | 8 ++++++++ resources/tests/mandelbrot/mand_args.txt | 1 + resources/tests/mandelbrot/mand_test.txt | 25 ++++++++++++++++++++++++ src/py/api.rs | 22 +++++++++++++++++++-- 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 resources/tests/mandelbrot/mand_args.txt create mode 100644 resources/tests/mandelbrot/mand_test.txt diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 07fd03c57..7fe232b7b 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -153,6 +153,14 @@ jobs: python test_clvm_step.py && \ python mandelbrot-cldb.py + - name: "Test step run with mandelbrot, setting print only" + shell: bash + run: | + python ./resources/tests/steprun.py ./resources/tests/mandelbrot/mandelbrot.clvm.hex mand_args.txt ./resources/tests/mandelbrot/mandelbrot.sym > /tmp/mand_output.txt + # Fail if the output differs. + diff -s -q /tmp/mand_output.txt ./resources/tests/mandelbrot/mand_test.txt + + - name: Verify recompilation of old sources match with new compiler if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.python, '3.8') run: | diff --git a/resources/tests/mandelbrot/mand_args.txt b/resources/tests/mandelbrot/mand_args.txt new file mode 100644 index 000000000..bc71d4f14 --- /dev/null +++ b/resources/tests/mandelbrot/mand_args.txt @@ -0,0 +1 @@ +ff82ff40ff8180ff82ff70ff81a0ff0880 diff --git a/resources/tests/mandelbrot/mand_test.txt b/resources/tests/mandelbrot/mand_test.txt new file mode 100644 index 000000000..8b1beda64 --- /dev/null +++ b/resources/tests/mandelbrot/mand_test.txt @@ -0,0 +1,25 @@ +(("escape-at" -152 -104) 14) +(("escape-at" -160 -104) 14) +(("escape-at" -168 -104) 14) +(("escape-at" -176 -104) 11) +(("escape-at" -184 -104) 8) +(("escape-at" -192 -104) 7) +(("escape-at" -152 -112) 14) +(("escape-at" -160 -112) 14) +(("escape-at" -168 -112) 14) +(("escape-at" -176 -112) 14) +(("escape-at" -184 -112) 8) +(("escape-at" -192 -112) 7) +(("escape-at" -152 -120) 14) +(("escape-at" -160 -120) 14) +(("escape-at" -168 -120) 14) +(("escape-at" -176 -120) 13) +(("escape-at" -184 -120) 8) +(("escape-at" -192 -120) 6) +(("escape-at" -152 -128) 12) +(("escape-at" -160 -128) 10) +(("escape-at" -168 -128) 10) +(("escape-at" -176 -128) 7) +(("escape-at" -184 -128) 6) +(("escape-at" -192 -128) 5) +("result" "||567AAC|68DEEE|78EEEE|78BEEE") diff --git a/src/py/api.rs b/src/py/api.rs index d2c4900e1..970922495 100644 --- a/src/py/api.rs +++ b/src/py/api.rs @@ -4,8 +4,9 @@ // re: https://github.com/rust-lang/rust-clippy/issues/8971 use pyo3::exceptions::PyException; use pyo3::prelude::*; -use pyo3::types::{PyDict, PyString, PyTuple}; +use pyo3::types::{PyDict, PyString, PyTuple, PyBool}; +use std::cmp::Ordering; use std::collections::{BTreeMap, HashMap}; use std::fs; use std::rc::Rc; @@ -206,16 +207,31 @@ impl CldbSingleBespokeOverride for CldbSinglePythonOverride { } } -#[pyfunction(arg4 = "None")] +#[pyfunction(arg4 = "None", arg5 = "None")] fn start_clvm_program( hex_prog: String, hex_args: String, symbol_table: Option>, overrides: Option>>, + run_options: Option>>, ) -> PyResult { let (command_tx, command_rx) = mpsc::channel(); let (result_tx, result_rx) = mpsc::channel(); + let gil = Python::acquire_gil(); + let py = gil.python(); + + let print_only_option = + run_options + .and_then(|h| h.get("print").map(|p| p.clone())) + .unwrap_or_else(|| { + let any: Py = PyBool::new(py, false).into(); + any + }); + + let print_only = + PyBool::new(py, true).compare(print_only_option)? == Ordering::Equal; + thread::spawn(move || { let mut allocator = Allocator::new(); let runner = Rc::new(DefaultProgramRunner::new()); @@ -258,6 +274,8 @@ fn start_clvm_program( let step = start_step(program, args); let cldbenv = CldbRunEnv::new(None, Rc::new(vec![]), Box::new(override_runnable)); let mut cldbrun = CldbRun::new(runner, Rc::new(prim_map), Box::new(cldbenv), step); + cldbrun.set_print_only(print_only); + loop { match cmd_input.recv() { Ok(end_run) => { From a016db5b649477ef8ac4c2b5d0d1dd36399371d5 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 15:27:34 -0800 Subject: [PATCH 55/67] fmt + clippy --- src/py/api.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/py/api.rs b/src/py/api.rs index 970922495..2a4722548 100644 --- a/src/py/api.rs +++ b/src/py/api.rs @@ -4,7 +4,7 @@ // re: https://github.com/rust-lang/rust-clippy/issues/8971 use pyo3::exceptions::PyException; use pyo3::prelude::*; -use pyo3::types::{PyDict, PyString, PyTuple, PyBool}; +use pyo3::types::{PyBool, PyDict, PyString, PyTuple}; use std::cmp::Ordering; use std::collections::{BTreeMap, HashMap}; @@ -221,16 +221,14 @@ fn start_clvm_program( let gil = Python::acquire_gil(); let py = gil.python(); - let print_only_option = - run_options + let print_only_option = run_options .and_then(|h| h.get("print").map(|p| p.clone())) .unwrap_or_else(|| { let any: Py = PyBool::new(py, false).into(); any }); - let print_only = - PyBool::new(py, true).compare(print_only_option)? == Ordering::Equal; + let print_only = PyBool::new(py, true).compare(print_only_option)? == Ordering::Equal; thread::spawn(move || { let mut allocator = Allocator::new(); From c8427a7aeed1cdbdd2e490244c807b76e7833897 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 15:52:34 -0800 Subject: [PATCH 56/67] Merge in new functionality in resources/tests/lib/steprun.py --- .github/workflows/build-test.yml | 2 +- resources/tests/lib/steprun.py | 66 ++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 7fe232b7b..0063f4bf1 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -156,7 +156,7 @@ jobs: - name: "Test step run with mandelbrot, setting print only" shell: bash run: | - python ./resources/tests/steprun.py ./resources/tests/mandelbrot/mandelbrot.clvm.hex mand_args.txt ./resources/tests/mandelbrot/mandelbrot.sym > /tmp/mand_output.txt + python ./resources/tests/lib/steprun.py ./resources/tests/mandelbrot/mandelbrot.clvm.hex mand_args.txt ./resources/tests/mandelbrot/mandelbrot.sym > /tmp/mand_output.txt # Fail if the output differs. diff -s -q /tmp/mand_output.txt ./resources/tests/mandelbrot/mand_test.txt diff --git a/resources/tests/lib/steprun.py b/resources/tests/lib/steprun.py index 02db51339..52f4d3452 100644 --- a/resources/tests/lib/steprun.py +++ b/resources/tests/lib/steprun.py @@ -2,14 +2,9 @@ import json import os from pathlib import Path -from typing import List - -# from chia.types.blockchain_format.program import Program -from clvm_rs import Program from clvm_tools.binutils import assemble, disassemble - -from clvm_tools_rs import compile_clvm, compose_run_function, start_clvm_program - +from clvm_tools_rs import start_clvm_program, compose_run_function, compile_clvm +from chia.types.blockchain_format.program import Program def compile_module_with_symbols(include_paths: List[Path], source: Path): path_obj = Path(source) @@ -36,34 +31,47 @@ def run_until_end(p): step_result = p.step() if step_result is not None: last = step_result - if "Print" in last: - to_print = last["Print"] - if "Print-Location" in last: - print(f"{last['Print-Location']}: print {to_print}") - else: - print(f"print {to_print}") + if 'Print' in last: + print(f"{last['Print']}") - return last + if 'Result-Location' in last and \ + 'Arguments' in last and \ + 'print' in last['Result-Location'] and \ + 'Value' in last: + value_assembled = assemble(last['Value']) + assembled_arg_list = [] + while value_assembled.pair is not None: + assembled_arg_list.append(value_assembled.pair[0]) + value_assembled = value_assembled.pair[1] + if len(assembled_arg_list) > 2: + to_show = disassemble(Program.to(assembled_arg_list[-2:])) + print(f"print {last['Operator']} {to_show}") + return last -def diag_run_clvm(program, args, symbols): - hex_form_of_program = binascii.hexlify(bytes(program)).decode("utf8") - hex_form_of_args = binascii.hexlify(bytes(args)).decode("utf8") +def diag_run_clvm(program, args, symbols, options): + hex_form_of_program = binascii.hexlify(bytes(program)).decode('utf8') + hex_form_of_args = binascii.hexlify(bytes(args)).decode('utf8') symbols = json.loads(open(symbols).read()) - p = start_clvm_program( - hex_form_of_program, hex_form_of_args, symbols, None - ) + p = start_clvm_program(hex_form_of_program, hex_form_of_args, symbols, None, options) report = run_until_end(p) - if "Failure" in report: - raise Exception(report) - else: - return assemble(report["Final"]) + if 'Failure' in report: + print(report['Failure']) - -if __name__ == "__main__": +if __name__ == '__main__': # smoke test import sys + import argparse + import traceback + + parser = argparse.ArgumentParser() + parser.add_argument('-p', '--print', action='store_true', default=True) + parser.add_argument('program') + parser.add_argument('env') + parser.add_argument('symbols') + args = parser.parse_args() - program = Program.fromhex(open(sys.argv[1]).read()) - args = Program.fromhex(open(sys.argv[2]).read()) - diag_run_clvm(program, args) + program = Program.fromhex(open(args.program).read()) + env = Program.fromhex(open(args.env).read()) + options = { 'print': args.print } + diag_run_clvm(program, env, args.symbols, options) From 0d7fb71f318af460196f4f708e2e9f675ea41e91 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 16:15:15 -0800 Subject: [PATCH 57/67] Import program from clvm_rs --- resources/tests/lib/steprun.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/tests/lib/steprun.py b/resources/tests/lib/steprun.py index 52f4d3452..37b13cd70 100644 --- a/resources/tests/lib/steprun.py +++ b/resources/tests/lib/steprun.py @@ -4,7 +4,7 @@ from pathlib import Path from clvm_tools.binutils import assemble, disassemble from clvm_tools_rs import start_clvm_program, compose_run_function, compile_clvm -from chia.types.blockchain_format.program import Program +from clvm_rs import Program def compile_module_with_symbols(include_paths: List[Path], source: Path): path_obj = Path(source) From 4dbc4770227912490c59ea8ac2e2ff62ac43f561 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 17:23:04 -0800 Subject: [PATCH 58/67] Remove unused clvm_tools imports and remove hacky print substitute --- resources/tests/lib/steprun.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/resources/tests/lib/steprun.py b/resources/tests/lib/steprun.py index 37b13cd70..03e03bb5f 100644 --- a/resources/tests/lib/steprun.py +++ b/resources/tests/lib/steprun.py @@ -2,7 +2,6 @@ import json import os from pathlib import Path -from clvm_tools.binutils import assemble, disassemble from clvm_tools_rs import start_clvm_program, compose_run_function, compile_clvm from clvm_rs import Program @@ -34,19 +33,6 @@ def run_until_end(p): if 'Print' in last: print(f"{last['Print']}") - if 'Result-Location' in last and \ - 'Arguments' in last and \ - 'print' in last['Result-Location'] and \ - 'Value' in last: - value_assembled = assemble(last['Value']) - assembled_arg_list = [] - while value_assembled.pair is not None: - assembled_arg_list.append(value_assembled.pair[0]) - value_assembled = value_assembled.pair[1] - if len(assembled_arg_list) > 2: - to_show = disassemble(Program.to(assembled_arg_list[-2:])) - print(f"print {last['Operator']} {to_show}") - return last def diag_run_clvm(program, args, symbols, options): From 2c859f13a883b29df9346dfef1e0416f79e15aeb Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 17:53:16 -0800 Subject: [PATCH 59/67] Activate venv for new test --- .github/workflows/build-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 0063f4bf1..c3c6d8873 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -156,6 +156,7 @@ jobs: - name: "Test step run with mandelbrot, setting print only" shell: bash run: | + . ./activate python ./resources/tests/lib/steprun.py ./resources/tests/mandelbrot/mandelbrot.clvm.hex mand_args.txt ./resources/tests/mandelbrot/mandelbrot.sym > /tmp/mand_output.txt # Fail if the output differs. diff -s -q /tmp/mand_output.txt ./resources/tests/mandelbrot/mand_test.txt From 43aaeda80e9d3d1997c685d3534f30035535375b Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 18:00:38 -0800 Subject: [PATCH 60/67] Add type hint support --- .../tests/game-referee-in-cl21/test_library_basics.py | 8 ++++---- resources/tests/lib/steprun.py | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/tests/game-referee-in-cl21/test_library_basics.py b/resources/tests/game-referee-in-cl21/test_library_basics.py index 926ddde7a..c8cce6664 100644 --- a/resources/tests/game-referee-in-cl21/test_library_basics.py +++ b/resources/tests/game-referee-in-cl21/test_library_basics.py @@ -70,7 +70,7 @@ def test_smoke_compare(): compare_program.run(Program.to([])) def test_handcalc(): - diag_run_clvm(test_handcalc_program, Program.to([]), 'test_handcalc.sym') + diag_run_clvm(test_handcalc_program, Program.to([]), 'test_handcalc.sym', {'print': True}) def proper_list_inner(result,cl): if hasattr(cl, 'pair') and cl.pair is not None: @@ -137,20 +137,20 @@ def test_permutations_2(): all_b_string = 0x626262626262 for try_list in [[all_a_string,all_b_string], [all_b_string,all_a_string]]: want_set = list([list(v) for v in sorted(permutations(try_list))]) - listed_result = diag_run_clvm(smoke_test_permutations_program, Program.to([try_list]), 'smoke_test_permutations.sym') + listed_result = diag_run_clvm(smoke_test_permutations_program, Program.to([try_list]), 'smoke_test_permutations.sym', {'print': True}) pl = proper_list(listed_result) perms_result = sorted([int_list(x) for x in de_none_list(pl)]) assert want_set == perms_result def test_chialisp_sort_program(): - diag_run_clvm(test_sort_program, Program.to([]), 'test_sort.sym') + diag_run_clvm(test_sort_program, Program.to([]), 'test_sort.sym', {'print': True}) def test_permutations_n(): for i in range(3,6): do_test_permutations_of_size_n(i) def test_chialisp_permutations_program(): - diag_run_clvm(test_permutations_program, Program.to([3, 5]), 'test_permutations.sym') + diag_run_clvm(test_permutations_program, Program.to([3, 5]), 'test_permutations.sym', {'print': True}) def test_smoke_sort(): for length in range(7): # 0-7 length diff --git a/resources/tests/lib/steprun.py b/resources/tests/lib/steprun.py index 03e03bb5f..c4fb06df5 100644 --- a/resources/tests/lib/steprun.py +++ b/resources/tests/lib/steprun.py @@ -1,3 +1,4 @@ +from typing import List import binascii import json import os From 0d3f5c4fda29f9dc2a123fe77287659ee48006cf Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 18:06:45 -0800 Subject: [PATCH 61/67] Replace maturin develop with pip install due to support in pyproject --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index c3c6d8873..0b37cb223 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -147,7 +147,7 @@ jobs: shell: bash run: | . ./activate - maturin develop + pip install . cargo build cd resources/tests && \ python test_clvm_step.py && \ From aae2cb6fd725ec718c2ecfec396d3013d720ce4a Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 18:13:09 -0800 Subject: [PATCH 62/67] Ensure clvm_rs is also installed --- .github/workflows/build-test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 0b37cb223..86093fc4a 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -147,8 +147,9 @@ jobs: shell: bash run: | . ./activate - pip install . cargo build + pip install . + pip install clvm_rs cd resources/tests && \ python test_clvm_step.py && \ python mandelbrot-cldb.py From 334f6aec3902f7103b962e8e8bbd190ceda3f224 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 18:19:05 -0800 Subject: [PATCH 63/67] Set args path --- .github/workflows/build-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 86093fc4a..772e76bd8 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -158,7 +158,7 @@ jobs: shell: bash run: | . ./activate - python ./resources/tests/lib/steprun.py ./resources/tests/mandelbrot/mandelbrot.clvm.hex mand_args.txt ./resources/tests/mandelbrot/mandelbrot.sym > /tmp/mand_output.txt + python ./resources/tests/lib/steprun.py ./resources/tests/mandelbrot/mandelbrot.clvm.hex resources/tests/mandelbrot/mand_args.txt ./resources/tests/mandelbrot/mandelbrot.sym > /tmp/mand_output.txt # Fail if the output differs. diff -s -q /tmp/mand_output.txt ./resources/tests/mandelbrot/mand_test.txt From 5dcf74f32358c039fa31ca04055e3896abfc7c03 Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 18:50:57 -0800 Subject: [PATCH 64/67] Same output as before on Final --- resources/tests/lib/steprun.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/tests/lib/steprun.py b/resources/tests/lib/steprun.py index c4fb06df5..c542ed94e 100644 --- a/resources/tests/lib/steprun.py +++ b/resources/tests/lib/steprun.py @@ -4,6 +4,7 @@ import os from pathlib import Path from clvm_tools_rs import start_clvm_program, compose_run_function, compile_clvm +from clvm_tools import assemble from clvm_rs import Program def compile_module_with_symbols(include_paths: List[Path], source: Path): @@ -44,6 +45,8 @@ def diag_run_clvm(program, args, symbols, options): report = run_until_end(p) if 'Failure' in report: print(report['Failure']) + else: + return assemble(report['Final']) if __name__ == '__main__': # smoke test From 16b3849abe4f3523f0871143a2c67fb2f0a157bf Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 18:57:42 -0800 Subject: [PATCH 65/67] Same output as before on Final --- resources/tests/lib/steprun.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/tests/lib/steprun.py b/resources/tests/lib/steprun.py index c542ed94e..e4e2097f7 100644 --- a/resources/tests/lib/steprun.py +++ b/resources/tests/lib/steprun.py @@ -4,7 +4,7 @@ import os from pathlib import Path from clvm_tools_rs import start_clvm_program, compose_run_function, compile_clvm -from clvm_tools import assemble +from clvm_tools.binutils import assemble from clvm_rs import Program def compile_module_with_symbols(include_paths: List[Path], source: Path): From 0261e39b9daae80ee233422dc6266a59dbc2dcce Mon Sep 17 00:00:00 2001 From: arty Date: Thu, 16 Nov 2023 19:04:25 -0800 Subject: [PATCH 66/67] Ensure clvm_tools is installed since it has 'assemble' --- .github/workflows/build-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 772e76bd8..54364b405 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -150,6 +150,7 @@ jobs: cargo build pip install . pip install clvm_rs + pip install clvm_tools cd resources/tests && \ python test_clvm_step.py && \ python mandelbrot-cldb.py From 1d1dff6fc99ca608c1a11072c062a1415e1d8617 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 17 Nov 2023 11:05:23 +0100 Subject: [PATCH 67/67] Remove no longer needed comment. --- .github/workflows/build-test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 54364b405..690453553 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -142,7 +142,6 @@ jobs: echo "CLVM_TOOLS_RS_VERSION=$(python -c 'import clvm_tools_rs; print(clvm_tools_rs.get_version())')" >> "$GITHUB_ENV" # Test cldb output both run from python and via its command line tool. - # Thanks: https://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script-on-the-first-error - name: "Run step run tests" shell: bash run: |