§
    œYÂjï*  ã                  ó  — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZ ddlmZmZ ddlZ ee¦  «                             ¦   «         j        j        Zedz  dz  dz  d	z  d
z  dz  Zedz  dz  dz  d	z  dz  dz  Zedz  dz  Zd!d„Zd"d„Z ej        d¬¦  «        d"d„¦   «         Z ej        d¬¦  «        d"d„¦   «         Z ej        d¬¦  «        d"d„¦   «         Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d ¦  «        Z dS )#zòChallenger Zero-Allocation & Hot-Path Performance Verification Suite.

Adversarially validates the zero-allocation claims and hot-path execution invariants
for `SpriteAtlasRenderer.ts` and `SkillVfxPlayer.ts` under 120 FPS ProMotion budgets.
é    )ÚannotationsN)ÚPath)ÚAnyÚDictÚclientÚcocosÚassetsÚscriptsÚ	animationzSpriteAtlasRenderer.tsÚcombatzSkillVfxPlayer.tsÚtestsz%challenger_node_zero_alloc_harness.jsÚ	file_pathr   ÚreturnúDict[str, Any]c                ó  — dt          j        t          | ¦  «        ¦  «        › dt          j        | j        ¦  «        › d�}t	          j        dd|gt          t          ¦  «        ddd¬¦  «        }t          j        |j        ¦  «        S )zJInspects TypeScript AST methods using Node.js and TypeScript compiler API.z­
    const fs = require('fs');
    const path = require('path');
    const ts = require(path.resolve('./client/node_modules/typescript'));

    const code = fs.readFileSync(z., 'utf8');
    const sf = ts.createSourceFile(aŸ  , code, ts.ScriptTarget.ES2022, true);
    const results = {};

    function visit(node) {
        if (ts.isMethodDeclaration(node) && node.name) {
            const methodName = node.name.getText(sf);
            results[methodName] = {
                newExpressions: [],
                arrayLiterals: 0,
                objectLiterals: 0,
                callExpressions: []
            };

            node.body?.forEachChild(function checkChild(child) {
                if (ts.isNewExpression(child)) {
                    results[methodName].newExpressions.push(child.expression.getText(sf));
                }
                if (ts.isArrayLiteralExpression(child)) {
                    results[methodName].arrayLiterals++;
                }
                if (ts.isObjectLiteralExpression(child)) {
                    results[methodName].objectLiterals++;
                }
                if (ts.isCallExpression(child)) {
                    const callText = child.expression.getText(sf);
                    if (callText.includes('slice') || callText.includes('splice') || callText.includes('filter') || callText.includes('map')) {
                        results[methodName].callExpressions.push(callText);
                    }
                }
                child.forEachChild(checkChild);
            });
        }
        node.forEachChild(visit);
    }

    visit(sf);
    console.log(JSON.stringify(results));
    Únodez-eT©ÚcwdÚcapture_outputÚtextÚcheck)	ÚjsonÚdumpsÚstrÚnameÚ
subprocessÚrunÚ	REPO_ROOTÚloadsÚstdout)r   ÚscriptÚprocs      ú?C:\Projects\FreeExile\tests\challenger_zero_allocation_audit.pyÚ_run_node_ast_inspectionr$      s‘   € ð+õ
 #'¤*­S°©^¬^Ñ"<Ô"<ð+ð +õ %)¤J¨y¬~Ñ$>Ô$>ð+ð +ð +€FõX Œ>Ø	��vÐÝ•	‰NŒNØØØðñ ô €Dõ Œ:�d”kÑ"Ô"Ð"ó    c                 ó´   — t          j        ddt          t          ¦  «        gt          t          ¦  «        ddd¬¦  «        } t          j        | j        ¦  «        S )zGExecutes the instrumented Node.js runtime harness and captures metrics.r   z--expose-gcTr   )r   r   r   ÚNODE_HARNESS_PATHr   r   r   r    )r"   s    r#   Ú_run_node_runtime_harnessr(   N   sQ   € åŒ>Ø	�¥Õ$5Ñ 6Ô 6Ð7Ý•	‰NŒNØØØðñ ô €Dõ Œ:�d”kÑ"Ô"Ð"r%   Úmodule)Úscopec                 ó*   — t          t          ¦  «        S ©N)r$   ÚTS_RENDERER_PATH© r%   r#   Úrenderer_astr/   Z   s   € å#Õ$4Ñ5Ô5Ð5r%   c                 ó*   — t          t          ¦  «        S r,   )r$   ÚTS_VFX_PLAYER_PATHr.   r%   r#   Úvfx_player_astr2   _   s   € å#Õ$6Ñ7Ô7Ð7r%   c                 ó   — t          ¦   «         S r,   )r(   r.   r%   r#   Úruntime_metricsr4   d   s   € å$Ñ&Ô&Ð&r%   c                  ó2   — e Zd ZdZdd„Zdd„Zdd	„Zdd
„ZdS )Ú TestStaticAstZeroAllocationAuditzLVerifies AST syntax trees to guarantee zero heap instantiation in hot paths.r/   r   r   ÚNonec                ó@  — d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         d	         }t          |¦  «        }d
}||k    }	|	sët          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
t          j	        d|d         d	         › �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}	}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         d	         }t          |¦  «        }d
}||k    }	|	sët          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
t          j	        d|d         d	         › �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}	}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         d	         }t          |¦  «        }d
}||k    }	|	sÇt          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}	}|d         d         }d
}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )zGSpriteAtlasRenderer hot-path methods must not allocate any new objects.ÚgetFrameSourceRect©Úin©z%(py1)s in %(py3)sr/   ©Úpy1Úpy3úassert %(py5)sÚpy5NÚnewExpressionsr   ©ú==©z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen©Úpy0Úpy2Úpy4Úpy7z1Forbidden new expressions in getFrameSourceRect: ú
>assert %(py9)sÚpy9ÚgetFrameUVsz*Forbidden new expressions in getFrameUVs: ÚgetPivotOffsetúassert %(py9)sÚobjectLiterals©z%(py1)s == %(py4)s©r>   rJ   úassert %(py6)sÚpy6©
Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚAssertionErrorÚ_format_explanationrF   Ú_format_assertmsg)Úselfr/   Ú@py_assert0Ú@py_assert2Ú@py_format4Ú@py_format6Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10Ú@py_format5Ú@py_format7s                 r#   Ú:test_ast_sprite_atlas_renderer_hot_path_no_new_expressionsz[TestStaticAstZeroAllocationAudit.test_ast_sprite_atlas_renderer_hot_path_no_new_expressionsl   s«  € ð $Ð3Ð# |Ð3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð# |Ð3Ñ3Ô3Õ3Ô3Ð#Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 |Ñ3Ô3Ð3Õ3Ô3 |Ñ3Ô3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3ØÐ 4Ô5Ð6FÔGð 	
�sÐGÑHÔHð 	
ÈAð 	
ÐHÈAÒMð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ÐHÈAð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ä 	õ ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð Hñ 	
ô 	
õ 	
ä 	ð Iñ 	
ô 	
õ 	
ä 	ð MNñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð wÀÐMaÔ@bÐcsÔ@tÐvÐvñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 Ð,ˆ} Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆ} Ð,Ñ,Ô,Õ,Ô,ˆ}Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ø Ô.Ð/?Ô@ð 	
�sÐ@ÑAÔAð 	
ÀQð 	
ÐAÀQÒFð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ÐAÀQð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ä 	õ ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð Añ 	
ô 	
õ 	
ä 	ð Bñ 	
ô 	
õ 	
ä 	ð FGñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð i¸ÀmÔ9TÐUeÔ9fÐhÐhñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
  Ð/Ð <Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð <Ð/Ñ/Ô/Õ/Ô/ÐÑ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ <Ñ/Ô/Ð/Õ/Ô/ <Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ØÐ 0Ô1Ð2BÔCÐI�sÐCÑDÔDÐIÈÐIÐDÈÒIÐIÐIÐIÕIÔIÐIÐIÐIÐIÐDÈÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI�sÑIÔIÐIÕIÔI�sÑIÔIÐIÐIÕIÔIÐCÑIÔIÕIÔIÐDÑIÔIÕIÔIÈÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIØÐ,Ô-Ð.>Ô?ÐDÀ1ÐDÐ?À1ÒDÐDÐDÐDÕDÔDÐDÐDÐDÐDÐ?À1ÐDÑDÔDÕDÔDÐ?ÑDÔDÕDÔDÀ1ÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDr%   r2   c                óø  — d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         }|d	         }t          |¦  «        }d
}	||	k    }
|
såt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }t          j	        d|d	         › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	|d         }d
}||k    }|s�t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j	        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d
}||k    }|s�t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j	        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }t          |¦  «        }d
}	||	k    }
|
såt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }t          j	        d|d         › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	dS )z:SkillVfxPlayer.update(dt) loop must have zero allocations.Úupdater:   r<   r2   r=   r@   rA   NrB   r   rC   rE   rF   rG   z(Forbidden new in SkillVfxPlayer.update: rL   rM   ÚarrayLiteralsrR   rS   z*Forbidden array literals [] in update loopú
>assert %(py6)srU   rQ   z+Forbidden object literals {} in update loopÚcallExpressionsz(Forbidden array method calls in update: rV   )r`   r2   ra   rb   rc   rd   Úupdate_infore   rf   rg   rh   ri   rj   rk   rl   s                  r#   Ú6test_ast_skill_vfx_player_update_loop_zero_allocationszWTestStaticAstZeroAllocationAudit.test_ast_skill_vfx_player_update_loop_zero_allocations   sÇ  € àÐ)ˆx˜>Ð)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)ˆx˜>Ð)Ñ)Ô)Õ)Ô)ˆxÑ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)˜>Ñ)Ô)Ð)Õ)Ô)˜>Ñ)Ô)Ð)Ð)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ø$ XÔ.ˆØÐ/Ô0ð 	
�sÐ0Ñ1Ô1ð 	
°Qð 	
Ð1°QÒ6ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð1°Qð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ä 	õ ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 1ñ 	
ô 	
õ 	
ä 	ð 2ñ 	
ô 	
õ 	
ä 	ð 67ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð W°{ÐCSÔ7TÐVÐVñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ˜?Ô+Ð^¨qÐ^Ð+¨qÒ0Ð^Ð^Ð^Õ^Ô^Ð^Ð^Ð^Ð^Ð+¨qÐ^Ñ^Ô^Õ^Ô^Ð+Ñ^Ô^Õ^Ô^¨qÑ^Ô^Ð^Ð^Ñ^Ð^Õ^Ô^Ð2^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^Ð^ØÐ+Ô,Ð`°Ð`Ð,°Ò1Ð`Ð`Ð`Õ`Ô`Ð`Ð`Ð`Ð`Ð,°Ð`Ñ`Ô`Õ`Ô`Ð,Ñ`Ô`Õ`Ô`°Ñ`Ô`Ð`Ð`Ñ`Ð`Õ`Ô`Ð3`Ñ`Ô`Ð`Ñ`Ð`Ð`Ð`Ñ`Ð`Õ`Õ`Ô`Ð`Ñ`Ô`Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`Ð`ØÐ0Ô1ð 	
�sÐ1Ñ2Ô2ð 	
°að 	
Ð2°aÒ7ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð2°að 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ä 	õ ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 2ñ 	
ô 	
õ 	
ä 	ð 3ñ 	
ô 	
õ 	
ä 	ð 78ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð X°{ÐCTÔ7UÐWÐWñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r%   c                óÜ  — d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         }|d	         }t          |¦  «        }d
}	||	k    }
|
såt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }t          j	        d|d	         › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	|d         }d
}||k    }|s�t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j	        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d
}||k    }|s�t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j	        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS )zJSkillVfxPlayer.playSkillVfx must not allocate Node or Vectors in hot path.ÚplaySkillVfxr:   r<   r2   r=   r@   rA   NrB   r   rC   rE   rF   rG   zForbidden new in playSkillVfx: rL   rM   rp   rR   rS   z+Forbidden array literals [] in playSkillVfxrq   rU   rQ   z,Forbidden object literals {} in playSkillVfxrV   )r`   r2   ra   rb   rc   rd   Ú	play_infore   rf   rg   rh   ri   rj   rk   rl   s                  r#   Ú9test_ast_skill_vfx_player_play_skill_vfx_zero_allocationszZTestStaticAstZeroAllocationAudit.test_ast_skill_vfx_player_play_skill_vfx_zero_allocationsŒ   s  € àÐ/ˆ~ Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/ˆ~ Ð/Ñ/Ô/Õ/Ô/ˆ~Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ Ñ/Ô/Ð/Õ/Ô/ Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ø" >Ô2ˆ	ØÐ-Ô.ð 	
�sÐ.Ñ/Ô/ð 	
°1ð 	
Ð/°1Ò4ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð/°1ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìõ ñ 	
ô 	
ð 	
õ 	
ä 	õ ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð /ñ 	
ô 	
õ 	
ä 	ð 0ñ 	
ô 	
õ 	
ä 	ð 45ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð L¨iÐ8HÔ.IÐKÐKñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ˜Ô)Ð]¨QÐ]Ð)¨QÒ.Ð]Ð]Ð]Õ]Ô]Ð]Ð]Ð]Ð]Ð)¨QÐ]Ñ]Ô]Õ]Ô]Ð)Ñ]Ô]Õ]Ô]¨QÑ]Ô]Ð]Ð]Ñ]Ð]Õ]Ô]Ð0]Ñ]Ô]Ð]Ñ]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]ØÐ)Ô*Ð_¨aÐ_Ð*¨aÒ/Ð_Ð_Ð_Õ_Ô_Ð_Ð_Ð_Ð_Ð*¨aÐ_Ñ_Ô_Õ_Ô_Ð*Ñ_Ô_Õ_Ô_¨aÑ_Ô_Ð_Ð_Ñ_Ð_Õ_Ô_Ð1_Ñ_Ô_Ð_Ñ_Ð_Ð_Ð_Ñ_Ð_Õ_Õ_Ô_Ð_Ñ_Ô_Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_r%   c                ód  — d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         }d	}|d
         }||v }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}}d}|d
         }||v }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}}dS )zENode and Size constructors must only appear in ensurePoolInitialized.ÚensurePoolInitializedr:   r<   r2   r=   r@   rA   NÚNoderB   )z%(py1)s in %(py4)srS   rT   rU   ÚSize)rW   rX   rY   rZ   r[   r\   r]   r^   )
r`   r2   ra   rb   rc   rd   Úprewarm_inforf   rk   rl   s
             r#   Ú"test_ast_pool_prewarming_isolationzCTestStaticAstZeroAllocationAudit.test_ast_pool_prewarming_isolation–   s,  € à&Ð8Ð&¨.Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð&¨.Ð8Ñ8Ô8Õ8Ô8Ð&Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¨.Ñ8Ô8Ð8Õ8Ô8¨.Ñ8Ô8Ð8Ð8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ø%Ð&=Ô>ˆØÐ7˜Ð&6Ô7Ð7ˆvÐ7Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7ˆvÐ7Ð7Ñ7Ô7Õ7Ô7ˆvÑ7Ô7Õ7Ô7Ð7Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÐ7˜Ð&6Ô7Ð7ˆvÐ7Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7ˆvÐ7Ð7Ñ7Ô7Õ7Ô7ˆvÑ7Ô7Õ7Ô7Ð7Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r%   N)r/   r   r   r7   )r2   r   r   r7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rm   rt   rx   r~   r.   r%   r#   r6   r6   i   sr   € € € € € ØVÐVðEð Eð Eð Eð&
ð 
ð 
ð 
ð`ð `ð `ð `ð8ð 8ð 8ð 8ð 8ð 8r%   r6   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd	„Zdd
„Zdd„Z	dS )Ú%TestDynamicRuntimeZeroAllocationAuditzCVerifies empirical runtime metrics across 12,000 frames at 120 FPS.r4   r   r   r7   c                óV  — |d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}d	S )zNUpdate loop over 12,000 frames must produce exactly 0 constructor allocations.ÚruntimeUpdateÚticksExecutedi'  ©ú>=©z%(py1)s >= %(py4)srS   rT   rU   NÚnodeConstructorsr   rC   rR   ÚrectConstructorsÚvec2ConstructorsÚvec3ConstructorsÚsizeConstructorsÚcolorConstructorsÚarraySlices©rW   rX   rY   r]   r^   )r`   r4   ro   ra   rf   rb   rk   rl   s           r#   Ú5test_runtime_120fps_update_loop_zero_heap_allocationsz[TestDynamicRuntimeZeroAllocationAudit.test_runtime_120fps_update_loop_zero_heap_allocations¡   s`  € à  Ô1ˆØ�oÔ&Ð/¨%Ð/Ð&¨%Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð&¨%Ð/Ñ/Ô/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/¨%Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ(Ô)Ð.¨QÐ.Ð)¨QÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð)¨QÐ.Ñ.Ô.Õ.Ô.Ð)Ñ.Ô.Õ.Ô.¨QÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ)Ô*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø�mÔ$Ð)¨Ð)Ð$¨Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð$¨Ð)Ñ)Ô)Õ)Ô)Ð$Ñ)Ô)Õ)Ô)¨Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)r%   c                óV  — |d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}d	S )zG1,400 skill activations must produce exactly 0 constructor allocations.ÚruntimeSkillCastÚcastsExecutediè  rˆ   rŠ   rS   rT   rU   Nr‹   r   rC   rR   rŒ   r�   rŽ   r�   r�   r‘   r’   )r`   r4   Úcastra   rf   rb   rk   rl   s           r#   Ú;test_runtime_continuous_skill_casting_zero_heap_allocationszaTestDynamicRuntimeZeroAllocationAudit.test_runtime_continuous_skill_casting_zero_heap_allocations­   sa  € àÐ1Ô2ˆØ�OÔ$Ð,¨Ð,Ð$¨Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ&Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ&Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ&Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ&Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ&Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÐ'Ô(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�MÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r%   c                ól  — |d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d
         }d}||k    }|s‹t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|d
         › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}d	S )zOSteady-state combat UV Map lookups must achieve strictly 100.0% cache hit rate.ÚsteadyStateCacheMetricsÚ	uvLookupséÐ  ©ú>©z%(py1)s > %(py4)srS   rT   rU   NÚuvMissesr   rC   rR   z	Detected z% UV cache misses during steady state!rq   ÚhitRatePercentç      Y@)rW   rX   rY   r]   r^   r_   )r`   r4   Ústeadyra   rf   rb   rk   rl   s           r#   Ú7test_runtime_steady_state_uv_cache_hit_rate_100_percentz]TestDynamicRuntimeZeroAllocationAudit.test_runtime_steady_state_uv_cache_hit_rate_100_percent¹   s1  € à Ð!:Ô;ˆØ�kÔ"Ð) TÐ)Ð" TÒ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð" TÐ)Ñ)Ô)Õ)Ô)Ð"Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø�jÔ!Ðm QÐmÐ! QÒ&ÐmÐmÐmÕmÔmÐmÐmÐmÐmÐ! QÐmÑmÔmÕmÔmÐ!ÑmÔmÕmÔm QÑmÔmÐmÐmÑmÐmÕmÔmÐ(m°F¸:Ô4FÐ(mÐ(mÐ(mÑmÔmÐmÑmÐmÐmÐmÑmÐmÕmÕmÔmÐmÑmÔmÑmÔmÐmÐmÐmÐmÐmÐmÐmØÐ&Ô'Ð0¨5Ð0Ð'¨5Ò0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð'¨5Ð0Ñ0Ô0Õ0Ô0Ð'Ñ0Ô0Õ0Ô0¨5Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0r%   c                ó&  — |d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}d	S )zIOverall UV Map lookup efficiency across all operations must exceed 99.5%.ÚtotalCacheMetricsr›   rœ   r�   rŸ   rS   rT   rU   NÚoverallHitRatePercentg     àX@rˆ   rŠ   r’   )r`   r4   Útotalra   rf   rb   rk   rl   s           r#   Ú5test_runtime_total_uv_cache_hit_rate_above_99_percentz[TestDynamicRuntimeZeroAllocationAudit.test_runtime_total_uv_cache_hit_rate_above_99_percentÀ   sf  € àÐ 3Ô4ˆØ�[Ô!Ð( DÐ(Ð! DÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð! DÐ(Ñ(Ô(Õ(Ô(Ð!Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÐ,Ô-Ð5°Ð5Ð-°Ò5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð-°Ð5Ñ5Ô5Õ5Ô5Ð-Ñ5Ô5Õ5Ô5°Ñ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5r%   c                ó6  — |d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}d	S )zGPool saturation must recycle oldest slots without allocating new nodes.Ú
