cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Sign-in to the JMP Community will be unavailable intermittently Dec. 6-7 due to a system update. Thank you for your understanding!
  • We’re retiring the File Exchange at the end of this year. The JMP Marketplace is now your destination for add-ins and extensions.
  • JMP 19 is here! Learn more about the new features.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
Yass
Level IV

The evaluation of the symbol is too recursive (>250 levels)

Hello,

I have a problem with a script that generates a daily report of production results. I added a part that calculates " TOP5:calculate_nok_percentages".

This is not the first time I've asked about this. the previous time it was in a different context, and it worked until today. However, when I tried to do the same for the daily report, I received this error message:

 

JMP16

JMP Alert

Error: The evaluation of the symbol is too recursive (>250 levels). During access or evaluation of percent_nok_ict, percent_nok_ict

A stack overflow has been detected. The maximum number of call levels has been exceeded. Execution has been terminated.

 

Scripts :

Lancher_Daily_Result :

 

taskkill /f /im jmp.exe
"C:\Program Files\SAS\JMP\16\jmp.exe" "D:\Project JMP\Scripts\TOP5_week.jsl"
echo Fin TOP5_week %time% >log.txt
TOP5_week.jsl :
 
Names Default To Here (1);

Include("D:\Project JMP\Scripts\TOP5.jsl");

TOP5:Do(-1, -0);
TOP5.jsl:
Names Default To Here( 1 );

TOP5 = New Namespace(
    "TOP5"
);

TOP5:get_dates = Function({},
    today_date = Format(Today(), "yyyy-mm-dd");
    start_of_month = Format(Date Increment(Today(), "Month", 0, "Start"), "yyyy-mm-dd");
    evallist({start_of_month, today_date});
);

TOP5:calculate_nok_percentages = Function({dt},
    {start_of_month, today_date} = TOP5:get_dates();

    dt_top5 = dt << Summary(
        Group(:Date, :Nom de fichier, :Ref Produit, :ProductName, :Baie, :ICT_FCT, :Result, :Reason Error, :CodeError),
        Freq("Aucun(e)"),
        Weight("Aucun(e)"),
        invisible
    );

    nameFilesNok = Associative Array(Column(dt_top5, "Nom de fichier") << Get Values) << Get Keys;

    total_nb_total_ict = 0;
    total_nb_total_fct = 0;
    total_nb_nok_ict = 0;
    total_nb_nok_fct = 0;

    For(k = 1, k <= N Items(nameFilesNok), k++,
        FileRows = dt_top5 << get rows where(
            :File Name == nameFilesNok[k] & Num(Char(:Date)) >= Num(start_of_month) & Num(Char(:Date)) <= Num(today_date) & Contains(:File Name, "GOLDEN") == 0
        );

        nb_total_ict = 0;
        nb_total_fct = 0;
        nb_nok_ict = 0;
        nb_nok_fct = 0;

        total_rows = N Items(FileRows);

        For(j = 1, j <= total_rows, j++,
            If(dt_top5:ICT_FCT[FileRows[j]] == "ICT",
                nb_total_ict = nb_total_ict + dt_top5:Nb. de lignes[FileRows[j]];
                If(dt_top5:Result[FileRows[j]] == "NOK",
                    nb_nok_ict = nb_nok_ict + dt_top5:Nb. de lignes[FileRows[j]]
                );
            , dt_top5:ICT_FCT[FileRows[j]] == "FCT",
                nb_total_fct = nb_total_fct + dt_top5:Nb. de lignes[FileRows[j]];
                If(dt_top5:Result[FileRows[j]] == "NOK",
                    nb_nok_fct = nb_nok_fct + dt_top5:Nb. de lignes[FileRows[j]]
                );
            )
        );

        total_nb_total_ict += nb_total_ict;
        total_nb_total_fct += nb_total_fct;
        total_nb_nok_ict += nb_nok_ict;
        total_nb_nok_fct += nb_nok_fct;
    );

    percent_nok_ict = (total_nb_nok_ict / total_nb_total_ict) * 100;
    percent_nok_fct = (total_nb_nok_fct / total_nb_total_fct) * 100;

    Return({percent_nok_ict, percent_nok_fct});
);

