Hallo ihr beiden.
Dass TensorProduct das Attribut ReadProtected hat ist nicht weiter wild,
denn das kann man einfach entfernen, so wie jedes andere Attribut, so
lange es nicht "Locked" ist und dann kann man auch auf die Definition
von TensorProduct zugreifen:
ClearAttributes[TensorProduct, {Protected, ReadProtected}]
?? TensorProduct
Dort sieht man dann, dass da überhaupt nichts Sinnvolles definiert ist.
Da steht nur irgendwas mit AutoLoad, denn die richtigen Definitionen von
TensorProduct werden erst geladen, nachdem TensorProduct einmal benutzt
worden ist. Dort liegt auch der Hase im Pfeffer und mich wundert etwas,
dass der Autor des Paketes das nicht gesehen hat. Macht man einfach mal
zB
TensorProduct[a + 2 b, c]
und schaut sich jetzt nochmals die Attribute von TensorProduct an, dann
sieht man, dass es auf wundersame Weise wieder Protected und
ReadProtected ist.
Attributes[TensorProduct]
(* {Flat, OneIdentity, Protected, ReadProtected} *)
Der Trick ist also, zuerst irgendeinen Sinnlosaufruf von TensorProduct
zu machen (und da reicht es aus einfach nur TensorProduct zu
evaluieren), damit die richtigen Definitionen geladen werden und danach
erst mit dem Umdefinieren durch das DifferentialForms Package zu
beginnen. Ändern wir also die ersten Code Zeilen des
DifferentialFormsNeu.m Pakets in
TensorProduct;
ClearAttributes[TensorProduct,{Protected, ReadProtected}];
(*********************************************************)
BeginPackage["DifferentialForms`"];
und laden das Paket neu, dann gibt es keine Fehlermeldungen mehr und die
neuen Definitionen kann man sich mit ??TensorProduct auch anschauen.
Hans, der "Run Package" Knopf lädt das Paket neu. Das ist für
diejenigen, die am Paket entwickeln einfacher als jedes Mal <<
auszuführen. Du darfst den Knopf natürlich auch benutzen, aber
üblicherweise hast du den Quellcode des Pakets ja nicht immer offen,
wenn du es nur "benutzt". Deshalb darfst du das Paket auch einfach lokal
installieren und es ganz normal mit
<<DifferentialFormsNeu`
laden.
Gruß
Patrick
On Sat, 2014-07-19 at 20:43 +0200, Udo und Susanne Krause wrote:
> Hallo Hans,
>
> > heute wende ich mich an die, die tiefer gehende Kenntnisse des Systems
> > haben. Wenn ich ? siehe anhÀngendes notebook - das Paket
> > DifferentialFormsNeu ? hÀngt ebenfalls an ? lade bekomme ich eine
> > Fehlermeldung. Damit kann ich leider nichts anfangen. In der
> > vorhergehenden
> > Version, die allerdings einen (anderen) Bug enthielt, kam diese Meldung
> > nicht.
>
> Print["Bang"] steht explizit im Package DifferentialForms.m drin und
> drÃŒckt vermutlich die VerÀrgerung der Autoren darÃŒber aus, daÃ
>
> Unprotect[TensorProduct]
>
>
> Protect[TensorProduct]
>
> nach Massgabe der Fehlerausschrift
>
> SetDelayed::write: Tag TensorProduct in TensorProduct[single_] is
> Protected. >>
> usw. usf.
>
> wirkungslos ist.
>
> Die Frage ist, ob es trotzdem gelingt, der eingebauten Funktion
> TensorProduct[] die gewÃŒnschten Definitionen hinzuzufÃŒgen.
>
> Man kann dies nicht leicht kontrollieren, da TensorProduct[] das Attribut
> ReadProtected hat.
> Daher Frage: Funktioniert LieDerivative[] in der notwendigen Form?
>
> Falls dies der Fall ist (i.e. LieDerivative[] funktioniert), kann man sich
> mit
>
> Off[SetDelayed::write]
> BeginPackage["DifferentialForms`"]
> <snip>
> EndPackage[]
> On[SetDelayed::write]
>
> der Fehlerausschrift schlicht entledigen - entweder sind die Erweiterungen
> von TensorProduct[] dann
> ÃŒberflÃŒssig, weil sie in der Grundfunktion TensorProduct[] enthalten sind,
> oder die Fehlermeldung ist
> selbst falsch.
>
>
> Falls dies nicht der Fall ist (i.e. LieDerivative funktioniert nicht),
> kann man
> (1) versuchen, im Package DifferentialForms eine eigene Funktion
> TensorProdukt[] zu definieren und diese richtig auf TensorProduct[] zu
> grÃŒnden
> (2) die Erweiterungen von TensorProduct[] und alle von diesen
> Erweiterungen abhÀngigen Funktionen aus dem Package herausstreichen.
>
> Gruss
> Udo.
>
>
>