saturationÚ
totalCastsé2   rC   rR   rS   rT   rU   NÚpoolSizeé   ÚmaxActiveObserved)ú<=)z%(py1)s <= %(py4)sÚnewNodesAllocatedr   r’   )r`   r4   Úsatra   rf   rb   rk   rl   s           r#   Ú.test_runtime_pool_saturation_and_lru_recyclingzTTestDynamicRuntimeZeroAllocationAudit.test_runtime_pool_saturation_and_lru_recyclingÆ   s´  € à˜lÔ+ˆØ�<Ô Ð& BÐ&Ð  BÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  BÐ&Ñ&Ô&Õ&Ô&Ð Ñ&Ô&Õ&Ô& BÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø�:ŒÐ$ "Ð$ˆ "Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ "Ð$Ñ$Ô$Õ$Ô$ˆÑ$Ô$Õ$Ô$ "Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÐ&Ô'Ð-¨2Ð-Ð'¨2Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð'¨2Ð-Ñ-Ô-Õ-Ô-Ð'Ñ-Ô-Õ-Ô-¨2Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÐ&Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r%   c                óÞ  — |d         }|d         }d}d}||z  }||k     }|sÃt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d	|› d
�¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}x}}dS )zISteady-state heap growth over 12,000 ticks must remain stable (< 500 KB).ÚheapStabilityÚsteadyStateDeltaBytesiô  i   )ú<)z%(py0)s < (%(py3)s * %(py5)s)Údelta)rH   r?   rA   zHeap expanded by z bytes under steady state!z
>assert %(py8)sÚpy8N)	rW   rX   rZ   r[   r\   rY   r_   r]   r^   )
r`   r4   Úheapr¹   rb   Ú@py_assert4rg   re   rl   Ú@py_format9s
             r#   Ú2test_runtime_heap_stability_under_sustained_stresszXTestDynamicRuntimeZeroAllocationAudit.test_runtime_heap_stability_under_sustained_stressÎ   s$  € à˜Ô/ˆØÐ,Ô-ˆØÐX˜TÐX�s˜T‘zÐXˆu�zÒ!ÐXÐXÐXÕXÔXÐXÐXÐXÐXˆu�zÐXÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔXˆuÑXÔXÐXÕXÔXˆuÑXÔXÐXÐXÕXÔX�sÑXÔXÕXÔX˜TÑXÔXÐXÐXÑXÐXÕXÔXÐ#X°uÐ#XÐ#XÐ#XÑXÔXÐXÑXÐXÐXÐXÑXÐXÕXÕXÔXÐXÑXÔXÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXr%   N©r4   r   r   r7   )
