Graphtik

Latest version: v10.5.0

Safety actively analyzes 685670 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 8 of 10

3.1.0

==================================================
+ break/refact(NET): scream on ``plan.execute()`` (not ``net.prune()``)
so as calmly solve `needs` vs `provides`, based on the given `inputs`/`outputs`.
+ FIX(ot): was failing when plotting graphs with ops without `fn` set.
+ enh(net): minor fixes on assertions.

3.0.0

===============================================================================
+ Pipelines:

+ BREAK(NET): RAISE if the graph is UNSOLVABLE for the given `needs` & `provides`!
(see "raises" list of :meth:`~.Pipeline.compute()`).

+ BREAK: :meth:`.Pipeline.__call__()` accepts solution as keyword-args,
to mimic API of :meth:`Operation.__call__()`. ``outputs`` keyword has been dropped.

.. Tip::
Use :meth:`.Pipeline.compute()` when you ask different `outputs`,
or set the ``recompile`` flag if just different `inputs` are given.

Read the next change-items for the new behavior of the ``compute()`` method.

+ UNVARYING NetOperations:

+ BREAK: calling method :meth:`.Pipeline.compute()` with a single argument
is now *UNVARYING*, meaning that all `needs` are demanded, and hence,
all `provides` are produced, unless the ``recompile`` flag is true or ``outputs`` asked.

+ BREAK: net-operations behave like regular operations when nested inside another netop,
and always produce all their `provides`, or scream if less `inputs` than `needs`
are given.

+ ENH: a newly created or cloned netop can be :meth:`~.Pipeline.narrowed()`
to specific `needs` & `provides`, so as not needing to pass `outputs` on every call
to :meth:`~.Pipeline.compute()`.

+ feat: implemented based on the new "narrowed" :attr:`.Pipeline.plan` attribute.

+ FIX: netop `needs` are not all *optional* by default; optionality applied
only if all underlying operations have a certain need as optional.

+ FEAT: support function ``**args`` with 2 new modifiers :func:`.vararg` & :func:`.varargs`,
acting like :func:`.optional` (but without feeding into underlying functions
like keywords).

+ BREAK(:gh:`12`): simplify ``compose`` API by turning it from class --> function;
all args and operations are now given in a single ``compose()`` call.

+ REFACT(net, netop): make Network IMMUTABLE by appending all operations together,
in :class:`Pipeline` constructor.

+ ENH(net): public-size ``_prune_graph()`` --> :meth:`.Network.prune()``
which can be used to interrogate `needs` & `provides` for a given graph.
It accepts `None` `inputs` & `outputs` to auto-derive them.

+ FIX(SITE): autodocs `API` chapter were not generated in at all,
due to import errors, fixed by using `autodoc_mock_imports
<http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc_mock_imports>`_
on `networkx`, `pydot` & `boltons` libs.

+ enh(op): polite error-,msg when calling an operation with missing needs
(instead of an abrupt ``KeyError``).

+ FEAT(CI): test also on Python-3.8

2.3.0

=============================================================
+ FEAT(plot): render Zoomable SVGs in jupyter(lab) notebooks.
+ break(netop): rename execution-method ``"sequential" --> None``.
+ break(netop): move ``overwrites_collector`` & ``method`` args
from ``netop.__call__()`` --> cstor
+ refact(netop): convert remaining ``**kwargs`` into named args, tighten up API.

2.2.0

============================================================================
+ REFACT(src): split module ``nodes.py`` --> ``fnop.py`` + `netop.py` and
move :class:`Operation` from ``base.py`` --> ``fnop.py``, in order to break cycle
of `base(op) <-- net <-- netop`, and keep utils only in `base.py`.
+ ENH(op): allow Operations WITHOUT any NEEDS.
+ ENH(op): allow Operation FUNCTIONS to return directly Dictionaries.
+ ENH(op): validate function Results against operation `provides`;
*jetsam* now includes `results` variables: ``results_fn`` & ``results_op``.
+ BREAK(op): drop unused `Operation._after_init()` pickle-hook; use `dill` instead.
+ refact(op): convert :meth:`Operation._validate()` into a function,
to be called by clients wishing to automate operation construction.
+ refact(op): replace ``**kwargs`` with named-args in class:`FnOp`,
because it allowed too wide args, and offered no help to the user.
+ REFACT(configs): privatize ``network._execution_configs``; expose more
config-methods from base package.

2.1.1

===============================================
+ BREAK: drop Python-3.6 compatibility.
+ FEAT: Use (possibly multiple) global configurations for all networks,
stored in a :class:`contextvars.ContextVar`.
+ ENH/BREAK: Use a (possibly) single `execution_pool` in global-configs.
+ feat: add `abort` flag in global-configs.
+ feat: add `skip_evictions` flag in global-configs.

2.1.0

=================================================================================================
The first non pre-release for 2.x train.

+ BRAKE API: DROP Operation's ``params`` - use functools.partial() instead.

+ BRAKE API: DROP Backward-Compatible ``Data`` & ``Operation`` classes,

+ BRAKE: DROP Pickle workarounds - expected to use ``dill`` instead.

+ break(jetsam): drop "graphtik_` prefix from annotated attribute

