class_docstr: Tracks privacy expenditure via numerical composition of Privacy loss Random
  Variables (PRVs) using the approach suggested by Gopi et al[1]. The implementation
  here is heavily inspired by the implementation of the authors that accompanied
  their paper[2].
  
  By utilising the Fast Fourier transform, this accountant is able to efficiently
  calculate tight bounds on the privacy expenditure, and has been shown
  experimentally to obtain tighter bounds than the RDP accountant.
  
  The idea behind this accountant is approximately as follows:
  
  A differentially private mechanism can be characterised by a PRV. The composition
  of multiple differentially privacy mechanisms can be charaterised by the sum of the
  corresponding PRVs. To get the density of the sum of PRVs, we convolve the
  individual densities.
  
  This accountant discretizes the PRVs corresponding to each step of the
  optimization, and convolves the approximations using the Fast Fourier Transform.
  The mesh size and bounds for the discretization are chosen automatically to ensure
  suitable approximation quality.
  
  The resulting convolved density is used to recover epsilon. For more detail, see
  the paper[1].
  
  References:
      [1] https://arxiv.org/abs/2106.02848
      [2] https://github.com/microsoft/prv_accountant
class_docstr_tok: ["Tracks","privacy","expenditure","via","numerical","composition","of","Privacy","loss","Random","Variables","(","PRVs",")","using","the","approach","suggested","by","Gopi","et","al","[","1","]",".","The","implementation","here","is","heavily","inspired","by","the","implementation","of","the","authors","that","accompanied","their","paper","[","2","]",".","By","utilising","the","Fast","Fourier","transform",",","this","accountant","is","able","to","efficiently","calculate","tight","bounds","on","the","privacy","expenditure",",","and","has","been","shown","experimentally","to","obtain","tighter","bounds","than","the","RDP","accountant",".","The","idea","behind","this","accountant","is","approximately","as","follows",":","A","differentially","private","mechanism","can","be","characterised","by","a","PRV",".","The","composition","of","multiple","differentially","privacy","mechanisms","can","be","charaterised","by","the","sum","of","the","corresponding","PRVs",".","To","get","the","density","of","the","sum","of","PRVs",",","we","convolve","the","individual","densities",".","This","accountant","discretizes","the","PRVs","corresponding","to","each","step","of","the","optimization",",","and","convolves","the","approximations","using","the","Fast","Fourier","Transform",".","The","mesh","size","and","bounds","for","the","discretization","are","chosen","automatically","to","ensure","suitable","approximation","quality",".","The","resulting","convolved","density","is","used","to","recover","epsilon",".","For","more","detail",",","see","the","paper","[","1","]",".","References",":","[","1","]","https",":","\/\/arxiv.org\/abs\/2106.02848","[","2","]","https",":","\/\/github.com\/microsoft\/prv_accountant"]
code: def __init__(self):
      super().__init__()
  
file_path: opacus/opacus/accountants/prv.py
imports: from typing import List
  import numpy
  from .accountant import IAccountant
  from .analysis.prv import Domain, PoissonSubsampledGaussianPRV, TruncatedPrivacyRandomVariable, compose_heterogeneous, compute_safe_domain_size, discretize
label_desc: Use image node_id 1 to create a new PRVAccountant object from inherited base classes: IAccountant with example: obj = PRVAccountant()