class_docstr: Differential privacy (DP) epsilon lower bound.
  
  This class computes a statistical epsilon lower bound by looking at the log
  ratio of tpr and fpr. The tpr / fpr ratio bound is from `RatioBound` class.
  
  For example, in membership inference attack, the attacker sets a threshold and
  predicts samples with top probability larger than the thresholds as member.
  If the model is trained withs DP guarantee, then we should expect
  log(tpr / fpr) <= epsilon, where tpr and fpr are the true positive and false
  positive rates of the attacker. Therefore, we can use log(tpr / fpr) to derive
  an epsilon lower bound.
  
  The idea of using Clopper Pearson for estimating epsilon lower bound is from
  https://arxiv.org/pdf/2006.07709.pdf.
  The idea of using log Katz is from https://arxiv.org/pdf/2210.08643.pdf.
  
  Examples:
    >>> lb = elb.EpsilonLowerBound(train_top_probs, test_top_probs, alpha=0.05)
    >>> methods = [BoundMethod.BAILEY, BoundMethod.KATZ_LOG]
    >>> lb.compute_epsilon_lower_bounds(methods, k=5)
class_docstr_tok: ["Differential","privacy","(","DP",")","epsilon","lower","bound",".","This","class","computes","a","statistical","epsilon","lower","bound","by","looking","at","the","log","ratio","of","tpr","and","fpr",".","The","tpr","\/","fpr","ratio","bound","is","from","`","RatioBound","`","class",".","For","example",",","in","membership","inference","attack",",","the","attacker","sets","a","threshold","and","predicts","samples","with","top","probability","larger","than","the","thresholds","as","member",".","If","the","model","is","trained","withs","DP","guarantee",",","then","we","should","expect","log","(","tpr","\/","fpr",")","<","=","epsilon",",","where","tpr","and","fpr","are","the","true","positive","and","false","positive","rates","of","the","attacker",".","Therefore",",","we","can","use","log","(","tpr","\/","fpr",")","to","derive","an","epsilon","lower","bound",".","The","idea","of","using","Clopper","Pearson","for","estimating","epsilon","lower","bound","is","from","https",":","\/\/arxiv.org\/pdf\/2006.07709.pdf",".","The","idea","of","using","log","Katz","is","from","https",":","\/\/arxiv.org\/pdf\/2210.08643.pdf",".","Examples",":",">",">",">","lb","=","elb.EpsilonLowerBound","(","train_top_probs",",","test_top_probs",",","alpha=0.05",")",">",">",">","methods","=","[","BoundMethod.BAILEY",",","BoundMethod.KATZ_LOG","]",">",">",">","lb.compute_epsilon_lower_bounds","(","methods",",","k=5",")"]
docstr: Computes lower bounds with all methods and returns the top-k epsilons.
  
  Args:
    methods: the methods to use for ratio bound. If not specified, will use
      all available methods.
    k: if specified, will return top-k values for each method.
  
  Returns:
    A dictionary, mapping method to the corresponding bound array.
docstr_tok: ["Computes","lower","bounds","with","all","methods","and","returns","the","top-k","epsilons",".","Args",":","methods",":","the","methods","to","use","for","ratio","bound",".","If","not","specified",",","will","use","all","available","methods",".","k",":","if","specified",",","will","return","top-k","values","for","each","method",".","Returns",":","A","dictionary",",","mapping","method","to","the","corresponding","bound","array","."]
code: def compute_epsilon_lower_bounds(
      self,
      methods: Optional[Iterable[BoundMethod]] = None,
      k: Optional[int] = None,
  ) -> Dict[BoundMethod, npt.NDArray[float]]:
      """Computes lower bounds with all methods and returns the top-k epsilons.
  
      Args:
        methods: the methods to use for ratio bound. If not specified, will use
          all available methods.
        k: if specified, will return top-k values for each method.
  
      Returns:
        A dictionary, mapping method to the corresponding bound array.
      """
      return {
          method: self.compute_epsilon_lower_bound(method, k)
          for method in methods or self._rbs[0].available_methods.keys()
      }
  
imports: import enum
  import numbers
  from typing import Dict, Iterable, Optional, Sequence, Union
  import immutabledict
  import numpy
  import numpy.typing
  import scipy.integrate
  import scipy.optimize
  import scipy.stats
  import sklearn.metrics
  from statsmodels.stats import proportion
label_desc: Use image node_id 3 for calling the EpsilonLowerBound obj's underlying member method code with example usage: obj.compute_epsilon_lower_bounds(methods, k) and returns: unknown