Minsky
minsky::TensorsFromPort Struct Reference

#include <minskyTensorOps.h>

Collaboration diagram for minsky::TensorsFromPort:
Collaboration graph

Public Member Functions

 TensorsFromPort ()
 
 TensorsFromPort (const shared_ptr< EvalCommon > &ev)
 
std::vector< TensorPtrtensorsFromPort (const Port &) const
 returns vector of tensor ops for all wires attach to port. Port must be an input port More...
 
std::vector< TensorPtrtensorsFromPorts (const Item &) const
 returns vector of tensor ops for all wires attached to item More...
 

Public Attributes

shared_ptr< EvalCommonev
 

Detailed Description

Definition at line 56 of file minskyTensorOps.h.

Constructor & Destructor Documentation

◆ TensorsFromPort() [1/2]

minsky::TensorsFromPort::TensorsFromPort ( )
inline

Definition at line 59 of file minskyTensorOps.h.

59 {}

◆ TensorsFromPort() [2/2]

minsky::TensorsFromPort::TensorsFromPort ( const shared_ptr< EvalCommon > &  ev)
inline

Definition at line 60 of file minskyTensorOps.h.

60 : ev(ev) {}
shared_ptr< EvalCommon > ev

Member Function Documentation

◆ tensorsFromPort()

vector< TensorPtr > minsky::TensorsFromPort::tensorsFromPort ( const Port p) const

returns vector of tensor ops for all wires attach to port. Port must be an input port

Definition at line 1610 of file minskyTensorOps.cc.

References minsky::TensorOpFactory::create(), minsky::Port::input(), minsky::Item::itemPtrFromThis(), minsky::tensorOpFactory, and minsky::Port::wires().

Referenced by minsky::TensorOpFactory::create().

1611  {
1612  if (!p.input()) return {};
1613  vector<TensorPtr> r;
1614  for (auto w: p.wires())
1615  {
1616  Item& item=w->from()->item();
1617  if (auto o=item.operationCast())
1618  {
1619  if (o->type()==OperationType::differentiate)
1620  {
1621  // check if we're differentiating a scalar or tensor
1622  // expression, and throw accordingly
1623  auto rhs=tensorsFromPort(*o->ports(1).lock());
1624  if (rhs.empty() || rhs[0]->size()==1)
1625  throw FallBackToScalar();
1626  // TODO - implement symbolic differentiation of
1627  // tensor operations
1628  throw std::runtime_error("Tensor derivative not implemented");
1629  }
1630  }
1631  if (auto tensorOp=tensorOpFactory.create(item.itemPtrFromThis(), *this))
1632  r.push_back(tensorOp);
1633  }
1634  return r;
1635  }
std::shared_ptr< ITensor > create(const ItemPtr &, const TensorsFromPort &tp={})
create a tensor representation of the expression rooted at op. If expression doesn&#39;t contain any refe...
std::vector< TensorPtr > tensorsFromPort(const Port &) const
returns vector of tensor ops for all wires attach to port. Port must be an input port ...
TensorOpFactory tensorOpFactory
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tensorsFromPorts()

vector< TensorPtr > minsky::TensorsFromPort::tensorsFromPorts ( const Item item) const

returns vector of tensor ops for all wires attached to item

Definition at line 1638 of file minskyTensorOps.cc.

References minsky::Item::ports(), and minsky::Item::portsSize().

Referenced by minsky::TensorOpFactory::create().

1639  {
1640  vector<TensorPtr> r;
1641  for (size_t i=0; i<item.portsSize(); ++i)
1642  if (auto p=item.ports(i).lock())
1643  if (p->input())
1644  {
1645  auto tensorArgs=tensorsFromPort(*p);
1646  r.insert(r.end(), tensorArgs.begin(), tensorArgs.end());
1647  }
1648  return r;
1649  }
std::vector< TensorPtr > tensorsFromPort(const Port &) const
returns vector of tensor ops for all wires attach to port. Port must be an input port ...
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ ev

shared_ptr<EvalCommon> minsky::TensorsFromPort::ev

The documentation for this struct was generated from the following files: