1919B ep; 
2020P; 
2121.end
22- # pend_if valgrind?
2322assert succeeded?
2423assert result(" F" " 
2524       + ep^-3 * ( 1/24 ) 
@@ -141,6 +140,7 @@ ModuleOption noparallel;
141140B ep; 
142141P; 
143142.end 
143+ # Too slow, but is supposed to pass. 
144144#pend_if valgrind? 
145145assert succeeded? 
146146assert result("F1") =~ expr(" 
@@ -269,6 +269,7 @@ ModuleOption noparallel;
269269B ep; 
270270P; 
271271.end
272+ #  Too slow, but is supposed to pass.
272273# pend_if valgrind?
273274assert succeeded?
274275assert result(" F1" " 
@@ -289,3 +290,219 @@ assert result("F2") =~ expr("
289290         z3 - 3705/8*z3^2 
290291" 
291292*--# ] Forcer_1-expand : 
293+ *--# [ Forcer_2 :
294+ * An easier version of the above, for checking with valgrind
295+ * timeout  = 60 seconds.
296+ # include- forcer.h
297+ CF f,f1,f2,f3; 
298+ V p2,p3; 
299+ S x3; 
300+ 
301+ * Give 1 or -1. n1 is not used.
302+ Table randomsign(n1?); 
303+ Fill randomsign() = random_(2)*2-3; 
304+ 
305+ * Zip two functions as:
306+ *   zip(f1,f2(p1,...,pN),f3(q1,...,qN)) -> f1(p1,q1,...,pN,qN),
307+ * for N >= 1.
308+ Table zip(f1?(?a1),f2?(p2?,?a2),f3?(p3?,?a3)); 
309+ Fill zip() =
310+   + thetap_(nargs_(?a2,?a3)) * zip(f1(?a1,p2,p3),f2(?a2),f3(?a3))
311+   + delta_(nargs_(?a2,?a3))  * f1(?a1,p2,p3)
312+ ; 
313+ 
314+ * Element-wise multiplication as:
315+ *   emul(f1,f2(p1,...,pN),f3(a1,...,aN)) -> f1(p1*a1,...,pN*aN)
316+ * for N >= 1.
317+ Table emul(f1?(?a1),f2?(p2?,?a2),f3?(x3?,?a3)); 
318+ Fill emul() =
319+   + thetap_(nargs_(?a2,?a3)) * emul(f1(?a1,p2*x3),f2(?a2),f3(?a3))
320+   + delta_(nargs_(?a2,?a3))  * f1(?a1,p2*x3)
321+ ; 
322+ 
323+ L F1  =
324+   # do i=1,2
325+     + Zno`i' (1,1,1,1,1,1,1,1,1,1,1,0,0,0)
326+   #enddo 
327+ ; 
328+ 
329+ L F2 = 
330+   #do i=1,2 
331+     + Zno`i'  (1,1,1,1,1,1,1,1,1,1,1,-1,0,0)
332+     + Zno`i' (1,1,1,1,1,1,1,1,1,1,1,0,-1,0)
333+     + Zno`i'  (1,1,1,1,1,1,1,1,1,1,1,0,0,-1)
334+   # enddo
335+ ; 
336+ 
337+ id Zno1(n1?,...,n14?) =
338+   +vx(-Q,p4,p5)
339+   *vx(p3,-p4,p10)
340+   *vx(p2,-p3,p9)
341+   *vx(p1,-p2,p11)
342+   *vx(-p5,p6,-p11)
343+   *vx(-p6,p7,-p10)
344+   *vx(-p7,p8,-p9)
345+   *vx(-p1,-p8,Q)
346+   /<p1.p1^n1>/.../<p11.p11^n11>
347+   /p2.p4^n12/Q.p2^n13/Q.p3^n14
348+ ; 
349+ 
350+ id Zno2(n1?,...,n14?) =
351+   +vx(-Q,p4,p5)
352+   *vx(p3,-p4,p11)
353+   *vx(p6,p7,p10)
354+   *vx(p2,-p3,-p10)
355+   *vx(p1,-p2,p9)
356+   *vx(-p5,-p6,-p9)
357+   *vx(-p7,p8,-p11)
358+   *vx(-p1,-p8,Q)
359+   /<p1.p1^n1>/.../<p11.p11^n11>
360+   /Q.p2^n12/p1.p4^n13/Q.p3^n14
361+ ; 
362+ 
363+ id Zno3(n1?,...,n14?) =
364+   +vx(-Q,p3,p4)
365+   *vx(p6,p8,p10)
366+   *vx(p5,-p10,p11)
367+   *vx(p1,-p3,-p5)
368+   *vx(-p4,-p8,p9)
369+   *vx(p7,-p9,-p11)
370+   *vx(p2,-p6,-p7)
371+   *vx(-p1,-p2,Q)
372+   /<p1.p1^n1>/.../<p11.p11^n11>
373+   /Q.p6^n12/Q.p8^n13/p3.p6^n14
374+ ; 
375+ 
376+ * Make a random permutation of the loop momenta. The result should be the same.
377+ multiply f1(p1,...,p11); 
378+ multiply ranperm_(f2,p1,...,p11); 
379+ multiply f3(<randomsign(1)>,...,<randomsign(11)>); 
380+ id f2(?a)*f3(?b) = emul(f2,f2(?a),f3(?b)); 
381+ id f1(?a)*f2(?b) = zip(f1,f1(?a),f2(?b)); 
382+ id f1(?a) = replace_(?a); 
383+ 
384+ ModuleOption noparallel; 
385+ .sort:input; 
386+ 
387+ # call Forcer(msbarexpand=4)
388+ B ep; 
389+ P; 
390+ .end
391+ assert succeeded?
392+ assert result(" F1" " 
393+        + ep^-1 * (  - 15*z5 ) 
394+ 
395+        + 21/2*z7 - 75/2*z6 + 55*z5 - 51*z3^2 
396+ " 
397+ assert result(" F2" " 
398+        + 161/2*z7 + 20*z5 + 18*z3^2 
399+ " 
400+ *--# ] Forcer_2 : 
401+ *--# [ Forcer_2-expand :
402+ * An easier version of the above, for checking with valgrind
403+ * timeout  = 60 seconds.
404+ # include- forcer.h
405+ CF f,f1,f2,f3; 
406+ V p2,p3; 
407+ S x3; 
408+ 
409+ * Give 1 or -1. n1 is not used.
410+ Table randomsign(n1?); 
411+ Fill randomsign() = random_(2)*2-3; 
412+ 
413+ * Zip two functions as:
414+ *   zip(f1,f2(p1,...,pN),f3(q1,...,qN)) -> f1(p1,q1,...,pN,qN),
415+ * for N >= 1.
416+ Table zip(f1?(?a1),f2?(p2?,?a2),f3?(p3?,?a3)); 
417+ Fill zip() =
418+   + thetap_(nargs_(?a2,?a3)) * zip(f1(?a1,p2,p3),f2(?a2),f3(?a3))
419+   + delta_(nargs_(?a2,?a3))  * f1(?a1,p2,p3)
420+ ; 
421+ 
422+ * Element-wise multiplication as:
423+ *   emul(f1,f2(p1,...,pN),f3(a1,...,aN)) -> f1(p1*a1,...,pN*aN)
424+ * for N >= 1.
425+ Table emul(f1?(?a1),f2?(p2?,?a2),f3?(x3?,?a3)); 
426+ Fill emul() =
427+   + thetap_(nargs_(?a2,?a3)) * emul(f1(?a1,p2*x3),f2(?a2),f3(?a3))
428+   + delta_(nargs_(?a2,?a3))  * f1(?a1,p2*x3)
429+ ; 
430+ 
431+ L F1  =
432+   # do i=1,2
433+     + Zno`i' (1,1,1,1,1,1,1,1,1,1,1,0,0,0)
434+   #enddo 
435+ ; 
436+ 
437+ L F2 = 
438+   #do i=1,2 
439+     + Zno`i'  (1,1,1,1,1,1,1,1,1,1,1,-1,0,0)
440+     + Zno`i' (1,1,1,1,1,1,1,1,1,1,1,0,-1,0)
441+     + Zno`i'  (1,1,1,1,1,1,1,1,1,1,1,0,0,-1)
442+   # enddo
443+ ; 
444+ 
445+ id Zno1(n1?,...,n14?) =
446+   +vx(-Q,p4,p5)
447+   *vx(p3,-p4,p10)
448+   *vx(p2,-p3,p9)
449+   *vx(p1,-p2,p11)
450+   *vx(-p5,p6,-p11)
451+   *vx(-p6,p7,-p10)
452+   *vx(-p7,p8,-p9)
453+   *vx(-p1,-p8,Q)
454+   /<p1.p1^n1>/.../<p11.p11^n11>
455+   /p2.p4^n12/Q.p2^n13/Q.p3^n14
456+ ; 
457+ 
458+ id Zno2(n1?,...,n14?) =
459+   +vx(-Q,p4,p5)
460+   *vx(p3,-p4,p11)
461+   *vx(p6,p7,p10)
462+   *vx(p2,-p3,-p10)
463+   *vx(p1,-p2,p9)
464+   *vx(-p5,-p6,-p9)
465+   *vx(-p7,p8,-p11)
466+   *vx(-p1,-p8,Q)
467+   /<p1.p1^n1>/.../<p11.p11^n11>
468+   /Q.p2^n12/p1.p4^n13/Q.p3^n14
469+ ; 
470+ 
471+ id Zno3(n1?,...,n14?) =
472+   +vx(-Q,p3,p4)
473+   *vx(p6,p8,p10)
474+   *vx(p5,-p10,p11)
475+   *vx(p1,-p3,-p5)
476+   *vx(-p4,-p8,p9)
477+   *vx(p7,-p9,-p11)
478+   *vx(p2,-p6,-p7)
479+   *vx(-p1,-p2,Q)
480+   /<p1.p1^n1>/.../<p11.p11^n11>
481+   /Q.p6^n12/Q.p8^n13/p3.p6^n14
482+ ; 
483+ 
484+ * Make a random permutation of the loop momenta. The result should be the same.
485+ multiply f1(p1,...,p11); 
486+ multiply ranperm_(f2,p1,...,p11); 
487+ multiply f3(<randomsign(1)>,...,<randomsign(11)>); 
488+ id f2(?a)*f3(?b) = emul(f2,f2(?a),f3(?b)); 
489+ id f1(?a)*f2(?b) = zip(f1,f1(?a),f2(?b)); 
490+ id f1(?a) = replace_(?a); 
491+ 
492+ ModuleOption noparallel; 
493+ .sort:input; 
494+ 
495+ # call Forcer(msbarexpand=4,polyratfunexpand=15)
496+ B ep; 
497+ P; 
498+ .end
499+ assert succeeded?
500+ assert result(" F1" " 
501+        + ep^-1 * (  - 15*z5 ) 
502+ 
503+        + 21/2*z7 - 75/2*z6 + 55*z5 - 51*z3^2 
504+ " 
505+ assert result(" F2" " 
506+        + 161/2*z7 + 20*z5 + 18*z3^2 
507+ " 
508+ *--# ] Forcer_2-expand : 
0 commit comments