Add default arguments to delegation
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez par lire les implémentations existantes de delegates et use_kwargs, ainsi que le décorateur add_kwargs proposé, en utilisant inspect.signature. Vérifiez comment les signatures déléguées et les valeurs par défaut sont actuellement représentées, puis déterminez si le comportement demandé peut préserver les remplacements explicites effectués par l’appelant et un ordre valide des paramètres. La tâche est terminée lorsque l’API de délégation prend en charge ces valeurs par défaut avec une couverture du scénario cnn et resnet décrit.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Scenario:
You have function a, e.g:
def cnn(c_in, c_mid, c_out, act, bn=.., ..., blocks=CNNBlock): ...
and you want to add a specification for it:
def resnet(c_in, c_mid, c_out, act=relu, bn=..., ..., blocks=ResBlock): ... return cnn(...)
Right now as far as I understand this is the implementation:
use_kwargs(blocks=ResBlock)
delegates(cnn)
def resnet(c_in, c_mid, c_out, act=relu, **kwargs):
if 'blocks' not in kwargs: kwargs['blocks'] = ResBlock
...
cnn(c_in, c_mid, c_out, act, **kwargs
So I'm thinking of doing this instead:
add_kwargs(act=relu, blocks=ResBlock)
delegates(cnn)
def resnet(c_in, c_mid, c_out, **kwargs):
...
return cnn(c_in, c_mid, c_out, **kwargs)
example of implementation:
def add_kwargs(**kwargs):
"Decorator: add argument with default value to `**kwargs` in both signature and function"
def _f(f):
@wraps(f)
def _inner(*args, **kw): return f(*args, **{**kwargs, **kw})
sig = inspect.signature(_inner)
sigd = dict(sig.parameters)
for k,v in kwargs.items():
if k in sigd.keys():
assert sigd[k].kind.name not in ['POSITIONAL_ONLY', 'VAR_KEYWORD', 'VAR_POSITIONAL'], \
f'cannot assign an existing variable ({k!r}) of type {sigd[k].kind.name}'
sigd[k] = sigd[k].replace(default=v, kind=inspect._ParameterKind.KEYWORD_ONLY)
else: sigd[k] = inspect.Parameter(k, inspect._ParameterKind.KEYWORD_ONLY, default=v)
params = [[p for p in sigd.values() if p.kind == t] for t in range(5)]
_inner.__signature__ = sig.replace(parameters=concat(*params))
return _inner
return _f
What do you think?
- Langage dominant
- Jupyter Notebook
- Étoiles
- 1.1k
- Forks
- 295
- Merge moyen
- 1 min
- PR mergées (30 j)
- 4
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de AnswerDotAI/fastcore
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
AnswerDotAI/fastcore#933 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
AnswerDotAI/fastcore#930 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
AnswerDotAI/fastcore#911 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
AnswerDotAI/fastcore#910 ·
-
`docments(full=True)` drops `**kwargs` docments unless `args_kwargs=True` is passed explicitlyOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
AnswerDotAI/fastcore#909 ·
Toutes les issues de AnswerDotAI/fastcore
Issues similaires
-
Claiming namespace `apoint`Ouvertenamespace operations
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
EclipseFdn/open-vsx.org#13573 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
HenriquesLab/rxiv-maker#335 ·
-
chore.Load accepts duplicate BUTLER_CHORES names, double-counting the butler's daily budgetsOuverteagent-butler-finding bug
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
jordansmall/spindrift#4143 ·
Les mainteneurs répondent en général sous 1 jour
-
`TypeError: '<=' not supported between instances of 'NoneType' and 'int'` when checking metaclassesOuverteNeeds triage :inbox_tray:
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pylint-dev/pylint#11511 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
grikomsn/openai-oauth-copilot-chat#61 ·
Les mainteneurs répondent en général sous 1 jour