docstr: Inspect class attrs to create aggregate all attributes info of the
  current class
  
  In practice, we inspect documented attributes, properties,
  parameters given to __init__ function and finally what user has
  filled in _attrinfos
  
  Parameters
  ----------
  class_name : `str`
      The name of the class (needed to create associated doc)
  
  atts : `dict`
      Dictionary of all futures attributes of the class
  
  Returns
  -------
  current_attrinfos : `dict`
      Subdict of the global classinfos dict concerning the attributes
      of the current class.
docstr_tok: ["Inspect","class","attrs","to","create","aggregate","all","attributes","info","of","the","current","class","In","practice",",","we","inspect","documented","attributes",",","properties",",","parameters","given","to","__init__","function","and","finally","what","user","has","filled","in","_attrinfos","Parameters","--","--","--","--","--","class_name",":","`","str","`","The","name","of","the","class","(","needed","to","create","associated","doc",")","atts",":","`","dict","`","Dictionary","of","all","futures","attributes","of","the","class","Returns","--","--","--","-","current_attrinfos",":","`","dict","`","Subdict","of","the","global","classinfos","dict","concerning","the","attributes","of","the","current","class","."]
code: def extract_attrinfos(class_name, attrs):
      """Inspect class attrs to create aggregate all attributes info of the
      current class
  
      In practice, we inspect documented attributes, properties,
      parameters given to __init__ function and finally what user has
      filled in _attrinfos
  
      Parameters
      ----------
      class_name : `str`
          The name of the class (needed to create associated doc)
  
      atts : `dict`
          Dictionary of all futures attributes of the class
  
      Returns
      -------
      current_attrinfos : `dict`
          Subdict of the global classinfos dict concerning the attributes
          of the current class.
      """
      current_attrinfos = {}
  
      # First we look at all documented attributes
      for attr_name, attr_doc in BaseMeta.find_documented_attributes(
          class_name, attrs
      ):
          current_attrinfos.setdefault(attr_name, {})
          current_attrinfos[attr_name]["in_doc"] = True
          current_attrinfos[attr_name]["doc"] = attr_doc
  
      # Second we look all native properties
      for attr_name in BaseMeta.find_properties(attrs):
          current_attrinfos.setdefault(attr_name, {})
          current_attrinfos[attr_name]["is_prop"] = True
  
      # Third we look at parameters given to __init__
      for attr_name in BaseMeta.find_init_params(attrs):
          current_attrinfos.setdefault(attr_name, {})
          current_attrinfos[attr_name]["in_init"] = True
  
      # Finally we use _attrinfos provided dictionary
      attrinfos = attrs.get("_attrinfos", {})
      for attr_name in attrinfos.keys():
          # Check that no unexpected key appears
          for key in attrinfos[attr_name].keys():
              if key not in BaseMeta.default_attrinfo:
                  raise ValueError(
                      "_attrinfos does not handle key %s" % key
                  )
          # Add behavior specified in attrinfo
          current_attrinfos.setdefault(attr_name, {})
          current_attrinfos[attr_name].update(attrinfos[attr_name])
  
      return current_attrinfos
  
imports: import os
  import inspect
  from datetime import datetime
  from abc import ABCMeta
  import json
  import pydoc
  import numpy
  import numpydoc
  from numpydoc import docscrape
  import copy
label_desc: Use image node_id 9 for calling the BaseMeta obj's underlying member method code with example usage: obj.extract_attrinfos(class_name, attrs) and returns: current_attrinfos