// Define the Do function
TOP5:Do = Function ({nb_date1, nb_date2},
    //Ouverture de la table de données
    dt = Open( "/D:/Project JMP/Tables Données/SVI/TableData SVI PY.jmp", invisible );

    {percent_nok_ict, percent_nok_fct} = TOP5:calculate_nok_percentages(dt);

    current_month = Format(Today(), "Format Pattern", "<Month>", << Use Locale(0));

    date1 = Date Increment(Today(), "day", nb_date1, "start");
    date2 = Date Increment(Today(), "day", nb_date2, "start");

    dt_top5 = dt << Summary(
        Group( :Date, :Nom de fichier, :Ref Produit, :ProductName, :Baie, :ICT_FCT, :Result, :CodeError),
        Freq( "Aucun(e)" ),
        Weight( "Aucun(e)" ),
        output table name( "Table Top 5" ),
        invisible
    );

    /*
    //
    //
    //

    Here i have the logic of production repport.
    it's fine it works 
    
    //
    //
    //
    */


    //Création de la fenetre du top 5
    window = new Window ("TOP5",
        V List Box(
            pb = Picture Box( Open( "D:\Project JMP\Images\logo.png", png ) ),
            Border Box( Top(50),
                V List Box(
                    tb1 = Text Box("Production results report of "||Format( date2, "yyyy-mm-dd" )),
                    tb1 << Set Base Font( "Title" ),
                    tb1 << Set Font Scale (3),
                    tb1 << Justify Text("Center"),
                    tb1 << Set Width(2770),
                    tb1 << Background Color(RGB Color(225, 225, 225)),
                    
                    tb2 = Text Box ("SVI, PY"),
                    tb2 << Justify Text("Center") << Set Font Size(25),
                    tb2 << Set Width(2770),
                    tb2 << Background Color(RGB Color(240, 240, 240)),
                )
            ),
            V List Box (
                Border Box (Top (100), Bottom(100), Left (25),
                    H List Box(
                        // TOP 5 ICT
                        V List Box(
                            tb3 = Text Box( "Top 5 NOK results for ICT"),
                            tb3 << Set Base Font( "Title" ),
                            tb3 << Set Font Scale (2),
                            H List Box(
                                // column bay
                                
                                // column product ref
                                
                                // column test number
                                
                                //column %nok
                                
                                // column product name
                            )
                        ),	
                        V List Box(
                            Border Box(Top(100), Bottom(100), Left(200), Right(25),
                                V List Box(
                                    nokPercentTitle = Text Box("%Nok Percent for this month"),
                                    nokPercentTitle << Set Base Font("Title"),
                                    nokPercentTitle << Set Font Scale(2),
                                    nokPercentTitle << Justify Text("Center"),
                                    nokPercentTitle << Set Width(750),

                                    Border Box(Left(10), Right(10), Top(10), Bottom(10), Sides(15),
                                        b1 = Border Box(Left(l), Right(r), Top(t), Bottom(b), Sides(s), t1 = Text Box("ICT Nok Percent for " || current_month || " is :" || Char(Round(percent_nok_ict)) || "%" )), 
                                        b1 << Set Background Color(RGB Color(93, 173, 226)),
                                        t1 << Set Width(750) << Set Font Size(25) << Justify Text("Center")
                                    ),

                                    Border Box(Left(10), Right(10), Top(10), Bottom(10), Sides(15),
                                        b2 = Border Box(Left(l), Right(r), Top(t), Bottom(b), Sides(s), t2 = Text Box("FCT Nok Percent for " || current_month || " is :" || Char(Round(percent_nok_fct)) || "%" )), 
                                        b2 << Set Background Color(RGB Color(245, 176, 65)),
                                        t2 << Set Width(750) << Set Font Size(25) << Justify Text("Center")
                                    )
                                )
                            )
                        ),
                    )
                ),
                Border Box(Left(25), Top(50), Bottom(200),
                    //TOP 5 FCT
                    V List Box(
                        tb4 = Text Box( "Top 5 NOK results for FCT"),
                        tb4 << Set Base Font( "Title" ),
                        tb4 << Set Font Scale (2),
                        H List Box(
                                // column bay
                                
                                // column product ref
                                
                                // column test number
                                
                                //column %nok
                                
                                // column product name
                            )
                    )
                )
            )
        )
    );

    window << Maximize Window (1);
    //Enregistrement du fichier image .png et du fichier texte .txt
    window << Save Picture ("D:\Project JMP\Rapports de Production Quotidiens\Rapport du "||Format( date2, "yyyy-mm-dd" )||".png", "png");
    window << Save Text ("D:\Project JMP\Rapports de Production Quotidiens\Rapport du "||Format( date2, "yyyy-mm-dd" )||".txt");
);

Thank you for your help !
1 ACCEPTED SOLUTION

Accepted Solutions
jthi
Super User

Re: The evaluation of the symbol is too recursive (>250 levels)

Try adding Eval List to

Return({percent_nok_ict, percent_nok_fct});

 so

Return(Eval List({percent_nok_ict, percent_nok_fct}));

I would also suggest you try to handle local variables in your functions either by listing them or by using Default Local to avoid possible issues (or detect issues earlier) , Advanced Functions (jmp.com) - Local Symbols

-Jarmo

View solution in original post

2 REPLIES 2
jthi
Super User

Re: The evaluation of the symbol is too recursive (>250 levels)

Try adding Eval List to

Return({percent_nok_ict, percent_nok_fct});

 so

Return(Eval List({percent_nok_ict, percent_nok_fct}));

I would also suggest you try to handle local variables in your functions either by listing them or by using Default Local to avoid possible issues (or detect issues earlier) , Advanced Functions (jmp.com) - Local Symbols

-Jarmo
Yass
Level IV

Re: The evaluation of the symbol is too recursive (>250 levels)

Thank you @jthi  it works !!

 

Recommended Articles