- From: r.britten at auckland.ac.nz (Randall Britten)
- Subject: [cellml-discussion] A list of proposed changes to semantics to makein CellML 1.2
- Date: Thu, 10 Jan 2008 12:47:28 +1300
Hi
I am aware of that. I think you may have missed my point though.
This is my suggestion: If we just use "public" and "private", and discard
the concept of directionality, then "public" variables could be deemed
visible from encapsulated components.
The analogy to c++/Java works for me, since encapsulated components are like
members, purely from the visibility perspective. But if the c++/Java
analogy doesn't work for you, ignore it, and just focus on the suggestion
above.
Regards,
Randall
>
-----Original Message-----
>
From: cellml-discussion-bounces at cellml.org [mailto:cellml-discussion-
>
bounces at cellml.org] On Behalf Of Andrew Miller
>
Sent: Thursday, 10 January 2008 12:17 p.m.
>
To: CellML Discussion List
>
Subject: Re: [cellml-discussion] A list of proposed changes to
>
semantics to makein CellML 1.2
>
>
Randall Britten wrote:
>
>
>
> I don't think we would need attribute values like "public_private" or
>
> "both", since I think "public" access should imply "private" access,
>
> similar to say c++ or Java's use of those terms.
>
>
>
The usage of the words public and private in CellML is conceptually
>
different to how programming languages like C++ and Java use them. In
>
these programming languages, private means that a member can be
>
accessed
>
only from within the current class, whereas public means that the
>
member
>
may be accessed from outside of that class.
>
>
In CellML, public and private interfaces are both ways in which
>
reference can be made to a variable from outside of the class. So for
>
example, public_interface="none" private_interface="none" in CellML
>
corresponds to private in C++, while public_interface="none"
>
private_interface="out" is really equivalent to a partially public
>
member in C++.
>
>
Given this conceptual difference, I think that the claim that public
>
should imply private by analogy to programming languages does not
>
automatically hold. It is quite meaningful (and common) in CellML to
>
open the public interface but close the private interface.
>
>
Randall Britten wrote:
>
>
> Hi all
>
>
>
> Another case that illustrates that perhaps the concept of uni-
>
directional
>
> connections may be flawed in a declarative language:
>
>
>
> Component A has variables x and y that are both public, but only one
>
al> gebraic equation, hence insufficient maths to find values for x and
>
y
>
> (e.g. x+y=5).
>
> Component B, virtually the same structure. Has public x,y. Has only
>
one
>
> algebraic equation, so also, taken on its own, insufficient to solve
>
for x
>
> or y (e.g. x-y=k(t), where k(t) is knows at each value of t, e.g.
>
> k(t=1)=1.).
>
>
>
> The application that attempts to solve the model has to solve the
>
linear
>
> system, and it does not make sense to see x or y as owned by either A
>
or B.
>
>
I think this depends on what the implications of 'ownership' are. If
>
ownership is a purely CellML concept which does not affect the final
>
mathematical model, then I think that it wouldn't prevent us from
>
defining things this way.
>
>
I think that ownership is information which is strictly speaking,
>
superfluous to the mathematical interpretation of the model. The
>
current implementation of CCGS, for example, does not rely on it to
>
provide any interpretation of the mathematics, although it does provide
>
clues to help provide a human intuitive presentation of results. For
>
example, the variable with no out interfaces (referred to as 'the
>
source variable' in the code, which others have referred to as the
>
owning variable), is used as the master variable which sets the units
>
into which all other variables connected to the same variable are
>
connected. As an alternative, the 'master variable' could be chosen by
>
some other approach, such as randomly, or based on the first variable
>
to appear in the model, but this is somewhat less robust if we seek to
>
get consistent results from the model (to some extent, the
>
directionality of connections could be considered a form of metadata).
>
>
Best regards,
>
Andrew
>
>
>
>
> Regards,
>
> Randall
>
>
>
> *From:* cellml-discussion-bounces at cellml.org
>
> [mailto:cellml-discussion-bounces at cellml.org] *On Behalf Of *Poul
>
Nielsen
>
> *Sent:* Sunday, 23 December 2007 10:25 p.m.
>
> *To:* CellML Discussion List
>
> *Subject:* Re: [cellml-discussion] A list of proposed changes to
>
> semantics to makein CellML 1.2
>
>
>
> Yes, the scheme that I proposed would not allow variables to 'pass
>
> through' the public_interface and private_interface of a component. I
>
> imagine that this could be inconvenient in some situations. We could
>
> enable this by adding a fourth value, 'public_private', to the
>
> attribute list.
>
>
>
> Best wishes
>
>
>
> Poul
>
>
>
> On 2007 Dec 22, at 20:21, Jonathan Cooper wrote:
>
>
>
>
>
>
>
> On Sat, Dec 22, 2007 at 11:19:52AM +1300, Poul Nielsen wrote:
>
>
>
> I think that Jonathan is correct - the concept of 'in' and 'out'
>
>
>
> does not make sense in a declarative description. One way to
>
remedy
>
>
>
> this would be to remove the 'public_interface' and
>
>
>
> 'private_interface' attributes from the <variable> element and
>
>
>
> replace them with an 'interface' attribute which could assume
>
values
>
>
>
> "public", "private", or "none". This is a pretty fundamental
>
change
>
>
>
> to the specification but I think that it better reflects the
>
>
>
> declarative intent of CellML model descriptions.
>
>
>
> How would that work for a component like B below, which has both a
>
public
>
>
>
> and private interface for the same variable?
>
>
>
> Jonathan.
>
>
>
> On 2007 Dec 22, at 03:20, Jonathan Cooper wrote:
>
>
>
> On Thu, Dec 20, 2007 at 12:30:32AM +0800, David Nickerson
>
wrote:
>
>
>
> * The current specification says:
>
>
>
> "A variable with either a private_interface or
>
> public_interface
>
>
>
> attribute
>
>
>
> value of "in" must be mapped to no more than one
>
other
>
>
>
> variable in the
>
>
>
> model. [ Note that a similar restriction does not
>
> apply to
>
>
>
> variables with
>
>
>
> interface values of "out". An output variable can be
>
> mapped to
>
>
>
> multiple
>
>
>
> input variables in various components in the current
>
> model. ]"
>
>
>
> The problem with this is that it doesn't properly
>
> account for
>
>
>
> mappings where a variable is forwarded into an
>
> encapsulated
>
>
>
> block. As
>
>
>
> an example, consider the following encapsulation
>
> hierarchy (higher
>
>
>
> components encapsulate lower ones)...
>
>
>
> A
>
>
>
> |
>
>
>
> B
>
>
>
> / \
>
>
>
> C D
>
>
>
> Suppose that component A has, for variable v,
>
>
>
> public_interface="none", private_interface="out", and
>
> B has for
>
>
>
> variable v, public_interface="in",
>
private_interface="out"
>
>
>
> (connected to A), and C and D have
>
public_interface="in",
>
>
>
> private_interface="none", both of which are connected
>
> to B.
>
>
>
> There is no reason why this should not be valid.
>
> However, the
>
>
>
> specification contradicts itself on whether this is
>
> allowed. On
>
>
>
> one
>
>
>
> hand, because B has private_interface="out", it "can
>
> be mapped to
>
>
>
> multiple input variables in various components in the
>
> current
>
>
>
> model.", but because it has a public interface of in,
>
> it "must be
>
>
>
> mapped to no more than one other variable in the
>
model".
>
>
>
> This can be fixed by firstly defining the
>
> interpretation of
>
>
>
> connections and interfaces, and then adding
>
> constraints based on
>
>
>
> that which actually describe which connections are
>
> allowed to each
>
>
>
> set of variables.
>
>
>
> will be interesting to see how such a definition ties in
>
> with the
>
>
>
> idea
>
>
>
> of input variables becoming output variables based on the
>
> way the
>
>
>
> components are hooked together :)
>
>
>
> Indeed.
>
>
>
> The use of "in" and "out" on interfaces very strongly implies
>
that
>
>
>
> connections have a directionality, and this is also reflected
>
> in the
>
>
>
> quote from the specification above - it assumes that
>
variables
>
> are
>
>
>
> only
>
>
>
> defined in one place, and hence it doesn't make sense to
>
import a
>
>
>
> variable (via an "in" interface) from multiple locations. It
>
does
>
>
>
> however make sense to export a variable to multiple locations,
>
or
>
>
>
> forward
>
>
>
> an imported variable to multiple locations (the example
>
Andrew
>
> gives).
>
>
>
> If we don't want connections to have directionality, then I
>
> think this
>
>
>
> requires quite a major change in the specification, even if
>
> only to
>
>
>
> avoid
>
>
>
> user confusion. For example, I would want to deprecate the
>
use of
>
>
>
> "in"
>
>
>
> and "out", and instead allow public_interface="yes" or
>
>
>
> public_interface="no" (perhaps a synonym for "none") and
>
> similarly for
>
>
>
> private interfaces. The terms used in the language then
>
> reflect the
>
>
>
> nature of the interfaces - if connections are bidirectional,
>
> then it
>
>
>
> doesn't make sense to talk of an "in" interface, since it may
>
> function
>
>
>
> either as input or output depending on the other components
>
in the
>
>
>
> system.
>
>
>
> Jonathan.
>
>
>
> --
>
>
>
> Jonathan Cooper MSN: msn at jonc.me.uk <mailto:msn at jonc.me.uk>
>
> www: jonc.me.uk/
>
>
>
> We are tribbles of Borg. Prepare to be replicated.
>
>
>
> _______________________________________________
>
>
>
> cellml-discussion mailing list
>
>
>
> cellml-discussion at cellml.org <mailto:cellml-
>
discussion at cellml.org>
>
>
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
>
>
> _______________________________________________
>
>
>
> cellml-discussion mailing list
>
>
>
> cellml-discussion at cellml.org <mailto:cellml-discussion at
>
> cellml.org>
>
>
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
>
>
> --
>
>
>
> Jonathan Cooper MSN: msn at jonc.me.uk <mailto:msn at jonc.me.uk> www:
>
> jonc.me.uk/
>
>
>
> I haven't lost my mind... It's backed up on tape somewhere.
>
>
>
> _______________________________________________
>
>
>
> cellml-discussion mailing list
>
>
>
> cellml-discussion at cellml.org <mailto:cellml-discussion at cellml.org>
>
>
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
>
>
> ---------------------------------------------------------------------
>
---
>
>
>
> _______________________________________________
>
> cellml-discussion mailing list
>
> cellml-discussion at cellml.org
>
> http://www.cellml.org/mailman/listinfo/cellml-discussion
>
>
>
>
>
_______________________________________________
>
cellml-discussion mailing list
>
cellml-discussion at cellml.org
>
http://www.cellml.org/mailman/listinfo/cellml-discussion
Archive powered by MHonArc 2.6.18.