r   r€   r�   r‚   r“   r˜   r¤   r©   r´   r¾   r.   r%   r#   r„   r„   ž   s˜   € € € € € ØMÐMð
*ð 
*ð 
*ð 
*ð
(ð 
(ð 
(ð 
(ð1ð 1ð 1ð 1ð6ð 6ð 6ð 6ð-ð -ð -ð -ðYð Yð Yð Yð Yð Yr%   r„   c                  ó*   — e Zd ZdZd
d„Zd
d„Zd
d„Zd	S )ÚTestAdversarialEdgeCaseszQStress-tests corner cases: multi-direction rotation, invalid IDs, and reentrancy.r4   r   r   r7   c                ó˜  — |d         d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         }|d         }||k    }d}	||	k    }|r|s�t          j        d||fd|||	f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}x}x}}	|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d
S )zVCasting skills in all 8 directions must memoize UVs and hit 100% on subsequent cycles.ÚadversarialÚmultiDirectionÚtestedDirectionsé   rC   rR   rS   rT   rU   NÚinitialColdMissesé   ÚwarmLookupsÚexpectedLookupsi�  )rD   rD   )z%(py1)s == %(py5)sz%(py5)s == %(py7)s)r>   rA   rK   rP   rM   ÚwarmHitRatePercentr¢   ÚsuccessT©Úis©z%(py1)s is %(py4)sr’   )r`   r4   Ú	multi_dirra   rf   rb   rk   rl   r¼   rg   ri   rj   s               r#   Ú:test_adversarial_multi_direction_rotation_lazy_memoizationzSTestAdversarialEdgeCases.test_adversarial_multi_direction_rotation_lazy_memoizationØ   s¦  € à# MÔ2Ð3CÔDˆ	ØÐ+Ô,Ð1°Ð1Ð,°Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð,°Ð1Ñ1Ô1Õ1Ô1Ð,Ñ1Ô1Õ1Ô1°Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØÐ,Ô-Ð2°Ð2Ð-°Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð-°Ð2Ñ2Ô2Õ2Ô2Ð-Ñ2Ô2Õ2Ô2°Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø˜Ô'ÐN¨9Ð5FÔ+GÐNÐ'Ð+GÒNÐNÈ3ÐNÐ+GÈ3ÒNÐNÐNÐNÐNÐNÕNÔNÐNÐNÐNÐNÐNÐ'Ð+GÈ3ÐNÑNÔNÕNÔNÐ'ÑNÔNÕNÔNÐ+GÑNÔNÕNÔNÈ3ÑNÔNÐNÐNÑNÐNÐNÐNÐNÐNÑNÐNÕNÕNÔNÐNÑNÔNÑNÔNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNØÐ-Ô.Ð7°%Ð7Ð.°%Ò7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð.°%Ð7Ñ7Ô7Õ7Ô7Ð.Ñ7Ô7Õ7Ô7°%Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø˜Ô#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+r%   c                ó2  — |d         d         }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d
S )zDUnknown skill ID must fall back to sequential grid without throwing.rÃ   ÚunknownSkillÚuvValidTrÍ   rÏ   rS   rT   rU   NÚuvLengthé   rC   rR   rÌ   r’   )r`   r4   Úunknownra   rf   rb   rk   rl   s           r#   Ú*test_adversarial_unknown_skill_id_fallbackzCTestAdversarialEdgeCases.test_adversarial_unknown_skill_id_fallbacká   s  € à! -Ô0°Ô@ˆØ�yÔ!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø�zÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�yÔ!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)r%   c                ó.  — |d         d         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d
S )zIRedundant calls to ensurePoolInitialized must not spawn additional nodes.rÃ   ÚidempotentPrewarmÚsubsequentNodesCreatedr   rC   rR   rS   rT   rU   NrÌ   TrÍ   rÏ   r’   )r`   r4   Úidempra   rf   rb   rk   rl   s           r#   Ú/test_adversarial_idempotent_pool_initializationzHTestAdversarialEdgeCases.test_adversarial_idempotent_pool_initializationè   sk  € à Ô.Ð/BÔCˆØÐ-Ô.Ð3°!Ð3Ð.°!Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð.°!Ð3Ñ3Ô3Õ3Ô3Ð.Ñ3Ô3Õ3Ô3°!Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø�YÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r%   Nr¿   )r   r€   r�   r‚   rÑ   rØ   rÝ   r.   r%   r#   rÁ   rÁ   Õ   sV   € € € € € Ø[Ð[ð,ð ,ð ,ð ,ð*ð *ð *ð *ð(ð (ð (ð (ð (ð (r%   rÁ   )r   r   r   r   )r   r   )!r‚   Ú
__future__r   ÚbuiltinsrZ   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterW   r   r   Úpathlibr   Útypingr   r   ÚpytestÚ__file__ÚresolveÚparentr   r-   r1   r'   r$   r(   Úfixturer/   r2   r4   r6   r„   rÁ   r.   r%   r#   ú<module>rê      sD  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à €€€àˆD�‰NŒN×"Ò"Ñ$Ô$Ô+Ô2€	Ø˜xÑ'¨'Ñ1°HÑ<¸yÑHÈ;ÑVÐYqÑqÐ Ø Ñ)¨GÑ3°hÑ>ÀÑJÈXÑUÐXkÑkÐ Ø Ñ'Ð*QÑQÐ ð5#ð 5#ð 5#ð 5#ðp	#ð 	#ð 	#ð 	#ð €„�hÐÑÔð6ð 6ð 6ñ  Ôð6ð €„�hÐÑÔð8ð 8ð 8ñ  Ôð8ð €„�hÐÑÔð'ð 'ð 'ñ  Ôð'ð28ð 28ð 28ð 28ð 28ñ 28ô 28ð 28ðj4Yð 4Yð 4Yð 4Yð 4Yñ 4Yô 4Yð 4Yðn(ð (ð (ð (ð (ñ (ô (ð (ð (ð (r%   