+ ENH(op): now ``operation()`` supported the "builder pattern" with
``.operation.withset()`` method.

+ REFACT: renamed internal package `functional --> nodes` and moved classes around,
to break cycles easier, (``base`` works as supposed to), not to import early everything,
but to fail plot early if ``pydot`` dependency missing.

+ REFACT: move PLAN and ``compute()`` up, from ``Network --> Pipeline``.

+ ENH(NET): new PLAN BUILDING algorithm produces PERFECT EVICTIONS,
that is, it gradually eliminates from the solution all non-asked outputs.

+ enh: pruning now cleans isolated data.
+ enh: eviction-instructions are inserted due to two different conditions:
once for unneeded data in the past, and another for unused produced data
(those not belonging typo the pruned dag).
+ enh: discard immediately irrelevant inputs.

+ ENH(net): changed results, now unrelated inputs are not included in solution.

+ refact(sideffect): store them as node-attributes in DAG, fix their combination
with pinning & eviction.

+ fix(parallel): eviction was not working due to a typo 65 commits back!


v2.0.0b1 (15 Oct 2019, ankostis): Rebranded as *Graphtik* for Python 3.6+
==========================================================================
Continuation of :gh:`30` as :gh:`31`, containing review-fixes in huyng/graphkit1.

Network
-------
+ FIX: multithreaded operations were failing due to shared
:attr:`.ExecutionPlan.executed`.

+ FIX: pruning sometimes were inserting plan string in DAG.
(not ``_DataNode``).

+ ENH: heavily reinforced exception annotations ("jetsam"):

- FIX: (8f3ec3a) outer graphs/ops do not override the inner cause.
- ENH: retrofitted exception-annotations as a single dictionary, to print it in one shot
(8f3ec3a & 8d0de1f)
- enh: more data in a dictionary
- TCs: Add thorough TCs (8f3ec3a & b8063e5).

+ REFACT: rename `Delete`-->`Evict`, removed `Placeholder` from data nodes, privatize node-classes.

+ ENH: collect "jetsam" on errors and annotate exceptions with them.

+ ENH(sideffects): make them always DIFFERENT from regular DATA, to allow to co-exist.

+ fix(sideffects): typo in add_op() were mixing needs/provides.

+ enh: accept a single string as `outputs` when running graphs.


Testing & other code:
---------------------
+ TCs: `pytest` now checks sphinx-site builds without any warnings.

+ Established chores with build services:

+ Travis (and auto-deploy to PyPi),
+ codecov
+ ReadTheDocs

Page 8 of 10

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.