2017-02-10 5 views

답변

2

그들은 edward/models/random_variables.py에 정의되어 어디 말해 줄 수 github

사람의 Normal의 선언을 찾지 못했습니다.

는이 같은 Normal 클래스를 가져옵니다

from edward.models import Normal 

이이 줄이있는, edward/models/__init__.py에보고 제안 :

from edward.models.random_variables import * 

edward/models/random_variables.py에서 보면 우리가 this code을 찾을 :

from edward.models.random_variable import RandomVariable as _RandomVariable 
from tensorflow.contrib import distributions as _distributions 

# Automatically generate random variable classes from classes in 
# tf.contrib.distributions. 
_globals = globals() 
for _name in sorted(dir(_distributions)): 
    _candidate = getattr(_distributions, _name) 
    if (_inspect.isclass(_candidate) and 
      _candidate != _distributions.Distribution and 
      issubclass(_candidate, _distributions.Distribution)): 

    # to use _candidate's docstring, must write a new __init__ method 
    def __init__(self, *args, **kwargs): 
     _RandomVariable.__init__(self, *args, **kwargs) 
    __init__.__doc__ = _candidate.__init__.__doc__ 
    _params = {'__doc__': _candidate.__doc__, 
       '__init__': __init__} 
    _globals[_name] = type(_name, (_RandomVariable, _candidate), _params) 

del _candidate 

이것은 tensorflow.contrib.distributions 모듈은 tensorflow.contrib.distributions.Distribution에서 파생 된 클래스를 찾고 있습니다 (예 :. 모듈의 __file__ 멤버 또는베이스 Distribution 클래스 자체). 각각의 경우, (에만 생성 된 문서에 영향을 미치는) 해킹의 비트는 다음이 주요 라인을 실행하지 :

_globals[_name] = type(_name, (_RandomVariable, _candidate), _params) 

type() 내장 함수는 새로운 타입, 즉 새로운 클래스를 선언을 생성한다. 두 번째 매개 변수는 에드워드의 RandomVariable 클래스와 TensorFlow 임의 변수 클래스 인 기본 클래스의 목록입니다. 이전에 _globals이 모듈 변수의 사전을 리턴하는 내장 함수 인 globals()으로 정의되었습니다. 따라서, 관심이있는 경우, 선 위에 해당 다음

(당신이 문서화 문자열 물건 무시하면) 다시이 동일합니다
from edward.models.random_variable import RandomVariable as EdRandVar 
from tensorflow.contrib.distributions import Normal as TfNormal 
Normal = type("Normal", (EdRandVar, TfNormal), {...}) 

:

from edward.models.random_variable import RandomVariable as EdRandVar 
from tensorflow.contrib.distributions import Normal as TfNormal 
class Normal(EdRandVar, TfNormal): 
    pass