How is reward calcualted for Purse staking?


I am observing the APR for Purse staking for a few days, how do we calculate.

thank you.

I got this far by now:


interface IPurseStakingV3 {
    function totalReceiptSupply() external view returns (uint256);
    function userReceiptToken(address purseOwner) external view returns (uint256);
    function updateRewards() external;
    function updateClaim(address _account) external returns (uint256);
    function getCumulativeRewardPerToken(address _address) external view returns (uint256, uint256);
    function previewClaimableRewards(address _address) external view returns (uint256);
    function claimRewards(address _address) external whenNotPaused {
        require(_address != address(0), "Treasury: zero address");
        require(msg.sender == _address, "Treasury: msg.sender does not match the address claiming rewards");
        uint256 userClaimableAmount = IPurseStakingV3(PURSE_STAKING).updateClaim(msg.sender);
        IERC20Upgradeable(PURSE).safeTransfer(msg.sender, userClaimableAmount);

        emit Claimed(msg.sender, userClaimableAmount, block.timestamp);

For the original question: